ros2可执行节点
一、ros2可执行节点
1.1 Node定义
节点(Node) 是 ROS2 中最基本的执行单元,可以理解为一个独立运行的程序。每个节点负责特定的功能,比如:
- 读取传感器数据
- 控制电机
- 处理图像
- 发布导航目标点(就像您的 qmini_nav2_waypoint.launch.py 文件那样)
1.2 Node代码结构
可执行节点就是可以直接运行的 Python 或 C++ 程序,必须满足:
1 | # Python 节点的基本结构 |
二、ros2 run vs ros2 launch 的区别
2.1 ros2 run - 运行单个节点
语法如下:
1 | ros2 run <包名> <可执行文件名> [参数] |
特点:
✅ 只启动一个节点
✅ 简单直接,适合测试和调试
✅ 支持交互式输入/输出
❌ 无法同时启动多个节点
❌ 无法配置复杂的启动参数
运行示例:
1 | # 启动您的导航目标发布节点 |
2.2 ros2 launch - 启动多个节点和系统
语法如下:
1 | ros2 launch <包名> <launch文件名.py> [参数:=值] |
一个典型的 launch 文件是一个 Python 脚本,必须包含 generate_launch_description() 函数:
1 | from launch import LaunchDescription |
运行示例:
1 | # 启动完整的导航系统(一次性启动多个节点) |
简单总结:
- 可执行节点必须要有:
1 | def main(args=None): |
- launch文件必须要有
generate_launch_description()函数。
三、可执行节点使用
- 在 src 中新建一个和包一样的目录,同时新建文件
__init__.py,确保该文件为空:
1 | cd ~/qmini_ws/src/qmini_nav2 |
- 修改
setup.py,在entry_points中注册如下:
1 | entry_points={ |
- 重新编译
1 | cd ~/qmini_ws |
如果出现编译错误,特别是文件结构改变了,该问题可能是之前的编译结果缓存,可以执行如下命令:
1 | cd ~/qmini_ws |
整体的文件结构如下:
1 | jetson@ubuntu:~/qmini_ws/src/qmini_nav2$ tree |
四、entry_points 分析
entry_points 告诉 Python 包管理系统:将某个 Python 函数注册为命令行可执行程序。
一般格式如下:
1 | '可执行文件名 = 包名.模块名:函数名' |
在本实现中如下:
1 | 'waypoint_publisher = qmini_nav2.waypoint_publisher:main' |
| 部分 | 值 | 含义 |
|---|---|---|
| 可执行文件名 | waypoint_publisher | 在命令行输入的名字 |
| 包名 | qmini_nav2 | Python 包名(目录名) |
| 模块名 | waypoint_publisher | Python 文件名(不含 .py) |
| 函数名 | main | 要执行的函数 |
即 entry_points 将 Python 函数包装成了命令行工具。
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.