0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ROS学习笔记之ROS基本概念

jf_78858299 来源:Joes机器人 作者:Joes机器人 2023-05-19 17:11 次阅读

ROS的概念分为三个层次:文件系统层、计算图层、社区层,这些层次以及概念将会在接下来的章节介绍。

除了这三个层次的概念,ROS同样定义两个names类型,包资源名称和图形资源名称。

1、ROS文件系统层次

文件系统层概念主要指在硬盘里能看到的ROS目录和文件, 例如:

  • Packages : Packages是在ROS中整理及组织软体的主要单元。一个Packages包含节点(ROS runtime processes)、ROS程式库(ROS-dependent library)、数据集(datasets)、配置文件(configuration files)⋯⋯等等。Packages是您在ROS中能建立及分享的最小单元。
  • Metapackages : Metapackages 是一组具体的服务相关的功能包。大部分的metpackages 只作为转换rosbuild Stacks的向后兼容的备选。
  • Package Manifests : Manifests (package.xml) 描述一个package的元信息,包括了package的名字,版本,功能简述,证书信息,依赖关系,以及一些其他的被export的package所有的信息。关于package.xml 的文件说明,参考REP-0127.
  • Repositories : 代码仓库是使用VCS版本控制系统的软件包集合,软件包利用版本控制维持同一版本,它能使用catkin自动发布工具bloom进行发布。这些代码仓库常通过映射来进行转换 rosbuild Stacks.仓库可以是只有一个软件包。
  • Message (msg) types : 存储在my_package/msg/MyMessageType.msg的Message文件,主要定义了ROS系统的messages传输的数据结构。
  • Service (srv) types : 存储在 my_package/srv/MyServiceType.srv的服务services文件,定义了ROS的服务通信时的请求(request )和响应(response )相关的数据结构。

2、ROS计算图层次

  • 计算图*是ROS在点对点网络里整合并处理数据的过程。基本计算图概念是 节点 , 主机 , 参数服务器 , 消息 , 服务 , 话题 , 和 数据包 ,它们通过不同的方式提供数据给图层。

这些概念是在ros_comm库里实现的:

  • Nodes : 节点主要执行计算处理 。ROS被设计为细粒度的模块化的系统;一个机器人控制系统通常有很多节点组成 。例如,一个节点控制激光测距仪,一个节点控制轮电机,一个节点执行定位,一个节点执行路径规划,一个节点提供系统图形界面,等等。一个ROS节点通过ROS客户端库 client library编写,例如 roscpp 或rospy
  • Master : ROS Master 为计算图的其余部分提供名称注册和查找。没有 Master,节点将无法找到彼此、交换消息或调用服务。
  • Parameter Server : 参数服务器允许将数据按密钥存储在一个中央位置。它目前是 Master 的一部分。
  • Messages : 节点之间通过传递消息进行通信。消息只是一种数据结构,包括类型化字段。支持标准基本类型(整数、浮点数、布尔值等),以及基本类型数组。消息可以包括任意嵌套的结构和数组(很像 C 结构)。
  • Topics : 消息通过具有发布/订阅语义的传输系统进行路由。节点通过将消息发布到给定主题来发送消息。主题是用于标识消息内容的名称。对某种数据感兴趣的节点将订阅适当的主题。一个主题可能有多个并发发布者和订阅者,一个节点可能发布和/或订阅多个主题。通常,发布者和订阅者并不知道彼此的存在。这个想法是将信息的生产与其消费分离。从逻辑上讲,可以将主题视为强类型消息总线。每条总线都有一个名称,任何人都可以连接到总线来发送或接收消息,只要它们是正确的类型。
  • Services : 发布/订阅模型是一种非常灵活的通信范式,但其多对多、单向传输不适用于请求/回复交互,而这在分布式系统中通常是必需的。请求/回复是通过服务完成的,服务由一对消息结构定义:一个用于请求,一个用于回复。提供节点以某个名称提供服务,客户端通过发送请求消息并等待回复来使用该服务。ROS 客户端库通常将这种交互呈现给程序员,就好像它是一个远程过程调用。
  • Bags : Bags 是一种用于保存和回放 ROS 消息数据的格式。袋子是存储数据(例如传感器数据)的重要机制,这些数据可能难以收集,但却是开发和测试算法所必需的。
    ROS Master 在 ROS 计算图中充当名称服务。它存储 ROS 节点的主题和服务注册信息。节点与 Master 通信以报告其注册信息。当这些节点与 Master 通信时,它们可以接收有关其他注册节点的信息并进行适当的连接。当这个注册信息发生变化时,Master 也会对这些节点进行回调,这允许节点在新节点运行时动态创建连接。
    节点直接连接到其他节点;Master 只提供查找信息,很像 DNS 服务器。订阅主题的节点将从发布该主题的节点请求连接,并将通过商定的连接协议建立该连接。ROS 中最常用的协议称为 TCPROS,它使用标准的 TCP/IP 套接字。
    这种架构允许解耦操作,其中名称是构建更大和更复杂系统的主要手段。名称在 ROS 中具有非常重要的作用:节点、主题、服务和参数都有名称。每个 ROS 客户端库都支持名称的命令行重映射,这意味着可以在运行时重新配置已编译的程序以在不同的计算图拓扑中运行。
    例如,要控制 Hokuyo 激光测距仪,我们可以启动 hokuyo_node 驱动程序,它与激光通信并在扫描主题上发布 sensor_msgs/LaserScan 消息。为了处理这些数据,我们可能会使用laser_filters 编写一个节点来订阅关于扫描主题的消息。订阅后,我们的过滤器会自动开始接收来自激光的消息。
    注意两侧是如何解耦的。hokuyo_node 节点所做的只是发布扫描,不知道是否有人订阅。过滤器所做的只是订阅扫描,而不知道是否有人发布它们。这两个节点可以按任意顺序启动、终止和重新启动,而不会引发任何错误情况。
    稍后我们可能会为我们的机器人添加另一个激光器,因此我们需要重新配置我们的系统。我们需要做的就是重新映射使用的名称。当我们开始我们的第一个 hokuyo_node 时,我们可以告诉它重新映射 scan 到 base_scan,并对我们的过滤器节点做同样的事情。现在,这两个节点都将使用 base_scan 主题进行通信,而不会听到关于 scan 主题的消息。然后我们可以为新的激光测距仪启动另一个 hokuyo_node。

