Adds code examples for ROS2 core concepts and minor updates in ros.md. (#355)

Co-authored-by: Jack <sjkai1@126.com>
This commit is contained in:
Kaiyan XIAO
2022-06-02 10:43:55 +01:00
committed by GitHub
parent fdef49771e
commit 0fc14eb8fe
3 changed files with 918 additions and 2 deletions

View File

@@ -31,7 +31,19 @@ Service即数据分发服务,如 :numref:`ROS2\_arch`所示。
ROS2依赖于使用shell环境组合工作区。"工作区"Workspace是一个ROS术语表示使用ROS2进行开发的系统位置。核心ROS2
工作区称为Underlay。随后的工作区称为Overlays。使用ROS2
进行开发时,通常会同时有多个工作区处于活动状态。接下来我们详细介绍一下ROS2的核心概念这一部分我们参考了文献 [^1])。
进行开发时,通常会同时有多个工作区处于活动状态。
#### ROS还是ROS2
简单来说除非你的项目已经搭建于ROS之上或者你需要使用某个只在ROS框架下存在的功能库否则大多数情况下都应该直接选择ROS2。
ROS是一个很好的框架。它有着成熟活跃的社区种类繁多的功能库同时也有十分成熟的商业项目例如Mobile Industrial Robots公司的MiR robot
但是ROS也有很多缺陷例如工业项目中ROS的稳定性一直是个问题必须进行额外的系统设计来增强到能够接受的程度。
这也是为什么ROS2会对框架的很多部分都进行重新设计的原因因此ROS2也能更好的支持工业机器人项目。
除此之外ROS的社区也在积极拥抱ROS2。官方和社区都提供了详细的教程来帮助开发者将ROS的库迁移到ROS2的框架内。
同时官方也宣布了ROS Noetic Ninjemys是最后一版ROS并且预计于2025年五月停止官方支持End of Life date
本书将跟随官方的建议使用ROS2作为讲解的框架。接下来我们详细介绍一下ROS2的核心概念这一部分我们参考了文献 [^1])。
### ROS2 Nodes
@@ -64,7 +76,7 @@ ROS 2 中单个可执行文件C++ 程序、Python
### ROS2 Topics
ROS2将复杂系统分解为许多模块化节点。主题Topics是 ROS
Graph的重要元素它充当节点交换消息的总线。一个节点可以向任意数量的主题发布数据同时订阅任意数量的主题 :numref:`ros2\_topics`所示。主题是数据在节点之间以及因此在系统的不同部分之间移动的主要方式之一。
Graph的重要元素它充当节点交换消息的总线。一个节点可以向任意数量的主题发布数据同时订阅任意数量的主题:numref:`ros2\_topics`所示。主题是数据在节点之间以及因此在系统的不同部分之间移动的主要方式之一例如移动机器人的激光测距仪的相关节点可以将读数发布到lidar这个主题上然后导航模块和安全模块的相关节点都可以订阅这个主题从而持续的获得想要的信息
rqt是ROS的一个软件框架以插件的形式实现了各种 GUI 工具。可以在 rqt
中将所有现有的GUI工具作为可停靠窗口运行。这些工具仍然可以以传统的独立方法运行但rqt可以更轻松地同时管理屏幕上的所有各种窗口。
@@ -81,6 +93,8 @@ rqt是ROS的一个软件框架以插件的形式实现了各种 GUI 工具。
图中节点的另一种通信方式。服务基于调用和响应模型,而不是主题的发布者-订阅者模型。虽然主题允许节点订阅数据流并获得持续更新但服务仅在客户端专门调用它们时才提供数据。节点可以使用ROS2中的服务进行通信。与主题那种单向通信模式节点发布可由一个或多个订阅者使用的信息的方式不同
服务是客户端向节点发出请求的请求/响应模式提供服务,服务处理请求并生成响应。
例如当一个服务机器人想要尝试识别一个条形码时控制模块的相关节点Service客户端可以发送照相机截图到条形码识别节点Service服务端后者尝试识别并返回结果给控制模块。
![ROS2服务](../img/ch13/ros2_services.png)
:width:`800px`