对于ROS(Robot Operating System)系统的学习也有一段时间,何不总结一下自己浅薄的理解?
ROS定义
ROS是一个开放源代码的机器人元操作系统。它提供了我们对操作系统期望的服务,包括硬件抽象、低级设备控制、常用功能的实现、进程之间的消息传递以及功能包管理。它还提供了用于在多台计算机之间获取、构建、编写和运行代码的工具和库。
换句话说,ROS是一种分布式系统(中间件),基于点对点的通信机制,有类似于windows操作系统等的硬件抽象,但它并不是一个传统意义上的操作系统。此外,它是一个机器人软件平台,提供了专门为机器人开发应用程序的各种开发环境。
ROS特征
■ 分布式进程:它以可执行进程的最小单位(节点,Node)的形式进行编程,每个进程独立运行,并有机地收发数据。
■ 功能包单位管理:由于它以功能包的形式管理着多个具有相同目的的进程,所以开发和使用起来很容易,并且很容易共享、修改和重新发布,这些功能包都公开在公共存储库(例如GitHub)上,并标识许可证。
■ API类型:使用ROS开发程序时,ROS被设计为可以简单地通过调用API将其加载到其使用的代码中。
■ 支持多种编程语言:跨语言编程系统,它可以用于如JAVA、C#、Lua和Ruby等语言,也可以用于机器人中常用的编程语言,如Python、C++和Lisp。
ROS历史
ROS前身是由摩根·奎格利(Morgan Quigley)博士于2007年5月份为了美国的斯坦福大学人工智能研究所进行的STAIR(STanford AI Robot)项目开发的Switchyard 系统。
2007年11月开始,由美国的机器人公司Willow Garage承接开发ROS。Willow Garage是个体机器人(Personal robotics)及服务机器人领域中非常有名的公司。它以开发和支持我们熟知的视觉处理开源代码OpenCV和Kinect等在三维设备广泛使用的点云库(PCL,Point Cloud Library)而著名。
这家Willow Garage从2007年11月开始着手ROS的开发,在2010年1月22日向全世界发布了ROS1.0。我们熟知的ROS Box Turtle版是2010年3月1日首次发布的。此后,和Ubuntu和安卓一样,每个版本都以C Turtle、Diamondback等按字母顺序起名。ROS基于BSD许可证(BSD 3-Clause License)及Apache License 2.0),因此,任何人可以修改、重用和重新发布。有面向开发者和用户的ROSDay和ROSCon学术会议,还有叫做ROS Meetup的多种社区群。
Willow Garage公司以ROS的名称延续了其开发工作。其第六次发布版ROS Groovy Galapagos是Willow Garage的最后的版本。Willow Garage在2013年进入商业服务机器人领域之后遇到诸多困难并分解为多个创业公司,此时ROS被转让给开源机器人工程基金会(OSRF,Open Source Robotics Foundation)来维护。之后OSRF继续发布了4个新版本。从2017年5月开始OSRF更名为Open Robotics,至今开发、运营和管理ROS。ROS的每个版本的名称的首字母是按照英文字母的顺序来制定的,并将乌龟(Turtle)作为图标。
版本规则
ROS除了1.0版本以外,都像Ubuntu和安卓一样,将版本名的首字母按英文字母顺序来安排。比如,Kinetic Kame是字母表的K版本,是第11个版本,也是第10个正式发布版。
此外还有一个规则。每个版本都有一个海报形式的插图和一个乌龟图标。使用海龟作为ROS的象征很大程度上是来自于20世纪60年代MIT人工智能研究所的教育节目标志(Logo) 。在50多年前的1969年,乌龟(Turtle)机器人是使用一个叫Logo的编程语言开发的,这个机器人会根据计算机下达的命令,在地板上实际移动并可以画图。依照它,开发ROS的时候开发了叫做turtlesim的虚拟的例子程序,而这也是后来将ROS机器人成为TurtleBot的由来 。
版本周期
ROS的版本周期和ROS正式支持的操作系统Ubuntu的新版本发布周期一样,是每年发布两次(4月和10月)。但2013年很多用户由于频繁的升级,提议新的版本周期。因此在2013年接纳了用户们的意见,决定从Hydro Medusa版本开始,每年发布一次正式版本,时间点则在新的Ubuntu xx.04版本发布一个月之后的5月份。而恰好每年的5月23日是世界乌龟日(World Turtle Day) ,所以现在每年的这个有象征意义的一天会发布新的ROS版本。
ROS的支持期间根据版本而不同,一般是发布后提供两年的支持。而针对每两年发布的Ubuntu长期支持版(Long Term Support)发布的ROS版本提供与LTS一样的5年的支持期间。比如,支持2016年的Ubuntu 16.04 LTS的ROS Kinetic Kame具有直到2021年5月的5年的支持期间。非LTS版本保持最新版本的Linux核,仅仅是进行了次要的升级以及基本的维护。因此很多ROS用户们使用偶数年度发布的LTS版本的ROS。
ROS通信
ROS是以最小化单位-节点的形式开发的,节点则通过消息(message)与其他的节点交换数据,最终成为一个大型的程序。这里的关键概念是节点之间的消息通信,它分为三种。单向消息发送/接收方式的话题(topic);双向消息请求/响应方式的服务(service);双向消息目标(goal)/结果(result)/反馈(feedback)方式的动作(action)。另外,节点中使用的参数可以从外部进行修改。这在大的框架中也可以被看作消息通信。ROS消息通信可以用一张图来说明:
ROS模块
ROS主要由三大模块组成:通信模块、机器人模块、工具集模块。
通信模块:像之前提到的ROS1.0的通信模块是基于master主节点的点对点通讯机制,当一个节点(pub)发起会向参数服务器(master主节点)进行信息注册,当另外一个节点(sub)发起同样也会向主节点进行注册,并告知主节点需要订阅的内容,通过master主节点,发布节点同订阅节点形成了通信链路,此时,master主节点的作用也就到此结束。
机器人模块:机器人模块包含了从机器人建模,仿真直到运动控制的一系列必要工具,包括标准机器人消息类型、机器人几何数据、标准机器人描述语言(URDF)、诊断、位姿变换集(tf)、定位与导航等。
工具集模块:工具集模块主要集成了一些机器人学习的重要第三方库,通过API集成的工具很大程度上扩展了ROS的强大功能。同时,ROS中提供的rqt可视化工具对于机器人运动中的实时数据检测起到了重要的作用,方便了开发人员的调参工作,同时也是初学者对于首次接触大型项目必备的工具。
ROS组件
ROS系统强大的兼容性能够让使用不同工具的开发者很快的入手,并找到共同话题。ROS利用丰富的API接口集成了一大批的组件库,开发者可以根据自身的开发内容很轻松的调用需要的工具。这也是ROS在机器人开发领域地位持续上升的原因。
Gazebo
Gazebo是一款3D仿真器,支持机器人开发所需的机器人、传感器和环境模型,并且通过搭载的物理引擎可以得到逼真的仿真结果。即便是开源仿真器,却具有高水准的仿真性能,因此在机器人工程领域中非常流行。
RViz
RViz是ROS的三维可视化工具。它的主要目的是以三维方式显示ROS消息,可以将数据进行可视化表达。例如,可以无需编程就能表达激光测距仪(LRF)传感器中的传感器到障碍物的距离,RealSense、Kinect或Xtion等三维距离传感器的点云数据(PCD,Point Cloud Data),从相机获取的图像值等。
OpenCV
OpenCV(Open source Computer Vision Library)是一个开放源代码的API函数库,采用C及C++语言编写,所有代码都经过优化,计算效率很高。该库横跨工业产品检测、机器视觉、安防、医学图像处理、自动驾驶等一系列领域的超过500个接口函数,可谓视觉神库。
MoveIt!
MoveIt! 是一个集成的机械手臂库,提供多种功能,包括用于运动规划的快速逆运动学分析、用于操纵的高级算法、机械手控制、动力学、控制器和运动规划。通过提供一个GUI来协助MoveIt!所需的各种设置,它还具有的一个优点是没有对机械手臂的高级知识也能容易使用。
ROS-I
ROS-I包含用于工业硬件的库,工具和驱动程序,它由ROS-Industrial Consortium支持和指导。ROS-I主要目的在于将ROS应用于工业领域,开发满足工业用途的可靠软件以及良好的API。
ROS学习资料
ROS学习书籍链接:
https://pan.baidu.com/s/1vn-CpUBsKBNfuo6CoQFd_g 提取码: jxt7
ROS学习网站链接:
http://www.ros.org/
http://www.willowgarage.com/
http://www.theconstructsim.com/
https://www.ncnynl.com/
http://www.guyuehome.com/
https://www.rosclub.cn/
http://gazebosim.org/
https://opencv.org/
http://moveit.ros.org/
…
ROS社区:
http://www.roswiki.com/ ROS维基社区
http://community.bwbot.org/ 小强ROS机器人技术支持
http://answers.ros.org/questions/
http://wiki.ros.org/Metrics
https://www.ncnynl.com/ 创客智造
http://blog.exbot.net/ 易科机器人实验室
…
QQ群:
361379172【ROS机器人操作系统】,ROSwiki交流分享求助群
144964398【ROS机器人技术交流群】
253247353【ROS(机器人操作系统)】。
204907939【Gaitech ROS Forum】,Turtlebot中国代理商Gaitech官方群。
9820986【机器人操作系统】。
109434898【ExBot开源机器人社区】。
184903125【ROS机器人俱乐部】。
538456117【蓝鲸智能ROS机器人技术交流群】。
477659623【创客智造ROS技术交流群】。
174361990【ROS移动机器人俱乐部】
…