图片

3、ROS 交流社区

ROS 社区级概念是 ROS 资源,使不同的社区能够交换软件和知识。这些资源包括:

  • Distributions : ROS 发行版是您可以安装的版本化堆栈的集合。发行版与 Linux 发行版扮演着类似的角色:它们使安装一组软件变得更加容易,并且它们还可以在一组软件中保持一致的版本。
  • Repositories :ROS 依赖于代码存储库的联合网络,不同的机构可以在其中开发和发布自己的机器人软件组件。
  • The ROS Wiki : ROS 社区 Wiki 是记录有关 ROS 信息的主要论坛。任何人都可以注册一个帐户并贡献自己的文档、提供更正或更新、编写教程等等。
  • Bug Ticket System :有关文件票的信息,请参阅票证。
  • Mailing Lists : ros-users 邮件列表是有关 ROS 新更新的主要沟通渠道,也是询问有关 ROS 软件问题的论坛。
  • ROS Answers : 用于回答您的 ROS 相关问题的问答网站。
  • Blog : 柳叶车库博客提供定期更新,包括照片和视频

4、名称

4.1、图资源名称

图资源名称提供分层命名结构,用于 ROS 计算图中的所有资源,例如节点、参数、主题和服务。这些名称在 ROS 中非常强大,并且对于 ROS 中如何组成更大、更复杂的系统至关重要,因此了解这些名称的工作原理以及如何操作它们至关重要。

在我们进一步描述名称之前,这里有一些示例名称:

  • / (全局命名空间)
  • /foo
  • /stanford/robot/name
  • /wg/node1
    图资源名称是ROS中提供封装的重要机制。每个资源都定义在一个命名空间中,它可以与许多其他资源共享。通常,资源可以在其命名空间内创建资源,并且它们可以访问在其自己的命名空间内或之上的资源。可以在不同命名空间中的资源之间建立连接,但这通常由两个命名空间上方的集成代码完成。这种封装隔离了系统的不同部分,以免意外获取错误命名的资源或全局劫持名称。
    名称是相对解析的,因此资源不需要知道它们在哪个命名空间中。这简化了编程,因为可以编写一起工作的节点,就好像它们都在顶级命名空间中一样。当这些节点被集成到一个更大的系统中时,它们可以被下推到一个定义它们代码集合的命名空间中。例如,可以将一个斯坦福演示和一个 Willow Garage 演示合并到一个带有 stanford 和 wg 子图的新演示中。如果两个演示都有一个名为“camera”的节点,它们就不会发生冲突。需要对整个图形可见的工具(例如图形可视化)以及参数(例如 demo_name)可以由顶级节点创建。

