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