ROS2官方教程:ROS2 概念概览

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

原文:https://index.ros.org/doc/ros2/Overview-of-ROS-2-concepts/

ROS2 概念概览

ROS是一个基于匿名消息发布(Publish)或订阅(Subscribe)机制的中间层,这种机制可以帮助消息能够在不同的ROS进程之间传输。

在ROS2系统中的核心是ROS图(ROS Graph),ROS图指的是一个ROS系统中的节点网络以及它们之间通信时的联络。

快速概览图的概念

  • 节点(Nodes):一个节点就是一个ROS的实例,每个实例可以通过ROS来完成与其他节点之间的通信;
  • 消息(Messages):当发布或订阅一个主题(Topic)时,ROS的消息类型;
  • 主题(Topics):节点可以发布消息到主题,或者订阅主题从而来接收消息;
  • 发现(Discovery):一个自动化的过程,允许节点决定如何与其他节点进行通信;

节点

在ROS图中,节点是必要的组成部分。ROS节点使用ROS客户端程序库(ROS Client Library, RCL)来实现与其他节点之间的通信。节点可以从主题中发布或订阅消息,同时也可以提供或使用服务。每个节点具有一些可以配置的参数。节点之间的通信是通过一个分布式的发现进程(distributed discovery process)来建立的。节点可以在同一个进程中,也可以在不同的进程中,甚至是在不同的机器中。这些概念将会在之后的章节描述中详细说明。

客户端程序库

ROS客户端程序库允许不同编程语言的节点之间进行通信。ROS客户端程序库是实现最通用功能的核心,实现了不同语言的ROS API所需要的通用功能。所以与特定编程语言相关的ROS客户端程序库是很容易编写的,而且他们有很多一致的行为特性。

ROS2的团队维护着以下两个客户端程序库:

  • rclcpp :是C++的客户端程序库
  • rclpy :是Python的客户端程序库

另外,其他语言的客户端程序库已经在ROS社区中被开发,可以参考ROS2 Client Libraries: https://index.ros.org/doc/ros2/Concepts/ROS-2-Client-Libraries/

发现

通过ROS2底层的中间件来实现自动化发现节点的任务,可以简单描述如下:

  1. 当一个节点启动后,它会向处于同一个ROS域(ROS demain)网络中的其他节点广播它存在的状态,通过设置ROS_DOMAIN_ID环境变量来实现。其他节点响应这个广播并回应各自的信息,从而建立起准确的连接,进而可以实现通信;
  2. 同时,所有节点周期性的广播它存在的状态,从而可以在新的节点建立之后能够与该节点建立通信,甚至在最初的发现机制之后就可以建立连接;
  3. 当一个节点关闭时,它会广播关闭的消息给其他节点;

节点仅仅会与兼容的QoS(Quality of Service)设置的其他节点建立连接。

一个例子

在一个终端中,启动一个C++节点来发布消息到一个主题:

ros2 run demo_nodes_cpp talker

在另一个终端中,启动第二个节点,可以选择Python节点,用来从同一个主题中接收消息:

ros2 run demo_nodes_py listener

可以发现,两个节点之间自动的实现了通信,开始交换数据。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章