Contents — find the section you need

Change parameters and verify

Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.

Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.

The experiment controls are in English.

Open experiment panel in a new tab

Download reproduction source

边观察预测路径边运行

运行"直线 · 1 m 偏移"并进行回放。每一时刻的绿色虚线是该时刻求解得到的预测路径。MPC 在整个时域内决定完整的曲率序列,但只将第一个值施加到车辆上,并在下一周期(0.05 s 后)重新求解全部内容。预测路径与实际路径之所以不同,既是因为预测模型是一种近似,也是因为后续周期会更新计划。

将结果保存为 A,然后运行"短时域(3 步)"或"长时域(30 × 0.2 s)"。在权重相同的情况下,控制器向前看的距离会改变转向的累积方式。以秒为单位的时域长度等于步数 N 乘以步长 Δt。

预测模型与优化问题

状态量为相对于路径的横向误差 e_y(左为正)和航向误差 e_ψ。预测使用为 MPC 简化后的线性模型。

e_{y,k+1} = e_{y,k} + v_k\,\Delta t\,e_{\psi,k},\qquad e_{\psi,k+1} = e_{\psi,k} + v_k\,\Delta t\,(u_k - \kappa_k)

u_k 为指令路径曲率 [1/m],κ_k 为预测位置处的路径曲率,v_k 为使用与车辆相同的速度伺服预测得到的速度。转向角为 δ=atan(L u),因此转向限制 |δ|≤δ_max 恰好等价于曲率边界 |u|≤tan(δ_max)/L。成本函数

J = \sum_{k} q_y e_{y,k}^2 + q_\psi e_{\psi,k}^2 + r\,(u_k-\kappa_k)^2 + r_\Delta\,(u_k-u_{k-1})^2

给出了一个仅含曲率边界的二次规划问题。u_{-1} 是上一周期实际施加的曲率。r 对偏离路径曲率的程度加权,r_Δ 对曲率快速变化加权。预测采用小角度线性模型,而车辆则是非线性的共用自行车模型。这一差异正是本实验所要展示的内容之一。

求解器,以及未收敛时会发生什么

该二次规划问题使用投影牛顿法(Bertsekas 1982)求解。固定在边界上的变量保持不变,对其余变量计算牛顿方向,再进行线搜索并投影回边界内。当投影梯度残差不超过 1e-6 [1/m] 时,视为求解已收敛。求解以上一周期的解作为起点,因此通常只需几次迭代即可收敛。

若在达到迭代次数上限时仍未收敛,可以选择三种处理方式之一。"使用可行迭代值"会施加该迭代值(它满足边界条件),并将该周期记为未收敛。"保持上一指令"会沿用上一次的转向角,并将该周期记为保持状态。"停止"会以失败(controller_failed)结束本次运行并显示原因。可使用限制为单次迭代的三个预设进行比较。由于约束仅为边界条件,该问题永远不会不可行(总是存在解)。由硬状态约束引起的不可行性不在本实验的讨论范围内。

约束、权重与速度

"8 m/s · 默认权重"能够完成运行,但"8 m/s · 小速率权重(发散)"会偏离路径。车辆将转向变化率限制为 0.8 rad/s,但本优化问题并未将该限制纳入约束。当速率权重 r_Δ 较小时,计划会假设车辆能够跟上快速的转向变化,而实际上车辆无法做到,于是振荡不断增大。这是模型中缺失约束导致闭环被破坏的一个例子。"高横向权重"同样展示了急剧修正撞上转向变化率限制的情况。

"急弯(无法跟随)"是一条半径 5 m 的路径,车辆无法跟随。在相同条件下,Stanley 实验室同样会偏离路径。更换控制律无法突破车辆本身及其约束所设定的限制。

共用车辆与比较指标

被控对象是与 PP、APP、RPP 和 Stanley 共用的仅前进的后轴运动学自行车模型:时间步长 0.05 s,最长 30 s,速度限制 8 m/s,加速度 ±2 m/s²,转向变化率 0.8 rad/s。速度并非由 MPC 优化得到,而是来自与其他实验室相同的速度伺服 a=2(目标速度−实际速度)。本实验室的 MPC 仅处理转向。

横向误差、航向误差、RMS 以及终点判定均使用与其他实验室共用的定义,基于后轴数据。经过终点并不意味着停车或泊车。请勿仅凭 RMS 对耗时不同或完成状态不同的运行进行排名。

关于计算耗时

求解器耗时是此浏览器中 Python(Pyodide)的墙钟时间,会随设备、浏览器以及同时运行的其他程序而变化,并不能说明车载计算机上的计算耗时,也不能说明是否满足控制截止时间。性能评估需要在目标硬件和实现(例如 OSQP 等专用求解器)上测量最坏情况下的求解时间。

建议的操作顺序

  1. 回放标称运行,比较预测路径与实际路径。
  2. 改变时域步数和步长,比较转向的累积过程和横向误差。
  3. 使用两个 8 m/s 预设,观察速率权重与转向变化率限制之间的关系。
  4. 使用三个单次迭代预设,比较未收敛周期的处理方式。

全部运行都在浏览器中进行,支持回放、逐帧步进、A/B 对比、重置、分享和 JSON 下载。

参考文献与相关实验室

Related reading

Explore another aspect of this field纯追踪实验室——比较固定前视距离的路径跟踪