前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ROS2 Python API 介绍

ROS2 Python API 介绍

作者头像
为为为什么
发布2024-07-13 11:24:58
980
发布2024-07-13 11:24:58
举报
文章被收录于专栏:又见苍岚

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

一个典型的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

1

class rclpy.node.Node(node_name, *, context=None, cli_args=None, namespace=None, use_global_arguments=True, enable_rosout=True, start_parameter_services=True, parameter_overrides=None, allow_undeclared_parameters=False, automatically_declare_parameters_from_overrides=False)

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

Topics

官方文档

Publisher

1

class rclpy.publisher.Publisher(publisher_handle, msg_type, topic, qos_profile, event_callbacks, callback_group)

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

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

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

方法列表:

方法

含义

备注

assert_liveliness

手动断言该 "发布者 "还活着。

destroy

销毁发布者。

get_subscription_count

获取该出版商的订户数量。

publish

为出版商的主题发送信息。

属性列表:

属性

含义

备注

handle

句柄

topic_name

话题名称

Subscription

1

class rclpy.subscription.Subscription(subscription_handle, msg_type, topic, callback, callback_group, qos_profile, raw, event_callbacks)

为 ROS 订阅创建一个容器。

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

方法列表:

方法

含义

备注

destroy

销毁订阅者

属性列表:

属性

含义

备注

handle

句柄

topic_name

话题名称

Services

Client

1

class rclpy.client.Client(context, client_handle, srv_type, srv_name, qos_profile, callback_group)

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

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

方法列表:

方法

含义

备注

call

提出服务请求并等待结果。

call_async

发出服务请求并异步获取结果。

destroy

销毁客户端

remove_pending_request

删除一个未来的列表中的未决请求。

这将阻止未来接收响应并执行其已完成的回调。

service_is_ready

检查服务服务器是否就绪。

wait_for_service

等待服务服务器准备就绪。

服务器准备就绪或超时后立即返回。

属性列表:

属性

含义

备注

handle

句柄

Service

1

class rclpy.service.Service(service_handle, srv_type, srv_name, callback, callback_group, qos_profile)

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

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

方法列表:

方法

含义

备注

destroy

销毁服务

send_response

发送服务响应。

属性列表:

属性

含义

备注

handle

句柄

Actions

Action Client

1

class rclpy.action.client.ActionClient(node, action_type, action_name, *, callback_group=None, goal_service_qos_profile=<rclpy.qos.QoSProfile object>, result_service_qos_profile=<rclpy.qos.QoSProfile object>, cancel_service_qos_profile=<rclpy.qos.QoSProfile object>, feedback_sub_qos_profile=<rclpy.qos.QoSProfile object>, status_sub_qos_profile=<rclpy.qos.QoSProfile object>)

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

1

class rclpy.action.server.ActionServer(node, action_type, action_name, execute_callback, *, callback_group=None, goal_callback=<function default_goal_callback>, handle_accepted_callback=<function default_handle_accepted_callback>, cancel_callback=<function default_cancel_callback>, goal_service_qos_profile=<rclpy.qos.QoSProfile object>, result_service_qos_profile=<rclpy.qos.QoSProfile object>, cancel_service_qos_profile=<rclpy.qos.QoSProfile object>, feedback_pub_qos_profile=<rclpy.qos.QoSProfile object>, status_pub_qos_profile=<rclpy.qos.QoSProfile object>, result_timeout=900)

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

Rate

1

class rclpy.timer.Rate(timer, *, context)

用于 sleep 的实用工具。

方法列表:

方法

含义

备注

destroy

销毁实例

sleep

阻止直到计时器触发。

在回调中调用此功能时应小心谨慎。如果在单线程执行器(SingleThreadedExecutor)的回调中调用,可能会永远阻塞。

Timer

1

class rclpy.timer.Timer(callback, callback_group, timer_period_ns, clock, *, context=None)

Parameters

Parameter

1

class rclpy.parameter.Parameter(name, type_=None, value=None)

Parameter Service

1

class rclpy.parameter_service.ParameterService(node)

Logging

1

class rclpy.logging.LoggingSeverity

日志严重性级别枚举。

  • DEBUG = 10
  • ERROR = 40
  • FATAL = 50
  • INFO = 20
  • UNSET = 0
  • WARN = 30

Context

1

class rclpy.context.Context

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

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

Execution and Callbacks

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

  • Executors: 执行器负责回调的实际执行,应扩展 Executor 类。
  • Callback: 回调组用于执行回调的并发规则,并应扩展 CallbackGroup 类。
Executors

1

class rclpy.executors.Executor(*, context=None)

执行器的基类。

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

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

Callback Groups

1

class rclpy.callback_groups.CallbackGroup

回调组的基类。

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

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

参考资料

文章链接: https://cloud.tencent.com/developer/article/2436107

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-7-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • Initialization, Shutdown, and Spinning
  • Node
  • Topics
    • Publisher
      • Subscription
      • Services
        • Client
          • Service
          • Actions
            • Action Client
              • Action Server
                • Rate
                • Timer
            • Timer
            • Parameters
              • Parameter
                • Parameter Service
                • Logging
                • Context
                • Execution and Callbacks
                  • Executors
                    • Callback Groups
                    • 参考资料
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档