ROS2官方教程:有关于ROS2的客户端程序库

ROS2的客户端程序库提供API,用于访问节点、主题和服务等。它们支持多种编程语言,如Python和C++,并利用RCL实现通用功能,如时间、参数和日志。RCL的C接口确保跨语言行为一致,而语言特定功能在各库中独立实现。客户端程序库如rclcpp和rclpy由ROS2团队维护,并有其他语言的实现,如Java、C#和Node.js。
摘要由CSDN通过智能技术生成

这是我对ROS官方ROS2教程的翻译,纯个人理解,对于文中的关键词汇或不确定的语句标注了原文,如有错误或翻译问题还请指出。

文章翻译并未按照逐句逐词的方式进行,而是加入了我的一些主观思考,不过原则上还是会以原文思路为主。

原文:https://index.ros.org/doc/ros2/Concepts/ROS-2-Client-Libraries/

有关于ROS2的客户端程序库

概览

ROS2的客户端程序库(Client Library)是用户实现ROS代码时可以使用的API集合。这些API可以允许用户来访问前边提到的那些ROS概念,比如节点(nodes)、主题(topics)、服务(services)等。客户端程序库已经正在被各种编程语言实现,从而用户可以选择最适合他们应用程序的编程语言来编写ROS代码。比如说,你可能需要使用Python来编写可视化工具,因为Python语言可以让原型迭代更快,然而你的系统中的另一些代码块可能需要考虑性能问题,这些节点使用C++语言来实现可能会更好。

使用不同编程语言的客户端程序库编写的节点同样能够共享消息,这是因为所有的客户端程序库中都实现了代码生成器,从而允许用户可以使用期望的语言来与ROS的接口文件进行交互。

另外对于一些特定编程语言特殊的通信工具,客户端程序库将核心功能暴露给用户,这更像的ROS的风格。比如,下边是一个通过客户端程序库可以访问的功能列表:

  • 名字和命名空间
  • 时间(真实时间与仿真时间)
  • 参数
  • 终端日志
  • 线程模型
  • 进程间通信

支持的客户端程序库

C++客户端程序库(rclcpp)和Python客户端程序库(rclpy)都是利用RCL(ROS Client Library)中常用功能实现的客户端程序库。

这两个库现在已经由ROS2团队维护,并且ROS2社区的成员已经正在创建其他的一些客户端程序库,比如:

  • JVM 和 Android
  • Objective C 和 iOS
  • C#
  • Swift
  • Node.js
  • Ada
  • _.NET Core, UWP 和 C#

通用性功能:RCL

很多在客户端程序库中的功能并不是某个客户端程序库编程语言所特有的功能。比如,参数的行为以及命名空间的逻辑,这些概念应该在所有编程语言中都是一致的。所以,客户端程序库可以使用一个通用的RCL内核接口来实现这些逻辑和行为,而不需要从原型中使用特殊编程语言来实现这些通用功能。进而,客户端程序库只需要使用外部函数接口来包装这些RCL中的通用功能,这使得实际开发的客户端程序库更轻量级并且更易于扩展。因为这个原因,通用的RCL功能使用C语言暴露出来,因为C语言是最容易包装的一种语言。

除了能够让客户端程序库更加轻量级,包装RCL通用内核的另外一个优势是编程语言之间的行为逻辑将更为固定。如果在RCL内核上有任何关于功能性逻辑和行为的改变,比如命名空间,所有包装RCL通用内核的客户端程序库均会被更新。而且,包装通用内核将有利于在修改bug时能够以最小的工作量维护多个客户端程序库。

RCL中的API文档在这里:http://docs.ros2.org/latest/api/rcl/

编程语言特殊的功能

客户端程序库中与特定编程语言相关的特性或属性在RCL内核中没有实现,而是在每一个客户端程序库中单独实现。比如,使用spin函数的线程模型将会在特殊编程语言的客户端程序库中实现。

实例

有个公开的视频集,推荐看一下,其中从17:25开始的一段内容,演示了使用rclpy实现的发布者节点与使用rclcpp实现的订阅者节点之间的信息交换。

与ROS1的比较

在ROS1中,所有的客户端程序库功能都是需要从头开发的。比如说,ROS1中的Python客户端程序库完全的用Python语言实现,这样做的好处是不需要编译代码,然而,命名约定和行为在客户端程序库之间经常不是固定的,这就需要在多个不同的地方修复bug,并且有很多功能仅仅在一个客户端程序库中实现,比如UDPROS。

总结

通过使用通用内核的RCL,客户端程序库可以使用不同的编程语言来方便的编写,并且还能保证行为一致性。

ROS2编程基础课程文档 ROS 2(机器人操作系统2)是用于机器人应用的开源开发套件。ROS 2之目的是为各行各业的开发人员提供标准的软件平台,从研究和原型设计再到部署和生产。 ROS 2建立在ROS 1的成功基础之上,ROS 1目前已在世界各地的无数机器人应用中得到应用。 特色 缩短上市时间 ROS 2提供了开发应用程序所需的机器人工具,和功能,可以将时间花在对业务非常重要的工作上。因为它 是开源的,所以可以灵活地决定在何处以及如何使用ROS 2,以及根据实际的需求自由定制,使用ROS 2 可以大幅度提升产品和算法研发速度! 专为生产而设计 凭借在建立ROS 1作为机器人研发的事实上的全球标准方面的十年经验,ROS 2从一开始就被建立在工业级 基础上并可用于生产,包括高可靠性和安全关键系统。 ROS 2的设计选择、开发实践和项目管理基于行业利 益相关者的要求。 多平台支持 ROS 2在Linux,Windows和macOS上得到支持和测试,允许无缝开发和部署机器人自动化,后端管理和 用户界面。分层支持模型允许端口到新平台,例如实时和嵌入式操作系统,以便在获得兴趣和投资时引入和推 广。 丰富的应用领域 与之前的ROS 1一样,ROS 2可用于各种机器人应用,从室内到室外、从家庭到汽车、水下到太空、从消费 到工业。 没有供应商锁定 ROS 2建立在一个抽象层上,使机器人和应用程序与通信技术隔离开来。抽象底层是通信代码的多种实现, 包括开源和专有解决方案。在抽象顶层,核心和用户应用程序是可移植的。 建立在开放标准之上 ROS 2中的默认通信方法使用IDL、DDS和DDS-I RTPS等行业标准,这些标准已广泛应用于从工厂到航空 航天的各种工业应用中。 开源许可证 ROS 2代码在Apache 2.0许可下获得许可,在3条款(或“新”)BSD许可下使用移植的ROS 1代码。这两个 许可证允许允许使用软件,而不会影响用户的知识产权。 全球社区 超过10年的ROS项目通过发展一个由数十万开发人员和用户组成的全球社区,为机器人技术创建了一个庞大 的生态系统,他们为这些软件做出贡献并进行了改进。 ROS 2由该社区开发并为该社区开发,他们将成为未 来的管理者。 行业支持 正如ROS 2技术指导委员会成员所证明的那样,对ROS 2的行业支持很强。除了开发顶级产品外,来自世界 各地的大大小小公司都在投入资源为ROS 2做出开源贡献。 与ROS1的互操作性 ROS 2包括到ROS 1的桥接器,处理两个系统之间的双向通信。如果有一个现有的ROS 1应用程序, 可 以通过桥接器开始尝试使用ROS 2,并根据要求和可用资源逐步移植应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值