设置机器人模拟(Gazebo)

目标: 使用 Gazebo 和 ROS 2 启动模拟

教程级别: 高级

时间: 20 分钟

先决条件

首先,您应该安装 ROS 2 和 Gazebo。 您有两个选择:

任务

1 启动模拟

在此演示中,您将在 Gazebo 中模拟一个简单的差速驱动机器人。 您将使用 Gazebo 示例中定义的一个世界,名为 visualize_lidar.sdf。 要运行此示例,您应该在终端中执行以下命令:

ign gazebo -v 4 -r visualize_lidar.sdf
../../../../_images/gazebo_diff_drive.png

当模拟运行时,您可以使用“ign”命令行工具检查Gazebo 提供的主题:

ign topic -l

Which should show:

/clock
/gazebo/resource_paths
/gui/camera/pose
/gui/record_video/stats
/model/vehicle_blue/odometry
/model/vehicle_blue/tf
/stats
/world/visualize_lidar_world/clock
/world/visualize_lidar_world/dynamic_pose/info
/world/visualize_lidar_world/pose/info
/world/visualize_lidar_world/scene/deletion
/world/visualize_lidar_world/scene/info
/world/visualize_lidar_world/state
/world/visualize_lidar_world/stats

由于您尚未启动 ROS 2 节点,因此“ros2 主题列表”的输出应该不包含任何机器人主题:

ros2 topic list

Which should show:

/parameter_events
/rosout

2 配置 ROS 2

为了能够将我们的模拟与 ROS 2 进行通信,您需要使用一个名为“ros_gz_bridge”的包。 此包提供了一个网络桥,可实现 ROS 2 和 Gazebo Transport 之间的消息交换。 您可以通过键入以下内容来安装此包:

sudo apt-get install ros-rolling-ros-ign-bridge

此时,您已准备好启动从 ROS 到 Gazebo 的桥梁。 具体来说,您将为主题“/model/vehicle_blue/cmd_vel”创建一个桥梁:

source /opt/ros/rolling/setup.bash
ros2 run ros_gz_bridge parameter_bridge /model/vehicle_blue/cmd_vel@geometry_msgs/msg/Twist]ignition.msgs.Twist

有关“ros_gz_bridge”的更多详细信息,请查看此“README <https://github.com/gazebosim/ros_gz/tree/ros2/ros_gz_bridge>” 。

一旦桥梁运行,机器人就能够遵循您的电机命令。 有两个选项:

  • 使用“ros2 topic pub”向主题发送命令

ros2 topic pub /model/vehicle_blue/cmd_vel geometry_msgs/Twist "linear: { x: 0.1 }"
  • teleop_twist_keyboard 包。此节点从键盘获取按键并将其发布为 Twist 消息。您可以输入以下命令安装它:

sudo apt-get install ros-rolling-teleop-twist-keyboard

teleop_twist_keyboard 发布 Twist 消息的默认主题是 /cmd_vel,但您可以重新映射此 主题以使用桥接中使用的主题:

source /opt/ros/rolling/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r /cmd_vel:=/model/vehicle_blue/cmd_vel

Which will show:

This node takes keypresses from the keyboard and publishes them
as Twist messages. It works best with a US keyboard layout.
---------------------------
Moving around:
   u    i    o
   j    k    l
   m    ,    .

For Holonomic mode (strafing), hold down the shift key:
---------------------------
   U    I    O
   J    K    L
   M    <    >

t : up (+z)
b : down (-z)

anything else : stop

q/z : increase/decrease max speeds by 10%
w/x : increase/decrease only linear speed by 10%
e/c : increase/decrease only angular speed by 10%

CTRL-C to quit

currently:      speed 0.5       turn 1.0

3 在 ROS 2 中可视化激光雷达数据

差速驱动机器人有一个激光雷达。 要将 Gazebo 生成的数据发送到 ROS 2,您需要启动另一个桥接器。 在这种情况下,来自激光雷达的数据在 Gazebo Transport 主题“/lidar2”中提供,您将在桥接器中重新映射该主题。 此主题将在主题“/lidar_scan”下可用:

source /opt/ros/rolling/setup.bash
ros2 run ros_gz_bridge parameter_bridge /lidar2@sensor_msgs/msg/LaserScan[ignition.msgs.LaserScan --ros-args -r /lidar2:=/laser_scan

要在 ROS 2 中可视化来自激光雷达的数据,您可以使用 Rviz2:

source /opt/ros/rolling/setup.bash
rviz2

然后需要配置``固定框架``:

../../../../_images/fixed_frame.png

然后单击“添加”按钮以添加可视化激光雷达的显示:

../../../../_images/add_lidar.png

现在您应该可以在 Rviz2 中看到来自激光雷达的数据:

../../../../_images/rviz2.png

摘要

在本教程中,您使用 Gazebo 启动了机器人模拟,启动了带有执行器和传感器的桥梁,可视化了来自传感器的数据,并移动了差速驱动机器人。