ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

【ros2】ROS2 Python节点创建指南 - 详解

【ros2】ROS2 Python节点创建指南 - 详解

文章目录

  • ROS2 Python节点创建指南
    • 一、核心概念:节点的定义与作用
    • 二、基于书中第2章的Python节点创建核心步骤
      • 1. 前置准备:创建ROS2功能包
      • 2. 编写节点代码(基础框架)
      • 3. 配置功能包(让ROS2识别节点)
        • (1)修改`package.xml`
        • (2)修改`setup.py`
      • 4. 编译与运行节点
        • (1)编译功能包
        • (2)运行节点
    • 三、书中第2章核心功能:节点的基础通信能力
      • 1. 话题发布者(Publisher)
      • 2. 话题订阅者(Subscriber)
      • 3. 运行发布者与订阅者
    • 四、书外拓展知识:节点高级特性与最佳实践
      • 1. 节点命名与命名空间
      • 2. 日志系统的高级用法
      • 3. 参数(Parameter)的使用
      • 4. 节点生命周期管理
      • 5. 节点调试工具
    • 五、常见问题与解决方案
    • 六、总结

ROS2 Python节点创建指南

(基于《ROS2机器人开发:从入门到实践》第2章及拓展知识)

一、核心概念:节点的定义与作用

节点(Node)是ROS2系统的基本执行单元,代表一个独立的功能模块(如传感器驱动、控制算法、数据可视化等)。每个节点通过ROS2的通信机制(话题、服务、动作等)与其他节点交互,共同构成机器人系统。

节点的核心特征

二、基于书中第2章的Python节点创建核心步骤

1. 前置准备:创建ROS2功能包

节点需放在功能包(Package)中管理,因此首先创建一个Python功能包:

# 创建Python类型功能包,依赖ROS2核心库rclpy
ros2 pkg create py_node_demo --build-type ament_python --dependencies rclpy
  • 关键参数说明:
    • --build-type ament_python:指定为Python功能包(C++功能包用ament_cmake)。
    • --dependencies rclpy:声明依赖ROS2的Python客户端库(必须包含)。

2. 编写节点代码(基础框架)

在功能包的py_node_demo目录下创建节点文件(如simple_node.py),基础结构如下:

# 导入ROS2 Python核心库
import rclpy
from rclpy.node import Node
# 定义节点类,继承自Node
class SimpleNode(Node):
def __init__(self):
# 调用父类构造函数,指定节点名称(必须唯一)
super().__init__('simple_node')
# 初始化节点功能(如创建发布者、订阅者、定时器等)
self.get_logger().info("简单节点已启动!")  # 日志输出
# 主函数:初始化并运行节点
def main(args=None):
# 初始化ROS2系统
rclpy.init(args=args)
# 创建节点实例
node = SimpleNode()
# 运行节点(进入事件循环,等待回调)
rclpy.spin(node)
# 退出时清理资源
node.destroy_node()
rclpy.shutdown()
# 程序入口
if __name__ == '__main__':
main()

3. 配置功能包(让ROS2识别节点)

需在package.xml中声明节点信息,并在setup.py中配置入口点,确保ros2 run能找到节点。

(1)修改package.xml

添加节点描述和依赖声明(确保包含以下关键内容):

<?xml version="1.0"?><?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?><package format="3"><name>py_node_demo</name><version>0.0.0</version><description>ROS2 Python节点示例</description><maintainer email="your@email.com">用户名</maintainer><license>Apache-2.0</license><!-- 依赖声明 --><buildtool_depend>ament_python</buildtool_depend><exec_depend>rclpy
返回列表