预计完成时间:10 分钟
现在,你已经有了一台能够移动并在运动中扫描周围环境的机器人。不过,你还需要知道机器人相对于世界坐标系的朝向,以及它的角速度和线加速度。换句话说,你需要获得机器人的姿态、瞬时速度和加速度信息。因此,接下来要加入 IMU Plugin。
IMU(惯性测量单元,Inertial Measurement Unit)是一种同时包含加速度计和陀螺仪的传感器,有时也会集成磁力计(指南针)。它能够报告线加速度、角速度,以及在具备磁力计时的方向信息。
要实现 IMU Plugin,请把下面这段代码复制到你的 URDF 文件底部,也就是结束的 </robot> XML 标签之前。
复制并粘贴
<!-- IMU Plugin -->
<gazebo>
<plugin filename="libignition-gazebo-imu-system"
name="ignition::gazebo::systems::Imu">
</plugin>
</gazebo>
<gazebo reference="link_chassis">
<sensor name="imu_sensor" type="imu">
<always_on>1</always_on>
<update_rate>20</update_rate>
<visualize>true</visualize>
<topic>imu</topic>
</sensor>
</gazebo>
visualize 参数有助于你理解 IMU 的姿态和协方差在仿真中会如何表现;如果你愿意,后面也可以把它改成 false。
update_rate 参数用于设置 Gazebo 发布数据的频率。
粘贴完成后,保存你的 URDF 文件。接下来需要重新构建 ROS2 功能包,并重新生成机器人。
编写一个简单的 Python 脚本,根据两个参数控制机器人运动:线速度和角速度。
在机器人运动过程中,程序需要显示 IMU 传感器读到的姿态四元数、X 轴方向的线加速度,以及 Z 轴方向的角速度。
**提示:** 你需要同时为 /cmd_vel 和 /imu 这两个话题创建桥接。你已经知道 /cmd_vel 需要使用双向桥接;而 /imu 则应使用单向桥接,也就是 IGN 到 ROS 的桥接。可用命令如下:
ros2 run ros_gz_bridge parameter_bridge /cmd_vel@geometry_msgs/msg/Twist@ignition.msgs.Twist /imu@sensor_msgs/msg/Imu[ignition.msgs.IMU
**注意:** 别忘了更新你的 setup.py 文件,这样你才能通过 ros2 run 命令运行自己的程序。
预期结果:

