目录
- 一、ROS简介
- 二、ROS可以做些什么
- 三、ROS特征
- 四、ROS特点
- 4.1点对点设计
- 4.2不依赖编程语言
- 4.3精简与集成
- 4.4便于测试
- 4.5开源
- 4.6强大的库与社区
- 五、ROS的发展
- 六、ROS架构
- 6.1OS层
- 6.2中间层
- 6.3应用层
- 七、通信机制
- 八、计算图
- 8.1节点(Node)
- 8.2节点管理器(Master)
- 8.3消息(Message)
- 8.4话题(Topic)
- 8.5服务(Service)
- 8.6动作(Action)
- 8.7消息记录包(Bag)
- 8.8参数(Parameter)
- 8.9功能包(Package)
- 8.10功能包清单(Package manifest)
- 8.11元功能包(Meta Package)
- ROS的一些网站
一、ROS简介
ROS(Robot Operating System,机器人操作系统)
操作系统是啥:操作系统就是提供一些软件和硬件的接口,让我们可以直接使用,而不用管它内部到底做了啥。所以不同的平台,不同的功能,就要有不同的操作系统来完成底层操作。
ros和其他的操作系统最大的区别就是:进程之间的通信。传统的操作系统进程之间的通信都是要系统来调用的,会消耗大量的系统资源。但在机器人这里可能不太合适。
因为一个机器人可能是由很多个传感器组成,是通过各模块相互沟通交流来完成指定任务。所以进程之间有效快速的通信,是一个机器人要必备的要求,ros就提供这样的功能。
ROS 是一个适用于机器人的开源的元操作系统,提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、库函数、可视化、消息传递和软件包管理等诸多功能。相比于普通的OS,有着可用于异构硬件的特性。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。在某些方面 ROS 相当于一种 “机器人框架(Robot frameworks)。此外,它还以库的形式提供了机器人应用程序所需的多数不同类型的硬件之间的数据传输/接收、调度和错误处理等功能。这个概念也被称为中间件(Middleware)或软件框架(Software framework)
虽然叫做操作系统,但是并不是真正的操作系统,说白了,就是一个框架,一个平台。还是要依靠具体的操作系统,现在是Linux比较多
二、ROS可以做些什么
上面简单的介绍了,ros可以快速的完成机器人各个模块之间的通信(分布式计算),可以从不同节点中接受和发送信息。
简单就是说:可以提高机器人开发过程中的软件复用性
三、ROS特征
ROS 的主要目标是为机器人研究和开发提供代码复用的支持
分布式进程:它以可执行进程的最小单位(节点,Node)的形式进行编程,每个进程独立运行,并有机的收发数据
功能包单位管理:以功能包的形式管理着多个具有相同目的的进程,所以开发和使用起来很容易,并且很容易共享、修改和重新发布
公共存储库:每个功能包都将其功能包公开给开发人员首选的公共存储库(eg. GitHub)。并标识许可证
API类型:使用ROS开发程序时,ROS被设计为可以简单地通过调用API将其加载到其使用的代码中
四、ROS特点
4.1点对点设计
ROS通过点对点设计以及服务和节点管理器等机制可以分散由于计算机视觉和语音识别等功能带来的实时计算压力,这种设计能适应服务机器人遇到的挑战。
4.2不依赖编程语言
ROS支持多种高级编程语言,C++、Python和Lisp语言已经在ROS中实现编译,并得到应用。ROS采用了一种语言中立的接口定义语言(language-neutral interface definition language,IDL )来实现各模块之间的消息传送。
4.3精简与集成
ROS建立的系统具有模块化的特点,各模块中的代码可以单独编译,而且编译使用的CMake工具使它很容易的就实现精简的理念。ROS基本将复杂的代码封装在库里,只是创建了一些小的应用程序为ROS显示库的功能,这就允许了对简单的代码超越原型进行移植和重新使用。作为一种新加入的有优势,单元测试当代码在库中分散后也变得非常的容易,一个单独的测试程序可以测试库中很多的特点。
ROS不修改用户的主函数,所以代码可以被其他的机器人软件使用。其优点是ROS很容易和其他的机器人软件平台集成。例如,在计算机视觉方面,ROS已经与OpenCV实现集成。在驱动、导航和模拟器方面,ROS已经与Player系统实现集成。在规划算法方面,ROS也已与OpenAVE系统实现集成。
4.4便于测试
为机器人开发软件比其他软件开发更具挑战性,主要是因为调试准备时间长,且调试过程复杂。况且,因为硬件维修、经费有限等因素,不一定随时有机器人可供使用。ROS提供两种策略来解决上述问题。
精心设计的ROS系统框架将底层硬件控制模块和顶层数据处理与决策模块分离,从而可以使用模拟器替代底层硬件模块,独立测试顶层部分,提高测试效率。
ROS另外提供了一种简单的方法可以在调试过程中记录传感器数据及其他类型的消息数据,并在试验后按时间戳回放。通过这种方式,每次运行机器人可以获得更多的测试机会。例如,可以记录传感器的数据,并通过多次回放测试不同的数据处理算法
4.5开源
4.6强大的库与社区
ROS开源社区级主要关于ROS资源,能够通过独立的网络社区分享软件和知识。这些资源包括:
发行版(Distribution) —— ROS发行版是可以独立安装的,带有版本号的一系列功能包集。ROS发行版像Linux发行版一样发挥类似的作用。这使得ROS软件安装更加容易,而且能够通过一个软件集合来维持一致的版本。
软件源(Repositorie) —— ROS依赖于共享开源代码与软件源的网站或主机服务,在这里不同的机构能够发布分享各自的机器人软件和程序。
ROS Wiki —— ROS Wiki是用于记录有关ROS系统信息的主要论坛。任何人都可以注册账户和贡献自己的文件,提供更正和更新,编写教程以及其他信息。
邮件列表(Mailing list) —— ROS用户邮件列表是关于ROS的主要交流渠道,能够交流从ROS软件更新到ROS软件使用中的各种疑问或信息。
五、ROS的发展
六、ROS架构
6.1OS层
ROS并非像Windows、Linux等传统意义上的操作系统,无法直接运行在计算机硬件上,因此它需要依赖于Linux系统。
6.2中间层
Linux系统本身没有针对机器人开发的中间件,因此ROS在中间层做了大量工作。首先是基于TCP/UDP网络,并在此之上进一步封装而构建的TCPROS/UDPROS通信系统。另外ROS还提供了一种进程内的通信方法——Nodelet,为多进程通信提供了一种更为优化的数据传输方式。在通信机制之上,ROS提供了大量机器人开发的库,以提供给应用层调用。
6.3应用层
应用层中ROS需要一个管理者——Master,负责管理整个系统正常运行,为节点间建立连接。
七、通信机制
ROS采用的是一种点对点的分布式通信机制,实现模块间点对点的松耦合连接,所有软件功能及工具都建立在这种通信机制上,为用户提供多节点(进程)的通信服务,其中ROS最核心的三种通信机制是话题(Topic)通信机制、服务(Service)通信机制和参数(Parameter)管理机制。
八、计算图
ROS系统的功能模块以节点为单位单独运行,可以分布于多个不同或相同的主机中,通过端对端的拓扑结构相连接。
8.1节点(Node)
节点就是执行具体任务的进程或独立运行的可执行文件,通常一个系统由多个节点组成,节点之间可以通过ROS客户端库(如roscpp 、rospy)相互通信。不同节点可使用不同编程语言,可分布式运行在不同的主机。节点在系统中的名称必须是唯一的。
8.2节点管理器(Master)
节点管理器在系统中主要起到了一个中介的作用,能够帮助节点相互找到彼此。节点管理器能够为节点提供命名和注册服务,以及跟踪和记录话题/服务通信。同时节点管理器还提供了一个参数服务器(Parameter Server),节点使用此服务器存储和检索运行时的参数。
8.3消息(Message)
消息本身是基于发布/订阅模型的话题通信机制而来的,具有一定的类型和数据结构,既包含ROS提供的标准数据类型,也可由用户自定义数据类型。
8.4话题(Topic)
话题通信采用的是一种异步通信机制。话题通信基于发布/订阅模型,数据由发布者传输给订阅者。其中节点既可以作为发布者发布消息,也可以作为订阅者订阅消息。同一个话题的发布者和订阅者可以不唯一,另外一个节点也可以发布或订阅多个消息。一般来说,发布者和订阅者并不知道对方的存在。发布者将信息发布在一个全局的工作区内,当订阅者发现该信息是它所订阅的,就可以接收到这个信息。通常用于数据传输。
8.5服务(Service)
服务通信采用的是一种同步通信机制。服务通信基于客户端/服务器模型,客户端(Client)发送请求数据(Request),服务器(Server)完成处理后返回应答数据(Response)。与话题不同的是,ROS中只允许有一个节点提供指定命名的服务。通常用于逻辑处理。
8.6动作(Action)
动作是基于ROS消息机制实现的一种问答通信机制,基于客户端/服务器模型,服务器可以连续反馈数据给客户端,客户端可以在任务运行过程中中止运行。动作Action的接口主要由goal、cancel、status、feedback和result组成,客户端可以在任务启动前向服务器发布任务目标goal,也可以在任务过程中向服务器发送cancel请求取消任务。服务器向客户端反馈服务器当前的状态,或周期性反馈任务运行的监控数据,而result在任务运行过程中只发布一次,仅在服务器完成动作后反馈一个最终结果。
8.7消息记录包(Bag)
消息记录包是一种用于保存和回放ROS消息数据的文件格式。它使用.bag格式保存消息、主题、服务和其他ROS数据信息,可以在事件发生后,通过使用可视化工具调用和回放数据,检查在系统中到底发生了什么。记录包文件可以像实时会话一样在ROS中再现情景,在相同时间向主题发送相同的数据。通常用于调试算法。
8.8参数(Parameter)
参数服务器能够保存一部分参数作为全局共享字典,系统中的所有节点都可以通过网络访问这些共享字典,存储和检索参数的参数名或参数值,而字典中的数据类型包含了int整型、float浮点型、string字符串等。参数的存储和检索采用的通信机制是更为底层的RPC,而不再是话题或服务。它更适合存储静态、非二进制的配置参数,不适合存储动态配置的数据。
8.9功能包(Package)
功能包是ROS软件中的基本单元,包含节点源码、配置文件、数据定义等。
8.10功能包清单(Package manifest)
功能包清单记录了功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等。
8.11元功能包(Meta Package)
元功能包是一种特殊的功能包,它只包含元功能包清单文件。它的作用是将多个具有相同功能的功能包整合成一个逻辑上独立的功能包,类似于功能包集合。
ROS的一些网站
ROS官网:ROS http://wiki.ros.org/ROS
ROS介绍:https://www.oschina.net/p/ros?hmsr=aladdin1e1
ROS介绍:https://blog.csdn.net/zytgg123456/article/details/110846751
ROS介绍:https://blog.csdn.net/qq_25267657/category_8406377.html
IDL介绍:https://www.codeproject.com/Articles/19605/Basics-of-an-IDL-file