在仿真实验过程中,我们有时需要实时读取ROS及Gazebo话题,目前互联网上关于读取ROS的话题资料较多,读取Gazebo话题的参考资料较少,本文将以Ubuntu下固定翼仿真为例,展示如果通过MATLAB的插件GazeboPlugin读取Gazebo话题里面的数据。
一、插件安装
在/home/{用户名}下创建src文件夹,MATLAB切换到相应目录,在命令行窗口输入如下命令。
packageGazeboPlugin
此时路径 /home/{用户名}/src下会新建一个GazeboPlugin文件夹和多出来一个GazeboPlugin.zip压缩包。
接下来使用Ubuntu的终端对插件进行编译。
# 切换目录,注意把imri改成您的用户名
cd ~/src/GazeboPlugin
# 如果build文件夹已经存在,使用下面一行命令进行清除
# rm -r build
# 安装插件
mkdir build
cd build
cmake ..
make
编译完毕后,为了让gazebo仿真时能够检测到插件存在,还需要插入如下代码调用插件的.so链接库文件 ,此处在PX4源代码的empty.world文件中添加举例,如图所示。
<plugin name="GazeboPlugin" filename="lib/libGazeboCoSimPlugin.so"><portNumber>14581</portNumber></plugin>
至此,恭喜您已经完成第一步——插件安装。
二、运行仿真
以四旋翼仿真为例,先启动一个仿真,后续Simulink需要从该仿真中读取数据。(配置教程见(一)Ubuntu20.04下PX4开发环境搭建(v1.14.0))
cd ~/PX4-Autopilot
make px4_sitl_default gazebo
三、Simulink搭建模型
首先添加一个Gazebo Read模块。
添加完毕后,进入 Configure Gazebo network and simulation setting界面。
测试成功后,回到设置界面,可通过如下操作看到目前的话题和话题类型。此处Topic选择/gazebo/ground_truth/world_pose/iris/base_link,Message type选择gazebo_msgs/Pose。
随后添加Simulink其他模块:To Virtual Bus和Display,连接逻辑如图所示。
第二个Display 模块数值显示格式设置为long类型。
通过Gazebo菜单【Window】->【Topic Visualization】打开话题监视器,选择/gazebo/default/pose/info话题。
此时弹出Gazebo: Text View窗口,可见显示的数据与Simulink模块显示的一致。(注:Gazebo: Text View默认依次打印显示多个时刻数据,如果把窗口下方的Buffer调整为1,两边的实时性会好一点)
至此,恭喜您已完成全部配置过程。