自动驾驶中,被严重低估的算法...
控制模块才是自动驾驶从“能用”到“好用”的关键
在自动驾驶快速发展的今天,大多数人的目光都聚焦在感知、决策、规划这些“高大上”的模块上。诚然,深度学习、强化学习在这些领域的应用确实带来了突破性进展,但真正决定一辆自动驾驶汽车能否平稳、安全、舒适地行驶的,却是那个常常被低估的“幕后英雄”——控制算法。
控制算法:被上层模块低估的“老黄牛”
最近看到一个观点:“不要用规划及其上层的视角看控制算法。”
规划算法大多可以复用机器人的算法,通过几何学和凸优化解决。但自动驾驶的被控对象是车辆——这是一个有着复杂动力学特性的系统,涉及轮胎与地面的非线性摩擦、悬架系统的振动、传动系统的延迟等一系列机器人领域不常遇到的问题。
车辆控制发展多年,积累了大量的专属经验和算法。慢工出细活在控制模块发挥的淋漓尽致。控制算法的最优解基本可以确定,其性能的提升靠的是理解和知识面的深度。反观上游模块,还在不断尝试新技术、新方法。
这种“偏见”导致了一个有趣的现象:上层模块总是会低估控制模块的复杂性,认为只要规划出一条合理的轨迹,控制层就应该能够“照做”。殊不知,车辆不是理想化的质点,它的响应有延迟,它的运动受限于物理定律,它的状态受环境影响巨大。
从ESP到自动驾驶:控制算法的演进
用有限的传感器信号估算各种车辆状态,判断车辆是否在失稳临界范围——这种对车辆物理极限的理解,恰恰是当前自动驾驶所欠缺的。
现在的自动驾驶系统,大多还是关注“有没有能力通过空间层面”,很少关注天气对路面的影响会不会导致车辆失稳。一切都是基于完美附着系数路面的假设,所有的横纵向加速值都是基于完美路面的最保守值。
这种差距,在自动驾驶从“0到1”(实现基本功能)到“1到100”(提升性能和可靠性)的演进过程中,将会变得尤为突出。
算法选择:没有银弹,只有最适合
几种控制算法的特点:
PID控制:简单实用,但不适合需要复杂前馈的场景。模型预测控制(MPC):能够处理约束,预测未来状态,但计算量大。神经网络MPC(NNMPC):用神经网络替代传统模型,需要数据训练,计算耗时巨大,适合延迟大的系统。
横向控制(转向)和纵向控制(速度)应该分开处理。车辆纵向建模复杂,传动效率损失难以精确建模;但横向模型是可以建立的,从2DOF到3DOF再到6DOF,精度逐渐提升,复杂度也相应增加。
调参没有“玄学”,只有理解不足
一个很扎心的观点:“不存在玄学调参的情况。”
每个算法的输入和输出都有确定的关系,如果出现“玄学调参”,只可能是两种情况:算法逻辑出错,或者对算法的理解不足。
这让我想起很多工程领域的“神秘主义”倾向——当我们不理解一个系统时,往往会用“经验”“直觉”来掩盖知识的缺失。而真正的高手,能够清晰地解释每个参数的作用,每个调整背后的原理。
车辆物理:被忽视的关键变量
控制算法不能只面对规划,还要面对车辆和道路。这意味着控制算法需要处理的不仅仅是“跟踪规划轨迹”这一个任务,还包括:
方向盘零偏的补偿
斜坡路面的影响
车身传感器零偏的校准
更深入一层,车辆本身的特性也会影响控制算法的表现。大型SUV往往比C级车操控性能更稳,对激励扰动的稳定性也更好。这意味着在SUV上运行良好的控制算法,在轿车上可能出现蛇形等各种性能问题。
纵向控制:扭矩是最好的接口
在电动汽车的加速控制上,扭矩是最好的接口,速度接口最差。
很多控制系统喜欢用速度作为控制目标,因为直观、容易理解。但从车辆动力学的角度来看,扭矩才是更底层的控制量,能够更直接、更精确地控制车辆的运动状态。
同样,在减速控制上,由于Bosch等供应商的限制,可能无法直接调用ESP的主缸压力接口,只能使用速度或距离接口——这显然不是最优解。这就引出了一个更深层的问题:控制算法的性能,不仅取决于算法本身,还受限于执行器的开放程度。
结语:承认问题,才能根本解决问题
承认自己模块有问题,才有契机去探究根因,才能找出解决问题的最佳模块。
这不仅是技术问题的解决之道,也是一种值得尊敬的工程态度。在复杂的系统中,问题往往是耦合的,感知的问题可能是规划的问题,规划的问题可能是控制的问题,控制的问题可能是执行器的问题。只有在团队内部建立起“先向内看”的文化,才能真正找到问题的根源,而不是把问题推到上游或下游。
对于自动驾驶行业而言,当大家都在追逐“高级别自动驾驶”“端到端”“大模型”这些热点时,那些深耕控制算法、研究车辆动力学、理解执行器特性的工程师们,正在默默支撑着系统的最后一公里。
真正决定自动驾驶体验的,从来不是酷炫的算法名称,而是对物理世界深刻理解后,做出的每一个精准控制。