目录


1. 前言:为什么现在开始用ROS 2?

随着机器人技术的飞速发展,ROS(机器人操作系统)已经从学术研究的实验工具,蜕变为支撑自动驾驶、人形机器人、数字化工厂的工业级平台。2026年的今天,ROS 2已成为主流选择,而ROS 1正在逐步退出历史舞台。

核心原因

  • ROS 1 Noetic是最后一个ROS 1版本,已于2025年停止维护,不再有新功能、bug修复和安全更新
  • Ubuntu 20.04也将在2025年EOL,这意味着整个ROS 1生态已进入"养老"阶段
  • ROS 2 Humble支持至2027年,是当前最稳定、社区最活跃的LTS版本
  • 工业界已全面转向ROS 2:特斯拉Optimus、各大自动驾驶公司的底层通信都深受ROS 2启发

本文将从零基础入门的角度,总结ROS 2的常用命令,重点讲解话题和消息内容的查看方法,并与ROS 1进行对比,帮助读者快速上手。


2. ROS 2与ROS 1的核心区别

2.1 架构革命:从Master到DDS

维度 ROS 1 ROS 2 核心突破
通信架构 集中式(依赖Master节点) 分布式(基于DDS中间件) 无单点故障,节点间自动发现
实时性 不支持硬实时 支持硬实时(QoS策略) 可进入高精度数控和航天领域
跨平台 主要是Linux Linux、Windows、macOS、RTOS(QNX) 真正实现多平台统一
安全性 无内置安全 SROS 2(集成TLS/加密认证) 达到金融和军事级通信安全
数据传输 序列化开销大 零拷贝(Zero-copy)/共享内存 支持4K视频、高密度点云无损传输

2.2 通信模型对比

通信方式 ROS 1 ROS 2 命令变化
节点管理 rosnode ros2 node 统一前缀ros2
话题操作 rostopic ros2 topic 参数风格略有不同
服务操作 rosservice ros2 service 返回值格式变化
消息查看 rosmsg ros2 interface 功能整合
参数操作 rosparam ros2 param 更规范的参数管理
数据记录 rosbag ros2 bag 支持更高效的存储格式

2.3 开发体验的变化

方面 ROS 1 ROS 2 备注
构建工具 catkin_make colcon build 更清晰的输出,支持并行编译
启动文件 .launch (XML) .launch.py (Python为主) Python启动文件更灵活
编程接口 roscpp/rospy rclcpp/rclpy API重新设计,更现代化
质量服务 QoS策略 可配置可靠性、历史记录等

2.4 版本选择指南(2026年)

根据官方支持周期和社区活跃度,推荐如下:

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年最稳妥的组合。


3. ROS 2环境安装与配置

3.1 安装前的准备

# 设置编码(确保系统支持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

3.2 一键安装(推荐新手)

使用"小鱼一键安装"指令,适合初学者快速搭建环境:

wget http://fishros.com/install -O fishros && bash fishros

根据提示选择ROS 2 Humble版本即可。

3.3 手动安装步骤

# 添加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

3.4 环境配置

每次打开终端时,需要source ROS 2环境:

# 添加到~/.bashrc,自动生效
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

4. ROS 2常用命令大全

4.1 工作空间与编译

# 创建工作空间
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

4.2 节点管理

# 列出所有运行中的节点
ros2 node list

# 查看节点详细信息
ros2 node info /node_name

# 查看节点参数
ros2 param list

4.3 话题操作

# 列出所有话题
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}'

4.4 服务操作

# 列出所有服务
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}'

4.5 接口查看

# 查看消息类型定义
ros2 interface show geometry_msgs/msg/Twist

# 列出所有消息类型
ros2 interface list

# 查看消息类型包含的字段
ros2 interface proto geometry_msgs/msg/Twist

4.6 参数操作

# 列出参数
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

4.7 数据记录与回放

# 记录所有话题
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

4.8 Launch文件管理

# 运行launch文件
ros2 launch package_name launch_file.py

# 查看launch文件的参数
ros2 launch package_name launch_file.py --show-args

5. 实战:查看话题消息内容

这是ROS 2开发中最常用的操作,通过一个完整示例演示。

5.1 列出所有话题

首先启动一个示例节点(以小乌龟为例):

# 终端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

5.2 查看话题类型

$ 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]

5.3 查看消息定义

想看/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

5.4 实时查看消息数据

在键盘控制乌龟移动的同时,查看指令话题数据:

$ 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
---

5.5 手动发布测试消息

不需要键盘控制,直接命令行让乌龟转圈:

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次(如果不加,只发布一次)
  • 后面是消息类型和JSON格式的数据

6. ROS 2常用工具

6.1 rqt_graph:节点关系可视化

ros2 run rqt_graph rqt_graph

图形化显示所有节点和话题的连接关系,是理解系统架构的利器。

6.2 rqt_console:日志查看

ros2 run rqt_console rqt_console

实时查看ROS 2日志,支持过滤不同级别的消息(Debug/Info/Warn/Error)。

6.3 RViz2:数据可视化

ros2 run rviz2 rviz2

强大的3D可视化工具,可以显示机器人模型、激光雷达点云、图像等。

6.4 Gazebo:仿真环境

# 安装Gazebo
sudo apt install ros-humble-gazebo-ros-pkgs

# 启动仿真环境
ros2 launch gazebo_ros gazebo.launch.py

与ROS 2深度集成的物理仿真环境。


7. 总结:快速上手指南

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

学习路径建议

  1. 环境搭建:Ubuntu 22.04 + ROS 2 Humble
  2. 基础命令:掌握节点、话题、服务的增删改查
  3. 核心概念:理解DDS、QoS、节点生命周期
  4. 编程实践:用rclcpp/rclpy写一个发布订阅程序
  5. 工具使用:熟练使用rqt、RViz2、Gazebo
  6. 项目实战:从简单机器人控制开始,逐步深入SLAM和导航

一句话总结

ROS 2不是ROS 1的简单升级,而是一次彻底的架构重构。它抛弃了Master中心化设计,拥抱工业级DDS中间件,解决了实时性、安全性和跨平台问题。2026年的今天,ROS 2 Humble是入门的唯一选择,掌握本文的命令行工具,你就迈出了ROS 2开发的第一步!


技术深度:关于机器人SLAM完整学习路径,我在《机器人工程师带你入门SLAM》专栏中有从理论到实践的系统讲解,欢迎点击查看了解。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