ROS2 基本概念
ROS2 是一种面向机器人开发的软件平台,其核心是一套用于不同进程间匿名的发布、订阅、传递信息的中间件,并提供了一系列工具和库,帮助开发者构建机器人应用程序。
基本概念
下面是 ROS2 中的一些基本概念:
- 节点(Node):节点是 ROS2 应用程序的基本组成单元。一个节点是一个可执行文件,可以包含多个话题(Topic)、服务(Service)和行为(Action)。
- 话题(Topic):节点之间传输消息的通道。一个节点可以发布(Publish)或订阅(Subscribe)一个或多个话题。发布者(Publisher)将消息发布到话题上,订阅者(Subscriber)从话题上接收消息。
- 服务(Service):一种基于请求/响应模式的通信方式,其中一个节点向另一个节点发送请求消息,并等待响应消息。请求者(Client)向服务端(Server)发送请求消息,服务端收到请求消息后处理并发送响应消息。
- 行为(Action):与服务类似,但是它支持异步通信模式,即客户端可以向服务器发送请求,并继续执行其他任务。当服务器处理请求并返回结果时,客户端会收到一个通知。
- 参数服务器(Parameter Server):ROS2 的一个分布式参数存储系统,它可以用于存储和共享应用程序参数,以便多个节点共享使用。
- 消息(Message):ROS2 中节点之间传输的数据类型。一个消息包含一组数据字段,用于描述传输的信息。ROS2 支持多种常见的消息类型,如字符串、数值、图像等。
- 行为客户端(Action Client):用于发送异步行为请求的 ROS2 节点。它可以向行为服务器(Action Server)发送请求,并等待响应。在等待响应的同时,节点可以继续执行其他任务。
- 坐标系(Frame):ROS2 中用于表示物体位置和方向的概念。坐标系是一个基于三维空间的参考系,用于确定物体的位置和朝向。ROS2 提供了一些用于坐标系变换的库,以便在不同坐标系之间进行转换。
这些概念是 ROS2 中最基本的一些概念,熟练掌握它们对于理解ROS2应用程序的设计和实现非常重要。
节点和服务
ROS2 中的节点(Node)和服务(Service)是两种不同的概念,它们有不同的作用和使用方式。
节点是 ROS2 应用程序的基本组成单元,一个节点可以发布(Publish)或订阅(Subscribe)一个或多个话题(Topic),以及提供或使用服务(Service)和行为(Action)等。节点之间可以相互通信,通过话题、服务和行为来传输消息和调用函数。
服务是一种基于请求/响应模式的通信方式,其中一个节点向另一个节点发送请求消息,并等待响应消息。服务由一个服务端(Server)和一 个或多个客户端(Client)组成。客户端向服务端发送请求消息,服务端收到请求消息后处理并发送响应消息。服务通常用于执行一些需要时间和计算的操作,例如传感器数据的读取和处理、运动控制命令的发送等。
区别在于,节点主要用于发布和订阅消息,以及调用行为,可以将消息发送到多个节点或者从多个节点接收消息,而服务主要用于客户端和服务端之间的请求和响应通信,只有一个客户端向一个服务端发送请求,服务端只响应该客户端的请求,服务端也只向该客户端发送响应。另外,节点通常是一直运行的,而服务只在需要的时候才被调用。
在 ROS2 应用程序中,节点和服务通常是配合使用的。节点可以发布消息来通知其他节点进行某些操作,而服务可以用于向其他节点请求某些操作。
客户端程序库
ROS2 基于客户端程序库(ROS Client Library,RCL)编程,可以使用不同语言编写的节点进行通信。在不同的编程语言中都有对应的 ROS2 客户端程序库,RCL 实现了 ROS2 的基本 API。使得不同编程语言的客户端更加容易编写,也保证了其行为更加一致。
ROS2 团队目前主要维护的是 rclcpp 和 rclpy 两个客户端程序库:
客户端程序库 | 描述 | API 文档 |
---|---|---|
rclcpp | C++ 客户端程序库 | https://docs.ros2.org/latest/api/rclcpp/ |
rclpy | Python 客户端程序库 | https://docs.ros2.org/latest/api/rclpy/ |