时间:2026-03-17 17:12
人气:
作者:admin
随着机器人技术的飞速发展,ROS(机器人操作系统)已经从学术研究的实验工具,蜕变为支撑自动驾驶、人形机器人、数字化工厂的工业级平台。2026年的今天,ROS 2已成为主流选择,而ROS 1正在逐步退出历史舞台。
核心原因:
本文将从零基础入门的角度,总结ROS 2的常用命令,重点讲解话题和消息内容的查看方法,并与ROS 1进行对比,帮助读者快速上手。
| 维度 | ROS 1 | ROS 2 | 核心突破 |
|---|---|---|---|
| 通信架构 | 集中式(依赖Master节点) | 分布式(基于DDS中间件) | 无单点故障,节点间自动发现 |
| 实时性 | 不支持硬实时 | 支持硬实时(QoS策略) | 可进入高精度数控和航天领域 |
| 跨平台 | 主要是Linux | Linux、Windows、macOS、RTOS(QNX) | 真正实现多平台统一 |
| 安全性 | 无内置安全 | SROS 2(集成TLS/加密认证) | 达到金融和军事级通信安全 |
| 数据传输 | 序列化开销大 | 零拷贝(Zero-copy)/共享内存 | 支持4K视频、高密度点云无损传输 |
| 通信方式 | ROS 1 | ROS 2 | 命令变化 |
|---|---|---|---|
| 节点管理 | rosnode |
ros2 node |
统一前缀ros2 |
| 话题操作 | rostopic |
ros2 topic |
参数风格略有不同 |
| 服务操作 | rosservice |
ros2 service |
返回值格式变化 |
| 消息查看 | rosmsg |
ros2 interface |
功能整合 |
| 参数操作 | rosparam |
ros2 param |
更规范的参数管理 |
| 数据记录 | rosbag |
ros2 bag |
支持更高效的存储格式 |
| 方面 | ROS 1 | ROS 2 | 备注 |
|---|---|---|---|
| 构建工具 | catkin_make |
colcon build |
更清晰的输出,支持并行编译 |
| 启动文件 | .launch (XML) |
.launch.py (Python为主) |
Python启动文件更灵活 |
| 编程接口 | roscpp/rospy |
rclcpp/rclpy |
API重新设计,更现代化 |
| 质量服务 | 无 | QoS策略 | 可配置可靠性、历史记录等 |
根据官方支持周期和社区活跃度,推荐如下:
| Ubuntu版本 | 推荐ROS 2版本 | 支持状态 | 适用场景 |
|---|---|---|---|
| Ubuntu 22.04 | Humble Hawksbill | 支持至2027年5月 | 企业新项目首选,最稳定 |
| Ubuntu 22.04 | Iron Irwini | 支持至2024年11月 | 前沿开发,追求新特性 |
| Ubuntu 24.04 | Jazzy Jalisco | 最新LTS | 新硬件、新项目 |
| Ubuntu 20.04 | Foxy Fitzroy | 已终止(2023年) | 不建议新项目使用 |
一句话选型:Ubuntu 22.04 + ROS 2 Humble,这是2026年最稳妥的组合。
# 设置编码(确保系统支持UTF-8)
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
# 添加ROS 2软件源
sudo apt install software-properties-common
sudo add-apt-repository universe
使用"小鱼一键安装"指令,适合初学者快速搭建环境:
wget http://fishros.com/install -O fishros && bash fishros
根据提示选择ROS 2 Humble版本即可。
# 添加ROS 2 GPG密钥
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
# 添加软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 安装ROS 2 Humble桌面完整版
sudo apt update
sudo apt install ros-humble-desktop-full
每次打开终端时,需要source ROS 2环境:
# 添加到~/.bashrc,自动生效
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
# 创建工作空间
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
# 编译所有包
colcon build
# 只编译指定包
colcon build --packages-select my_package
# 编译时忽略测试
colcon build --packages-select my_package --cmake-args -DBUILD_TESTING=0
# 安装依赖(从src目录下查找)
rosdep install -i --from-path src --rosdistro humble -y
# 列出所有运行中的节点
ros2 node list
# 查看节点详细信息
ros2 node info /node_name
# 查看节点参数
ros2 param list
# 列出所有话题
ros2 topic list
ros2 topic list -t # 同时显示消息类型
# 查看话题信息
ros2 topic info /topic_name
# 查看话题发布频率
ros2 topic hz /topic_name
# 实时查看话题数据
ros2 topic echo /topic_name
# 查看话题的消息类型
ros2 topic type /topic_name
# 手动发布话题消息
ros2 topic pub /topic_name msg_type '{"field": value}'
# 列出所有服务
ros2 service list
ros2 service list -t # 同时显示服务类型
# 查看服务类型
ros2 service type /service_name
# 查找指定类型的服务
ros2 service find std_srvs/srv/Empty
# 调用服务
ros2 service call /service_name service_type '{"arg": value}'
# 查看消息类型定义
ros2 interface show geometry_msgs/msg/Twist
# 列出所有消息类型
ros2 interface list
# 查看消息类型包含的字段
ros2 interface proto geometry_msgs/msg/Twist
# 列出参数
ros2 param list
# 获取参数值
ros2 param get /node_name parameter_name
# 设置参数值
ros2 param set /node_name parameter_name value
# 保存参数到文件
ros2 param dump /node_name > params.yaml
# 从文件加载参数
ros2 param load /node_name params.yaml
# 记录所有话题
ros2 bag record -a
# 记录指定话题
ros2 bag record /topic1 /topic2
# 记录到指定目录
ros2 bag record -o my_recording /topic1
# 查看包信息
ros2 bag info my_recording
# 回放数据
ros2 bag play my_recording
# 运行launch文件
ros2 launch package_name launch_file.py
# 查看launch文件的参数
ros2 launch package_name launch_file.py --show-args
这是ROS 2开发中最常用的操作,通过一个完整示例演示。
首先启动一个示例节点(以小乌龟为例):
# 终端1:启动小乌龟仿真器
ros2 run turtlesim turtlesim_node
# 终端2:启动键盘控制节点
ros2 run turtlesim turtle_teleop_key
查看所有话题:
$ ros2 topic list
/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
$ ros2 topic list -t
/parameter_events [rcl_interfaces/msg/ParameterEvent]
/rosout [rcl_interfaces/msg/Log]
/turtle1/cmd_vel [geometry_msgs/msg/Twist]
/turtle1/color_sensor [turtlesim/msg/Color]
/turtle1/pose [turtlesim/msg/Pose]
想看/turtle1/cmd_vel的消息结构:
$ ros2 interface show geometry_msgs/msg/Twist
# This expresses velocity in free space broken into its linear and angular parts.
Vector3 linear # 线速度
float64 x
float64 y
float64 z
Vector3 angular # 角速度
float64 x
float64 y
float64 z
在键盘控制乌龟移动的同时,查看指令话题数据:
$ ros2 topic echo /turtle1/cmd_vel
linear:
x: 2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 1.8
---
linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
---
不需要键盘控制,直接命令行让乌龟转圈:
ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.0}}"
参数说明:
--rate 1:每秒发布1次(如果不加,只发布一次)ros2 run rqt_graph rqt_graph
图形化显示所有节点和话题的连接关系,是理解系统架构的利器。
ros2 run rqt_console rqt_console
实时查看ROS 2日志,支持过滤不同级别的消息(Debug/Info/Warn/Error)。
ros2 run rviz2 rviz2
强大的3D可视化工具,可以显示机器人模型、激光雷达点云、图像等。
# 安装Gazebo
sudo apt install ros-humble-gazebo-ros-pkgs
# 启动仿真环境
ros2 launch gazebo_ros gazebo.launch.py
与ROS 2深度集成的物理仿真环境。
| 操作 | ROS 1命令 | ROS 2命令 |
|---|---|---|
| 编译 | catkin_make |
colcon build |
| 节点列表 | rosnode list |
ros2 node list |
| 话题列表 | rostopic list |
ros2 topic list |
| 查看话题数据 | rostopic echo /topic |
ros2 topic echo /topic |
| 查看消息定义 | rosmsg show |
ros2 interface show |
| 记录数据 | rosbag record -a |
ros2 bag record -a |
| 启动文件 | roslaunch |
ros2 launch |
ROS 2不是ROS 1的简单升级,而是一次彻底的架构重构。它抛弃了Master中心化设计,拥抱工业级DDS中间件,解决了实时性、安全性和跨平台问题。2026年的今天,ROS 2 Humble是入门的唯一选择,掌握本文的命令行工具,你就迈出了ROS 2开发的第一步!
技术深度:关于机器人SLAM完整学习路径,我在《机器人工程师带你入门SLAM》专栏中有从理论到实践的系统讲解,欢迎点击查看了解。