ROS学习笔记3:ROS架构(了解)

2023-05-16

        笔记3不涉及实际操作,主要是用自己的语言和思路简略整理了《ROS机器人开发实践》一书第2章内容。第一次看这一章的内容会有不知道在讲什么的感觉,但这一章的内容确实对后续实践操作章节的理解有非常大的帮助。

一、ROS架构:

        ROS是一个优秀的机器人分布式框架。ROS架构的三个层次:基于Linux系统的OS层;实现ROS核心通信机制以及众多机器人开发库的中间层;在ROS Master的管理下保证功能节点的正常运行的应用层。

1.OS层:

        ROS无法直接运行在计算机硬件上,需要依托于Linux、macOS等操作系统运行。

2.中间层:

        Linux是一个通用系统,没有针对机器人开发提供的特殊中间件,因此在中间层,ROS封装了关于机器人开发的中间件,主要包括:

(1)基于TCP/UDP网络封装的TCPROS/UDPROS通信系统。

(2)一种用于进程内的通信方法Nodelet,为多进程通信提供一种更优化的数据传输方式。

(3)在通信机制上提供的大量机器人开发相关的库,如数据类型定义、坐标变换、运动控制等,可以提供给应用层使用。

3.应用层:

(1)ROS运行的管理者:Master(负责整个系统的正常运行)。

(2)功能包:ROS社区内共享了大量的机器人应用功能包,这些功能包内的模块以节点为单位运行。

二、重要概念:

        从系统实现的角度来看:ROS可分为三个层次:计算图、文件系统、开源社区。

1.计算图:

        从计算图的角度来看,ROS系统软件的功能模块以节点为单位独立运行,可以分布于多个相同或不同的主机中,在系统运行时通过端对端的拓扑结构进行连接。

(1)节点与节点管理器:

        节点(Node,又称“软件模块”):一些执行运算任务的进程,一个系统一般由多个节点组成。

        节点管理器(ROS Master):通过远程过程调用(RPC)提供登记列表和对其他计算图表的查找功能。ROS Master是一个管理者,没有它节点将无法找到彼此,也无法交换消息或调用服务,整个系统也将瘫痪。

(2)消息与话题:

        消息:ROS中基于发布订阅通信机制传递的一种严格的数据结构,由节点处理消息并进行发送或接收,最终实现想要的功能。可通过rosmsg来查看关于消息的操作。

        话题:消息以一种发布/订阅(Publisher/Subcriber)的方式传递。一个节点可以针对一个给定的话题(Topic)发布消息(这个节点称为发布者Talker),也可以关注某个话题并订阅特定类型的数据(这个节点称为订阅者Listener)。

       话题是发布者节点和订阅者节点之间传输数据的管道,传输的数据叫做消息。

(3)服务: 

        服务是节点之间同步通信的一种方式,其中提供服务者称为服务者节点,被服务者称为客户端节点。客户端节点(Client)可以发布请求(Request),服务者节点(Server)处理后反馈应答(Response)。catkin_ws

2.文件系统:

        类似于操作系统,ROS将所有文件按照一定的规则进行组织,不同功能的文件放在不同的文件夹下。

(1)功能包:

        功能包是ROS 软件中的基本单元,包含ROS节点、库、配置文件等。

        功能包的典型文件结构如下:

1)config:放置功能包中的配置文件,由用户创建,文件名可以不同。

2)include:放置功能包中需要用到的头文件。

3)scripts:放置可以直接运行的python脚本。

4)src:放置需要编译的C++代码。

5)launch:放置功能包中的所有启动文件。

6)msg:放置功能包自定义的消息类型。

7)srv:放置功能包自定义的服务类型。

8)action:放置功能包自定义的动作指令。

9)CMakeLists.txt(必须):编译器编译功能包的规则。

10)package.xml(必须):功能包清单。

(2)功能包清单:

        每个功能包都包含一个叫package.xml的功能包清单,用于记录功能包的基本信息。

(3)元功能包:

        元功能包是一种特殊的功能包,只包含一个package.xml元功能包清单文件。它的主要作用是将多个功能包整合成为一个逻辑上独立的功能包,类似于集合概念。

        元功能包清单的package.xml文件相较于功能包的package.xml文件,需要包含一个引用的标签。

<export>
    <metapackage/>
</export>

(4)消息类型:

        消息是ROS节点之间发布/订阅的通信信息,可以使用ROS提供的消息类型,也可以使用.msg文件在功能包的msg文件夹下自定义所需要的消息类型。

