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