ROS2学习笔记
·
ROS2入门:手把手带你写第一个Python节点(附完整代码和常见报错)
系列:ROS2从零开始 | 第1篇
环境:Ubuntu 22.04 + ROS2 Humble
参考:《ROS2机器人开发:从入门到实践》第2章 鱼香ros视频
前言
研0,9月开学前系统学ROS2。之前有STM32和FreeRTOS基础,打算用嵌入式的视角类比学习。这个系列是学习笔记,边学边发。
1. 什么是ROS2节点
ROS2程序拆成多个节点(Node),每个节点负责一个功能:
- 摄像头节点:读取图像
- 雷达节点:发布激光数据
- 导航节点:规划路线
- 控制节点:发速度指令
FreeRTOS类比:
| FreeRTOS | ROS2 |
|---|---|
| task | node |
| queue | topic |
| 信号量/事件组 | service/action |
| 调度器 | executor |
区别:FreeRTOS跑在单片机上,ROS2跑在Linux上,节点可以分布式部署。
2. 环境检查
printenv | grep ROS_DISTRO
ros2 --help
python3 -c "import rclpy; print('rclpy ok')"
如果没输出,先加载环境:
source /opt/ros/humble/setup.bash
3. 创建第一个Python节点
mkdir -p ~/ros2_ws/src/chapt2
cd ~/ros2_ws/src/chapt2
code ros2_python_node.py
写入代码:
import rclpy
from rclpy.node import Node
def main(args=None):
rclpy.init(args=args)
node = Node("python_node")
node.get_logger().info("你好,ROS2 Python节点!")
try:
rclpy.spin(node)
except KeyboardInterrupt:
pass
finally:
node.destroy_node()
rclpy.shutdown()
if __name__ == "__main__":
main()
运行:
python3 ros2_python_node.py
输出:
[INFO] [timestamp] [python_node]: 你好,ROS2 Python节点!
4. 验证节点
新开终端:
source /opt/ros/humble/setup.bash
ros2 node list
看到/python_node即成功。查看详情:
ros2 node info /python_node
5. 代码解析
| 代码 | 作用 |
|---|---|
rclpy.init(args=args) |
初始化ROS2运行环境 |
Node("python_node") |
创建节点 |
get_logger().info(...) |
ROS2日志输出 |
rclpy.spin(node) |
让节点持续运行 |
destroy_node() |
销毁节点释放资源 |
rclpy.shutdown() |
关闭ROS2环境 |
生命周期:初始化 → 创建 → 运行 → 销毁 → 关闭 |
6. 常见报错
ModuleNotFoundError: No module named 'rclpy'
source /opt/ros/humble/setup.bash
python3 -c "import rclpy; print('rclpy ok')"
ros2 node list看不到节点
- 确认程序还在运行
- 新终端也执行了
source - 节点名拼写正确
程序卡住不退出
正常行为,spin()就是持续运行。Ctrl+C退出。
7. 练习
- 改节点名,用
ros2 node list验证 - 改日志内容
- 删掉
spin()看行为变化
下一篇:C++最小节点
如果本文对你有帮助,欢迎点赞收藏。
更多推荐


所有评论(0)