导读:前不久,John 为大家介绍过物联网开源操作系统,或许大家还记忆犹新。今天,要介绍的是一款机器人领域的开源操作系统:ROS。

简介

ROS,英文全称 Robot Operating System,即机器人操作系统。它的目标是为机器人软件开发者的提供了一个灵活的框架,其中包含一些列的工具、库和约定。同时,ROS还可以为异质计算机集群,提供了类似操作系统的中间件。

总结起来,正如下图所示:ROS = 架构 + 工具 + 功能 + 生态系统。

服务

ROS提供标准的操作系统服务例如硬件抽象、底层设备控制、常用功能实现、进程间消息传递、软件包管理。ROS基于一种图状架构,从而不同节点的进程能接受,发布,聚合各种信息(例如传感,控制,状态,规划等等)。

分层

ROS可以分成两层:低层是操作系统层(上面有描述),上层则是广大开发者贡献的功能各异的软件包例如定位绘图,行动规划,感知,模拟等等。

生态系统

ROS生态系统的软件可以分成三组:

  • 独立于开发语言和平台的工具,用于构建和发布基于ROS的软件。
  • ROS客户端库的实现例如 roscpp、rospy、roslisp。
  • 利用一个或者多个ROS客户端库,包含相关应用代码的软件包。

ROS客户端库,主要包括开发语言例如C++、Python、LISP,由于依赖于大量开源软件,所以可在类Unix系统上使用。对于这些客户端库,Ubuntu Linux 是完全支持的,而其他系统例如Fedora Linux、Mac OS X、 Microsoft Windows 是“实验性”(不是太完善的)的支持。另外,这些客户端库也得到了开发者社区的支持。

第三种的软件包,通常由于开发者自己开发,使用的功能和应用包括:硬件驱动、机器人模块、数据类型、计划、感知、即时定位和地图构建,仿真工具以及其他算法。

许可证

所有,独立于开发语言的工具和主要客户端库(C++,Python,LISP),都在BSD开源授权协议下发布,这些开源软件可以免费用于商用和研究目的。其他的软件包例如开发者自己开发的,使用其他开源许可授权,例如Apache 2.0、 GPL 、MIT 甚至专利许可。用户可以自行判断软件包,是否具有满足自己需求的许可证。

分布式和模块化

ROS的设计,尽可能体现分布式和模块化。

用户可根据自己的需求,或多或少地定制使用ROS。ROS的模块化特点,可以让你自行选择哪些部分需要ROS,哪些部分可以自己实现。

ROS,也具有分布式的特性,从而也培养了用户共享软件包的大型社区。它使得开发者在ROS核心系统基础上,增添许多新功能。

社区

过去几年以来,ROS已经成为全世界范围内,具有大量用户的大型社区。以前,很多用户来自于实验室,但现在,越来越多的商业用户也加入进来,特别是在工业和服务机器人领域。

ROS 社区十分活跃,根据统计,ROS 社区具有超过1500个电子邮件列表的参与者,3300个用户合作化开发维基文档,5700用户在社区进行ROS相关的提问和回答,一共有超过22000条的维基包,每天超过30条。问答网站有超过13000个问题,70%的回答率。

合作化

ROS则致力于在不同的机器人平台之间,简化创建机器人软件任务的复杂性。

其实,创建一个健壮、通用的机器人软件,并不是那么简单。从机器人的角度讲,即使对于人类来讲微不足道的问题,也会由于任务或者环境的不同,而变得很复杂。所以,靠单独的个体、实验室、机构可以自己独立处理这些任务,是无法胜任的。

所以,ROS就是为了鼓励协作化的机器人软件开发。ROS,就是为了让擅长不同技术领域的开发小组合作起来,彼此借鉴各自的专长,共同应对机器人所需要面对的复杂任务。

ROS,为大多数的机器人项目提供了很多价值,也代表了世界一流机器人的合作化的开发趋势。ROS其中一个核心价值,就是分享通用的组件。如果你觉得ROS有用,你也可以加入ROS社区。

核心组件

ROS的核心组件主要分为三部分:通信基础结构、机器人特定功能库 、工具。

第一,通信基础结构