4.1.1、有效名称

有效名称具有以下特征:

1.第一个字符是字母字符 ([a-z|A-Z])、波浪号 (~) 或正斜杠 (/)

2.后续字符可以是字母数字 ([0-9|a-z|A-Z])、下划线 (_) 或正斜杠 (/)

例外:基本名称(如下所述)中不能包含正斜杠 (/) 或波浪号 (~)。

4.1.2、解决

ROS中有四种类型的图资源名称:base、relative、global和private,它们的语法如下:

  • base
  • relative/name
  • /global/name
  • private/name
    默认情况下,解析是相对于节点的命名空间完成的。例如,节点 /wg/node1 具有命名空间 /wg,因此名称 node2 将解析为 /wg/node2。
    没有命名空间限定符的名称是基本名称。基名实际上是相对名的一个子类,具有相同的解析规则。基本名称最常用于初始化节点名称。
    以“/”开头的名称是全局的——它们被认为是完全解析的。应尽可能避免使用全局名称,因为它们限制了代码的可移植性。
    以“
    ”开头的名称是私有的。它们将节点的名称转换为命名空间。例如,命名空间 /wg/ 中的 node1 具有私有命名空间 /wg/node1。私有名称可用于通过参数服务器将参数传递到特定节点。

以下是一些名称解析示例:

Node Relative (default) Global Private
/node1 bar->/bar /bar->/bar ~bar->/node1/bar
/wg/node2 bar->/wg/bar /bar->/bar ~bar->/wg/node2/bar
/wg/node3 foo/bar->/wg/foo/bar /foo/bar->/foo/bar ~foo/bar->/wg/node3/foo/bar

4.1.3、重新映射

在命令行启动节点时,可以重新映射 ROS 节点中的任何名称。有关此功能的更多信息,请参阅重新映射参数。

4.2、包资源名称

包资源名称在具有文件系统级概念的 ROS 中使用,以简化引用磁盘上文件和数据类型的过程。包资源名称非常简单:它们只是资源所在的包的名称加上资源的名称。例如,名称“std_msgs/String”指的是“std_msgs”包中的“String”消息类型。

可以使用包资源名称引用的一些与 ROS 相关的文件包括:

  • Message (msg) types
  • Service (srv) types
  • Node types
    包资源名称与文件路径非常相似,只是它们要短得多。这是因为 ROS 能够在磁盘上定位包并对它们的内容做出额外的假设。例如,消息描述始终存储在 msg 子目录中并具有 .msg 扩展名,因此 std_msgs/String 是 path/to/std_msgs/msg/String.msg 的简写。同样,Node 类型 foo/bar 相当于在 Package foo 中搜索具有可执行权限的名为 bar 的文件。

4.2.1、有效名称

包资源名称具有严格的命名规则,因为它们经常用于自动生成的代码中。因此,一个 ROS 包不能有除下划线以外的特殊字符,它们必须以字母字符开头。有效名称具有以下特征:

1.第一个字符是字母字符 ([a-z|A-Z])

2.后续字符可以是字母数字 ([0-9|a-z|A-Z])、下划线 (_) 或正斜杠 (/)

3.最多有一个正斜杠 ('/')。

4.3、 代码接口

roscpp::names 接口参考 (ROS Indigo)
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算
    +关注

    关注

    2

    文章

    449

    浏览量

    38788
  • ROS
    ROS
    +关注

    关注

    1

    文章

    278

    浏览量

    17001
