ROS2基本操作指令:从“节点”到“机器人”的完整工具箱

引言

ROS2(Robot Operating System 2)是目前机器人开发领域最流行的框架。它不是一个传统意义上的操作系统,而是一个分布式通信框架------让机器人的各个部件(传感器、控制器、规划器)能够互相"说话"。

在ROS2中,一切都是通过命令行工具 来观察和操作的。ros2 命令是进入ROS2世界的入口。它就像一把"瑞士军刀"------集成了查看节点、发布话题、调用服务、录制数据等所有功能。

如果说Linux命令行是"操作系统的遥控器",那么ROS2命令行就是 "机器人的听诊器" ------它能让你听到机器人的心跳(节点)、看到它在说什么(话题)、命令它做什么(服务),甚至记录它的所有"生命体征"(rosbag)。


前置知识

在学习ROS2命令之前,你需要了解几个核心概念:

  1. 节点(Node) :ROS2中最基本的执行单元,相当于一个独立的进程。每个节点负责一项具体功能(如读摄像头、控制电机)。

  2. 话题(Topic) :节点之间异步 通信的通道。一个节点发布消息到话题,另一个节点订阅该话题接收消息。适用于持续数据流(如传感器数据)。

  3. 服务(Service) :节点之间同步 通信的机制。客户端发送请求,服务端返回响应。适用于偶发请求(如查询状态、执行一次性任务)。

  4. 动作(Action) :带反馈 的长时间任务。客户端发送目标,服务端在执行过程中持续返回反馈,最后返回结果。适用于需要中途取消实时反馈的任务(如导航到某个位置)。

  5. 参数(Parameter) :节点的配置项,可以在运行时动态修改。

环境准备:在使用ROS2命令之前,需要先配置环境变量:

bash

复制代码
source /opt/ros/humble/setup.bash   # 以Humble版本为例

建议将这行命令添加到 ~/.bashrc 文件中,这样每次打开终端都会自动配置。

环境安装建议使用鱼香ros 鱼香ros链接https://fishros.com/d2lros2/#/humble/chapt1/get_started/3.%E5%8A%A8%E6%89%8B%E5%AE%89%E8%A3%85ROS2


第一章:ros2 命令总览------一切从这里开始

bash

复制代码
ros2 --help        # 查看所有可用的子命令[reference:67]
ros2 <command> -h  # 查看某个子命令的详细用法[reference:68]

ros2 是ROS2命令行工具的入口。所有子命令都遵循 ros2 <command> <verb> [args] 的格式。

常用子命令一览

子命令 用途
node 查看和管理节点
topic 查看和操作话题
service 查看和调用服务
action 查看和发送动作目标
param 查看和修改节点参数
pkg 查看ROS2包信息
run 运行节点
launch 启动launch文件
bag 录制和回放数据
doctor 检查ROS2系统健康状态

第二章:节点操作------看看"谁在跑"

2.1 ros2 node list ------ 查看所有正在运行的节点

bash

复制代码
ros2 node list

功能:列出当前ROS2系统中所有活跃的节点。当你第一次使用这个命令时,ROS2守护进程(daemon)会自动启动。

2.2 ros2 node info ------ 查看节点的详细信息

bash

复制代码
ros2 node info /turtlesim

功能:显示某个节点的详细信息,包括它订阅了哪些话题、发布了哪些话题、提供了哪些服务等。

2.3 ros2 run ------ 启动一个节点

bash

复制代码
ros2 run turtlesim turtlesim_node    # 运行 turtlesim 包中的 turtlesim_node
ros2 run turtlesim turtle_teleop_key # 运行键盘控制节点

功能:从指定包中运行一个可执行节点。


第三章:话题操作------监听和发布"对话"

3.1 ros2 topic list ------ 查看所有话题

bash

复制代码
ros2 topic list          # 列出所有话题
ros2 topic list -t       # 列出话题及其消息类型[reference:76]

功能:列出当前系统中所有活跃的话题。

3.2 ros2 topic echo ------ "偷听"话题上的消息

bash

复制代码
ros2 topic echo /turtle1/pose

功能:实时显示某个话题上发布的所有消息。这是调试时最常用的命令之一------可以"看到"传感器数据在说什么。

3.3 ros2 topic pub ------ 手动发布消息到话题

bash

复制代码
ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0}, angular: {z: 1.0}}"

功能:手动向话题发布一条消息。常用于测试,比如"假装"给机器人发送速度指令。

3.4 ros2 topic hz ------ 查看消息发布频率

bash

复制代码
ros2 topic hz /turtle1/pose

功能:显示话题上消息的发布频率(Hz)。用于检查传感器数据是否正常。

3.5 ros2 topic info ------ 查看话题详情

bash

复制代码
ros2 topic info /turtle1/cmd_vel

功能:显示话题的详细信息,包括发布者和订阅者的数量。


第四章:服务操作------发送"请求"获取"响应"

4.1 ros2 service list ------ 查看所有服务

bash

复制代码
ros2 service list

功能:列出当前系统中所有可用的服务。