ROS,在底层提供消息传送接口以及进程之间的通信,起到了一种中间件的作用。ROS的中间件提供这些功能:

  • 发布和订阅匿名消息传递
  • 消息记录和回放
  • 远程过程调用的请求和响应
  • 分布式参数系统

消息传输

通信系统,一般来说,是实现一个全新机器人系统的首要需求。ROS内置了经过完善测试的消息系统,通过匿名发布和订阅机制,管理分布式节点之间的通信,从而节省开发者的开发时间。

另外,使用消息传输系统的还有一个重要优势,就是让开发者能够清楚地实现系统结点之间的接口,有利于提高封装性和代码复用程度。这些消息接口结构,会在消息接口描述语言中定义。

消息记录和回放

因为发布/订阅系统是匿名和异步的,所以数据可以被很容易地获取和回放,并不需要改动任何代码。

例如,你有一个任务A,从传感器中读取数据。你正在开发任务B,处理任务A产生的数据。ROS,让由任务A发布的数据很容易地记录到一个文件中,然后过一段时间,从文件中重新发布这些数据。这种消息传输抽象机制,让任务B无法得知数据的来源(来自任务A还是日志文件)。

这是一个十分强大的设计模式,可以显著降低开发成本、提高系统的灵活性和模块化程度。

远程过程调用

异步发布/订阅消息机制,可以满足机器大部分的通信需求。但是,某些特殊情况下,你会需要进程之间的同步请求/响应。ROS 使用“服务”,提供这种功能。和另外一个功能“主题”类似,数据在进程之间通过服务调用传输。服务调用在同样简单的消息接口描述语言中定义。

分布式参数系统

ROS中间件,通过参数服务器(一种多元、共享的字典,通过网络API访问)为任务提供分享配置信息的方法。系统让你可以轻易地改变任务配置,甚至让任务可以改变其他任务的配置。

第二,机器人库

除了核心的中间件,ROS还提供通用的机器人库,功能如下:

  • 机器人标准消息定义
  • 机器人几何库
  • 机器人描述语言
  • 可抢占远程过程调用
  • 诊断
  • 姿态评估
  • 定位
  • 绘图
  • 导航

标准机器人消息

经过社区多年的讨论和开发,最终实现了标准的消息格式,覆盖了绝大部分的机器人案例。

这些消息定义,有的针对于几何概念例如:姿势、变换、向量;有的针对于传感器例如:摄像头、惯性测量单元和激光器;有的针对导航数据例如:量距、路径和地图,以及许多其他概念。

在应用中,使用这些标准消息,开发者可以让代码,无缝地和ROS生态系统的其他部分对接,例如开发工具或者功能库。

机器人几何库

许多机器人项目中的一个通用挑战,就是让机器人的不同部分相互协调。例如,你想联合摄像头的数据和雷达的数据,你必须知道传感器位于什么地方,具有共同的参考系,特别是针对那些具有很多活动部件的类人机器人。

在ROS中,我们通过 tf (变换)库来解决这个问题,它可以持续追踪机器人系统每个部件的位置。

tf 库,首先考虑到了效率,用于管理协调机器人的变换数据,超过100度的自由,并且更新率达到数百赫兹。tf 库可以定义静态变换,例如固定于移动基座的摄像头;还有动态变换,例如机器人手臂的联合。

你可以变换系统中任何两个坐标系的传感器数据。tf 库可以处理以下的情况例如:信息的生产者和消费者分布于网络中不同位置,或者信息更新的速率不同。

机器人描述语言

ROS,还可以解决另外一个通用机器人问题,就是如何以一种机器可以读懂的方式描述机器人。

ROS提供了一些列工具,进行机器人描述和建模,使得它可以被ROS系统其余部分读懂,这些部分包括:tf、robot_state_publisher、rviz。

ROS中描述机器人的格式是URDF(统一机器人描述格式),你可以使用XML文档描述机器人的物理属性,例如肢体长度、轮子大小、传感器位置和机器人每个部分的视觉外观。

一旦以这种方式定义,你可以很容易通过使用tf库,以及模拟器和运动规划器,让机器人完美地呈现在三维空间中。

可抢占的远程过程调用

