轨迹跟踪控制问题
在本示例中, 我们将展示一个车辆轨迹跟踪控制问题的建模与求解过程.
同时, 对于这类连续求解的问题, 我们将展示如何加速求解:
- 如何使用warm start减少迭代次数
- 不同的barrier参数对求解精度和迭代次数的影响
问题描述
我们构建了一个闭环仿真, 其设定如下:
- 参考轨迹为平行于x轴的直线, 速度为1 m/s
- 当时, ; 当 时,
- 车辆的初始状态为
- 闭环控制频率为20 Hz, 仿真时间为12 s
轨迹跟踪控制器的目标函数为最小化车辆的跟踪误差 (离散化为20个时间点):
同时, 我们需要考虑以下约束条件:
- 车辆运动学约束 (时间步长为0.2 s):
- bound constraints:
- boundary conditions:
结果
闭环控制结果如下:
![]()
Warm Start
info
Warm start可以帮助求解器收敛, 减少迭代次数. OPTIMake的warm start包括以下操作:
- 通过设置workspace中变量的initial guess
- 通过设置option中的
try_warm_start_barrier参数
对于这类连续求解的问题, 我们可以使用warm start来加速求解.
在这里, 我们讨论try_warm_start_barrier参数对迭代次数的影响.
下面为设置该参数的参考 (详细请参考求解接口):
option.try_warm_start_barrier = 1;
下面为是否使用try_warm_start_barrier的迭代次数对比 (蓝色细线为开启, 黑色粗线为关闭):
![]()
可以看到, 开启该option后:
- 当warm start成功时, 迭代次数可以被显著减少
- 当warm start失败时, 迭代次数比不开启该option时多1次
Barrier参数
当代码生成中的solver参数设置为'pdipm'时, OPTIMake会使用primal-dual interior point method.
简单来说, 约束会被近似为barrier函数:
barrier函数的参数的目标值通过barrier_target参数设置. 在求解过程中, 会从barrier_init