1. 动力学跟踪误差模型与LQR控制概述
在自动驾驶横向控制领域,动力学跟踪误差模型相比传统运动学模型具有显著优势。当车速超过40km/h时,运动学模型由于忽略轮胎侧偏特性、悬架动态等关键因素,控制精度会急剧下降。而动力学模型通过引入车辆质量分布、轮胎侧偏刚度等参数,能够更准确地描述车辆实际运动特性。
LQR(Linear Quadratic Regulator)算法作为最优控制理论中的经典方法,通过最小化包含状态误差和控制量的二次型代价函数,得到最优反馈控制律。其数学表达为:
code复制J = ∫(xᵀQx + uᵀRu)dt
其中Q和R分别为状态权重矩阵和控制权重矩阵。在车辆横向控制中,我们通常将跟踪误差(横向偏差、航向角偏差等)作为状态变量,转向角作为控制输入。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 车辆动力学建模关键步骤
2.1 坐标系定义与状态变量选择
建立如图所示的车辆坐标系:
- 全局坐标系(X,Y):固定于地面
- 车身坐标系(x,y):原点位于车辆质心
- 路径坐标系(s,e):s沿参考路径方向,e为横向偏差
状态变量通常选择:
code复制x = [e; ė; ΔΨ; ΔΨ̇]
其中:
- e:横向位置误差
- ΔΨ:航向角误差
- ė和ΔΨ̇为对应微分项
2.2 线性化处理技巧
在高速工况下(>60km/h),可采用如下简化假设:
- 小角度假设(sinθ≈θ,cosθ≈1)
- 忽略纵向动力学耦合
- 轮胎力处于线性区域
经过线性化处理后得到状态空间方程:
code复制ẋ = Ax + Bu
y = Cx
其中A矩阵包含车辆质量m、转动惯量Iz、前后轮侧偏刚度Cf/Cr等关键参数。
注意:线性化时的工作点选择直接影响控制器性能,建议取典型车速的中间值(如80km/h)
3. LQR控制器设计与实现
3.1 权重矩阵设计原则
Q和R矩阵的选取需要平衡状态收敛速度与控制量大小:
- 对角矩阵Q中:
- 横向误差e权重通常最大(1e4量级)
- 航向误差ΔΨ次之(1e3量级)
- 微分项权重较小(1e0~1e2)
- 标量R反映转向执行器代价:
- 取值过小会导致控制量剧烈波动
- 典型范围1e-3~1e-1
调试时可使用对数扫参法:
matlab复制Q_scale = logspace(-2,2,5);
R_scale = logspace(-3,1,5);
3.2 离线计算K矩阵实现
完整MATLAB实现示例:
matlab复制% 车辆参数
m = 1573; % 质量(kg)
Iz = 2873; % 转动惯量(kg·m²)
lf = 1.1; lr = 1.6; % 轴距(m)
Cf = 80000; Cr = 80000; % 侧偏刚度(N/rad)
Vx = 20; % 车速(m/s)
% 状态矩阵A
a11 = 0; a12 = 1; a13 = 0; a14 = 0;
a21 = 0; a22 = -(Cf+Cr)/(m*Vx); a23 = (Cf+Cr)/m; a24 = -(Cf*lf-Cr*lr)/(m*Vx);
a31 = 0; a32 = 0; a33 = 0; a34 = 1;
a41 = 0; a42 = -(Cf*lf-Cr*lr)/(Iz*Vx); a43 = (Cf*lf-Cr*lr)/Iz; a44 = -(Cf*lf²+Cr*lr²)/(Iz*Vx);
A = [a11 a12 a13 a14; a21 a22 a23 a24; a31 a32 a33 a34; a41 a42 a43 a44];
% 控制矩阵B
b1 = 0;
b2 = Cf/m;
b3 = 0;
b4 = Cf*lf/Iz;
B = [b1; b2; b3; b4];
% 权重矩阵
Q = diag([10000, 10, 5000, 100]);
R = 0.1;
% 求解Riccati方程
[K,S,e] = lqr(A,B,Q,R);
3.3 在线计算优化策略
实时计算K矩阵时需注意:
- 采用增量式更新,避免矩阵求逆计算
- 设置车速变化触发阈值(如±5km/h)
- 添加矩阵条件数检查,避免数值不稳定
改进的在线计算流程:
matlab复制function u = onlineLQR(current_state, Vx_prev)
% 获取当前状态
Vx = current_state(4);
% 车速变化超过阈值时更新K
if abs(Vx - Vx_prev) > 1.4 % ≈5km/h
[A,B] = updateModel(Vx);
K = computeLQR(A,B);
end
u = -K * current_state(1:4);
end
4. 转向系统配置对比
4.1 前轮转向实现要点
- 转向执行器模型需包含:
- 最大转向角限制(通常±30°)
- 转向速率限制(约500°/s)
- 转向延迟(一阶惯性环节,τ≈0.05s)
4.2 后轮转向特殊处理
- 需修改B矩阵:
matlab复制b2 = -Cr/m; % 符号变化
b4 = -Cr*lr/Iz;
- 控制分配时注意:
- 低速时前后轮反向转向(提高机动性)
- 高速时同向转向(增强稳定性)
4.3 四轮转向核心算法
采用分层控制架构:
- 上层LQR计算总期望横摆力矩
- 下层优化分配算法:
matlab复制function [delta_f, delta_r] = allocator(Mz_des)
% 目标函数:min ||W*(u - u_eq)||
% 约束条件:
% - 转向角限幅
% - 轮胎力饱和约束
cvx_begin
variable u(2)
minimize(norm(W*(u - [0.1;0]),2))
subject to
B(:,3:4)*u == Mz_des
-delta_max <= u <= delta_max
cvx_end
end
5. 联合仿真调试技巧
5.1 CarSim-MATLAB接口配置
- 在CarSim中设置:
- 输出变量:YawRate, LatAcc, SteerAngle等
- 采样时间≤0.01s
- Simulink中配置:
- 采用Fixed-step求解器
- 步长与CarSim一致
5.2 典型问题排查指南
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 车辆震荡发散 | Q矩阵权重不合理 | 增大误差微分项权重 |
| 转向响应迟缓 | R值过大 | 按0.5倍递减调整 |
| 高速时跟踪偏差大 | 模型线性化误差 | 增加前馈补偿项 |
| 联合仿真崩溃 | 接口时序不同步 | 检查采样时间设置 |
5.3 前馈补偿设计
在弯道工况下需添加前馈控制量:
matlab复制delta_ff = (lr/R - m*lf*v²/(2*Cr*(lf+lr)*R)) * (180/pi);
其中R为转弯半径,该补偿可消除稳态误差。
6. 不同路径跟踪测试
6.1 双移线工况调试
关键参数:
- 路径曲率连续化处理
- 预瞄距离与车速适配:
code复制L_preview = min(0.3*Vx, 20); % 限制最大预瞄距离
6.2 圆形路径注意事项
- 需动态调整Q矩阵:
matlab复制Q(1,1) = 10000 * (1 + 0.5*abs(curvature));
- 最小转弯半径检查:
code复制R_min = Vx² / (mu*g); % mu为摩擦系数
实测数据显示,在干燥路面(μ=0.8),所提方法可实现:
- 双移线跟踪误差<0.15m @100km/h
- 圆形路径误差<0.08m @80km/h
- 五次多项式路径误差<0.2m @120km/h
通过合理调节控制器参数,系统在各类工况下均表现出良好的鲁棒性。实际工程应用中,建议结合状态观测器和故障检测模块,进一步提升系统可靠性。
