【零基础学ROS2-humble】——基础概念篇

学习链接:
官方文档: https://docs.ros.org/en/humble/Concepts/Basic/About-Actions.html
鱼香ROS2:https://fishros.com/d2lros2/#/

一、ROS2整体概述

机器人设计包含三个部分:

感知:激光雷达、深度相机、IMU、里程计、碰撞感知、建图

决策:路径规划算法、定位算法

控制:轮子驱动

1、ROS与ROS2:

ROS(Robot Operating System):可以安装再已有的操作系统上的软件库和工具集,其设计目的是简化在各种机器人平台上创建的复杂而强大的机器人行为的任务。

ROS2:

  • 是基于强类型匿名发布/订阅机制的中间件,该机制允许在不同进程之间传递消息。

    匿名:当订阅者获得一段数据时,它通常不知道或不关心最初是哪个发布者发送的(尽管它可以查明是否需要)。这种体系结构的好处是,可以随意更换发布者和订阅者,而不会影响系统的其他部分。

    强类型:ROS 消息中每个字段的类型(接口定义)都是类型化的,该类型在不同的级别上强制执行。每个字段的语义都定义良好。没有自动化的机制来确保这一点,但是所有核心 ROS 类型都具有与之相关联的强语义。例如,惯性测量组织的信息包含一个用于测量角速度的三维矢量,并且每个维度都被指定为弧度/秒。其他的解释不应该放在信息中。

  • ROS2系统的核心是 ROS 图。ROS 图指的是 ROS 系统中的节点网络以及它们之间的连接,它们通过这些连接进行通信。

架构对比:

该图出自论文:Exploring the Performance of ROS2,论文在线阅读地址:https://www.researchgate.net/profile/Takuya-Azumi/publication/309128426_Exploring_the_performance_of_ROS2/links/5c908801299bf14e7e84ce61/Exploring-the-performance-of-ROS2.pdf

在这里插入图片描述

  • os layer:
    • ros:只支持Linux
    • ros2:支持Linux、Windows、mac、RTOS
  • middleware layer:
    • ros:基于主从节点,所有节点通过master节点进行通信
    • ros2:去掉master节点,所有节点平等且可以1对1、1对n、n对n进行通信,通信使用DDS实现
  • application layer:
    • Python2到Python3的支持
    • 编译系统的改进(catkin到ament)
    • C++标准更新到c++11
    • 可以使用相同 API 的进程间和进程内通信

ROS2整体架构:

在这里插入图片描述

  • RCL(ROS Client Library)ROS客户端库,其实就是ROS的一种API,提供了对ROS话题、服务、参数、Action等接口
  • Application Layer即我们做ros2开发所在的层

二、基本概念

1、节点-nodes在这里插入图片描述

ROS2中的每个节点都单独负责一个模块化功能。如一个节点负责控制车轮转动、一个负责处理雷达数据等。

节点可以与同一进程中的其他节点、不同进程中的其他节点或不同计算机上的其他节点通信。

节点之间的连接是通过分布式发现过程建立的。

节点间的发现机制:(通过ROS2底层中间件自动进行)

  1. 当一个节点启动时,它会向网络上其他具有相同ROS域的节点(使用 ROS _ DOMAIN _ ID 环境变量设置)公布它的存在。其他节点用自身的信息响应此广告,以便建立适当的连接进行通信。
  2. 节点定期公布它们的存在,以便可以与新发现的实体建立连接,即使在最初的发现阶段之后也是如此。
  3. 节点脱机时向其他节点发出广告。

节点间的通信方式

  • 话题:topics
  • 服务:services
  • 动作:action
  • 参数:parameter

../../../_images/Nodes-TopicandService.gif

#常用命令
ros2 run <package_name> <executable_name>
ros2 node list
#重新映射允许您将默认节点属性(如节点名称、主题名称、服务名称等)重新分配给自定义值。
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
ros2 node info <node_name>

2、接口-interfaces

ROS2四种通信方式,除参数外,话题、服务和动作都支持自定义接口,对应的接口类型为: 消息(messages)、服务(services)和动作(actions)。