(5)服务类型:

        服务类型定义了ROS客户端/服务器通信模型下的请求和应答数据类型,可以使用ROS系统提供的服务类型,也可以使用.srv文件在功能包的srv文件夹中进行定义。

(6)代码:

        用来放置功能包节点源代码的文件夹。

3.ROS文件工程结构(工作空间catkin_ws):

        代码文件需要放置到一个固定的空间内,即工作空间。

        工作空间就是包含软件包的目录,存放工程开发相关文件。一个典型的工作空间(catkin_ws)包含以下目录:

1)src:源码空间

2)bulid:编译空间

3)devel:开发空间

4)install:安装空间

4.开源社区:

        主要是发行版,软件源,ROS wiki,邮件列表,ROS Answer,Blog。

三、ROS的通信机制:

        ROS的核心是分布式通信机制,基本通信方式分为以下三种:

1.话题通信机制(异步通信机制):

(1)话题:

        节点间用来传输数据的重要总线,使用发布/订阅模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以不唯一。

(2)消息:

        消息是话题数据,具有一定的类型和数据结构,使用编程语言无关的.msg文件定义,编译过程中生成对应的代码。

(3)话题通信的三个角色:

1)发布者Talker:负责向订阅者发布数据。

2)订阅者Listener:负责接收发布者的数据。

3)管理者ROS Master:负责保管发布者和订阅者注册的信息,并匹配话题相同的发布者与订阅者,帮助发布者与订阅者建立连接。

(4)建立通信的过程:

1)Talker注册

2)Listener注册

3)ROS Master注册

4)Listener发送连接请求

5)Talker确认连接请求

6)Listener尝试与Talker建立网络连接

7)Talker向Listener发布数据

2.服务通信机制(同步通信机制):

(1)服务通信的三个角色:

1)客户端client:负责向服务端发送请求,并接收服务端发送的数据。

2)服务端server:负责接收处理请求,并对客户端作出相应。

3)管理者ROS Master:负责保管客户端和服务端注册的信息,并匹配话题相同的客户端与服务端,帮助客户端和服务端建立连接。

(2)建立通信的过程:

1)Talker注册

2)Listener注册

3)ROS Master进行信息匹配

4)Listener与Talker建立网络连接

5)Talker向Listener发布服务应答数据

 

(3)对比话题通信极致机制和服务通信机制:

3.参数管理机制:

        参数类似于ROS中的全局变量,由ROS Master进行管理,其通信机制较为简单,不涉及TCP/UDP的通信。

(1)参数服务器的三个角色:

1)管理者ROS Master:管理者作为一个公共的容器保存数据。

2)参数设置者Talker:参数设置者往容器中存储数据。

3)参数调用者Listener:参数调用者读取容器中所需的数据。

(2)建立通信的过程:

1)Talker设置变量

2)Listener查询参数值

3)ROS Master向Listener发送参数值

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS学习笔记3:ROS架构(了解) 的相关文章

