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)”教程。
参考:
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号