19、TurtleBot3使用指南:可视化、主题控制与仿真

TurtleBot3使用指南:可视化、主题控制与仿真

1. TurtleBot3可视化

若要在RViz上可视化TurtleBot3的状态,需先将3D模型设置为Burger。若使用的是TurtleBot3 Waffle或Waffle Pi,则需将 TURTLEBOT3_MODEL 参数设置为 waffle waffle_pi 。操作步骤如下:
1. 设置3D模型:

$ export TURTLEBOT3_MODEL=burger
  1. 启动远程启动文件:
$ roslaunch turtlebot3_bringup turtlebot3_remote.launch
  1. 运行RViz:
$ rosrun rviz rviz -d `rospack find turtlebot3_description`/rviz/model.rviz

执行RViz后,TurtleBot3 Burger的3D模型将显示在RGB坐标原点,同时显示机器人各关节的tf信息。360度LDS传感器的距离数据会以红点形式显示在机器人周围。

为了方便操作TurtleBot3,可使用SSH从远程PC远程访问TurtleBot3 SBC。具体步骤如下:
1. 安装SSH应用:

$ sudo apt-get install ssh
  1. 连接到远程PC:
$ ssh username @ ip address of the remote PC

例如,连接到TurtleBot3 SBC的命令为:

$ ssh turtlebot@192.168.7.200

对于Raspberry Pi(TurtleBot3 Burger和Waffle Pi),由于Ubuntu MATE 16.04.x和Raspbian的SSH服务器默认是禁用的,若要启用SSH,可参考以下文档:
- https://www.raspberrypi.org/documentation/remote-access/ssh/
- https://ubuntu-mate.org/raspberry-pi/

2. TurtleBot3主题

若仅在远程PC上运行 roscore ,未运行其他节点,执行 rostopic list 命令将返回 /rosout /rosout_agg 。要运行TurtleBot3,需在TurtleBot3 SBC的终端窗口中运行 turtlebot3_robot.launch 文件:

$ roslaunch turtlebot3_bringup turtlebot3_robot.launch --screen

执行该文件后, turtlebot3_core 节点和 turtlebot3_lds 节点将运行,可接收各节点发布的消息,如关节状态、执行器和IMU等主题。执行 rostopic list 命令可验证各种主题的发布和订阅情况:

$ rostopic list
/cmd_vel
/cmd_vel_rc100
/diagnostics
/imu
/joint_states
/odom
/rosout
/rosout_agg
/rpms
/scan
/sensor_state
/tf

此外,在远程PC上启动 turtlebot3_teleop_key.launch 文件以实现TurtleBot3的远程控制:

$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch --screen

若要查看节点和主题的详细信息,可运行 rqt_graph

$ rqt_graph
2.1 订阅主题

TurtleBot3的主题可分为订阅主题和发布主题。以下是TurtleBot3的订阅主题:
| 主题名称 | 格式 | 功能 |
| — | — | — |
| motor_power | std_msgs/Bool | Dynamixel扭矩开/关 |
| reset | std_msgs/Empty | 重置里程计和IMU数据 |
| sound | turtlebot3_msgs/Sound | 输出蜂鸣声 |
| cmd_vel | geometry_msgs/Twist | 控制机器人的平移和旋转速度,单位为m/s和rad/s(实际机器人控制) |

使用订阅主题控制机器人的示例如下:
- 停止电机:

$ rostopic pub /motor_power std_msgs/Bool "data: 0"
  • 控制TurtleBot3的速度:
$ rostopic pub /cmd_vel geometry_msgs/Twist "linear:
  x: 0.02
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0"

x 值为0.02时,TurtleBot3将沿正x轴方向以0.02 m/s的速度前进。当 z 值为1.0时,TurtleBot3将以1.0 rad/s的速度逆时针旋转:

$ rostopic pub /cmd_vel geometry_msgs/Twist "linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 1.0"
2.2 发布主题

TurtleBot3发布的主题包括诊断、调试和传感器相关主题,如 joint_states sensor_state odom version_info tf 等。以下是部分发布主题的详细信息:
| 主题名称 | 格式 | 功能 |
| — | — | — |
| sensor_state | turtlebot3_msgs/SensorState | 包含TurtleBot3上安装的传感器的值 |
| battery_state | sensor_msgs/BatteryState | 包含电池电压和状态 |
| scan | sensor_msgs/LaserScan | 确认TurtleBot3上安装的LiDAR的扫描值 |
| imu | sensor_msgs/Imu | 基于加速度和陀螺仪传感器包含机器人的姿态信息 |
| odom | nav_msgs/Odometry | 基于编码器和IMU包含TurtleBot3的里程计信息 |
| tf | tf2_msgs/TFMessage | 包含坐标变换信息,如 base_footprint odom 之间的变换 |
| joint_states | sensor_msgs/JointState | 检查车轮作为关节时的位置(m)、速度(m/s)和力(N·m) |
| diagnostics | diagnostic_msgs/DiagnosticArray | 包含自我诊断信息 |
| version_info | turtlebot3_msgs/VersionInfo | 包含TurtleBot3的硬件、固件和软件信息 |
| cmd_vel_rc100 | geometry_msgs/Twist | 当连接基于蓝牙的控制器RC100时,用于控制移动机器人的速度和角速度 |

