TurtleBot3使用指南:可视化、主题控制与仿真
1. TurtleBot3可视化
若要在RViz上可视化TurtleBot3的状态,需先将3D模型设置为Burger。若使用的是TurtleBot3 Waffle或Waffle Pi,则需将 TURTLEBOT3_MODEL 参数设置为 waffle 或 waffle_pi 。操作步骤如下:
1. 设置3D模型:
$ export TURTLEBOT3_MODEL=burger
- 启动远程启动文件:
$ roslaunch turtlebot3_bringup turtlebot3_remote.launch
- 运行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
- 连接到远程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的灵活控制和状态监测。
超级会员免费看

被折叠的 条评论
为什么被折叠?



