ROS 背景知识

文章目录

  • 声明:
  • ROS 的起源
  • ROS 的设计目标
  • ROS的特点

声明:


本文中的内容参考了市面上绝大多数畅销的ROS书籍,本文只作个人学习记录和学习分享使用,不作任何商业用途,如有侵权请给我留言;


ROS 的起源


随着时代的发展,机器人硬件设备逐渐丰富,而软件的复用性和模块化跟不上机器人硬件设备的变化,通用性机器人软件框架的需求越来越强烈。
ROS 诞生于于斯坦福大学人工智能实验室与机器人技术公司Willow Garage合作的个人机器人项目(Personal RobotsProgram),后来由Willow Garage维护。该项目研发的机器人PR2 在ROS 框架的基础上可以完成打台球、插插座、叠衣服、做早饭等不可思议的功能。2010年,Willow Garage正式以开放源码的形式发布了ROS框架,该框架很快在机器人研究领域引起了极大的关注。国内绝大部分开发者和企业也逐渐使用 ROS 开发它们的机器人产品。ROS 逐渐成为了机器人领域的事实标准。


ROS 的设计目标


ROS 的官方定义为:ROS是面向机器人的开源的元操作系统(meta-operating system) 。它能够提供类似操作系统所提供的功能,如硬件抽象描述底层驱动程序管理共用功能的执行进程间消息传递程序发行包管理等。此外,它还提供大量第三方工具第三方库协议、用于获取、编译、编辑代码以及在多个计算机之间运行程序完成分布式计算。ROS 可以极大简化繁杂多样的机器人平台下复杂任务的创建、任务的稳定控制。

ROS 的设计目标是提高机器人研发过程中软件的复用率和提供一个协作平台。

  • 提高软件复用率: ROS 被设计成一种分布式的结构,框架中的每个功能模块都可以被单独的设计、编译,并且在运行的时候以松耦合的方式结合起来。ROS 中的功能模块都封装于独立的功能包(Package)或元功能包(Meta-Package),一遍在社区中分享;
  • 提供协作平台: ROS 也是一个协作平台。例如:建图专家可以发布一个先进的地图建模系统;导航专家可以在地图建模系统上进行机器人导航;视觉专家可以开发出一个物体识别的模块。

ROS的特点


ROS 的核心特点就是–分布式网络设计,使用了基于 TCP/IP 的通信方式,实现了多种类型的数据通信(包括基于话题(Topic)的异步数据流通信,基于服务(Service)的同步数据流通信,参数服务器上数据存储),使得模块之间的连接呈现松耦合状态。
分布式网络 的基础之上,ROS 具备以下特点:


进程节点化

在 ROS 中,每一个进程被当作一个节点,节点可以分布于不同的主机。节点与节点的通信是通过一个带有 发布和订阅 功能的RPC 传输系统进行的,一个要发送消息的节点只会把消息发送给你订阅了该消息的节点。


语言弱相关

ROS 被设计成一种语言弱相关的框架结构。ROS 使用了中立的定义语言描述模块之间的消息接口,支持在编译过程中产生目标语言的目标文件。目前支持的语言有 Python、C++、Java、Octave 和 Lisp 多种语言。


接口统一、复用性高

ROS 的各个模块接口采用统一的消息接口,同时各个模块能够进行单独编译;这就使得各个模块的移植和复用更加的方便。


工具包组件化

ROS 开源社区中集成了大量的工具包,ROS 采用工具包组件化的方式将这些工具和软件集成到系统中并可以作为一个单独的组件进行使用。例如,3D 可视化工具 rviz(Robot Visualizer):开发者可以根据 ROS 定义的接口在其中显示机器人 3D 模型、周围环境地图、机器人导航路线等信息。OpenCv库(Open Source Computer Vision Library),Point Cloud Library(PCL库),消息查看工具,物理仿真环境组件等。


快速测试

ROS 分布式的设计使得 ROS 系统框架底层硬件控制模块与顶层数据处理和决策模块的分离,从而可以使用模拟器替代底层硬件模块,独立测试顶层部分,提供测试效率,而不必频繁去替换硬件;
同时,ROS 提供了一种简单的方法可以在调试过程中记录传感器数据及其他类型的消息数据, 并在调试结束后按时间戳回放。通过这种方式,每次运行机器人可以获得更多的测试机会。例如,在测试过程中记录传感器的数据, 并通过回放操作测试不同的数据处理和决策算法。在 ROS 术语中,这类记录的数据叫作 包(bag),一个被称为 rosbag 的工具可以用于记录和回放**包(bag)**数据。


免费且开源

ROS 遵照 BSD 许可证,使用者可以修改和重写发布其中的应用代码,可以进行商业化的开发和销售。ROS 开源社区中的应用代码以维护者进行分类,主要包含由 Willow Garage 公司和一些开发者设计、维护的核心库部分,以及不同国家ROS社区组织开发和维护的全球范围的开源代码。

你可能感兴趣的:(ROS)