2.3 使用发布主题验证机器人状态

可通过订阅发布主题来验证机器人的当前状态:
- 获取 sensor_state 主题信息:

$ rostopic echo /sensor_state
stamp: 
  secs: 1500378811
  nsecs: 475322065
bumper: 0
cliff: 0
button: 0
left_encoder: 35070
right_encoder: 108553
battery: 12.0799999237
---
  • 获取 odom 主题信息:
$ rostopic echo /odom 
header: 
  seq: 30
  stamp: 
    secs: 1500379033
    nsecs: 274328964
  frame_id: odom
child_frame_id: ''
pose: 
  pose: 
    position: 
      x: 3.55720114708
      y: 0.655082702637
      z: 0.0
    orientation: 
      x: 0.0
      y: 0.0
      z: 0.113450162113
      w: 0.993543684483
  covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
0.0]
twist: 
  twist: 
    linear: 
      x: 0.0
      y: 0.0
      z: 0.0
    angular: 
      x: 0.0
      y: 0.0
      z: -0.00472585950047
  covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
0.0]
---
  • 获取 tf 主题信息:
$ rostopic echo /tf
transforms: 
  - 
    header: 
      seq: 0
      stamp: 
        secs: 1500379130
        nsecs: 727869913
      frame_id: odom
    child_frame_id: base_footprint
    transform: 
      translation: 
        x: 3.55720019341
        y: 0.655082404613
        z: 0.0
      rotation: 
        x: 0.0
        y: 0.0
        z: 0.112961538136
        w: 0.993599355221
---

也可使用 rqt 中的 tf_tree 插件在GUI环境中可视化 tf 信息:

$ rosrun rqt_tf_tree rqt_tf_tree
3. 使用RViz进行TurtleBot3仿真

TurtleBot3支持在仿真环境中使用虚拟机器人进行编程和开发,可使用3D可视化工具RViz或3D机器人模拟器Gazebo。

3.1 启动虚拟机器人

若要启动虚拟机器人,需执行 turtlebot3_fake 包中的 turtlebot3_fake.launch 文件:

$ export TURTLEBOT3_MODEL=burger
$ roslaunch turtlebot3_fake turtlebot3_fake.launch

上述命令将加载 turtlebot3_description 包中的3D建模文件,执行 turtlebot3_fake_node (发布假主题,模拟实际机器人的发布)和 robot_state_publisher 节点(将每个车轮的变换信息发布到 tf 主题)。但在RViz中无法使用传感器信息,需使用基于物理引擎的3D模拟器Gazebo。

要在RViz上可视化TurtleBot3,需运行RViz,选择 [Global Options] → [fixed frame] /odom ,点击窗口左下角的 Add 按钮添加 RobotModel ,将显示从 turtlebot3_fake.launch 加载的3D模型文件。

运行 turtlebot3_teleop 包中的 turtlebot3_teleop_key.launch 文件,可通过键盘远程操作机器人:

$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

在运行 turtlebot3_teleop_key.launch 文件的终端窗口中,可使用以下按键控制机器人:
- w 键:前进(+0.01步长,单位:m/sec)
- x 键:后退(-0.01步长,单位:m/sec)
- a 键:逆时针旋转(+0.1步长,单位:rad/sec)
- d 键:顺时针旋转(-0.1步长,单位:rad/sec)
- 空格键或 s 键:将平移和旋转速度重置为0
- Ctrl + c :终止节点

3.2 里程计和TF

练习驱动虚拟机器人后,可检查其他主题的值。例如, turtlebot3_fake_node 接收速度命令生成里程计信息,通过主题发布 odometry joint_state tf ,可在RViz中可视化TurtleBot3的运动。

要验证里程计信息的生成和发布情况,可在RViz中可视化里程计信息。点击RViz左下角的 Add 按钮,选择 By Topic 标签,添加 Odometry ,屏幕上将显示红色箭头表示TurtleBot的前进方向的里程计信息。取消勾选 Odometry 选项下的 Covariance ,调整 Shaft Head 的大小。

移动虚拟TurtleBot3后,屏幕上将显示红色箭头表示机器人的轨迹,这是机器人当前位置的基本信息。

tf 主题包含TurtleBot3组件的相对坐标信息,可使用 rostopic 命令验证,也可在RViz中可视化。点击RViz左下角的 Add 按钮,选择 TF ,将显示 odom base_footprint imu_link wheel_left_link wheel_right_link 等信息。移动虚拟TurtleBot3时,可看到 wheel_left_link wheel_right_link 旋转。

运行 rqt_tf_tree 命令,可看到TurtleBot3组件的相对变换:

$ rosrun rqt_tf_tree rqt_tf_tree
4. 使用Gazebo进行TurtleBot3仿真
4.1 Gazebo模拟器介绍

