从零开始开发一套大学生电动方程式赛车算法——1
收到一个大学生电动方程式车队朋友的私信,说他们车队的算法组刚组建,人手一台笔记本电脑,其他全无,问我第一周该干什么。这问题太典型了,我当年带队踩的坑,不想让后来人再踩一遍。这篇就以“大学生电动方程式赛车算法开发”为起点,聊清楚第一阶段最关键的几件事:整体架构怎么搭、用什么做原型、单车模型怎么建立、以及软件框架怎么设计。这期先讲思路和地基,后面再逐步落到具体的控制算法和实车标定。
很多人以为做方程式赛车算法就是写PID、调参数,其实这只是最后那一层。如果把整套系统比作一栋楼,PID只是装修用的墙漆,而地基是整车数学模型、传感器融合框架、以及一套能跑起来验证逻辑的仿真环境。你连车都还没落地,就急着调PID,等于拿着油漆桶站在空地上刷空气。大学生电动方程式的核心场景是动态赛——直线加速、八字绕环、高速避障,再往后还有耐久赛。这些场景对算法的要求各不相同:加速赛要扭矩响应快、起步不打滑;八字绕环要横摆角速度控制精准;高速避障则考验路径规划和车辆极限状态的稳定。一套算法打天下是绝对走不通的。
这个系列我打算从零开始,用几篇文章完整复现一套可用于实车的算法栈。今天这篇,先把全局设计和第一阶段地基讲透。
1. 内容整体设计与思路拆解
1.1 大学生方程式赛车的算法到底在解决什么问题
先说个容易误解的地方:很多人以为赛车的“算法”就是自动驾驶那一套——感知、决策、规划、控制。但大学生方程式目前主流还是“驾驶员在环”,也就是说,车上坐着一个活人,算法并不负责替他开车,而是负责把车调教得“听话”。
那算法到底在解决什么问题?核心有四个:
第一,动力域控制。电动方程式没有发动机,动力完全来自电机。驱动防滑(TCS,Traction Control System)、扭矩矢量分配(Torque Vectoring)、起步弹射控制(Launch Control),这些都属于动力域算法。动态赛里的直线加速,比拼的不只是电机峰值功率,而是如何把功率高效地“放”到地面上。起步瞬间如果扭矩给大了,后轮直接打滑空转,时间哗哗地浪费掉;给小了,加速又不够猛。这个“刚刚好”的尺度,就是算法要解决的。
第二,底盘域控制。包括横摆角速度控制、侧倾稳定性控制,以及主动悬架(如果有的话)。八字绕环和高速避障主要看这一块。车子入弯出弯的瞬态响应、稳态横摆特性,都靠这层算法去修正和优化。
第三,状态估计与传感