手动启动多个 ROS2 节点需要打开多个终端,逐个运行 ros2 run。Launch 文件将节点启动、参数配置、生命周期管理集中到一个 Python 脚本中,一键启动整个系统。
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
# 节点1:小乌龟仿真器
Node(
package='turtlesim',
executable='turtlesim_node',
name='sim',
output='screen'
),
# 节点2:键盘遥控
Node(
package='turtlesim',
executable='turtle_teleop_key',
name='teleop',
prefix='xterm -e', # 在新终端窗口打开
output='screen'
),
])
# 方式1:直接运行 Python 文件
ros2 launch <package> <launch_file>
# 方式2:在包外运行
ros2 launch path/to/my_launch.py
RViz2 是 ROS2 的标准 3D 可视化工具,核心功能包括:
| 显示类型 | 对应话题 | 用途 |
|---|---|---|
| RobotModel | /robot_description |
显示机器人 URDF 模型 |
| TF | /tf |
显示坐标帧和变换关系 |
| LaserScan | /scan |
显示2D激光雷达数据 |
| PointCloud2 | /points |
显示3D点云 |
| Image | /camera/image |
显示相机图像 |
| Path | /plan |
显示规划路径 |
| Odometry | /odom |
显示里程计轨迹 |
# 启动 RViz2
rviz2
# 配合 robot_state_publisher 显示机器人模型
ros2 launch urdf_tutorial display.launch.py model:=path/to/robot.urdf
map 或 odom)Bag 是 ROS2 的数据记录格式,相当于机器人系统的”行车记录仪”——录制传感器数据后,可离线反复回放和调试算法。
# 录制指定话题
ros2 bag record -o my_experiment /turtle1/pose /turtle1/cmd_vel
# 录制所有话题
ros2 bag record -a -o full_recording
# 查看 Bag 文件信息
ros2 bag info my_experiment
# 回放 Bag 数据(消息带上原始时间戳)
ros2 bag play my_experiment
# 回放并倍速(2x)
ros2 bag play my_experiment --rate 2.0
在 ROS2 包中定义 .msg 文件:
# MySensor.msg
std_msgs/Header header # 时间戳和 frame_id
int32 sensor_id
string sensor_name
float64[] readings
bool is_calibrated
<!-- package.xml -->
<build_depend>rosidl_default_generators</build_depend>
<exec_depend>rosidl_default_runtime</exec_depend>
# CMakeLists.txt
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/MySensor.msg"
)
colcon build --packages-select my_package
source install/setup.bash
# 查看生成的消息
ros2 interface show my_package/msg/MySensor
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Launch 文件中节点启动后立刻退出 | 未设置 output='screen' 或节点缺少依赖 |
添加 output='screen' 查看日志,检查依赖安装 |
| RViz2 中不显示机器人模型 | robot_description 参数未设置 |
ros2 param get /rviz2 robot_description 确认 |
| Bag 回放话题名不匹配 | 录制和播放时话题名不一致 | ros2 bag play xxx --remap /old_topic:=/new_topic |
| 自定义消息编译失败 | 缺少 rosidl 依赖 | sudo apt install ros-humble-rosidl-default-generators |
本周掌握了 ROS2 中级工具链的使用:
这些工具链构成了实际机器人项目开发的标准工程环境。