主题(匿名发布/订阅)以及服务(远程过程调用),可以覆盖机器人中大多数的通信案例。但是,有时你需要发起一个全局寻找行为,并且检测它的进展,并且能够实现抢占,完成后还要接到通知。

ROS为这个使用案例,设计了动作(action)库。动作库,和服务一样,只是它们还可以报告进展,得到最终反馈。它们可以被调用者抢占。

你可以让机器人根据导航到达指定位置,监测它在到达过程中的进展,在途中让它停止或者重新规划路径,成功或者失败后得到通知。

动作库是一个十分强大的概念,它贯穿整个ROS生态系统。

诊断

ROS提供了一种标准的方法,产生、搜集和统计机器人的诊断信息。让开发者可以很容易了解机器人的状态,并且可以决定如何处理出现的问题。

姿态评估、本地化和导航

另外,ROS也提供了一些更加强大功能,可以帮助你启动你的机器人项目。这些ROS软件包,可以解决一些基础问题例如姿势评估、地图中定位,构建地图和移动导航。

第三,工具

ROS 其中一个最强大的功能就是工具,这些工具支持内省、调试、绘图,以及系统状态可视化。

发布/订阅机制,让你可以自发地内省通过系统的数据流,更容易地理解和调试系统发生的问题。ROS工具利用这种内省功能,以及一些列的图形化和命令行工具,简化开发和调试。

命令行工具

ROS 可以无图形化界面的条件下使用。所有的核心功能和内省工具,都可以通过超过45种的命令行工具访问。这些命令可以启动小组结点,内省主题、服务和行动,记录和回放数据,以及其他许多情况。如果你愿意使用图形化工具,rviz 和 rqt 则提供了相似的功能。

rviz

rivz 可能是最著名的ROS工具,它提供了通用功能,对于许多传感器数据类型和URDF描述的机器人,进行三维视觉化。

rviz 可以可视化处理许多消息类型,例如雷达扫描、三维点云、摄像头图像。它也可以使用tf 库,按照你选择的坐标系,显示所有的传感器数据,同样也可以将机器人呈现出来。在同一个应用中,视觉化所有的数据可以让开发者很快看到机器人所看到的东西,从而可以区分传感器失调或者机器人模型失准引发的问题。

rqt

rqt,是一个基于QT框架的工具,用于开发机器人图形化接口。你可以创建定制接口,组成和配置内置rqt插件的扩展库,用于标签、多画面和其他布局。你也可以通过编写自己的rqt插件,你引入新的接口。

rqt_graph 插件,提供了ROS系统的内省和可视化,展示他们之间的结点和连接,让你可以便于调试和理解运行系统及其组成。

rqt_plot 插件,让你可以监测编码器、电压或者随着时间而变化的数字。rqt_plot插件让你可以选择绘图后端(例如matplotlib、Qwt、 pyqtgraph),以最好地满足需求。

rqt_topic 和 rqt_publisher 插件,可用于主题和监测。前者,允许你监测和内省系统内发布的任何主题。后者,让你可以发布自己的消息到任何主题,促进系统的专门实验。

对于数据的记录和回放,ROS使用“包”格式 。包文件可以通过rqt_bag 插件创建和图形化访问。插件可以将数据记录到包,从包中选择特定的主题回放,可视化包内容,包括显示图片和绘制随着时间推移的数值。

结语

ROS,刚刚度过9岁生日。这款机器人开源操作系统在机器人的感知、物体识别、脸部识别、姿势识别、运动、运动理解、结构与运动、立体视觉、控制、规划等多个领域都有相关应用。

John 衷心地希望这款机器人的介绍对大家有帮助,同时希望听到来自大家的宝贵意见,一起探讨。

本文作者:佚名
来源:51CTO

