在Simulink和Gazebo之间进行联合仿真万博1manbetx

这个例子展示了如何在Simulink和Gazebo之间建立同步的模拟,如何从Gazebo接收数据,并向Gazebo发送命令。万博1manbetx

设置Gazebo仿真环境

对于本例,使用您自己的带有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插件

手动安装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”);结束

启动Gazebo仿真环境

在VM或您自己的Linux操作系统中打开终端,运行以下命令来启动Gazebo模拟器。

cd/home/user/src/GazeboPlugin /出口出口SVGA_VGPU10 = 0露台. . /世界/ multiSensorPluginTest.world——详细

这些命令启动一个露台模拟器与:

  • 两个激光测距仪:hokuyo0hokuyo1

  • 两个RGB相机:camera0camera1

  • 两个深度照相机:depth_camera0depth_camera1

  • 两个IMU传感器:imu0imu1

  • 单元框模型: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的单位盒 / 年代 2 。创建一个空白的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只停留在前一个步骤时间上,直到您恢复模型为止。

下一个步骤