4.2 ros2 service type ------ 查看服务的类型

bash

复制代码
ros2 service type /clear

功能:查看某个服务的消息类型。

4.3 ros2 service call ------ 调用服务

bash

复制代码
ros2 service call /clear std_srvs/srv/Empty

功能:调用一个服务,发送请求并接收响应。例如,清空turtlesim的轨迹。

4.4 ros2 interface show ------ 查看服务/消息的结构

bash

复制代码
ros2 interface show turtlesim/srv/TeleportAbsolute

功能:显示服务或消息的详细结构,帮助你知道调用时需要传递什么参数。


第五章:动作操作------执行"长时间任务"

动作(Action)用于需要持续反馈的长时间任务,如导航到某个位置。

5.1 ros2 action list ------ 查看所有动作

bash

复制代码
ros2 action list

功能:列出当前系统中所有可用的动作。

5.2 ros2 action info ------ 查看动作详情

bash

复制代码
ros2 action info /turtle1/rotate_absolute

功能:显示某个动作的详细信息(服务器、客户端、类型等)。

5.3 ros2 action send_goal ------ 发送动作目标

bash

复制代码
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}"

功能:向动作服务器发送一个目标。执行过程中会显示反馈,最后显示结果。


第六章:参数操作------动态调整节点配置

6.1 ros2 param list ------ 查看节点的所有参数

bash

复制代码
ros2 param list

功能:列出某个节点的所有可配置参数。

6.2 ros2 param get ------ 查看参数的值

bash

复制代码
ros2 param get /turtlesim background_r

功能:获取某个参数的当前值和类型。

6.3 ros2 param set ------ 修改参数的值

bash

复制代码
ros2 param set /turtlesim background_r 255

功能:在运行时修改节点的参数值。修改后立即生效,无需重启节点。

6.4 ros2 param dump ------ 导出参数到文件

bash

复制代码
ros2 param dump /turtlesim

功能 :将节点的所有参数保存为 .yaml 文件。这样可以方便地备份或复用配置。

6.5 ros2 param load ------ 从文件加载参数

bash

复制代码
ros2 param load /turtlesim ./turtlesim.yaml

功能 :从 .yaml 文件加载参数到节点。


第七章:数据录制与回放(rosbag)------"时间机器"

7.1 ros2 bag record ------ 录制话题数据

bash

复制代码
ros2 bag record /turtle1/cmd_vel /turtle1/pose

功能:录制指定话题上发布的所有数据。相当于给机器人的"通信"录像。

7.2 ros2 bag play ------ 回放录制的数据

bash

复制代码
ros2 bag play rosbag2_2025_01_01-12_00_00_0.db3

功能:回放之前录制的数据,重现当时的场景。这对于调试和算法验证非常有用。


第八章:其他实用工具

8.1 ros2 pkg ------ 查看包信息

bash

复制代码
ros2 pkg list              # 列出所有已安装的ROS2包[reference:100]
ros2 pkg executables turtlesim   # 查看某个包中的所有可执行文件[reference:101]

8.2 ros2 launch ------ 一次性启动多个节点

bash

复制代码
ros2 launch turtlesim multisim.launch.py

功能:通过launch文件一次性启动多个节点。launch文件用Python编写,可以配置节点参数、设置依赖关系等。

8.3 ros2 doctor ------ 系统健康检查

bash

复制代码
ros2 doctor          # 检查ROS2系统是否有问题[reference:104]
ros2 doctor -r       # 生成完整报告[reference:105]

功能:检查ROS2系统的配置和运行状态,帮助诊断网络、包版本等问题。

8.4 ros2 daemon ------ 管理ROS2守护进程

bash

复制代码
ros2 daemon stop     # 停止ROS2守护进程[reference:108]
ros2 daemon --help   # 查看更多选项[reference:109]

功能:ROS2守护进程在后台维护系统信息,加快命令响应速度。通常不需要手动操作。


ROS2命令速查表

操作 命令
查看所有节点 ros2 node list
运行一个节点 ros2 run <pkg> <node>
查看所有话题 ros2 topic list
监听话题消息 ros2 topic echo <topic>
发布话题消息 ros2 topic pub <topic> <msg_type> <data>
查看所有服务 ros2 service list
调用服务 ros2 service call <service> <srv_type> <data>
查看所有动作 ros2 action list
发送动作目标 ros2 action send_goal <action> <action_type> <data>
查看参数 ros2 param get <node> <param>
修改参数 ros2 param set <node> <param> <value>
录制数据 ros2 bag record <topic1> <topic2>
回放数据 ros2 bag play <bag_file>
启动launch文件 ros2 launch <pkg> <launch_file>
系统健康检查 ros2 doctor

总结

ROS2命令行工具是进入机器人世界的"窗口"。通过它,你可以:

  1. 观察:看到系统中有哪些节点、话题、服务在运行。

  2. 调试:实时查看话题上的消息、调用服务测试功能。

  3. 控制:手动发布指令、修改参数、发送动作目标。

  4. 记录:录制和回放数据,重现实验场景。