目录
Matlab和Carsim联合仿真中遇到的问题
在学习《无人驾驶车辆模型预测控制》这本书时,第4、5章分别展示了基于运动学和动力学的Matlab和Carsim联合仿真。除了书上所展示的步骤之外,在联合仿真时还遇到不少问题,在此进行记录。
1. Carsim8.02 应用高版本的 Matlab
按照书上附录A尝试后,发现仍然找不到Carsim S-function,可以据此方法进行设置:
https://cloud.tencent.com/developer/news/388100
其中步骤一:更改matlab的起始位置为carsim求解器的位置,可以不用,把当前文件夹设置成这个位子就行。
以及,步骤四的设置是关键,如果之前尝试的时候已经将这个Fix的页面点开又关闭了的话,只要在左侧菜单空白处右键,Refresh Library Browser就会重新弹出提示框。
2. Matlab报错:索引超出数组元素的数目(0)
其直接原因是MPCController S-function中quadprog函数求不出解时X为空,后续调用X则会导致索引超出数组元素的数目。
解决方法:在MPCController S-function中,每次求完X,判断其是否为有效的解,若不是则令u保持为前一时刻的值。
此外,还需要在Carsim的求解设置中,勾选Advanced Setting,在下方框框内写入:
opt_steer_ext 4
! This parameter indicates that, for the front
! axle, the entire steering system is to be
! replaced.
3. 联合仿真时MATLAB的版本切换方法
为了调试问题2,我又下了Matlab 2013a,结果发现Carsim只能连接到新下载的13版Matlab。
可以按照此方法切换其连接的Matlab版本:
https://zhaodi.me/switch-matlab-simulink-version-in-carsim-simulink-cosim/
4. 检查仿真时代码中的约束条件
下载的代码版本有可能是别人调试过的,一些参数都已被修改过,尤其需要检查其中约束条件的数据,我在第五章仿真时没有注意到前轮转向角变化量的上下限delta_umin和delta_umin都被乘以了0.4,导致约束太紧,quadprog函数总是找不到可行解,根据2的判断,U会总为0。如果还是解不出来的话,松弛因子的上限M再放大。
以及To workspace的数据,在MATLAB command window中输入命令workspace即可看到,To file的数据在Carsim_Data文件夹下。
此外,CH4仿真中原代码的LTV模型的b矩阵有误,需改为:
b=[cos(t_d)*T 0;
sin(t_d)*T 0;
tan(vd2)*T/L vd1*T/(L*cos(vd2)^2);];
其他相关参考资料