ZeroOne AI
← 返回文章列表

手把手做ROS2机器人系统开发(二):ROS2核心命令详解

👁 29
分类:机器人自动化

在上一讲中,我们完成了 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 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...]

五、topic:话题通信管理

话题是 ROS2 最核心的通信方式(发布/订阅模型)。主要子命令:

常用操作示例:

# 列出话题
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),主要子命令:

七、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 日志消息等级从高到低:

# 启动日志可视化终端
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 源代码解析(二):已知的从站配置信息列表

解析 SOEM 主站库的从站配置信息列表:ec_configlist_t 结构体字段含义、dtype 设备类型解释、倍福 EK1100/EL 系列端子预配置表,以及未知从站如何回退到 EEPROM 读取配置。

数码印刷

陶瓷喷墨 RIP 中的 8 色 ICC Profile 技术原理与 LittleCMS 实现

系统讲解陶瓷喷墨 RIP 中 8 色 ICC Profile 的技术原理与 LittleCMS 实现:ICC 色彩管理模型、8 通道颜色空间、Profile 制作流程(固定条件/色卡打印/烧成后测色/分光数据)、LittleCMS 集成与批量转换,以及墨量限制、通道线性化、喷头灰度映射与工业级软件架构设计。

机器人自动化

TRIO-Basic 从入门到精通(十二):Trio 实现 ModbusTCP 通讯

本教程演示两台Trio控制器间基于ModbusTCP的以太网通讯,主站通过MODBUS指令对从站保持寄存器进行读写,并实现快速超时、断线重连等可靠通讯机制,适用于与PLC、传感器等从站设备的数据交换。

机器人自动化

陶瓷盘UV喷墨印刷中的Z轴高度测量与防碰撞技术方案

陶瓷盘等异形产品 UV 喷墨印刷中,喷头与产品表面的高度控制是核心难点:距离太近会撞坏昂贵的 UV 喷头,距离太远则墨滴扩散、套色精度下降。本文系统讲解线扫相机与激光测高的分工、两级 Z 轴高度设计、浮雕跟随、三重防撞保护,并给出 3.8 米 10 盘位设备基于 Trio + EtherCAT 的完整架构与工作流程。

工业互联网

Linux系统篇(十八)——文件(二):吃透 Linux 重定向底层:从文件描述符到 VFS 缓冲全链路拆解

从文件描述符数组到 dup2 重定向,再到用户/内核双缓冲与 VFS 多态,完整拆解 Linux 输出重定向的内核实现链路。

机器人自动化

SOEM-EtherCAT 源代码解析(一):数据类型定义

逐段拆解开源 EtherCAT 主站库 SOEM 的核心头文件 ec_type.h:从基础数据类型、错误码、帧长与超时宏,到以太网头、数据包头结构体,再到状态/命令/数据类型枚举、SII 从站信息接口、邮箱协议与寄存器定义,一文打透 EtherCAT 主站的类型地基。

评论(0)