自动驾驶软件开源平台中经常提到的ROS是什么?
0 970
0
该提问暂无详细描述
收藏
2021-06-05 20:34 更新 DARPC •  10348
共 1 个回答
高赞 时间
0

1、ROS介绍

ROS(Robot Operating System)是一个应用广泛的机器人系统软件框架。2007年,斯坦福大学人工智能实验室在斯坦福AI项目中开发了ROS,2008年之后就由机器人技术公司Willow Garage来进行推动研发,如今已经被机器人领域广泛使用。

ROS是面向机器人开发的开源的元操作系统(meta-operating system),它能够提供类似传统操作系统的诸多功能,如硬件抽象、底层设备控制、常用功能实现、进程间消息传递和程序包管理等。此外,它还提供相关工具和库,用于获取、编译、编辑代码以及在多个计算机之间运行程序完成分布式计算。目前,ROS已经有很多知名的机器人开源库,如计算机视觉工具、点云处理驱动、3D建模与仿真、坐标转换等。综合来说,ROS提供了一种发布和订阅的通信框架,实现简便快速地搭建分布式计算系统; 提供了大量简洁的工具,实现计算系统的配置、启动、调试、可视化、测试; 具备定位、控制、规划、决策等功能开发资源; 提供了一个强大的技术支持社区。

2、ROS的特点

ROS系统具备以下特点:

(1) 点对点设计: 一个使用ROS的系统包括一系列进程,这些进程存在于多个不同的主机并且在运行过程中通过端对端的拓扑结构进行联系。虽然基于中心服务器的那些软件框架也可以实现多进程和多主机的优势,但是在这些框架中,当各计算机通过不同的网络进行连接时,中心数据服务器就会发生问题。 ROS的点对点设计以及服务和节点管理器等机制可以分散由计算机视觉和语音识别等功能带来的实时计算压力,能够适应多机器人系统遇到的挑战。

(2) 多语言支持: ROS现在支持许多种编程语言,例如C++ 、Python、Octave和LISP,也包含其他语言的多种接口实现。ROS的特殊性主要体现在消息通信层,端对端的连接和配置利用XML-RPC机制进行实现,XML-RPC也包含了大多数主要语言的合理实现描述。

为了支持交叉语言,ROS利用了简单的、语言无关的接口定义语言去描述模块之间的消息传送。接口定义语言使用了简短的文本去描述每条消息的结构,也允许消息的合成。

(3) 精简与集成: ROS建立的系统具有模块化的特点,各模块中的代码可以单独编译,而且编译使用的CMake工具使其很容易就实现精简的理念。ROS将复杂的代码封装在库里,只是创建了一些小的应用程序显示库的功能。单元测试也变得较为容易,一个单独的测试程序可以测试库中很多的功能。ROS可以不断地从社区维护中进行升级,包括从其他的软件库、应用补丁中升级ROS的源代码。

(4) 工具包丰富: 为了管理复杂的ROS软件框架,开发者利用大量的小工具去编译和运行多种多样的ROS系统。这些工具承担各种任务,例如,组织源代码的结构、获取和设置配置参数、形象化端对端的拓扑连接、测量频带使用宽度、描绘信息数据、自动生成文档等。

(5) 免费开源: ROS遵从BSD协议,大部分源代码都是公开发布的。开发者可以根据自身系统设计需要,进行二次开发。

3、ROS文件系统层

在ROS系统中,不同程序组件需要根据功能放在不同的文件夹下。ROS文件系统层如下图所示

功能包(Package): 一个功能包具有用于创建ROS代码的最小结构和最少内容,是ROS中软件组织的基本形式。一个Package包含节点(ROS runtime processes)、ROS程序库(ROS-dependent library)、数据集(datasets)、配置文件(configuration)等。

综合功能包(Metapackage): 综合功能包是一组具体的服务相关的功能包。

综合功能包清单(Metapackage manifest): 描述一个package的元信息,包括package的名字、版本、功能简述、证书信息、依赖关系等。

消息类型(Message type): 消息是一个进程发送到其他进程的信息。ROS系统有很多的标准类型消息,存储在Message文件中。

服务类型(Service type): 服务描述说明定义了ROS服务通信中请求和响应的数据结构,存储在Service文件中。

4、ROS计算图层

计算图层是ROS在点对点网络里整合并处理数据的过程。基本计算图层概念包括节点、节点管理器、参数服务器、消息、服务、主题和消息记录包,如下图所示

节点(Node): 节点是主要的计算执行进程。一个机器人控制系统通常由很多节点组成。例如一个节点处理雷达点云、一个节点执行定位、一个节点执行路径规划。节点需要使用ROS客户端编写,如roscpp或rospy。 节点管理器(Master): 节点管理器用于在计算图层中注册或查找节点名称。如果没有节点管理器,就不会有节点、消息、服务之间的通信。

参数服务器(Parameter Server): 参数服务器能够使数据通过关键词存储在系统的核心位置。

消息(Message): 节点之间通过传递消息实现通信,消息实际上是一种数据结构。ROS中包含很多标准类型的消息,也可以自定义消息类型。

主题(Topic): 在ROS中消息以一种发布/订阅的方式传递。一个节点可以在给定的主题中发布消息。一个节点可以订阅某个主题,接收该主题上来自其他节点的消息。一个主题内可以同时由多个节点订阅和发布消息,一个节点也可以订阅多个主题或者发布消息到多个主题内。消息的订阅者和发布者之间互相解耦,无须知道对方的存在。主题的名称不能重复,以避免同名主题产生消息路由错误。

服务(Service): 当需要从某一个节点获得一个请求或应答时,就不能依靠主题来实现了。但是,服务可以允许直接与某个节点交互。服务由一对消息结构定义,一个用于请求,另一个用于应答。

消息记录包(Bag): 消息记录包是一种用于保存和回放ROS消息数据的文件格式。消息记录包是一种重要的存储数据的机制,能够记录传感器数据。

本回答的主要内容来自图书《自动驾驶技术概论》,清华大学出版社

收藏
2021-06-05 21:33 更新 吴山留顾 •  56966