51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

ROS2 Python API 介绍

rclpy 提供了用于与 ROS 2 交互的规范 Python API,本文记录相关内容。

简介 {#简介}

rclpyROS 2(Robot Operating System 2)的 Python 接口,由 Dashing Diademata 发行版开始提供。rclpy 提供了一个易于使用的 Python 库,使得开发机器人软件变得更加直接和快速。它允许用户通过 Python 语言来编写 ROS 2 节点、服务、动作和话题,无需编写任何 C++ 代码。这对于希望利用 Python 生态系统(如科学计算、数据处理和机器学习库)的开发者来说是一个巨大的优势。

以下是 rclpy 的一些关键特点:

  1. 易于上手:Python 作为一种高级编程语言,拥有简洁的语法和丰富的库,使得快速开发成为可能。
  2. 类型安全rclpy 在设计上确保了类型安全,避免了 C++ 中常见的指针和内存管理问题。
  3. 全功能rclpy 提供了 ROS 2 所有核心功能的访问,包括节点管理、服务、动作和话题。
  4. 集成rclpy 可以与 Python 的科学计算和数据分析库无缝集成,为机器人应用程序提供强大的数据处理能力。
  5. 跨平台:支持多种操作系统和硬件平台,与 ROS 2 的其他组件一样。

使用 rclpy 可以让开发者在享受 Python 开发效率和生态系统的同时,开发出能在 ROS 2 生态中运行的机器人应用。这极大地降低了开发复杂性,并加速了创新机器人的研发过程。

Initialization, Shutdown, and Spinning {#Initialization-Shutdown-and-Spinning}

一个典型的ROS程序由以下操作组成:

  1. Initialization
  2. Create one or more ROS nodes
  3. Process node callbacks
  4. Shutdown

初始化是通过调用特定上下文的 init() 来完成的。这必须在创建任何 ROS 节点之前完成。
创建 ROS 节点是通过调用 create_node() 或实例化 Node 来完成的。

节点可用于创建常见的 ROS 实体,例如发布者、订阅、服务和操作。

创建节点后,可通过在节点上 spinning 来完成工作项(如订阅回调)。以下函数可用于处理等待执行的工作:spin()spin_once()spin_until_future_complete()

当完成先前初始化的上下文后(即使用了与上下文相关的所有 ROS 节点),应调用 shutdown() 函数。这将使从上下文派生的所有实体失效。

相关方法:

| 方法 | 含义 | 备注 | |----------------------------------|-------------------------------------------|--------------------------------------------------------------------| | rclpy.create_node | 创建 Node 的实例。 | 也可以用 from rclpy.node import Node 的类初始化完成实例创建 | | rclpy.init | 为给定上下文初始化 ROS 通信。 | | | rclpy.shutdown | 关闭先前初始化的上下文。 | | | rclpy.spin | 执行工作并阻塞,直到与执行器相关的上下文关闭。 | | | rclpy.spin_once | 执行一项工作或等待超时。 只要回调在超时前准备就绪,提供的执行器就会执行一个回调。 | 如果没有提供执行器(即None),则使用全局执行器。如果全局执行器有一个部分完成的例行程序,那么所做的工作可能不是针对所提供的节点。 | | rclpy.spin_until_future_complete | 执行工作直到将来完成。 | 回调和其他工作将由提供的执行器执行,直到 future.done() 返回 True 或与执行器相关的上下文关闭。 |

Node {#Node}

ROS2 的核心节点类,包含大量方法,官方文档

Topics {#Topics}

官方文档

Publisher {#Publisher}

为 ROS 发布者创建一个容器。

注意 : 用户不应使用该构造函数创建发布者,而应调用 Node.create_publisher()

在 ROS 系统中,发布者通过在 ROS 主题上发布信息作为主要的通信手段。

方法列表:

| 方法 | 含义 | 备注 | |------------------------|------------------|----| | assert_liveliness | 手动断言该 "发布者 "还活着。 | | | destroy | 销毁发布者。 | | | get_subscription_count | 获取该出版商的订户数量。 | | | publish | 为出版商的主题发送信息。 | |

属性列表:

| 属性 | 含义 | 备注 | |------------|------|----| | handle | 句柄 | | | topic_name | 话题名称 | |

Subscription {#Subscription}

为 ROS 订阅创建一个容器。

注意: 用户不应使用此构造函数创建订阅,而应调用 Node.create_subscription()

方法列表:

| 方法 | 含义 | 备注 | |---------|-------|----| | destroy | 销毁订阅者 | |

属性列表:

| 属性 | 含义 | 备注 | |------------|------|----| | handle | 句柄 | | | topic_name | 话题名称 | |

Services {#Services}

Client {#Client}

为 ROS 服务客户端创建一个容器。

注意: 用户不应使用该构造函数创建服务客户端,而应调用 Node.create_client()

方法列表:

| 方法 | 含义 | 备注 | |------------------------|------------------|-----------------------| | call | 提出服务请求并等待结果。 | | | call_async | 发出服务请求并异步获取结果。 | | | destroy | 销毁客户端 | | | remove_pending_request | 删除一个未来的列表中的未决请求。 | 这将阻止未来接收响应并执行其已完成的回调。 | | service_is_ready | 检查服务服务器是否就绪。 | | | wait_for_service | 等待服务服务器准备就绪。 | 服务器准备就绪或超时后立即返回。 |

属性列表:

| 属性 | 含义 | 备注 | |--------|----|----| | handle | 句柄 | |

Service {#Service}

为 ROS 服务服务器创建一个容器。

注意: 用户不应使用该构造函数创建服务服务器,而应调用 Node.create_service()

方法列表:

| 方法 | 含义 | 备注 | |---------------|---------|----| | destroy | 销毁服务 | | | send_response | 发送服务响应。 | |

属性列表:

| 属性 | 含义 | 备注 | |--------|----|----| | handle | 句柄 | |

Actions {#Actions}

Action Client {#Action-Client}

ROS 行动客户端。

方法列表:

| 方法 | 含义 | 备注 | |------------------|------------------------------|--------------------------------------------------------| | add_to_wait_set | 将实体添加到等待集。 | | | destroy | 销毁底层动作客户端句柄。 | | | execute | 从就绪等待集获取数据后执行工作。 | 这将为未来对象设置接收到的任何服务响应的结果,并调用任何用户定义的回调(如反馈)。 | | get_num_entities | 返回等待集中使用的各类实体的数量。 | | | is_ready | 如果等待集中有一个或多个实体准备就绪,则返回 True。 | | | send_goal | 发送的目标,并等待结果。 | 请勿在回调中调用此方法,否则可能出现死锁。 | | send_goal_async | 发送目标并异步获取结果。 | 当行动服务器确认收到目标时,返回的 Future 结果将被设置为 ClientGoalHandle。 | | server_is_ready | 检查是否有行动服务器准备处理该客户端的请求。 | | | take_data | 从下层取走东西,以免等待组立即再次醒来。 | | | wait_for_server | 等待一个 action server 准备就绪。 | 当动作服务器为客户端准备就绪时立即返回。 :param timeout_sec: 等待动作服务器可用的秒数。 |

Action Server {#Action-Server}

ROS 行动服务器。

方法列表:

| 方法 | 含义 | 备注 | |-----------------------------------|------------------------------|------------------------------------------------------------------------------| | add_to_wait_set | 将实体添加到等待集。 | | | destroy | 销毁服务器。 | | | execute | 从就绪等待集获取数据后执行工作。 | | | get_num_entities | 返回等待集中使用的各类实体的数量。 | | | is_ready | 如果等待集中有一个或多个实体准备就绪,则返回 True。 | | | notify_execute | | | | notify_goal_done | | | | register_cancel_callback | 注册用于处理取消请求的回调。 | 取消回调的目的是决定是否接受或拒绝取消进行中(或排队中)目标的请求。回调应接受一个包含取消请求的参数,并必须返回一个 CancelResponse 值。 | | register_execute_callback | 注册用于执行行动目标的回调。 | 执行回调的目的是执行操作目标,并在完成后返回结果。回调应接受一个包含目标请求的参数,并且必须返回一个结果实例。 | | register_goal_callback | 注册用于处理新目标请求的回调。 | 目标回调的目的是决定是否接受或拒绝一个新目标。回调应将目标请求消息作为参数,并必须返回一个 GoalResponse 值。 | | register_handle_accepted_callback | 注册一个回调,用于处理新接受的目标。 | | | take_data | 从下层取走东西,以免等待组立即再次醒来。 | |

属性列表:

| 属性 | 含义 | 备注 | |-------------|------|----| | action_type | 行动类型 | |

Timer {#Timer}

Rate {#Rate}

用于 sleep 的实用工具。

方法列表:

| 方法 | 含义 | 备注 | |---------|------------|------------------------------------------------------------------| | destroy | 销毁实例 | | | sleep | 阻止直到计时器触发。 | 在回调中调用此功能时应小心谨慎。如果在单线程执行器(SingleThreadedExecutor)的回调中调用,可能会永远阻塞。 |

Timer {#Timer-2}

Parameters {#Parameters}

Parameter {#Parameter}

Parameter Service {#Parameter-Service}

Logging {#Logging}

日志严重性级别枚举。

  • DEBUG = 10

  • ERROR = 40

  • FATAL = 50

  • INFO = 20

  • UNSET = 0

  • WARN = 30

Context {#Context}

封装了启动和关闭的生命周期。

上下文对象不应重复使用,并在其析构函数中最终确定。

Execution and Callbacks {#Execution-and-Callbacks}

控制回调执行的组件有两个:执行器和回调组。

  • Executors: 执行器负责回调的实际执行,应扩展 Executor 类。

  • Callback: 回调组用于执行回调的并发规则,并应扩展 CallbackGroup 类。

Executors {#Executors}

执行器的基类。

执行器控制用于处理回调的线程模型。回调是工作单位,如订阅回调、定时器回调、服务调用和接收到的客户端响应。执行器控制回调在哪些线程中执行。

自定义执行器必须定义 spin_once()。如果执行器有任何清理工作,则还应定义 shutdown()

Callback Groups {#Callback-Groups}

回调组的基类。

回调组控制何时允许执行回调。

该类不应被实例化。相反,类应扩展该类并实现 can_execute()beginning_execution()ending_execution()

参考资料 {#参考资料}



文章链接:
https://www.zywvvd.com/notes/tools/ros2/ros2-python-api/ros2-python-api/

赞(0)
未经允许不得转载:工具盒子 » ROS2 Python API 介绍