【ROS RIKIBOT基础--使用系列 第三章节】ROS机器人操作系统
ROS机器人操作系统
ROS系统较为复杂,本小节帮助读者对ROS有个概念认知,方便后面机器人操作。更详细ROS学习,请参考ROS学习资料
1.1 ROS系统介绍
在ROS维基中将ROS定义为"ROS是一个开放源代码的机器人元操作系统。它提供了我们对操作系统期望的服务,包括硬件抽象、低级设备控制、常用功能的实现、进程之间的消息传递以及功能包管理。它还提供了用于在多台计算机之间获取、构建、编写和运行代码的工具和库。"
换句话说, ROS包括一个类似于操作系统的硬件抽象,但它不是一个传统的操作系统,它具有可用于异构硬件的特性。此外,它是一个机器人软件平台,提供了专门为机器人开发应用程序的各种开发环境。
过去我们要用一样东西,必需要自己会制作。而现在,我们只需要会用,甚至我们可以继续开发出新的用法。ROS就是向我们传达这样一个理念,关于机器人的许多算法,我们只需主要理解其优点与用法而不用再死扣算法,就可以设计出一个功能十分丰富且智能的机器人。
ROS的历史
ROS始于2007年5月份由摩根·奎格利(Morgan Quigley) 7博士为了美国的斯坦福大学人工智能研究所(AI LAB)进行的STAIR (STanford AI Robot) 8项目开发的Switchyard9系统经开始构建生态系统。
摩根奎格利(Morgan Quigley)博士是现在负责开发和管理ROS的Open Robotics 【原OSRF (OpenSource Robotics Foundation) 】的创办人,也是软件开发负责人。Switchyard是当时为了用于Al研究室项目的人工智能机器人的开发而设计的程序,也是ROS的前身。此外,从2000年开始开发,对ROS的网络程序产生巨大影响的Player/Stage项目(Player网络服务器和2Dstage仿真器,还影响至ROS的3D仿真器Gazebo的开发)的开发者Brian Gerkey(http://brian.gerkey.org/)是Open Robotics的CEO及共同创办人。因此, ROS在2007年由Willow Garage公司获得ROS这个名字之前,受到了2000年的Player/Stage和2007年的witchyard等项目的影响。
2007年11月开始,由美国的机器人专门公司Willow Garage承接开发ROS.WillowGarage是个人机器人(Personal robotics)及服务机器人领域中非常有名的公司。它以开发和支持我们熟知的视觉处理开源代码OpenCV和Kinect等在三维设备广泛使用的点云库(PCL, PointCloud Library) )而著名。这家Willow Garage从2007年11月开始着手ROS的开发,在2010年1月22日向全世界发布了ROS 1.0,我们熟知的ROS Box Turtle版是2010年3月1日首次发布的。此后,和Ubuntu和安卓一样,每个版本都以C Turtle, Diamondback等按字母顺序起名。
ROS基于BSD许可证(BSD 3-Clause License)及Apache License 2.0),因此任何人可以修改、重用和重新发布。与此同时, ROS持续提供大量最新版本的软件,因此在教育及学术领域认识的参与程度非常高,一开始通过机器人相关学术会议广为传播。有面向开发者和用户的ROSDay和ROSCon学术会议,还有叫做ROS Meetu的多种社区群。不仅如此,可以应用ROS的机器人平台的开发也在快速跟进。例如以Personal Robot为含义的PR2和TurtleBot机器人,有许多应用程序通过它们喷涌而出,这更加巩固了ROS作为机器人操作系统的地位。
ROS生态系统机器人领域,起初,各种硬件技术泛滥,却没有能整合它们的操作系统。在这种情况下,如上所述,各种软件平台已经出现,最受瞩目的ROS现在已经开始构建生态系统。起步虽然微不足道,但考虑到逐渐增多的用户数量和机器人公司,以及急剧增加的相关工具和库,我期待在不久的将来将会形成一个圆满的生态系统。另外,我希望机器人硬件领域的开发者、ROS开发运营团队、应用软件开发者以及用户也能像机器人公司和传感器公司一样从中受益。
ROS版本
到目前为止ROS发布了ROS 1.0,Box Turtle, C Turtle, Diamondback, ElectridEmys, Fuerte, Groovy Galapagos, Hydro Medusa, Indigo Igloo, Jade Turtle, KineticKame和Lunar Loggerhead等版本。
ROS除了1.0版本以外,都像Ubuntu和安卓一样,将版本名的首字母按英文字母顺序来安排。比如, Kinetic Kame是字母表的K版本,是第11个版本,也是第10个正式发布版。
此外还有一个规则。每个版本都有一个海报形式的插图和一个乌龟图标,如图所示。这个乌龟图标也被用于ROS官方仿真教程turtlesim,使用海龟作为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日是世界乌龟日(WorldTurtle 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的版本升级。
目前我们的树莓派4B 和Jetson Nano 系统都是安装的 ROS melodic 版本。
ROS版本选择
由于ROS是元操作系统,需要选择基本的操作系统。ROS支持Ubuntu, Linux Mint.Debian, OS X、 Fedora, Gentoo, OpenSUSE, ArcLinux和Windows等多种操作系统,但用的最多的操作系统是Ubuntu和Linux Mint,开发部门也是针对Ubuntu LTS版本进行测试并发布。由于这种原因我推荐Ubuntu LTS或与Linux Mint版本匹配的ROS版本。
ROS目标
ROS的目标是“建立一个在全球范围内协作开发机器人软件的环境! " ROS致力于将机器人研究和开发中的代码重用做到最大化,而不是做所谓的机器人软件平台、中间件和框架。为了支持这个, ROS具有以下特征。
分布式进程:它以可执行进程的最小单位(节点, Node)的形式进行编程,每个进程独立运行,并有机地收发数据。
功能包单位管理:由于它以功能包的形式管理着多个具有相同目的的进程,所以开发和使用起来很容易,并且很容易共享、修改和重新发布。
公共存储库:每个功能包都将其功能包公开给开发人员首选的公共存储库(例如GitHub) ,并标识许可证。
API类型:使用ROS开发程序时, ROS被设计为可以简单地通过调用API将其加载到其使用的代码中。在每章中介绍的源代码中,您会发现ROS编程与C++和Python程序没有区别。
支持多种编程语言: ROS程序提供客户端库(Client Library)以支持各种语言。它可以用于如JAVA, C#、Lua和Ruby等语言,也可以用于机器人中常用的编程语言,如Python, C++和Lisp,换句话说,您可以使用熟悉的语言开发ROS程序。
ROS特点
1.1.1 点对点的设计
节点单元、分布式网络、RPC+TCP/UDP通信系统、适合多机协同。
1.1.2 多语言支持
支持Python,C++、Java等编程语言,语言无关的接口定义。
1.1.3 架构精简、集成度高
每个功能节点可以单独编译。集成众多开源项目。接口统一提高软件复用性。
1.1.4 组件化工具包丰富
3D可视化工具-rviz
物理仿真环境–gazebo
数据记录工具-rosbagQt
工具箱–rqt
1.1.5 免费并且开源
BSD许可,可修改、可复用、可商用,软件包数量指数级增加,良好的生态系统。
1.2 ROS重要概念
本小节介绍了ROS常用概念,方便读者理解ROS系统。
ROS
ROS是一个用于开发机器人应用程序的、类似操作系统的机器人软件平台。ROS提供开发机器人应用程序时所需的硬件抽象、子设备控制,以及机器人工程中广泛使用的传感、识别、绘图、运动规划等功能。此外ROS还提供进程之间的消息解析、功能包管理、库和丰富的开发及调试工具。
主节点
主节点(master)负责节点到节点的连接和消息通信,类似于名称服务器(Name Server) 。roscore是它的运行命令,当您运行主节点时,可以注册每个节点的名字,并根据需要获取信息。没有主节点,就不能在节点之间建立访问和消息交流(如话题和服务)
节点
节点(node)是指在ROS中运行的最小处理器单元。可以把它看作一个可执行程序。在ROS中,建议为一个目的创建一个节点,建议设计时注重可重用性。例如,在移动机器人的情况下,为了驱动机器人,将每个程序细分化。也就是说,使用传感器驱动、传感器数据转换、障碍物判断、电机驱动、编码器输入和导航等多个细分节点。
功能包
功能包(package)是构成ROS的基本单元。ROS应用程序是以功能包为单位开发的。功能包包括至少一个以上的节点或拥有用于运行其他功能包的节点的配置文件。它还包含功能包所需的所有文件,如用于运行各种进程的ROS依赖库、数据集和配置文件等。
消息
节点之间通过消息(message)来发送和接收数据。消息是诸如integer, floatingpoint和boolean等类型的变量。用户还可以使用诸如消息里包括消息的简单数据结构或列举消息的消息数组的结构。使用消息的通信方法包括TCPROS, UDPROS等,根据情况使用单向消息发送/接收方式的话题(topic)和双向消息请求(request) /响应(response)方式的服务(service) 。
话题
话题(topic)就是“故事" 。在发布者(publisher)节点关于故事向主节点注册之后,它以消息形式发布关于该故事的广告。希望接收该故事的订阅者(subscriber)节点获得在主节点中以这个话题注册的那个发布者节点的信息。基于这个信息,订阅者节点直接连接到发布者节点,用话题发送和接收消息。
发布与发布者
发布(publish)是指以与话题的内容对应的消息的形式发送数据。为了执行发布,发布者(publisher)节点在主节点上注册自己的话题等多种信息,并向希望订阅的订阅者节点发送消息。发布者在节点中声明自己是执行发布的个体。单个节点可以成为多个发布者。
订阅与订阅者
订阅是指以与话题内容对应的消息的形式接收数据。为了执行订阅,订阅者节点在主节点上注册自己的话题等多种信息,并从主节点接收那些发布此节点要订阅的话题的发布者节点的信息。基于这个信息,订阅者节点直接联系发布者节点来接收消息。订阅者在节点中声明自己执行订阅的个体。单个节点可以成为多个订阅者。
特别说明:此处旨在抛砖引玉,更多更详细资料,请参考学习资料。
1.3 ROS工具介绍
ROS系统具有丰富的工具包,本小节讨论的工具是对于ROS编程非常有用的辅助工具。
1.3.1 三维可视化工具-RViz
RViz是ROS的三维可视化工具。它的主要目的是以三维方式显示ROS消息,可以将数据进行可视化表达。例如,可以无需编程就能表达激光测距仪(LRF)传感器中的传感器到障碍物的距离,RealSense, Kinect或xtion等三维距离传感器的点云数据(PCD, Point Cloud Data) ,从相机获取的图像值等。
利用用户指定的多边形(polygon)支持各种表现形式, 交互标记(Interactive Markers) 2可以表达接收来自用户节点的命令和数据并互交的过程。在ROS中,机器人以URDF (UnifiedRobot Description Format,统一机器人描述格 描述,它可以表示为三维模型,并且每个模型可以根据自由度进行移动或驱动,因此可以用仿真或控制。
1.3.2 GUI开发工具-rqt
除了三维可视化工具RViz之外, ROS还为机器人开发提供各种GUI工具。例如,有一个将每个节点的层次结构显示为图形,且显示当前节点和话题状态的graph;将消息显示为二维图形的plot,等。从ROS Fuerte版本开始,这些GUI开发工具被称为rqt,它集成了30多种工具,可以作为一个综合的GUI工具来使用。另外, RViz也被集成到rqt的插件中,这使rqt成为ROS的一个不可缺少的GUI工具。RViz是ROS的三维可视化工具。
顾名思义, rqt是基于Qt开发的,而Qt是一个广泛用于计算机编程的GUI编程的跨平台框架,用户可以方便自由地添加和开发插件。本节介绍rqt插件中的
rqt_image_view、rqt_graph、rqt_plot和rqt_bag.
rqt_image_view
这是一个显示相机的图像数据的插件。这不是一个图像处理过程,它只是在简单地查看图像时非常有用。一般的USB摄像头支持UVC,所以用户可以使用ROS的uvc_camera功能包。
rqt_graph
rqtgraph是用图形表示当前活动中的节点与在ROS网络上传输的消息之间的相关性的工具。这对了解当前ROS网络情况非常有用。
rqt_plot
rqt_plot是一个二维数据绘图工具。绘图意味着绘制坐标。换句话说,它接收到ROS消息并将其撒在坐标系上.
rqt_reconfigure
该rqt插件继承了以前dynamic-reconfigure的GUI (reconfigure_gui) ,并提供了查看和编辑可通过dynamic-reconfigure访问的参数的方法。
最后Rikirobot提供两驱动、四驱动、麦克纳姆轮、Omni全向三轮、Omni全向四轮、履带、阿克曼(舵机转向)、大型负载的各种ROS车,有配套指导、及完善售后。
QQ交流群:130486387
RIKIROBOT店铺连接
下面是店铺的二维码、Rikirobot的交流群和微信公众号,有兴趣的可以扫一扫