ROS 2使用简化的描述语言,即接口定义语言 (IDL) 来描述这些接口。这种描述使ROS工具可以轻松地以多种目标语言自动的生成接口类型的源文件。

  • msg(消息):

    • 位置:ROS包的 msg/ 目录下的 .msg 文件中描述和定义
    • 字段:
      • 每个字段由一个类型和一个名称组成,用一个空格分隔,添加默认值可再用一个空格分割,如 int32 my_int 16 ;
      • 字段类型可以是内置类型或者ROS2自己定义的消息描述名称;
      • 字段名必须是小写字母和数字字符,用下划线分隔单词。它们必须以字母字符开头,不能以下划线结尾,也不能有两个连续的下划线
    • 常量:名称要大写,无法通过程序更改,通过“=”赋值
  • srv(服务):

    • ROS包的 srv/ 目录下的 .srv 文件中描述和定义。

    • 组成:由一个请求和一个响应的msg类型组成,以“—”分隔。不能在服务中嵌入其他服务

      string str
      ---
      string str
      
  • action(动作):

    • .action 文件描述操作。

    • 组成:它们由三部分组成: 目标、结果和反馈。

      <request_type> <request_fieldname>
      ---
      <response_type> <response_fieldname>
      ---
      <feedback_type> <feedback_fieldname>
      

3、话题-topics

话题是 ROS 2中非常重要并且最常用的通信方式之一,它充当节点交换消息的总线。

应该用于连续的数据流,如传感器数据,机器人状态等。

基于订阅发布模型,可以实现1对n、n对1、n对n通信,为发布者到订阅者单向通信。

../../../_images/Topic-SinglePublisherandSingleSubscriber.gif
在这里插入图片描述

发布服务器和订阅服务器必须发送和接收相同类型的消息才能进行通信。

#常用命令
ros2 topic list
ros2 topic list -t 
#查看某个话题发布的数据
ros2 topic echo <topic_name>
ros2 topic info <topic_name>
ros2 interface show <topic_type>
# 发布频率参数 --once/--rate num
ros2 topic pub <topic_name> <msg_type> '<args>'
ros2 topic hz <topic_name>

4、服务-services

相对于主题的发布者-订阅者模型,服务基于请求和响应模型。虽然主题允许节点订阅数据流并获得持续更新,但服务只有在客户端特定调用时才提供数据。

服务即远程过程调用,换句话说,一个节点可以对另一个节点进行远程过程调用,该节点将执行计算并返回结果。

同一服务,可以有多个客户端,但只能有一个服务端发布此服务,服务端和客户端双向通信。

../../../_images/Service-SingleServiceClient.gif

../../../_images/Service-MultipleServiceClient.gif

#常用命令
ros2 service list
ros2 service list -t
ros2 service type <service_name>
#查看某种类型的全部服务
ros2 service find <type_name>
ros2 interface show <type_name>
ros2 service call <service_name> <service_type> <arguments>

5、参数-parameters

参数是节点的配置值。可以将参数视为节点设置。节点可以将参数存储为整数、浮点数、布尔值、字符串和列表。在 ROS2中,每个节点维护自己的参数。

#常用指令
ros2 param list
ros2 param get <node_name> <parameter_name>
ros2 param set <node_name> <parameter_name> <value>
os2 param dump <node_name> > 文件名.yaml
ros2 param load <node_name> <parameter_file>
ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>

6、动作-actions

动作是ROS2中的通信类型之一,用于长时间运行的任务,由三部分组成:目标、反馈和结果。

动作基于话题和服务构造,功能类似于服务,但是可以取消操作,并且除响应服务外,还提供稳定的反馈。

动作使用客户机-服务器模型,类似于发布者-订阅者模型。“ action client”节点向“ action server”节点发送目标,“ action server”节点确认目标并返回反馈流和结果。每个动作只有一个server节点,可以有多个client节点。

  • server:是接受远程过程请求并对其执行某些过程的实体。它还负责随着操作的进展发送反馈,并应对取消/抢占请求作出反应。
  • client:

../../../_images/Action-SingleActionClient.gif

#常用命令
ros2 node info <node-name>
ros2 action list
ros2 action list -t
ros2 action info <node-name>
ros2 interface show <node-type>
ros2 action send_goal <action_name> <action_type> <values>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值