1024 字
5 分钟
ROS 2 开发常用命令与节点入门

这篇文章把我平时整理的 ROS 2 笔记重写成一份更适合博客阅读的版本,重点放在常用命令、节点编写流程、colcon 参数和命名空间理解上。

快速入口#

  • 官方文档可以先看 ROS 2 文档
  • 下面的命令以常见开发流程为主,适合日常查阅
  • 示例里默认以 Linux 终端和工作空间开发环境为背景

节点创建流程#

ROS 2 里从零创建一个功能包,通常遵循下面这条路径:

  1. 创建工作空间和功能包
  2. 编写节点程序
  3. 配置 setup.py
  4. 编译工作空间
  5. source 环境后运行节点

创建功能包#

Terminal window
ros2 pkg create <package-name> --build-type {cmake,ament_cmake,ament_python} --dependencies <依赖名字>

如果是 Python 节点,通常会选择 ament_python

编写程序#

ROS 2 Python 节点的基本步骤可以概括为:

  1. 导入库
  2. 初始化客户端库
  3. 创建节点
  4. 保持节点运行
  5. 关闭客户端库
import rclpy
from rclpy.node import Node
def main(args=None):
"""
ROS 2 节点入口函数
"""
rclpy.init(args=args)
node = Node("node_02")
node.get_logger().info("大家好,我是 node_02.")
rclpy.spin(node)
rclpy.shutdown()

修改 setup.py#

节点写好后,需要把入口函数注册到 console_scripts

entry_points={
"console_scripts": [
"node=example_py.node_02:main",
],
},

编译#

Terminal window
colcon build --packages-select YOUR_PKG_NAME

source 环境#

Terminal window
source install/setup.bash

运行#

Terminal window
ros2 run example_py node_02

常用启动方式#

ROS 2 节点既可以通过 ros2 run 启动,也可以直接运行安装后的可执行文件。

Terminal window
ros2 run <package_name> <executable_name>
Terminal window
. ./install/cst_manager/lib/cst_manager/cst_manager

如果要在启动时指定命名空间,可以这样写:

Terminal window
ros2 run cst_tester cst_tester --ros-args -r __ns:=/robot1

也可以对安装后的程序附加参数:

Terminal window
./install/cst_cocos/lib/cst_cocos/cocos_app --ros-args -r __ns:=/huoxingmeinv_1a_4d_2a_82_77_0d

环境变量#

ROS 2 开发中最常见的动作之一,就是先 source 基础环境,再叠加当前工作空间。

Terminal window
cd /home/cst/robot
. /opt/ros_jazzy/install/local_setup.bash
. ./install/local_setup.bash

代码位置#

安装后的 Python 节点代码通常会出现在 install 目录下。

Terminal window
./install/cst_manager/lib/python3.10/site-packages/cst_manager/main.py

常用命令速查#

包管理#

Terminal window
sudo apt install ros-<version>-package_name
ros2 pkg executables
ros2 pkg executables turtlesim
ros2 pkg list
ros2 pkg prefix <package-name>
ros2 pkg prefix turtlesim
ros2 pkg xml turtlesim

构建#

Terminal window
colcon build --packages-select YOUR_PKG_NAME
colcon build --packages-select YOUR_PKG_NAME --cmake-args -DBUILD_TESTING=0
colcon test
colcon build --symlink-install

节点#

Terminal window
ros2 node list
ros2 node info /node_name

话题#

Terminal window
ros2 topic list
ros2 topic echo /topic_name
ros2 topic pub -1 /topic_name std_msgs/msg/String "{data:'Hello'}"

服务#

Terminal window
ros2 service list
ros2 service call /service_name interface_type "{parameter:value}"

参数#

Terminal window
ros2 param list
ros2 param get /node_name parameter_name
ros2 param set /node_name parameter_name value

Colcon 参数#

colcon 的参数很多,但开发中常见的主要是下面这些:

--packages-select
--packages-up-to
--packages-above
--build-base
--install-base
--merge-install
--symlink-install
--continue-on-error
--cmake-args
--executor
--parallel-workers
--log-level

它们的大致用途如下:

  • --packages-select:只构建指定包
  • --packages-up-to:构建指定包及其依赖
  • --packages-above:构建依赖于该包的上层包
  • --build-base:指定构建目录
  • --install-base:指定安装目录
  • --merge-install:把所有包安装到同一前缀
  • --symlink-install:使用符号链接,便于修改源码后直接生效
  • --continue-on-error:某个包失败后继续构建
  • --cmake-args:传递 CMake 参数
  • --executor:选择执行器
  • --parallel-workers:设置并行任务数
  • --log-level:设置日志等级

命名空间#

ROS 2 里,命名空间主要用于避免名称冲突,也方便把多个设备或多个机器人区分开来。

和 ROS 1 相比,ROS 2 没有中心化的 Master,而是通过 DDS 做分布式发现。因此,跨设备通信不仅依赖命名空间一致,还依赖网络可达和话题、服务名称的正确匹配。

一个简单的理解#

  • 设备 A 在 /robot1 命名空间下发布 /robot1/scan
  • 设备 B 也在 /robot1 下订阅同名话题
  • 如果网络、域 ID、发现机制都配置正确,就可以正常通信

实际开发提醒#

  • 命名空间解决的是“名字怎么分组”
  • DDS 解决的是“节点怎么发现彼此”
  • 真正跨设备通信时,要同时检查这两层

小结#

如果只想记住最常用的一组 ROS 2 命令,可以优先掌握这几类:

  • ros2 pkg ...:查包、查可执行文件、查前缀
  • colcon build ...:构建工作空间
  • ros2 run ...:运行节点
  • ros2 node/topic/service/param ...:调试运行状态
  • --ros-args -r __ns:=...:控制命名空间

这套流程足够支撑大多数日常开发和调试场景。

ROS 2 开发常用命令与节点入门
https://fuwari.vercel.app/posts/ros2-guide/
作者
Hachi
发布于
2025-07-23
许可协议
CC BY-NC-SA 4.0
在博客中嵌入交互式 3D 模型
轮椅机器人