< >
Home » ROS2与Gazebo11入门教程 » ROS2与Gazebo11入门教程-电梯(Elevators)插件

ROS2与Gazebo11入门教程-电梯(Elevators)插件

说明:

  • 介绍如何使用Gazebo中自带的插件

概述

  • Gazebo中的电梯由可以上下移动的轿厢组成,并带有一扇电梯门。原始(Prismatic)关节控制轿厢和电梯门

功能

  • 电梯的功能是通过ElevatorPlugin实现的。该插件控制以下两个棱柱(prismatic)关节:
1. 升降机关节:用于升降电梯;
2. 电梯门关节:用于打开和关闭电梯门。
  • 在插件的更新周期过程中,升降机关节会将电梯移动到要求的楼层,而电梯门关节则会根据升降机的当前状态打开或关闭电梯门。可以通过向电梯(elevator)话题发送带有楼层号的字符串消息来请求移动到具体的楼层。这些参数的说明将会在下一小节中介绍。

  • 电梯的控制逻辑如下:

    • 等待一个楼层请求。
    • 关闭电梯门。
    • 移至请求的楼层。
    • 打开电梯门。
    • 等待五秒钟。
    • 关闭电梯门。
    • 转到#1开始一个新的周期。
  • 楼层请求不会有队列,电梯会在响应一个新的请求之前完成它的移动。

参数

  • 升降机关节、电梯门关节、楼层高度和控制话题均是在SDF中指定的。下面是一个示例:
<plugin filename="libElevatorPlugin.so" name="elevator_plugin">
<lift_joint>elevator::lift</lift_joint>
<door_joint>elevator::door</door_joint>
<floor_height>3.075</floor_height>
<topic>~/elevator</topic>
</plugin>
  • 在该示例中,SDF文件中的其他地方会有一个elevator模型,该模型有一个用于升降的名为lift的关节和一个用于打开/关闭电梯门的名为door的关节。每个楼层的高度均为3.075米,并且电梯插件会侦听〜/elevator话题上的楼层请求消息。

示例

  • Gazebo自带了一个完整的示例仿真世界。可以使用以下命令来运行该仿真世界:
gazebo worlds/elevator.world
  • 这个仿真世界有两个楼层和一部电梯。在电梯前面的平台上放置一个简单形状来触发楼层请求。这个楼层请求的发生是由“被占区域事件(Occupied Region Event)”触发的,该事件将在下一小节中介绍。

  • 该示例的运行效果可以参见此视频

被占区域事件

  • 电梯插件是与SimEventPlugin的OccupiedEvent组件一起使用的。
  • 每当一个3D区域被某个模型占据时,OccupiedEvent就会发送一条消息。
  • 有关更多信息,请参阅“被占事件(Occupied Event)”教程。

参考:

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与gazebo11入门教程