从零打造一个机器人002【初识机器人操作系统–ROS】

1.ROS是什么

ROS是一个适用于机器人的开源的元操作系统。其实它并不是一个真正的操作系统,其底层的任务调度、编译、寻址等任务还是由Linux操作系统完成,也就是说ROS实际上是运行在Linux上的次级操作系统。但是ROS提供了操作系统应用的各种服务(如:硬件抽象、底层设备控制、常用函数实现、进程间消息传递、软件包管理等),也提供了用于获取、编译、跨平台运行代码的工具和函数。ROS主要采用松耦合点对点进程网络通信,目前主要还是支持Ubuntu系统,windows和Mac OS目前支持的还不好,所以推荐在Ubuntu系统上安装使用ROS。

2.ROS的概念

ROS 是一个用于开发机器人应用程序的、类似操作系统的机器人软件平台。ROS 提供开发机器人应用程序时所需的硬件抽象、子设备控制,以及机器人工程中广泛使用的传感、识别、绘图、运动规划等功能。此外 ROS 还提供进程之间的消息解析、功能包管理、库和丰富的开发及调试工具。
主节点
主节点(master)负责节点到节点的连接和消息通信,类似于名称服务器(Name Server) 。
roscore 是它的运行命令,当您运行主节点时,可以注册每个节点的名字,并根据需要获取信息。没有主节点,就不能在节点之间建立访问和消息交流(如话题和服务)
节点
节点(node)是指在 ROS 中运行的最小处理器单元。可以把它看作一个可执行程序。在
ROS 中,建议为一个目的创建一个节点,建议设计时注重可重用性。例如,在移动机器人的情况下,为了驱动机器人,将每个程序细分化。也就是说,使用传感器驱动、传感器数据转换、 障碍物判断、电机驱动、编码器输入和导航等多个细分节点。
功能包
功能包(package)是构成 ROS 的基本单元。ROS 应用程序是以功能包为单位开发的。功能包包括至少一个以上的节点或拥有用于运行其他功能包的节点的配置文件。它还包含功能 包所需的所有文件,如用于运行各种进程的 ROS 依赖库、数据集和配置文件等。
消息
节点之间通过消息(message)来发送和接收数据。消息是诸如 integer, floatingpoint 和 boolean 等类型的变量。用户还可以使用诸如消息里包括消息的简单数据结构或列举消息的消息数组的结构。使用消息的通信方法包括 TCPROS, UDPROS 等,根据情况使用单向消息发送/接收方式的话题(topic)和双向消息请求(request) /响应(response)方式的服务
(service) 。
话题
话题(topic)就是“故事" 。在发布者(publisher)节点关于故事向主节点注册之后,它以消息形式发布关于该故事的广告。希望接收该故事的订阅者(subscriber)节点获得在主节 点中以这个话题注册的那个发布者节点的信息。基于这个信息,订阅者节点直接连接到发布者节点,用话题发送和接收消息。
发布与发布者
发布(publish)是指以与话题的内容对应的消息的形式发送数据。为了执行发布,发布者(publisher)节点在主节点上注册自己的话题等多种信息,并向希望订阅的订阅者节点发送消息。发布者在节点中声明自己是执行发布的个体。单个节点可以成为多个发布者。
订阅与订阅者
订阅是指以与话题内容对应的消息的形式接收数据。为了执行订阅,订阅者节点在主节 点上注册自己的话题等多种信息,并从主节点接收那些发布此节点要订阅的话题的发布者节
点的信息。基于这个信息,订阅者节点直接联系发布者节点来接收消息。订阅者在节点中声 明自己执行订阅的个体。单个节点可以成为多个订阅者。

3.ROS的架构

OS层

ROS并不是一个传统意义上的操作系统,无法像Windows、Linux一样直接运行在计算机硬件之上。ROS1主要构建于Linux系统之上,ROS2带来了改变,支持构建的系统包括Linux、Windows、Mac、RTOS,甚至没有操作系统的裸机。

中间层

Linux是一个通用系统,并没有针对机器人开发提供特殊的中间件,ROS在中间层做了大量的工作,其中最为重要的就是基于TCPROS/UDPROS的通信系统,这是基于TCP/UDP网络所做的再次封装。通信系统使用发布/订阅、客户端/服务器等模型,实现多种通信机制的数据传输。

除了TCPROS/UDPROS的通信机制外,ROS还提供一种进程内的通信方法——Nodelet,可以为多进程通信提供一种更优化的数据传输方式,适合对数据传输实时性方面有较高要求的应用。