Gazebo是一款3D模拟器,为机器人开发提供所需的机器人、传感器和环境模型,并通过其物理引擎实现逼真的仿真。它具有以下特点:
- 动力学仿真 :早期仅支持ODE(Open Dynamics Engine),从3.0版本开始,支持Bullet、Simbody和DART等多种物理引擎,以满足不同用户的需求。
- 3D图形 :使用常用于游戏的OGRE(Open - source Graphics Rendering Engines),能在屏幕上逼真地绘制机器人模型、光线、阴影和纹理。
- 传感器和噪声仿真 :支持激光测距仪(LRF)、2D/3D相机、深度相机、接触传感器、力 - 扭矩传感器等多种传感器,并能为传感器数据添加类似实际环境的噪声。
- 插件 :提供API,允许用户以插件形式创建机器人、传感器和环境控制。
- 机器人模型 :以SDF(Gazebo模型文件)形式支持PR2、Pioneer2 DX、iRobot Create和TurtleBot等机器人,用户还可通过SDF文件添加自己的机器人。
- TCP/IP数据传输 :可在远程服务器上运行仿真,使用基于套接字的消息传递Google’s Protobufs。
- 云仿真 :提供CloudSim云仿真环境,可用于Amazon、Softlayer和OpenStack等云环境。
- 命令行工具 :支持GUI和CUI工具,用于验证和控制仿真状态。

Gazebo的最新版本是8.0,本书使用的ROS Kinetic Kame默认采用该版本。若按照“3.1 ROS安装”的说明安装了ROS,则无需额外安装即可使用Gazebo。运行Gazebo的命令如下:

$ gazebo
4.2 启动虚拟机器人

要在Gazebo模拟器上运行TurtleBot3,需安装相关依赖包。连接Gazebo和ROS的 gazebo_ros_pkgs 元包以及TurtleBot3的3D仿真包 turtlebot3_gazebo 已在之前安装。

设置3D模型文件为Burger、Waffle或Waffle Pi,以下示例以Waffle为例,可获取相机信息:

$ export TURTLEBOT3_MODEL=waffle

若将上述命令写入 ~/.bashrc 文件,则每次打开新终端窗口时无需重新设置模型。

运行以下命令启动虚拟机器人:

$ roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch

该命令将同时执行 gazebo gazebo_gui mobile_base_nodelet_manager robot_state_publisher spawn_mobile_base 节点,TurtleBot3 Waffle将出现在Gazebo屏幕上。由于Gazebo使用物理引擎和图形效果,会占用大量CPU、GPU和RAM资源,根据PC硬件规格,加载应用可能需要较长时间。

在上述示例中,Gazebo仅加载了机器人。若要进行实际仿真,用户可指定环境或加载Gazebo提供的环境模型。可通过点击屏幕顶部的 Insert 按钮并选择文件来添加环境模型,其中包含各种机器人模型、对象和环境模型,可按需添加。

关闭当前活动的Gazebo屏幕,可点击屏幕左上角的 X 按钮或在启动Gazebo的终端窗口中输入 Ctrl + c

运行以下命令加载 turtlebot3_world.launch 文件,该文件将加载已创建的 turtlebot3.world 环境模型:

$ roslaunch turtlebot3_gazebo turtlebot3_world.launch

运行以下命令通过键盘控制Gazebo环境中的虚拟TurtleBot3:

$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

Gazebo与上一节的RViz仿真看起来相似,但它不仅能模拟虚拟机器人的外观,还能虚拟检查碰撞、计算位置,并使用IMU传感器和相机。运行以下命令,虚拟TurtleBot3将在加载的环境中随机移动并避开障碍物:

$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_gazebo turtlebot3_simulation.launch

此外,运行以下命令启动RViz,它可以可视化在Gazebo中运行的机器人的位置、距离传感器数据和相机图像,该仿真输出几乎与在类似Gazebo设计的环境模型中操作实际机器人相同:

$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch

总结

本文详细介绍了TurtleBot3的可视化、主题控制以及使用RViz和Gazebo进行仿真的方法。通过RViz可实现TurtleBot3状态的可视化和简单的虚拟仿真,而Gazebo则提供了更逼真的仿真环境,包括动力学仿真、传感器仿真等。以下是操作步骤的流程图:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px

    A([开始]):::startend --> B(选择仿真方式):::decision
    B -->|RViz| C(设置3D模型):::process
    C --> D(启动远程启动文件):::process
    D --> E(运行RViz):::process
    E --> F(启动虚拟机器人):::process
    F --> G(控制虚拟机器人):::process
    G --> H(验证里程计和TF信息):::process
    B -->|Gazebo| I(安装依赖包):::process
    I --> J(设置3D模型):::process
    J --> K(启动虚拟机器人到空环境):::process
    K --> L(选择环境模型):::process
    L --> M(加载环境模型):::process
    M --> N(控制虚拟机器人):::process
    N --> O(可视化仿真结果):::process
    H --> P([结束]):::startend
    O --> P

在实际应用中,可根据具体需求选择合适的仿真方式。RViz适合快速验证和简单测试,而Gazebo更适合复杂场景和逼真仿真。同时,通过订阅和发布主题,可实现对TurtleBot3的灵活控制和状态监测。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值