1024 字
5 分钟
ROS 2 开发常用命令与节点入门
这篇文章把我平时整理的 ROS 2 笔记重写成一份更适合博客阅读的版本,重点放在常用命令、节点编写流程、colcon 参数和命名空间理解上。
快速入口
- 官方文档可以先看 ROS 2 文档
- 下面的命令以常见开发流程为主,适合日常查阅
- 示例里默认以 Linux 终端和工作空间开发环境为背景
节点创建流程
ROS 2 里从零创建一个功能包,通常遵循下面这条路径:
- 创建工作空间和功能包
- 编写节点程序
- 配置
setup.py - 编译工作空间
- source 环境后运行节点
创建功能包
ros2 pkg create <package-name> --build-type {cmake,ament_cmake,ament_python} --dependencies <依赖名字>如果是 Python 节点,通常会选择 ament_python。
编写程序
ROS 2 Python 节点的基本步骤可以概括为:
- 导入库
- 初始化客户端库
- 创建节点
- 保持节点运行
- 关闭客户端库
import rclpyfrom 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", ],},编译
colcon build --packages-select YOUR_PKG_NAMEsource 环境
source install/setup.bash运行
ros2 run example_py node_02常用启动方式
ROS 2 节点既可以通过 ros2 run 启动,也可以直接运行安装后的可执行文件。
ros2 run <package_name> <executable_name>. ./install/cst_manager/lib/cst_manager/cst_manager如果要在启动时指定命名空间,可以这样写:
ros2 run cst_tester cst_tester --ros-args -r __ns:=/robot1也可以对安装后的程序附加参数:
./install/cst_cocos/lib/cst_cocos/cocos_app --ros-args -r __ns:=/huoxingmeinv_1a_4d_2a_82_77_0d环境变量
ROS 2 开发中最常见的动作之一,就是先 source 基础环境,再叠加当前工作空间。
cd /home/cst/robot. /opt/ros_jazzy/install/local_setup.bash. ./install/local_setup.bash代码位置
安装后的 Python 节点代码通常会出现在 install 目录下。
./install/cst_manager/lib/python3.10/site-packages/cst_manager/main.py常用命令速查
包管理
sudo apt install ros-<version>-package_nameros2 pkg executablesros2 pkg executables turtlesimros2 pkg listros2 pkg prefix <package-name>ros2 pkg prefix turtlesimros2 pkg xml turtlesim构建
colcon build --packages-select YOUR_PKG_NAMEcolcon build --packages-select YOUR_PKG_NAME --cmake-args -DBUILD_TESTING=0colcon testcolcon build --symlink-install节点
ros2 node listros2 node info /node_name话题
ros2 topic listros2 topic echo /topic_nameros2 topic pub -1 /topic_name std_msgs/msg/String "{data:'Hello'}"服务
ros2 service listros2 service call /service_name interface_type "{parameter:value}"参数
ros2 param listros2 param get /node_name parameter_nameros2 param set /node_name parameter_name valueColcon 参数
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/