收藏 人收藏

    评论

    相关推荐

    ROS基本概念和系统架构 ROS的安装和简单测试

    前言:一直都觉得ROS很神秘,到底是个操作系统,仅凭称呼就让我望而却步了。但ROS和自动驾驶仿真有着千丝万缕的联系,作为仿真软件和智驾算法的数据桥梁,ROS是个绕不开的话题,所以还是得硬着头皮啃一啃。然后用大白话讲给你听,最好再
    的头像 发表于 11-15 12:42 6238次阅读
    <b class='flag-5'>ROS</b>的<b class='flag-5'>基本概念</b>和系统架构 <b class='flag-5'>ROS</b>的安装和简单测试

    超详细 ROS安装教程

    :华硕笔记本 + Windows 10 + Ubuntu 16.04 双系统Ubuntu 硬盘大小: 100G内存: 8G显卡: 也不是用来打dota, 所以随便啦啦啦~\(≧▽≦)/~啦啦啦Ros版本
    发表于 05-16 19:35

    什么是ROS?如何学习ROS

    什么是ROS?如何学习ROS
    发表于 11-11 07:21

    ROS简介

    目录一、ROS简介1、什么是ROS2、ROS产生、发展和壮大的原因和意义二、在Ubuntu系统中,安装对应版本的ROS软件1、确定Ubuntu配置2、添加
    发表于 12-17 08:24

    什么是ROSROS产生、发展和壮大的原因和意义

    机器人操作系统(ROS)入门(嵌入式系统应用开发)一、ROS 基本问题1. 什么是 ROS2. ROS 产生、发展和壮大的原因和意义二、安装 ROS
    发表于 12-17 06:08

    怎么入门ROS

    你是不是还在迷茫怎么入门ROS?是不是想找平台和大家一起交流?不论你是准备用ROS做导航定位算法、计算机视觉、运动控制,还是可视化仿真,都可以从这里找到不错的资源,快进来一起一起学习吧!最后,非常感谢原作者小白机械师整理的
    发表于 02-24 07:31

    搭建ARM+ROS的硬件载体ROS的移植及测试方法

      1. 准备工作  经过前面的环境搭建,HDG2L-IoT评估套件已经能稳定地运行Ubuntu+docker环境,当前需要下载运行ROS镜像即可。  本文参考ROS官方文档《Getting
    发表于 03-09 13:55

    ROS 学习笔记五:对Arduino环境刮目相看

    ROS 学习笔记五:对Arduino环境刮目相看
    发表于 11-29 09:51 2次下载
    <b class='flag-5'>ROS</b> <b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b>五:对Arduino环境刮目相看

    ROS学习笔记七:ROSSerial初试

    起来得心应手的还是MCU,所以如何将MCU控制的硬件和ROS系统相连,可以基于ROS的信息交互机制实现控制和反馈,是学习ROS、基于ROS
    发表于 12-07 14:51 9次下载
    <b class='flag-5'>ROS</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b>七:ROSSerial初试

    ROS基本介绍

    近来找到的实习主要是做智能车控制,用到的也就是ROS机器人操作系统,ROS需要运行在一个操作系统上,这个操作系统常用的就是Linux,而公司用的就是Ubuntu,所以Ubuntu-ROS组合就是实习的主要
    的头像 发表于 05-19 17:07 7387次阅读
    <b class='flag-5'>ROS</b>基本介绍

    ROS1的通信架构的基础通信方式及相关概念

    ROS的通信架构是ROS的灵魂所在,它包括数据处理,进程运行,消息传递等** 。这篇文章主要介绍ROS1的通信架构的基础通信方式和相关概念,因为RO
    的头像 发表于 05-19 17:23 3427次阅读
    <b class='flag-5'>ROS</b>1的通信架构的基础通信方式及相关<b class='flag-5'>概念</b>

    ROS操作系统学习笔记3

    摘要:这篇文章主要介绍ROS常用工具、ROSPY和ROSCPP常用模块,完全看完三篇文章,可以说ROS就基本入门,可以自己动手做实验了。 **ROS常用工具** ROS工具
    的头像 发表于 05-19 17:37 1002次阅读
    <b class='flag-5'>ROS</b>操作系统<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>3

    ROS操作系统学习笔记4

    摘要:这篇文章主要介绍ROS常用工具、ROSPY和ROSCPP常用模块,完全看完三篇文章,可以说ROS就基本入门,可以自己动手做实验了。 **ROS常用工具** ROS工具
    的头像 发表于 05-19 17:37 694次阅读

    实现ARM+ROS(机器人操作系统)运行ROS

    如何低成本搭建ARM+ROS的硬件载体?上文展示ROS部署前的筹备工作及步骤分解,本文将为大家演示ROS的移植及测试方法。
    的头像 发表于 10-10 18:15 1248次阅读
    实现ARM+<b class='flag-5'>ROS</b>(机器人操作系统)<b class='flag-5'>之</b>运行<b class='flag-5'>ROS</b>!

    ros基本概念是什么

    基本概念ROS是一个用于在不同进程间匿名的发布、订阅、传递信息的中间件。 ROS2系统的核心部分是ROS网络(ROS Graph)。
    的头像 发表于 11-27 11:21 1792次阅读