自动驾驶中的车辆动力学模型:从基础到高级控制策略
1. 车辆动力学模型基础入门第一次接触自动驾驶车辆控制时我被各种复杂的数学公式搞得晕头转向。直到有一天我把车辆想象成小时候玩的遥控车突然就豁然开朗了。车辆动力学模型本质上就是在描述这辆大玩具车如何响应我们的操控指令。1.1 运动学自行车模型最简单的起点Kinematic Bicycle Model运动学自行车模型就像我们初学自行车时的认知转动车把就能改变方向踩踏板就能前进。这个模型做了几个关键假设轮胎永远不会打滑车身是个刚体转向时前后轮的运动可以用一个等效的自行车转向来近似在实际项目中我发现这个模型特别适合低速场景。比如在园区自动驾驶小车中我们用它来做路径规划效果就很好。模型的核心方程只有三个# 横向运动学模型 x_dot v * cos(theta) y_dot v * sin(theta) theta_dot v * tan(delta) / L其中v是车速delta是前轮转角L是轴距。这三个方程描述了车辆位置和朝向如何随时间变化。1.2 纵向动力学踩油门和刹车的学问光有转向还不够我们还需要控制车辆的速度。纵向动力学模型就像是描述踩油门有多猛车就能跑多快的数学表达。最基本的模型可以简化为v_dot a # 加速度直接由控制输入决定但在实际工程中我们会考虑更多因素。比如在去年做的一个项目中我们发现必须考虑空气阻力特别是在高速情况下。更完整的模型是这样的v_dot (F_drive - 0.5*rho*Cd*A*v**2 - m*g*fr)/m这里rho是空气密度Cd是风阻系数A是迎风面积fr是滚动阻力系数。记得当时调参时我们团队为了测准这些参数在试车场泡了整整一周。2. 进阶动力学模型当车速超过30km/h后我发现简单的运动学模型就开始力不从心了。这时候就需要搬出Dynamic Bicycle Model动力学自行车模型。2.1 轮胎侧偏力被忽视的关键因素第一次听说轮胎侧偏角时我完全摸不着头脑。直到工程师带我去试车场做了个实验让车以恒定速度转弯然后测量轮胎实际指向和车辆运动方向的夹角。这个夹角就是侧偏角它产生的力才是真正让车转弯的幕后推手。线性轮胎模型的数学表达很简单Fyf -C_alpha_f * alpha_f # 前轮侧向力 Fyr -C_alpha_r * alpha_r # 后轮侧向力但这里有个坑这个线性关系只在侧偏角小于5度时成立。我们在高速过弯测试时就吃过亏模型预测和实际轨迹偏差很大最后不得不引入更复杂的非线性轮胎模型。2.2 完整的动力学方程把所有的力考虑进来后动力学模型的核心方程看起来有点吓人# 横向动力学 vy_dot (-C_alpha_f*(delta - (vy lf*r)/vx) - C_alpha_r*(-(vy - lr*r)/vx))/m - r*vx # 偏航动力学 r_dot (lf*(-C_alpha_f)*(delta - (vy lf*r)/vx) - lr*(-C_alpha_r)*(-(vy - lr*r)/vx))/Iz我第一次看到这些方程时花了整整两天才搞懂每个项的含义。建议新手可以这样理解把车辆想象成一个被各种力推来推去的盒子vy_dot描述的是这个盒子横向移动的加速度r_dot描述的是盒子旋转的角加速度3. 高级控制策略实战有了准确的模型接下来就是如何用好它们来控制车辆。这里分享几个我在实际项目中总结的经验。3.1 MPC控制器的调参技巧模型预测控制(MPC)是目前最主流的控制方法但调参是个技术活。我们的经验是预测时域不是越长越好一般2-3秒足够控制时域可以更短些0.5-1秒代价函数的权重需要反复调试这里有个实用的调试技巧先让横向误差和航向误差的权重比为1:1然后根据实际表现微调。我们在一个项目中最终确定的权重比是1.5:1效果很好。3.2 状态估计的常见坑模型再好也需要准确的车辆状态输入。常见的状态估计问题包括IMU的零偏漂移GPS信号丢失轮速计在打滑时的误差我们的解决方案是采用多传感器融合核心算法是卡尔曼滤波。一个实用的技巧是当检测到车辆打滑时自动降低轮速计的权重。4. 模型选择指南面对这么多模型新手常问我该用哪个根据我的项目经验可以这样选择4.1 低速场景30km/h推荐模型运动学自行车模型优点计算量小实现简单适用场景自动泊车、园区物流车4.2 中高速场景30-80km/h推荐模型线性化的动力学模型优点考虑轮胎特性精度较好适用场景城市道路自动驾驶4.3 高速场景80km/h推荐模型完整非线性动力学模型优点能处理大侧偏角情况适用场景高速公路自动驾驶记得去年做一个高速变道项目时我们开始尝试用线性模型结果车辆在紧急变道时出现了明显的轨迹偏差。切换到非线性模型后控制精度立即提升了40%。5. 实际工程中的挑战理论很美好但实际工程中总会遇到各种意外情况。分享几个我们踩过的坑5.1 参数辨识的难点车辆质量、轮胎刚度这些参数厂家给的数据往往和实际有出入。我们开发了一套在线参数辨识方法让车辆执行特定机动动作如正弦转向记录实际运动数据用优化算法反推参数值这个方法帮我们发现了厂家给的轮胎刚度参数有15%的偏差。5.2 实时性优化复杂的模型计算量很大。我们通过以下优化将计算时间从50ms降到了10ms使用查表法替代实时计算三角函数对雅可比矩阵进行预计算采用定点数运算这些优化让我们的控制器能在100Hz下稳定运行。在自动驾驶领域车辆动力学模型就像是一本车辆行为的说明书。掌握好它你就能让车辆乖乖听话。从简单的运动学模型入手逐步深入到复杂的动力学模型这个过程虽然充满挑战但当你看到自己设计的控制器让车辆精准地沿着预定轨迹行驶时那种成就感是无与伦比的。