Webots+Matlab:使用Simulink搭建RHex控制器(1)
最近由于要做控制器,需要用到很多矩阵运算和优化相关的库,虽然也已经安装了对应的C++优化库,但是在C++里面写控制器果然还是效率很低,虽然以后直接往样机上移植的时候确实方便,但是前期针对算法的研究果然还是应该专注在算法本身上,而不是话很多时间去学习各种库的使用,因此最后还是决定在Matlab中搭建控制器,专注于控制器本身的设计。
关于Webots+Matlab的环境配置方法能够查到的最早的应该是油管上一个人做的演示,效果很好,也感觉很方便,但是由于他没有给出具体的实现过程所以国内也有几个人自己设计了相关的控制器,但是总感觉没有他做的看着那么舒服流畅,因此决定参考一下他们的方法,对标油管那个的效果自己做一个。
0.环境介绍
- Webots R2020b
- Matlab R2020a
- 仿真模型Rhex
1.新建Matlab控制器
在Wrbots中点击上方
向导->新机器人控制器->下一步
选择Matlab ->下一步->输入控制器名称
RHex_Matlab ->下一步->完成
新创建的控制器代码如下所示
% MATLAB controller for Webots
% File: RHex_Matlab.m
% Date:
% Description:
% Author:
% Modifications:
% uncomment the next two lines if you want to use
% MATLAB's desktop to interact with the controller:
%desktop;
%keyboard;
TIME_STEP = 64;
% get and enable devices, e.g.:
% camera = wb_robot_get_device('camera');
% wb_camera_enable(camera, TIME_STEP);
% motor = wb_robot_get_device('motor');
% main loop:
% perform simulation steps of TIME_STEP milliseconds
% and leave the loop when Webots signals the termination
%
while wb_robot_step(TIME_STEP) ~= -1
% read the sensors, e.g.:
% rgb = wb_camera_get_image(camera);
% Process here sensor data, images, etc.
% send actuator commands, e.g.:
% wb_motor_set_postion(motor, 10.0);
% if your code plots some graphics, it needs to flushed like this:
drawnow;
end
% cleanup code goes here: write data to files, etc.
将其中第10行desktop
和第11行keyboard
注释取消
点击保存
将机器人的控制器设置为新建的RHex_Matlab
点击启动仿真
启动后,会自动打开Matlab并停留在keyboard
,即上述我们注释掉的两个地方desktop
的作用是启动Matbal 的桌面界面keyboard
是使程序停在此处等待键盘输入,这一句在调试阶段最好打开,否则若设置有问题Matlab会闪退不便于调试。
在webots中点击启动仿真时注意到在下方的控制台会出现以下代码
INFO: RHex_Matlab: Starting controller: "D:\Program Files\MATLAB\R2020a\bin\win64\MATLAB.exe" -nosplash -nodesktop -minimize -r launcher
即webots调用了launcher
这个文件,而我们到webots的安装目录下的matlab库中可以找到该文件
将其打开,可以发现其主要功能是使用matlab的loadlibrary
函数将C语言中的webots库函数加载到Matlba中
因此若Matlab中没有安装
MATLAB Support for MinGW-w64 C/C++ Compiler
会出现错误,因此在Matlab的主页菜单栏中点击附加功能
在搜索栏中输入C/C++进行搜索并安装
安装比较慢,需要等待大概5-10分钟。
安装成功后在Webots中点击复位重新启动仿真,再次停在keyboard
,点击Matkab右上方退出调试即开始修改控制器。
小结
在此记录一个调试时候的小技巧
在运行调试后若发现代码需要修改可以直接退出调试进行修改保存后直接在Matlab中点击运行即可,而不需要反复在Webots中点击复位与运行。
参考链接
[1] Webots+Matlab Simulink youBot Kuka Demo
[2] 开发经验分享(3) - Webots + Matlab/Simulink联合仿真方法
[3] Simulink+Webots基于MPC的移动机器人轨迹追踪仿真(3)
[4] Why you should never break a continuous algebraic loop with a Memory block
[5] Use MATLAB Engine to Execute a Function Call in Generated Code
评论(0)
您还未登录,请登录后发表或查看评论