手把手做ROS2机器人系统开发(二):ROS2核心命令详解
在上一讲中,我们完成了 Ubuntu 22.04 与 ROS2 Humble 开发环境的搭建。本章节进入实战第一步:系统梳理 ROS2 的核心命令体系。熟练掌握这些命令,是后续编写节点、调试通信、排查问题的基本功。 ROS2 的命令统一以 `ros2` 开头,通过子命令分组管理:daemon、no
手把手做ROS2机器人系统开发(二):ROS2核心命令详解
教程背景
在上一讲中,我们完成了 Ubuntu 22.04 与 ROS2 Humble 开发环境的搭建。本章节进入实战第一步:系统梳理 ROS2 的核心命令体系。熟练掌握这些命令,是后续编写节点、调试通信、排查问题的基本功。
ROS2 的命令统一以 ros2 开头,通过子命令分组管理:daemon、node、pkg、run、topic、service、param、action、launch、bag 等。下面逐一讲解。
一、daemon:守护进程管理
ROS2 daemon 类似于 ROS1 中 master 中心节点的角色,用于缓存图信息、减少节点发现时间。
ros2 daemon -h # 查看帮助
ros2 daemon start # 启动守护进程
ros2 daemon status # 查看状态
ros2 daemon stop # 停止守护进程
二、node:节点管理
节点是 ROS2 中可执行的最小计算单元。
ros2 run demo_nodes_cpp talker # 启动一个测试节点
ros2 node list # 输出节点列表
ros2 node info /talker # 查看节点详细信息
三、pkg:功能包管理
创建功能包(指定包名、编译方式、依赖项、节点名等):
ros2 pkg create RobotDotTest --build-type ament_python --node-name RobotDotTest_node --dependencies rclpy std_msgs sensor_msgs --license Apache-2.0
参数说明:
ros2 pkg create:创建功能包命令RobotDotTest:功能包名称--build-type ament_python:指定编程语言(编译方式)--node-name RobotDotTest_node:节点名称--dependencies rclpy std_msgs sensor_msgs:指定依赖模块。rclpy 是 Python 编程必选;std_msgs 和 sensor_msgs 为常用消息模块,也可不指定、后续手动配置--license Apache-2.0:指定许可证(可选 Apache-2.0、BSD-3-Clause、MIT 等)
其他常用命令:
ros2 pkg list # 查看包列表
ros2 pkg executables turtlesim # 输出指定软件包的可执行文件列表
ros2 pkg prefix turtlesim # 输出包的前缀路径
四、run:运行可执行文件
ros2 run turtlesim turtlesim_node
命令格式:
ros2 run [-h] [--prefix PREFIX] package_name executable_name [argv...]
package_name:软件包名称executable_name:可执行文件名称argv:执行参数
五、topic:话题通信管理
话题是 ROS2 最核心的通信方式(发布/订阅模型)。主要子命令:
bw:显示话题带宽delay:通过 header 时间戳计算消息延迟echo:输出话题信息find:按消息类型查找话题hz:显示话题平均发布频率info:显示话题消息类型、订阅者/发布者数量list:列出当前域内可用话题pub:发布一条话题消息type:打印话题数据类型
常用操作示例:
# 列出话题
ros2 topic list
ros2 topic list -t
# 查看话题信息
ros2 topic info /turtle1/pose
# 查看话题数据类型
ros2 topic type /turtle1/pose
ros2 topic find turtlesim/msg/Pose
# 发布话题消息(--once 单次发送;--rate 1 以 1Hz 循环发送)
ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
# 输出话题数据
ros2 topic echo /turtle1/cmd_vel
ros2 topic echo /control_node/action
# 查看话题发布频率
ros2 topic hz /turtle1/pose
# 查看消息数据结构
ros2 interface show geometry_msgs/msg/Twist
# 打开节点话题图形化界面
rqt_graph
六、security:安全机制管理
ROS2 内置安全机制(SROS2),主要子命令:
create_enclave:创建 Enclavecreate_key:创建密钥create_keystore:创建密钥库create_permission:创建许可generate_artifacts:从身份和策略文件生成密钥与许可文件generate_policy:根据 ROS 图数据生成 XML 策略文件list_enclaves:列出密钥库中的 Enclaveslist_keys:已废弃,改用list_enclaves
七、service:服务通信管理
服务采用"呼叫→应答"模型,适合请求-响应类交互。
ros2 service list # 列出所有服务
ros2 service list -t # 列出服务及其类型
ros2 service type /clear # 查看服务类型
ros2 service find std_srvs/srv/Empty # 按类型查找服务
ros2 interface show std_srvs/srv/Empty.srv # 查看服务接口定义
ros2 interface show turtlesim/srv/Spawn
# 调用服务
ros2 service call /clear std_srvs/srv/Empty
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: 'turtle2'}"
八、param:参数管理
ros2 param list # 查看参数列表
ros2 param get /turtlesim background_g # 获取参数
ros2 param set /turtlesim background_r 150 # 设置参数
ros2 param dump /turtlesim # 参数存储到文件
ros2 param load /turtlesim ./turtlesim.yaml # 从文件加载参数
# 节点启动时加载参数
ros2 run turtlesim turtlesim_node --ros-args --params-file ./turtlesim.yaml
九、action:动作通信管理
Action 适用于需要长时间执行且可反馈进度的任务(如机器人移动到某位置)。
ros2 node info /turtlesim # 查看节点信息(含 action server/client)
ros2 action list # 查询操作列表
ros2 action list -t # 带类型显示
ros2 action info /turtle1/rotate_absolute # 查看动作信息
ros2 interface show turtlesim/action/RotateAbsolute # 查看动作接口
# 发送目标动作(--feedback 显示反馈)
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}"
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: -1.57}" --feedback
十、消息日志
ROS2 日志消息等级从高到低:
Fatal:系统将终止以保护自身免受损害Error:不一定会损坏系统,但会阻止其正常运行的重大问题Warn:可能代表更深层次问题的意外活动,但不会完全损害功能Info:事件和状态更新,用于直观验证系统按预期运行Debug:系统执行的完整分步过程详情
# 启动日志可视化终端
ros2 run rqt_console rqt_console
# 设置节点启动时的日志等级
ros2 run turtlesim turtlesim_node --ros-args --log-level WARN
十一、launch:多节点一键启动
launch 文件用于同时启动多个节点,并支持参数传递与命名空间管理。
ros2 launch <package_name> <launch_file_name>
ros2 launch <path_to_launch_file>
# 执行时传入参数
ros2 launch <package_name> <launch_file_name> background_r:=255
参考 launch 文件示例(XML 格式):
<!-- example.launch.xml -->
<launch>
<!-- 可从命令行设置或使用默认值的参数 -->
<arg name="background_r" default="0"/>
<arg name="background_g" default="255"/>
<arg name="background_b" default="0"/>
<arg name="chatter_ns" default="my/chatter/ns"/>
<!-- 包含另一个 launch 文件 -->
<include file="$(find-pkg-share demo_nodes_cpp)/launch/topics/talker_listener.launch.py"/>
<!-- 在指定命名空间中包含 launch 文件 -->
<group>
<push-ros-namespace namespace="$(var chatter_ns)"/>
<include file="$(find-pkg-share demo_nodes_cpp)/launch/topics/talker_listener.launch.py"/>
</group>
<!-- 启动 turtlesim_node 并设置命名空间 -->
<node pkg="turtlesim" exec="turtlesim_node" name="sim" namespace="turtlesim1"/>
<!-- 启动另一个节点并通过参数设置背景色 -->
<node pkg="turtlesim" exec="turtlesim_node" name="sim" namespace="turtlesim2">
<param name="background_r" value="$(var background_r)"/>
<param name="background_g" value="$(var background_g)"/>
<param name="background_b" value="$(var background_b)"/>
</node>
<!-- 话题重映射,使两只海龟监听同一指令话题 -->
<node pkg="turtlesim" exec="mimic" name="mimic">
<remap from="/input/pose" to="/turtlesim1/turtle1/pose"/>
<remap from="/output/cmd_vel" to="/turtlesim2/turtle1/cmd_vel"/>
</node>
</launch>
十二、bag:数据记录与回放
ros2 bag 用于录制和回放话题数据,是调试与复现问题的利器。
# 建立测试环境
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
# 创建数据存储目录
mkdir bag_files
cd bag_files
# 查看并确认要记录的话题
ros2 topic list
ros2 topic echo /turtle1/cmd_vel
# 记录单个话题
ros2 bag record /turtle1/cmd_vel
# 记录多个话题(-o 指定存储名)
ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose
# 查看记录信息
ros2 bag info subset
# 回放记录
ros2 bag play subset
ros2 topic hz /turtle1/pose # 回放过程中验证话题频率
小结
本章节系统梳理了 ROS2 的核心命令,涵盖节点、包、话题、服务、参数、动作、日志、launch 与数据回放。这些命令将贯穿整个机器人系统开发过程,建议动手逐一实践。下一章节我们将搭建 VS Code 编程环境,正式进入代码开发阶段。
SEO关键词: ROS2命令大全, ROS2 topic命令, ROS2 节点管理, ROS2 launch教程, ROS2 bag数据记录, ROS2入门教程
推荐阅读
更多工业 AI、智能制造与技术实践文章
SOEM-EtherCAT 源代码解析(一):数据类型定义
逐段拆解开源 EtherCAT 主站库 SOEM 的核心头文件 ec_type.h:从基础数据类型、错误码、帧长与超时宏,到以太网头、数据包头结构体,再到状态/命令/数据类型枚举、SII 从站信息接口、邮箱协议与寄存器定义,一文打透 EtherCAT 主站的类型地基。
C#调用Intel NPU实现YOLOv26极速推理:OpenVINO工业视觉加速实践
通过C# + OpenVINO Runtime调用Intel Core Ultra NPU运行YOLOv26模型,实现低功耗、毫秒级的工业边缘AI视觉推理,涵盖模型导出、环境配置、推理代码与FP16/INT8/异步推理等性能优化实践。
Linux系统篇(十一)——进程(一):从零入门操作系统:冯诺依曼体系到进程的完整理解
从冯诺依曼体系讲起,理解操作系统内核与系统调用,再到进程与 PCB,用 fork 与写时拷贝实战入门进程编程
M3 Max 96GB 本地部署 Qwen3.6-35B-A3B:打造 SolidWorks 智能机械设计与企业知识库 AI 工作站
M3 Max 96GB 统一内存适合同时运行本地大模型与设计工具链。本文推荐 MoE 架构的 Qwen3.6-35B-A3B(总参数约 35B、单 Token 激活约 3B)配合 MLX 4bit 量化本地部署,打造 SolidWorks 智能机械设计与企业知识库 AI 工作站:mlx-lm 提供 OpenAI 兼容 API,OpenWebUI 做对话入口,通过 SolidWorks MCP 工具调用实现参数化建模,结合 BGE-M3 + Reranker 构建企业知识库 RAG,并规划多模型架构与“小龙虾”本地 AI Agent 平台的演进路线。
TRIO-Basic 从入门到精通(一):MPV4 开发环境安装与仿真器联调
本文是 TRIO-Basic 运动控制器编程系列教程的第一篇,详细介绍 TRIO 官方集成开发环境 MPV4 的获取方式、安装步骤,以及如何通过仿真器完成首次程序编写与运动轨迹验证,帮助读者快速搭建 TRIO 运动控制开发环境。
RIP 颜色计算原理:RGB→CMYK 转换与陶瓷喷墨色彩管理
系统讲解喷码 RIP 软件中 RGB 到 CMYK 的颜色转换原理:从基础数学公式出发,说明为何工业级陶瓷喷墨必须采用 ICC 色彩管理,并给出墨量限制、GCR 黑版生成、喷头分色等关键计算模块与数据结构设计。
