需求:使用simulink建立算法模型在gazebo中联合控制。
在研究ros、gazebo的过程中不可避免要涉及算法、模型设计、调参数的问题,使用simulink可以专注于建立控制模型。本方法使用Ubuntu18.04系统,ROS melodic版本。
本方法基于matlab simulink的一个示例,performCoSimulationWithGazebo。可以在matlab帮助文档中搜索到。
按照帮助文档中的方法选择一个工作目录后在matlab命令行输入
packageGazeboPlugin
可以看到一个对应的zip包和解压后的文件夹
接下来在ubuntu的终端输入
cd /home/user/src/GazeboPlugin
mkdir build
cd build
cmake ..
make
如果想要卸载插件重装,则在matlab中执行
if exist('GazeboPlugin', 'dir')
rmdir('GazeboPlugin', 's');
end
if exist('GazeboPlugin.zip', 'file')
delete('GazeboPlugin.zip');
end
可以直接在建立动态脚本运行,脚本不需要保存。
在ubuntu终端执行
cd /home/user/src/GazeboPlugin/export
export SVGA_VGPU10=0
gazebo ../world/multiSensorPluginTest.world --verbose
我为了省事直接把export SVGA_VGPU10=0
写入.bashrc文件中:切换到home
cd
echo 'export SVGA_VGPU10=0' >> .bashrc
接下来就是关键的地方了:在home目录下
cd
echo 'export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:<your path>/GazeboPlugin/export' >> .bashrc
注意替换文件路径到GazeboPlugin下
比如我在~/matlab_ws建立GazeboPlugin目录
写入.bashrc的语句应该为
echo 'export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:/home/$USER/matlab_ws/GazeboPlugin/export' >>.bashrc
然后就简单多了。
在ros的包(哪一个都行)中建立一个worlds文件夹然后建立simulink.world文件,文件名任意。
world文件长这样:
<?xml version="1.0"?>
<sdf version='1.6'>
<world name="default">
<include>
<uri>model://ground_plane</uri>
</include>
<include>
<uri>model://sun</uri>
</include>
<plugin name='GazeboPlugin' filename='lib/libGazeboCoSimPlugin.so'>
<portNumber>14581</portNumber>
</plugin>
</world>
</sdf>
接下来就简单多了,在启动gazebo的launch文件中替换empty.world就行了。启动之后可以在gazebo pacer中测试连接情况。不出意外是可以连接的。