ROS機器人操作系統 ( Robot Operating System 或簡稱 ROS),可以幫助提高機器人軟件的開發效率。ROS能夠提供類似傳統操作系統的諸多功能,如硬件抽象、底層設備控制、常用功能實現、進程間消息傳遞和程序包管理等。此外,它還提供相關工具和庫,用於獲取、編譯、編輯代碼以及在多個計算機之間運行程序完成分布式計算。結合筆者對ROS的理解,想與大家一起討論,共同把ROS理解的更准確,一起進步。
對ROS的誤解:
1.ROS不是一種編程語言。實際上,ROS的主要代碼由C++語言編寫,客戶端庫的編寫還可以使用Python、Java和Lisp等其他多種語言編寫。據筆者開發經驗而談,ROS只不過用c++基本語法進行了封裝,制定了統一的標准,比如導航所用的速度和角度,ROS封裝成了自己的結構體叫msg,如果你裝了ROS,你可以用命令rosmsg show geometry_msg/Twist 查看到格式:
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
可以看到都是c++基本語法,只是提供一個通用的數據類型以便促進整個系統的互操作性。geometry_msgs是存放結構體(或組合成的新類型比較准確)的文件夾的名字(ROS叫包package),結構體(新類型)的名字Twist(ROS叫消息msg),這個包下還有很多類型http://wiki.ros.org/geometry_msgs
2.ROS不僅是一個函數庫(比如在ROS的導航中全局路徑規划(global planner)首先會通過全局路徑規划,計算出機器人到目標位置的全局路線。這一功能是navfn這個包實現的。navfn通過Dijkstra最優路徑的算法,計costmap上的最小花費路徑,作為機器人的全局路線。如果你想做global planner,直接調用這個包就行了),除包含客戶(Client Libraries)外還包含一個中心服務器(Central Server)、一系列命令行工具、圖形化界面工具以及編譯環境。
3.ROS不是集成開發環境。雖然ROS沒有規定軟件開發環境,但幾乎所有的主流IDE8都可用於基於ROS的軟件開發。此外,我們還可以根據個人喜好,使用普通的文本編輯器和命令行來完成相應的開發,而無需任何IDE。
4.ROS也不是一個完全意義上的操作系統,是一個軟件平台能夠提供類似傳統操作系統的諸多功能而已,Linux ubuntu操作系統對它支持良好,我認為最初是基於Linux ubuntu操作系開發的,選擇ubuntu其中一個重要的原因我認為ubuntu有絢麗的圖形化界面。雖然編譯ROS程序時用rosbuild或catkin_make,本質上還是基於cmake的,只是寫了個shell腳本把cmake的命令集合一下,運行程序雖然用rosrun命令,本質和運行./bin(編譯生成的二進制文件)一樣,它也只不過是一個shell腳本,能夠理解ROS的文件組織結構,知道到哪里能找到與給定包名稱對應的可執行文件。一旦它找到你要的程序,rosrun就會正常啟動節點。舉個例子就好理解了:你要啟動turtlesim_node節點(負責創建turtlesim窗口和模擬海龜的運動)可以運行 rosrun turtlesim turtlesim_node ,但是你完全可以這么啟動:/opt/ros/indigo/lib/turtlesim/turtlesim_node
發行版本(Distributions):
ROS的主要版本稱為發行版,其版本號以順序字母作為版本名的首字母來命名(這種方式與其他大型工程的版本命名方式類似,如Ubuntu、Android)。ROS的版本包括hydro、groovy、feurte、electric、diamondback、C Turtle、box turtle、indigo、jade、kinetic。