这个例子展示了如何在Simulink和Gazebo之间建立同步的模拟,如何从Gazebo接收数据,并向Gazebo发送命令。万博1manbetx
对于本例,使用您自己的带有Gazebo或下载的Linux环境虚拟机与ROS 2旋律和露台。在虚拟机(VM)中,所需的Gazebo插件位于/home/user/src/GazeboPlugin。
软件需求(包含在VM中)是:
操作系统:Ubuntu Xenial Xerus或Ubuntu Bionic Beaver
软件依赖关系:cmake 2.8, gazebo9和libgazebo9-dev
如果使用您自己的Linux环境,请执行以下步骤手动安装Gazebo插件。
以zip包的形式获得插件源代码。此函数创建一个名为的文件夹GazeboPlugin
在当前工作目录中,并将其压缩为GazeboPlugin.zip
。
packageGazeboPlugin
复制GazeboPlugin.zip
到您的Linux机器,满足以下要求:
在您的Linux平台上解压这个包,在本例中我们解压到/home/user/src/GazeboPlugin
。
在终端运行以下命令来编译插件/home/user/src/GazeboPlugin /出口/ lib / libGazeboCoSimPlugin.so
。
cd/home/user/src/GazeboPluginmkdir构建cd构建cmake。。使
从主机删除生成的插件。
如果存在(“GazeboPlugin”,“dir”)删除文件夹(“GazeboPlugin”,“年代”);结束如果存在(“GazeboPlugin.zip”,“文件”删除()“GazeboPlugin.zip”);结束
在VM或您自己的Linux操作系统中打开终端,运行以下命令来启动Gazebo模拟器。
cd/home/user/src/GazeboPlugin /出口出口SVGA_VGPU10 = 0露台. . /世界/ multiSensorPluginTest.world——详细
这些命令启动一个露台模拟器与:
两个激光测距仪:hokuyo0
和hokuyo1
两个RGB相机:camera0
和camera1
两个深度照相机:depth_camera0
和depth_camera1
两个IMU传感器:imu0
和imu1
单元框模型:unit_box
的multiSensorPluginTest.world
位于/home/user/src/GazeboPlugin /世界
文件夹中。这个世界文件包括了Gazebo插件,它使用了Simulink的以下代码行进行联合仿真。万博1manbetxxml
身体:
<插件名称=“GazeboPlugin”文件名=“lib / libGazeboCoSimPlugin.so”> < portNumber > 14581 < / portNumber > < /插件>
文件名字段必须指向编译后的Gazebo插件的位置。这个路径可以是相对于位置Gazebo本身启动,或者你可以添加到Gazebo插件搜索路径运行:
出口GAZEBO_PLUGIN_PATH = $ {GAZEBO_PLUGIN_PATH}: / home / user / src / GazeboPlugin /出口
打开performCoSimulationWithGazebo
模型,演示如何从这些模拟传感器接收传感器数据,以及如何从Simulink启动单元盒模型。万博1manbetx
open_system (“performCoSimulationWithGazebo”)
在对模型进行仿真之前,使用露台Pacer布洛克:
hilite_system (“performCoSimulationWithGazebo /露台Pacer”)
打开块并单击配置Gazebo网络和模拟设置链接。
open_system (“performCoSimulationWithGazebo /露台Pacer”)
在网络地址下拉列表中,选择自定义
。输入您的Linux机器的IP地址。默认的港口露台是14581
。集响应超时到10秒。
单击测试按钮测试连接到正在运行的Gazebo模拟器。
使用露台读块从三个传感器获取特定主题的数据:
IMU,/露台/违约/ imu / imu / imu0 /链接
激光雷达扫描,/露台/违约/ hokuyo0 /联系/激光/扫描
RGB相机,/露台/违约/ camera0 /联系/相机/形象
使用MATLAB®函数块显示IMU读数并可视化激光雷达扫描和RGB图像。
使用露台使用命令块中施加恒定的力z-指向导致加速度为1的单位盒
。创建一个空白的ApplyLinkWrench
信息使用露台空白信息。方法指定要应用该力的消息的元素unit_box /链接
实体使用总线分配块。使用露台读输出方框的地面真值姿势。盒子在1秒内的位移应该接近0.5米。
联合仿真开始,点击运行。您还可以使用以下命令逐步模拟一步。退一步在联合模拟期间万博1manbetx不支持。
当模拟运行时,请注意Gazebo模拟器和Simulink时间是同步的。万博1manbetx
该模型利用MATLAB函数块和MATLAB绘图函数实现了露台传感器数据的可视化。这是从Gazebo相机获得的图像数据的快照:
这是激光雷达扫描图像的快照:
单元格块所在位置的时间图z-方向可以查看使用数据检查。块跟踪抛物线形状由于恒定的加速度随着时间的推移。
仿真结束时单元盒位置为1.001,位移为0.5001,与0.5的期望值略有不同。这是由于Gazebo物理引擎的错误。使Gazebo物理引擎中的最大步长更小以减少这个错误。
在联合仿真期间,您可以在任何时候暂停Simulink和Gazebo模拟器万博1manbetx使用暂停
注意:Gazebo会在模拟前暂停一段时间。
这是由于以下协同仿真时间序列:
传感器数据和驱动命令在正确的时间步长上交换。执行选择先步进Gazebo,然后步进Simulink。万博1manbetx仿真执行仍在进行中t + 1, 万博1manbetxSimulink只停留在前一个步骤时间上,直到您恢复模型为止。