干货:机器人开源操作系统ROS相关推荐

  1. 机器人操作系统ROS 1.0 和 2.0 发展规划2018-2025(Open Robotics)译

    部分博文是翻译ROS官方新闻,如需查看原文,请至官网进行浏览.目前,ROS支持全部主流操作系统,windows,macos,linux,如有需要查看之前博文. 关注开发团队的目标,是依据现有资源制作机 ...

  2. 一文读懂自动驾驶中的机器人操作系统ROS

    一.什么是机器人操作系统ROS 1.ROS(Robot Operating System)是一个操作系统 ROS是对机器人的硬件进行了封装,不同的机器人.不同的传感器,在ROS里可以用相同的方式表示( ...

  3. 机器人操作系统ROS 编程开发--详细总结

    最近工作涉及到自动驾驶的,需要学习ROS,学习中总结了一些知识点,分享给大家. ROS基本介绍 机器人操作系统ROS,是一种分布式处理框架(又名Nodes),ROS常用C++和python编程语言开发 ...

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

    从零打造一个机器人002[初识机器人操作系统–ROS] 1.ROS是什么 ROS是一个适用于机器人的开源的元操作系统.其实它并不是一个真正的操作系统,其底层的任务调度.编译.寻址等任务还是由Linux ...

  5. 关于机器人操作系统(ROS)学习前须知二三

    ROS基础资料 1.什么是ROS? ROS(机器人操作系统,Robot Operating System),是专为机器人软体开发所设计出来的一套电脑作业系统架构.它是一个开源的元级操作系统(后操作系统 ...

  6. <笔记>机器人操作系统ROS理论与实践--第一讲:认识ROS

    <笔记>机器人操作系统ROS理论与实践--第一讲:认识ROS 前言 一.为什么需要ROS 二.ROS的总体设计 1.一个目标 2.五个特点 3.四位一体 三.ROS的系统实现--三个层次 ...

  7. 机器人操作系统ROS(1)

    ROS总体设计 ROS五个特点 点对点设计 一个使用ROS的系统包括一系列进程,这些进程存在于多个不同的主机并且在运行过程中通过端对端的拓扑结构进行联系,如图2所示.虽然基于中心服务器的那些软件框架也 ...

  8. Ros机器人/物联网操作系统

    综合技术栈 计算机 (微控制器)(OpenCR) 网络 (实时数据处理) 视觉 嵌入式 传感器 驱动器 (舵机控制) 固件开发 (FPGA) 自动驾驶 SLAM 即时定位与地图构建 应用 嵌入式系统 ...

  9. ros构建机器人运动学模型_机器人开源控制软件 OROCOS

    0. OROCOS 简介 OROCOS,全称 Open Robot Control Software,即机器人开源控制软件:如张新宇老师在ROS史话36篇 | 20. ROS之KDL中所说:" ...

最新文章

  1. python ioc di_Spring介绍,IOC(控制反转),DI(依赖注入)介绍及两种注入方法
  2. 泛读:CVPR2014:Discriminative Deep Metric Learning for Face Verification in theWild
  3. Java:本地最小语言
  4. spss 22 0统计分析从入门到精通_「转需」20+统计分析软件使用工具包,一次全搞定...
  5. Linux Socket Select说明
  6. ifconfig命令为centos linux系统配置临时的局域名IP、网关以及子网掩码
  7. c语言 string.h部分常用函数的实现
  8. Q133:PBRT-V3,BSSRDF的采样(15.4章节)
  9. arm b bl 地址无关码_海边同居有甜有虐,又一部BL日剧来了
  10. windows 远程连接mongo_MongoDB 在windows服务器安装部署与远程访问配置
  11. springSession框架来实现sso单点登陆
  12. json decode php 二维,在json_decode /多维数组之后访问JSON数组
  13. 华硕主板破linux密码破解,华硕P8B75-M-LE老主板加持NVMe SSD bios(刷新软件和bios)...
  14. 缺陷报告【软件测试】
  15. mac显示隐藏文件夹
  16. 2022年最新文本生成图像研究 开源工作速览(Papers with code)
  17. 引爆寒假招生——圣诞节活动方案大放送
  18. Android 4.0 平台特性
  19. AppScan 扫描web应用程序
  20. python破解md5_python怎么使用md5加密解密

热门文章

  1. Oracle数据库性能优化基础
  2. 华为MA5616配置及维护指南
  3. HDU2602(背包)
  4. struts2的两个核心配置文件
  5. uva562Dividing Coins
  6. FLEX APIs、Libs、Components
  7. python:容器、迭代器、生成器 简单介绍
  8. 使用Windows Server 2003搭建一个asp+access网站
  9. SDWebImage 笔记
  10. jstl中c:foreach下的表格实现异步刷新