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看不到节点

  1. 确认程序还在运行
  2. 新终端也执行了source
  3. 节点名拼写正确
    程序卡住不退出
    正常行为,spin()就是持续运行。Ctrl+C退出。

7. 练习

  1. 改节点名,用ros2 node list验证
  2. 改日志内容
  3. 删掉spin()看行为变化

下一篇:C++最小节点

如果本文对你有帮助,欢迎点赞收藏。

 

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