先放一個(gè)ROSIndustrial一周年剪輯視頻。
ROS已經(jīng)發(fā)布八周年了,在國(guó)外科研機(jī)構(gòu)中非常受歡迎。目前,以美國(guó)西南研究院為首的幾位大佬開(kāi)始嘗試將ROS應(yīng)用在工業(yè)機(jī)器人中,上面這個(gè)視頻就是ROS-I項(xiàng)目一周年的進(jìn)展情況。
為了說(shuō)明講清楚ROS,我就從ROS是什么,為什么使用ROS,如何使用ROS三個(gè)方面展開(kāi)。
△出自今年《機(jī)器人視覺(jué)與應(yīng)用》課程本人制作的課件
是什么
ROS是Robot Operating System的縮寫(xiě),原本是斯坦福大學(xué)的一個(gè)機(jī)器人項(xiàng)目,后來(lái)由WillowGarage公司發(fā)展,目前由OSRF(Open Source Robotics Foundation,Inc)公司維護(hù)的開(kāi)源項(xiàng)目。
1、首先是一個(gè)操作系統(tǒng)
根據(jù)wikipedia定義,操作系統(tǒng)是用來(lái)管理計(jì)算機(jī)硬件與軟件資源,并提供一些公用的服務(wù)的系統(tǒng)軟件。而ROS也自稱(chēng)是一個(gè)OS。
△計(jì)算機(jī)OS與機(jī)器人OS對(duì)比示意圖
如上圖所示,計(jì)算機(jī)的操作系統(tǒng)將計(jì)算機(jī)硬件封裝起來(lái),而應(yīng)用軟件運(yùn)行在操作系統(tǒng)之上,不用管計(jì)算機(jī)具體應(yīng)用的是什么類(lèi)型的硬件產(chǎn)品。這能大大提高軟件開(kāi)發(fā)效率(否則大家只能都寫(xiě)匯編了)。
同理,ROS則是對(duì)機(jī)器人的硬件進(jìn)行了封裝,不同的機(jī)器人、不同的傳感器,在ROS里可以用相同的方式表示(topic等),供上層應(yīng)用程序(運(yùn)動(dòng)規(guī)劃等)調(diào)用。
2、是一種跨平臺(tái)模塊化軟件通訊機(jī)制
ROS用節(jié)點(diǎn)(Node)的概念表示一個(gè)應(yīng)用程序,不同node之間通過(guò)事先定義好格式的消息(Topic),服務(wù)(Service),動(dòng)作(Action)來(lái)實(shí)現(xiàn)連接。
△ROS分布特點(diǎn)
△三種通訊方式的特點(diǎn)
三種通訊方式的優(yōu)缺點(diǎn)可看上表,由于很多模塊化編程工具都有類(lèi)似功能,這里就不具體展開(kāi)了。
基于這種模塊化的通訊機(jī)制,開(kāi)發(fā)者可以很方便地替換、更新系統(tǒng)內(nèi)的某些模塊;也可以用自己編寫(xiě)的節(jié)點(diǎn)替換ROS的個(gè)別模塊,十分適合算法開(kāi)發(fā)。
此外,ROS可以跨平臺(tái),在不同計(jì)算機(jī)、不同操作系統(tǒng)、不用編程語(yǔ)言、不同機(jī)器人上使用。
3、是一系列開(kāi)源工具
△幾種ROS工具示意圖:左上rqt_plot,右上rqt_graph,左下Rviz,右下TF
如上圖所示,ROS為開(kāi)發(fā)者提供了一系列非常有用的工具,可以大大提高我們開(kāi)發(fā)的效率。
rqt_plot:可以實(shí)時(shí)繪制當(dāng)前任意Topic的數(shù)值曲線(xiàn);
rqt_graph:可以繪制出各節(jié)點(diǎn)之間的連接狀態(tài),和正在使用的Topic等;
TF:TF是Transform的簡(jiǎn)寫(xiě),利用它,我們可以實(shí)時(shí)知道各連桿坐標(biāo)系的位姿,也可以求出兩個(gè)坐標(biāo)系的相對(duì)位置。
Rviz:超強(qiáng)大的3D可視化工具,可以顯示機(jī)器人模型、3D電影、各種文字圖標(biāo)、也可以很方便二次開(kāi)發(fā);
△在Rviz里顯示機(jī)器人模型、3D點(diǎn)云、物體模型等
△在Rviz里也可以實(shí)現(xiàn)方便交互功能
除此之外,ROS還有很多其他有用的開(kāi)源工具等待大家探索。
4、是一系列最先進(jìn)的算法
△ROS包含許多先進(jìn)的機(jī)器人開(kāi)源項(xiàng)目
除了ROS之外,世界上已經(jīng)有很多非常優(yōu)秀的機(jī)器人開(kāi)源項(xiàng)目,但是ROS正逐漸將它們一一囊括在自己的范疇里。例如:
PS:我跟ROS的其他幾個(gè)開(kāi)發(fā)者也正在努力將LinuxCNC整合進(jìn)ROS
OROCOS:這個(gè)開(kāi)源項(xiàng)目主要側(cè)重于機(jī)器人底層控制器的設(shè)計(jì),包括用于計(jì)算串聯(lián)機(jī)械臂運(yùn)動(dòng)學(xué)數(shù)值解的KDL、貝葉斯濾波、實(shí)時(shí)控制等功能。
OpenRave:這是在ROS之前最多人用來(lái)做運(yùn)動(dòng)規(guī)劃的平臺(tái),ROS已經(jīng)將其中的ikfast(計(jì)算串聯(lián)機(jī)械臂運(yùn)動(dòng)學(xué)解析解)等功能吸收。
Player:一款優(yōu)秀的二維仿真平臺(tái),可以用于平面移動(dòng)機(jī)器人的仿真,現(xiàn)在在ROS里可以直接使用。
OpenCV:大名鼎鼎的機(jī)器視覺(jué)開(kāi)源項(xiàng)目,ROS提供了cv_bridge,可以將OpenCV的圖片與ROS的圖片格式相互轉(zhuǎn)換。
OMPL:現(xiàn)在最著名的運(yùn)動(dòng)規(guī)劃開(kāi)源項(xiàng)目,已經(jīng)成了MoveIt的一部分。
Visp:一個(gè)開(kāi)源視覺(jué)伺服項(xiàng)目,已經(jīng)跟ROS完美整合。
Gazebo:一款優(yōu)秀的開(kāi)源仿真平臺(tái),可以實(shí)現(xiàn)動(dòng)力學(xué)仿真、傳感器仿真等,也已被ROS吸收。
△左下角gazebo,右下角Rviz
當(dāng)然,除了吸收別的優(yōu)秀開(kāi)源項(xiàng)目,ROS自己也發(fā)展出許多非常優(yōu)秀的項(xiàng)目和庫(kù)。
ORK:一個(gè)物體識(shí)別與位姿估計(jì)開(kāi)源庫(kù),包含LineMod等算法,但實(shí)際使用效果還不是太理想。
△LineMod識(shí)別效果