Simulink+Webots基于MPC的移动机器人轨迹追踪仿真(3)

Simulink+Webots基于MPC的移动机器人轨迹追踪仿真(3)

在联合仿真中首先是对一开始验证的控制器进行修改,首先使用MATLAB Fuction替代了在验证模型的机器人系统。webots可以通过Supervisor和传感器获得机器人位置和姿态信息。原本这个感知模块也是放在机器人系统中的,但是由于是直接获取的机器人位置,没有进行积分和延时,所以直接从机器人系统的输出连接到MPC控制器的输入就会报如下错误

Block diagram ‘car_mpc’ contains 1 algebraic loop(s). To see more details about the loops use the command Simulink.BlockDiagram.getAlgebraicLoops(‘car_mpc’) or the command line Simulink debugger by typing sldebug(‘car_mpc’) in the MATLAB command window. To eliminate this message, set Algebraic loop to “none”.

所以增加了一个MATLAB Fuction用作位置信息的输出,最后的模型如下
Simulink+Webots基于MPC的移动机器人轨迹追踪仿真(3)_第1张图片

Simulink调用

使用Webots的向导新建的MATLAB控制器m文件中完成机器人系统的初始化,并且启动Simulink

desktop;
%keyboard;
 
%机器人电机初始化
TIME_STEP = 64;
 
wheel_fl = wb_robot_get_device('motor1');
wheel_fr = wb_robot_get_device('motor2');
wheel_bl = wb_robot_get_device('motor3');
wheel_br = wb_robot_get_device('motor4');
 
%启动Simulink
open_system('car_mpc0810');
load_system('car_mpc0810');
 
options = simset('SrcWorkspace','current');
sim('car_mpc0810',[],options);
 
while wb_robot_step(TIME_STEP) ~= -1
 
End

值得注意的是在Simulink中使用的Webots函数时,在其函数内部经常需要对一些函数声明外部功能,否则会报如下错误
Simulink+Webots基于MPC的移动机器人轨迹追踪仿真(3)_第2张图片
此时需要使用外部声明函数coder.extrinsic进行声明
Simulink+Webots基于MPC的移动机器人轨迹追踪仿真(3)_第3张图片
有位老铁也做Webots+Simulink的仿真,我也向他请教了很多问题,他做的例程为
开发经验分享(3) - Webots + Matlab/Simulink联合仿真方法

效果展示

总结

以上工作还是做了很久,终于可以实现在simulink中使用MPC对Webots机器人进行仿真,在此基础上可以换成更加复杂的模型,以及其他控制器,之后还有很大的拓展空间。唯一的问题是,用Webots启动Simulink实在是太太太慢了,每次要好几分钟,导致调试起来很麻烦。但是youtube上的视频里,是可以很快启动的,可能是我的电脑太垃圾了。

你可能感兴趣的:(webots,matlab,仿真器)