ROS知識點總結

一.ROS的定義html

  ROS是一個適用於機器人的開源的元操做系統。它提供相似操做系統所提供的功能,包括硬件抽象、底層設備控制、經常使用函數的實現、進程間消息傳遞以及包管理。它也提供用於獲取、編譯、編寫、跨計算機運行代碼所需的工具和庫函數。它主要採用的是鬆耦合點對點進程網絡。node

  我的理解:ROS不是一個真正的操做系統,是類操做系統,是屬於中間層的。ROS主要的目的是將硬件層抽象出來,留出接口方便開發。ROS能夠分爲框架、工具、功能和社區四大部分,其中框架主要是指分佈式管理和進程管理,工具備仿真軟件Gazebo、可視化工具RvizRqt,功能有控制、規劃、定位和建圖等功能,社區指的是軟件包管理,能夠調用別人的軟件包進行項目開發,通常能夠在wiki或者github上找到資源。git

  ROS有四大優勢:1、鬆散耦合的機制方便機器人軟件框架的組織;2、很是便利的數據記錄、分析、仿真工具,方便調試;3、最豐富的機器人功能庫,方便快速搭建原型;4、學界和產業界的標準,方便學習和交流。 使用一句話總結,使用ROS,可以方便迅速地搭建好機器人原型。其實,ROS這四大優勢恰好一一對應框架、工具、功能和社區這四大部分。github

 

二.ROS安裝(從底層的架構來分析爲何這樣安裝,有待理解)編程

  注:apt-get install 安裝二進制,沒法修改;緩存

  從github下載的軟件包或者本身編寫的須要編譯才能安裝。服務器

 

三.ROS名詞解釋網絡

1.package(功能包):功能包是ROS中組織軟件的主要形式,一個功能包包含多個可執行文件。架構

2.metapackage(功能包集):功能包集是實現某種功能的多個功能包的集合。框架

3.node(節點):節點是一個可執行文件,程序文件只有轉成成可執行文件才能夠運行。

4.topic(主題):節點通訊方式的一種,經過publish-subscribe來實現,異步和單向的通訊。

5.message(消息)topic通訊的數據類型,能夠理解爲二者通訊的協議。

6.service(服務):節點通訊方式的一種,經過client-server來實現,同步和雙向的通訊。

 

四.ROS工程結構(文件系統級)

  ROS工程結構直觀上是指圖形化界面上的文件夾以及裏面的內容,本質上是講ROS的框架。

  首先是建立一個新的Catkin工做空間(之前叫Rubuild),也叫Catkin Workspace,這個文件夾裏面有三個文件夾,分別是srcbuliddevel,這三個文件夾分別存放pkg軟件包、中間緩存文件以及目標文件,其中src裏面的package文件是最重要的,也是最基本的組織形式,一個package裏面包含兩個必備的文件,分別是CMakeList.txtpackage.xmlCMakeList.txt文件定義了編譯的規則直接規定了這個package要依賴哪些package,要編譯生成哪些目標,如何編譯等等流程;package.xml裏面是package的自我屬性描述,在之前的Rubuild裏面叫manifest.xml,其實二者是同樣的。除此以外,還有scripts(*.py*.cpp)include(*.h)src文件夾,這三個文件夾是與C++Python有關的。有些狀況下還會有config(param)launch文件夾和一些自定義的通訊格式(msgsrvaction)。這就是一個完整的ROS工程結構,其中是srcbuilddevel是必須有的,而src裏面的CMakeList.txtpackage.xml也是必須有的,其餘的文件是看項目的須要而創建的。

  總體的文件說明參考下圖4-1所示:

 

4-1 文件的說明

 

關於ROS的編譯過程參考下圖4-2所示:

 

4-2 編譯的過程

 

  那麼對工程結構有了一個總體的認識後,咱們須要如何建立和管理這些文件,這就須要用到咱們的一些經常使用的指令來進行管理,這些指令跟LINUX裏面的指令有點相似,大部分是在LINUX指令前面加上ros

  其中有六個指令比較經常使用,具體的使用格式能夠查,大概有關印象。以下所示:

  1.catkin_creat_pkg:建立一個package

  2.roscd:跳到某個pkg 的路徑下

  3.rosed:編輯某個pkg下的某個file文件

  4.rosls:羅列當前包的信息

  5.rosdep:安裝某個pkg的依賴包

  6.rospackrospack find package_name是尋找某個包

     rospack list 顯示全部的包

  對於ROS來講,package是最基本的組織形式,那麼這些package這麼多,應該怎麼來組織呢,這個時候就有了一個功能包集的概念,之前叫Stack,如今叫Metapackage,其實說白了就是把功能類似的功能包組織起來放在一塊兒,而後起個名字就成了Metapackage

 

五.ROS通訊架構(計算圖級)

  ROS的通訊架構有一個總的管家,名叫Master(節點管理器),全部節點之間的通訊都要

經過向它註冊才能進行,因此要先啓動Master。啓動Master須要用roscore命令,執行這個命令同時也啓動rosoutparameter server

在通訊架構裏面固然是通訊最重要,那麼就涉及到兩個概念,一個是通訊的對象——節點(node),另外一個是通訊的方式——4中方式(TopicServiceActionlibParameter Service)

才能進行通訊。

  TopicService的區別以下圖5-1

5-1 TopicService的對比

  Parameter Service也是通訊方式的一種,可是比較特殊,主要是由於參數服務器是節點存儲參數的地方、用於配置參數,全局共享參數。參數服務器使用互聯網傳輸,在節點管理器中運行,實現整個通訊過程。它更加靜態,有點相似字典的形式。對於參數服務器的維護有三種方法:1.命令行維護;2.launch文件維護;3.node源碼。我的理解:參數服務器是方便開發者在後續調參的時候用到的,這樣就不須要每次都要改代碼,能夠提升開發的效率。

  ActionlibROS中一個很重要的庫,相似service通訊機制,actionlib也是一種請求響應機制的通訊方式,actionlib主要彌補了service通訊的一個不足,就是當機器人執行一個長時間的任務時,假如利用service通訊方式,那麼publisher會很長時間接受不到反饋的reply,導致通訊受阻。當service通訊不能很好的完成任務時候,actionlib則能夠比較適合實現長時間的通訊過程,actionlib通訊過程能夠隨時被查看過程進度,也能夠終止請求,這樣的一個特性,使得它在一些特別的機制中擁有很高的效率。我的理解:action相比service主要是在於有一個實時的回饋過程,即feedback。這個在代碼中的體現也是多了一段feedback的代碼,其餘的跟service相似,可對比來學習。

 

六.ROS工具

  1. 仿真工具——Gazebo
  2. 可視化工具——Rviz(3D可視化工具)Rqt(集成圖像交互界面)
  3. 命令行工具——rosbag(記錄和回放數據流)
  4. 專用工具——moveit

七.ROS編程庫——roscpprospy

 

八.TFURDF

 

九.參考連接

  1. https://www.jianshu.com/p/0869eec39a3b (機器人操做系統ROS()-初識)
  2. https://www.leiphone.com/news/201701/qKhqf4Rq4C6Bw0Gt.html (機器人程序設計之如何正確入門ROS) 
  3. https://sychaichangkun.gitbooks.io/ros-tutorial-icourse163/content/ (中國MOOC《機器人操做系統入門》課程講義)
相關文章
相關標籤/搜索