随机推荐

  • 尚硅谷react课程-day01

    1 初识react 注意 1 引入库的顺序要先引入react核心库在引入react dom库 xff0c 最后引入babel库 2 script标签嵌套的JS代码的开始标签中要添加type 61 34 text babel 34 确保配置j
  • 尚硅谷react课程-day02

    目录 1 函数式组件 2 原型链 3 原型链查找机制 4 类式组件 5 利用react类定义虚拟dom方法对模块中HTML标签内容的修改 实现点击文字部分内容发生改变 5 类方法中的this指向问题 6 bind 方法 7 对于react三
  • 尚硅谷react课程-day03

    目录 1 对类组件中方法总结 xff1a 2 组件实例第二大属性prop方法 2 1 react中prop方法解构赋值 3 对porps传递的数据进行限制 4 类式组件中构造器与props关系 1 对类组件中方法总结 xff1a 1 cla
  • 配置树莓派4B+Ubuntu-22.04.2+Intel Realsense T265

    准备 xff1a 树莓派4b Ubuntu 22 04 2 T265 开始玩树莓派和T265时配置环境配置了半天 xff0c 各种报错 xff0c 在不熟悉这些的情况下想要配置一个稳定不报错的系统就只有不断的尝试 xff0c 再重装了10次
  • 节点基础~节点操作

    一 创建和添加节点 1 创建节点 document createElement 方法创建由tagName指定的 HTM元素 因为这些元素原先不存在 xff0c 是根据我们的需求动态生成的 xff0c 所以我们也称为动态创建元素节点 2 添加
  • workerman-chat启动后,前台无法访问

    去阿里云的安全组 xff0c 添加规则 xff1a 55151和7272 启动GatewayWorker的命令 xff0c 注意 xff1a 这个需要在linux服务器 xff0c 到api文件夹下运行 xff08 就是有think文件 x
  • 基于FreeRTOS实现温湿度识别

    实验说明 xff1a 本实验主要利用freeRTOS创建多任务实现温湿度检测与点亮LED xff0c 并在串口上输出相应温湿度和LED亮灭情况 xff1b 一 实验用材 1 DHT11温湿度传感器模块 2 stm32f103c8t6最小系统
  • 操作系统学习笔记

    文章目录 一 概述1 什么是操作系统2 操作系统的作用3 操作系统的发展史4 操作系统的分类5 现代操作系统的主要特点 二 进程控制1 进程的基本概念2 进程控制的基本概念3 同步和互斥4 进程通信5 线程和管程的基础概念6 死锁 三 处理
  • django注册功能密码加密存储

    1 编写模型类 class User models Model username 61 models CharField max length 61 16 verbose name 61 39 账号 39 password 61 model
  • Node.js【未完成】

    Node js node介绍和环境安装 Node js 简介 1 什么是 Node js Node js is a JavaScript runtime built on Chrome s V8 JavaScript engine Node
  • Pygame简介

    第一课Pygame简介 Pygame 是一个游戏库 xff0c 通常用于在 Python 中创建 2 D 游戏 它具有许多重要功能 xff0c 例如碰撞检测 声音和音乐 图形 事件系统等等 Pygame安装 在我们向您介绍任何 Pygame
  • Vue2---生命周期钩子

    生命周期钩子 所有生命周期钩子的 this 上下文将自动绑定至实例中 xff0c 因此你可以访问 data computed 和 methods 这意味着你不应该使用箭头函数来定义一个生命周期方法 会使this指向window 1 befo
  • MySQL--复合查询--内外链接--0422

    注 xff1a 为了方便查看 mysql语句会有突然的换行 xff0c 书写时请勿模仿 目录 1 单表查询回顾 显示工资最高的员工的名字和工作岗位 显示工资高于平均工资的员工信息 2 多表查询 比如需要查询雇员名字和所在部门编号及部门名字
  • 以符合人类阅读的方式打印php数组

    在程序开发过程中 xff1b 打印数据进行查看调试是非常频繁的 xff1b 如果没有一种易于阅读的样式那是相当痛苦的 xff1b 先定义一个数组 xff1b array 61 array 39 t0 39 61 gt 39 test0 39
  • 12.【openCV常用函数模板】

    opency常用关键字 1 头文件的引用2 命名空间的引用3 读入文件的引用4 处理图像的数据结构5 定义窗口的引用6 自定义窗口长宽度的引用7 展示窗口的引用8 窗口展示时间的引用9 清除窗口的引用10 举列子10 1代码展示 10 2效
  • 利用novnc登录绕过WFA

    0x00 简介 前端时间看了一个新闻说是一个安全人员研究使用webVNC来钓鱼绕过MFA多因子验证 xff0c 因为现在很多环境钓鱼抓到的账号密码 xff0c 在登录时候可能会要求输入安全码或者PIN马之类的东西 xff0c 学名叫做MFA
  • 图像分割损失函数OhemCELoss

    OhemCELoss函数简介 OhemCELoss函数 xff08 Online hard example mining cross entropy loss 的缩写 xff09 分割任务中的OhemCELoss函数 xff1a 其实就是分
  • 02_FreeRTOS内核实现---任务的定义与任务切换

    一 什么是任务 在多任务系统中 xff0c 我们根据功能的不同 xff0c 把整个系统分割成多个独立且无法返回的函数 xff0c 这种函数称之为任务 二 创建任务 1 定义任务栈 在多任务系统中 xff0c 每个任务都是独立的 xff0c
  • ROS学习笔记1:Ubuntu20.04系统安装图文讲解(双系统,机械硬盘)

    系列前言 xff1a 本人BIT机械专业大三学生 xff0c 可以说是计算机小白 近年来学校以咱们 智能制造与智能车辆班 为试验班对机械专业进行探索性课改 xff0c 加入了大量控制类课程 xff08 数据结构 xff0c ROS xff0
  • ROS学习笔记3:ROS架构(了解)

    笔记3不涉及实际操作 xff0c 主要是用自己的语言和思路简略整理了 ROS机器人开发实践 一书第2章内容 第一次看这一章的内容会有不知道在讲什么的感觉 xff0c 但这一章的内容确实对后续实践操作章节的理解有非常大的帮助 一 ROS架构