ROS1的通讯系统基于TCPROS/UDPROS,而ROS2的通讯系统基于DDS。DDS是一种分布式实时系统中数据发布/订阅的标准解决方案。ROS2内部提供了DDS的抽象层实现,用户不需要关注底层DDS的提供厂家。

在ROS1的架构中Nodelet和TCPROS/UDPROS是并列的层次,为同一个进程中的多个节点提供一种更优化的数据传输方式。ROS2中也保留了这种数据传输方式,只不过换了一个名字,叫做“Intra-process”,同样也是独立于DDS。

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

应用层

ROS1强依赖于ROS Master(通过远程过程调用提供登记列表和对其他计算图表的查找功能,帮助ROS节点之间相互查找、建立连接,同时还为系统提供参数服务器,管理全局参数),一旦Master宕机,整个系统会面临崩溃的处境。但是从右边ROS2的架构中可以发现,之前让人耿耿于怀的Master终于消失了,节点之间使用一种称为“Discovery”的发现机制来获取彼此的信息。

ROS社区内共享了大量的机器人应用功能包,这些功能包内的模块以节点为单位运行,以ROS标准的输入输出作为接口,开发者不需要关注模块的内部实现机制,只需要了解接口规则即可实现复用,极大地提高了开发效率。

从系统实现的角度,ROS也可以分为三个层次:文件系统(程序文件的组织和构建)、计算图(从计算图的角度来看,ROS系统软件的功能模块以节点为单位独立运行,可以分布于多个相同或不同的主机中,在系统运行时通过端到端的拓扑结构进行连接)和开源社区。

4.ROS 的工作过程

ROS可以形象的描述为一个工厂的运行机制,创建好一个工作空间(workspace)就像一个工厂,工厂里又有好多个生产车间,每个功能包(pkg)看作是一个生产车间,每个生产车间又有好多工人在配合,每个节点(node)看作是一个工人,节点是又是可执行程序的最小单位,工人们之间相互沟通通过消息(mesage)来完成。

话题(topic)
  话题是单向的,一般用于连续发送数据的传感器,建立一次联系后,一个发布者可以向多个订阅者发送信息,同样,一个订阅者也可以订阅多个发布者的消息。
服务(service)
  服务是同步双向的通信机制,服务器只有在有请求的时候才响应,客户端在发出请求后才接受响应。当服务的请求和响应完成时,两个连接点自动断开。
动作(action)
  动作的通讯方式与服务有类似的情况,不同的是服务器收到请求后直至完成响应所需时间较长,中途需要反馈给客户端目前完成的情况,报告当前的现状。
  由以上三种通讯方式完成ROS节点间的信息交流,但是发布者,订阅者,服务服务器,服务客户端,动作服务器,动作客户端分布在不同的节点中。这些节点需要一个让它们建立联系的主节点构建通信的桥梁。分布在外面的不同节点,向主节点注册自己的信息,以便其它节点访问,同时向主节点获取那些访问自己节点的信息。获取后节点和节点间就可以通讯,不再需要主节点。

5.ROS中话题与服务的区别

话题和服务是 ROS 中使用最多的通信方法,它们之间有很多不同之处:

条目 话题 服务
同步性 异步 服务
通信模型 发布/订阅 客户端/服务器
反馈机制
实时性
底层协议 ROSTCP/ROSUDP ROSTCP/ROSUDP
缓冲区
节点关系 多对多 一对多(一个Server)
使用场景 弱逻辑处理,多数据传输 强逻辑处理,少数据传输

话题是 ROS 中基于发布者/订阅者模型的异步通信,发布者与订阅者双方解耦,常用于不断更新,含有较少逻辑处理的数据通信;
服务是 ROS 中基于客户端。服务器模型的同步通信,适用于逻辑性强的数据交换;

6.ROS的优缺点

ROS为我们开发机器人带来了许多方便,然而它也确实存在一些问题:

优点
提供框架、工具和功能
方便移植
庞大的用户群体
免费开源
缺点
通信实时性能有限
系统稳定性尚不满足工业级要求
安全性上没有防护措施

从零打造一个机器人002【初识机器人操作系统--ROS】相关推荐

  1. 从零打造一个机器人003【初识STM32单片机】

    从零打造一个机器人003[初识STM32单片机] 1.什么是单片机 单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处 ...

  2. 【DIY】打造一个六足蜘蛛机器人

    摘要:本文主要介绍如何DIY一个六足蜘蛛机器人,内容包括建模.3D打印材料.舵机控制.运动控制等内容,目前初步完成制作,运动控制还在改进 作者博客地址:http://www.yooongchun.cn ...

  3. 从零打造一个Web地图引擎

    说到地图,大家一定很熟悉,平时应该都使用过百度地图.高德地图.腾讯地图等,如果涉及到地图相关的开发需求,也有很多选择,比如前面的几个地图都会提供一套js API,此外也有一些开源地图框架可以使用,比如 ...

  4. 使用 Vite 和 TypeScript 从零打造一个属于自己的 Vue3 组件库

    前言 随着前端技术的发展,业界涌现出了许多的UI组件库.例如我们熟知的ElementUI,Vant,AntDesign等等.但是作为一个前端开发者,你知道一个UI组件库是如何被打造出来的吗? 读完这篇 ...

  5. react在线文件_【前端新手也能做大项目】:从零打造一个属于自己的在线Visio项目实战【ReactJS 】 (一)...

    本系列教程是教大家如何根据开源js绘图库,打造一个属于自己的在线绘图软件.当然,也可以看着是这个绘图库的开发教程.如果你觉得好,欢迎点个赞,让我们更有动力去做好! 本系列教程重点介绍如何开发自己的绘图 ...

  6. 教你3分钟打造一个专属微信聊天机器人

    3分钟打造专属于你的微信聊天机器人 语言:Python IDE: 这个不做要求,使用PyCharm / Visual Studio Code 等等均可 前提: 需要先搭建好python环境,版本2.7 ...

  7. 区块链开发实战:如何从零打造一个去中心化应用

    编译 | 区块链大本营 整理 | reason_W 区块链会是一场革命吗? 今天,很多成功的互联网企业都是在以中介者的形式存在.比如Google--你和互联网之间的中介,比如亚马逊--买家和卖家之间的 ...

  8. (实战)Vue + Koa从零打造一个H5页面可视化编辑器——Quark-h5

    作者:围的围 https://juejin.im/post/5dc81428e51d4523632ee793 前言 想必你一定使用过易企秀或百度H5等微场景生成工具制作过炫酷的h5页面,除了感叹其神奇 ...

  9. 【干货】SSM,Jquery, Bootstrap从零打造一个论坛系统

    前言 分享一个SSM的实战项目,一个使用springmvc,mybatis,jequery,bootstrap,ueditor打造的论坛系统,主要包含论坛主体,后台管理两个部分. git地址如下:gi ...

最新文章

  1. 杨振宁:宇宙有没有造物者?
  2. Fiddler抓包使用教程-QuickExec
  3. python系统关键字_python基础之常用关键字总结
  4. Oracle 19c和20c新特性最全解密
  5. C++类的赋值运算符“=”重载,以及深拷贝和浅拷贝
  6. Zabbix监控系统深度实践
  7. [转]Ubuntu的root密码是什么
  8. 你不知道的redis——主从复制,因为该命令redis作者曾摊上事
  9. 3. vi 简介(3)
  10. vue项目前端页面模板,基于vue的前端模板
  11. 智慧书-永恒的处世经典格言:121-160
  12. c语言 dirent,dirent / opendir(), readdir()
  13. 【单片机仿真】(十一)指令系统逻辑运算指令 — 逻辑与指令ANL、逻辑或指令ORL
  14. pmp中项目经理如何进行目标设定
  15. 明翰经验系列之面试篇V1.1(持续更新)
  16. 浅谈springboot和VUE整合PageHelper和element.eleme实现分页查询
  17. 32、出任爬虫公司CEO(爬取职友网招聘信息)
  18. 阿里数据中台维度建模规范、维度模型设计及模型实施方法论
  19. 3500x架构_r5 3500x处理器深度实用评测3500x游戏性能测评
  20. java--顺序、选择、循环结构

热门文章

  1. 批处理序列风格与管道过滤器风格对比
  2. 基于springboot的化妆品美妆销售商城网站
  3. TeraTerm Language 帮助文档1-[如何运行]
  4. #9733;一名“标题党”自我修炼的10…
  5. 第一次通过服务器远程跑代码
  6. 千里马常有而伯乐不常有
  7. 【公益创投】“心健康护成长”来穗青少年心理健康项目联合琶洲街“丝路红星,与法同行”来穗与本土青少年融合社区教育服务项目启动仪式
  8. 2022年终总结——脚踏实地,勇敢做自己
  9. SpringMvc、Spring和Mybatis整合(SSM框架整合)
  10. 广西田园及20家子公司引入契约锁电子签章,提升经销商服务效率