複習筆記之——ROS(robot operating system)

很久之前就學過ROS了,一直有相關的項目開發,但是後面沒用一段時間後,對於ROS細節的東西幾乎都忘了。故此寫下這篇學習筆記(應該說複習筆記),作爲以後複習用。

本博文雖然以ROS命名,但更多的算是直接操作ROS,用turtlebot機器人。後面我會補上更加詳細的ROS安裝(甚至是linux安裝)的教程。好下面進入正文

 

目錄

ROS的基本介紹

ROS學習資料

Learning TurtleBot and ROS

what is ros?

what will you need?

Linux與ROS安裝

Testing TurtleBot Installation

Setting Up Networking

獲取IP

ROS文件框架介紹(引自本人的碩士論文)

ROS文件系統級

ROS計算圖級

基於可見光定位的ROS功能包的運行流程


 


ROS的基本介紹

ROS軟件平臺被開發的根本原因都是想讓全世界的機器人研究人員們齊心協力解決機器人軟件過於繁多和複雜而造成的問題。

例如,當實現機器人識別周圍情況的功能的時候,硬件種類繁多的問題和要用在實際生活中的問題是會帶來困難的部分。有些對人來說很簡單的事情對機器人來說是很困難的問題,因爲要實現機器人的傳感、識別、繪製地圖、動作規劃等功能。因此學校的研究室或公司難以做到這些所有的功能。但如果全世界的相關領域的從事人員們都各自分享自己的專長部分,讓其他研究團隊使用的話情況就大不一樣了。

ROS不需要完全重新開發已有的系統和程序,而是通過加入一些標準化的代碼就能對已有的非ROS程序進行ROS化的轉化。並且很多通用的工具和軟件都有提供,因此可以專注於自己感興趣或想貢獻的部分,這反而可以節省開發和維護所需的時間。

ROS的五個特點:

  • 第一, 程序的可重用性。 專注於自己想要開發的部分,對剩下的功能可以下載相關功能包來使用。相反,也可以將自己開發出來的程序和其他人分享,讓他們也可以使用。比如,美國的NASA爲了控制宇宙空間站裏使用的Robonaout29機器人,除了使用自行開發的程序,還結合了可以在多種操作系統使用的ROS和具有實時控制、消息通信修復、可靠性等特點的OROCOS,得以在宇宙中執行任務。
  • 第二, 是基於通信的程序。 爲了提供一種服務,很多時候在同一個框架裏編寫很多程序:從傳感器或舵機的硬件驅動到傳感、識別和動作等所有種類的程序。但爲了重用機器人軟件,根據每個處理器的用途將其分成更小的部分。根據平臺的不同,我們將此稱爲組件化或節點化。必須由劃分爲最小執行單元的節點之間發送和接收數據,而平臺具有關於該數據通信的所有一般信息。而且,這與最小的單位進程連接到網絡的物聯網(IoT)的概念一致,因此可以用作物聯網平臺。並且,被劃分成最小執行單元的程序可以進行小單元的調試,這非常有助於找出錯誤。
  • 第三, 提供開發工具。ROS提供調試相關的工具-2維繪圖和3維視覺化工具RViz,所以無需親手準備機器人開發所需的開發工具,可以直接拿來使用。例如,在機器人開發中,可視化機器人的模型的情況比較多,通過遵守規定的信息格式,可以直接確認機器人的模型,並且還提供3D仿真器,因此易於擴展到仿真實驗。另外,最近比較受人關注的點雲(point cloud)形式也可以從英特爾的RealSense或微軟的Kinect獲得的3D距離信息轉化過來。此外,實驗中使用的數據可以被記錄下來,因此需要的時候隨時都可以重現實驗當時的情況。像這樣,ROS的一個重要特點是通過爲機器人開發提供必要的軟件工具,使開發的便利性達到最大化。
  • 第四, 活躍的開發者社區。至今比較封閉的機器人學界和機器人業界都因爲前述的功能而走向重視互相之間的合作的方向。其目的可能各自相異,但實際的合作正在通過這種軟件平臺發生着。其核心是開源軟件平臺的社區。例如,以ROS爲例,到2017年自願開發和共享的功能包數量超過了5,000個,而解釋如何使用它的wiki頁面超過1.7萬個,這些都由用戶個別參與。 而在社區中非常重要的問題和答案已有超過24,000個,用戶們通過這些建立着互惠互利的開發者社區。討論超越了單純的對於用法的議題,人們在尋找機器人工程軟件的必要因素,並摸索出規則。
  • 第五, 生態系統的形成。前面提到的智能手機平臺革命是由Android和iOS等軟件平臺創造的生態系統造成的。這一趨勢在機器人領域延續着。起初,各種硬件技術氾濫,卻沒有能整合它們的操作系統。在這種情況下,如上所述,各種軟件平臺已經出現,最受矚目的ROS現在已經開始構建生態系統。這個正在形成的生態系統裏,機器人硬件領域的開發者、ROS開發運營團隊、應用軟件開發者以及用戶也能像機器人公司和傳感器公司一樣從中受益。起步雖然微不足道,但考慮到逐漸增多的用戶數量和機器人公司,以及急劇增加的相關工具和庫,我期待在不久的將來將會形成一個圓滿的生態系統。

ROS的目標是“建立一個在全球範圍內協作開發機器人軟件的環境!”

 

ROS學習資料

ROS入門教程

https://www.ncnynl.com/archives/201608/496.html(創客)

http://wiki.ros.org/cn/ROS/Tutorials(wiki)

turtlebot2咖啡機(之前有個英文版本的課程,但是不知道爲啥最近打不開了~~~)

http://learn.turtlebot.com/

https://www.ncnynl.com/archives/201609/776.html

turtlebot3

https://www.ncnynl.com/archives/201702/1388.html

turtlebot官網(通過官網可以學習到更多)

https://www.turtlebot.com/

ROS的官網

https://www.ros.org/

ROS中的turtlebot仿真

http://learn.turtlebot.com/2015/02/03/1/

 

Learning TurtleBot and ROS

本部分其實是關於如何直接操作ROS的

ROS作爲一個分佈式框架。其實在不用寫代碼的情況下,已經可以實現好多功能。包括:SLAM、IMU等。後面介紹到的VLC定位功能包是本人後面開發的,並不能直接調用,代碼還沒release出來

what is ros?

The Robot Operating System (ROS) is a flexible framework for writing robot software. It is a collection of tools, libraries, and conventions that aim to simplify the task of creating complex and robust robot behavior across a wide variety of robotic platforms.

ROS是一個開放源代碼的機器人元操作系統。它提供了我們對操作系統期望的服務,包括硬件抽象、低級設備控制、常用功能的實現、進程之間的消息傳遞以及功能包管理。它還提供了用於在多臺計算機之間獲取、構建、編寫和運行代碼的工具和庫。

ROS包括一個類似於操作系統的硬件抽象,但它不是一個傳統的操作系統,它具有可用於異構硬件的特性。此外,它是一個機器人軟件平臺,提供了專門爲機器人開發應用程序的各種開發環境。

ROS是一個元操作系統(Meta-Operating System)。元操作系統不是一個明確定義的術語,而是一個利用應用程序和分佈式計算資源之間的虛擬化層來運用分佈式計算資源來執行調度、加載、監視、錯誤處理等任務的系統。(注意ROS並不同於linxu、windows、Android等操作系統)。是一種利用現有的操作系統(如linux)以使用進程管理系統、文件系統、用戶界面、程序實用程序(編譯器、線程模型等)此外,它還以庫的形式提供了機器人應用程序所需的多數不同類型的硬件之間的數據傳輸/接收、調度和錯誤處理等功能。這個概念也被稱爲中間件(Middleware)或軟件框架(Software framework)。

ROS還可以實現在不同操作系統之間的通信

ROS組建

注意:ROS雖然支持多種操作系統,但正式支持的只有Ubuntu,而對其它版本僅提供安裝方法。之前本人的團隊也試過開發基於手機Android系統的ROS功能包,但是後面由於功能不齊全,穩定性不好而擱置了。

 

what will you need?

  1. 帶有Kobuki 移動基站的turtlebots(後面改爲用turtlebot3了).
  2. 上網本:turtlebots兼容上網本。如果你想購買自己的上網本,必須小於21釐米寬的才適合放在在架子上。(在turtlebot3中已經不需要兩個筆記本了。因爲turtlebot3已經用樹莓派代替了上網本,但是樹莓派的處理能力太弱了。像本人做VLC定位,捕獲的圖片就必須回傳到工作站中纔可以了)
  3. 停靠站:我們建議購買擴展塢等turtlebot可以自主充電本身,當它檢測到它所需要的功率。這是作爲一個可選項。
  4. 工作站:第二臺計算機與一個體面的圖形卡和足夠的內存的三維模擬(4 GB+ 以上內存)(其實就是主要的控制端了)。
  5. 路由器:無線路由器允許工作站和turtlebot通過本地IP通信。

Linux與ROS安裝

查看linux的版本

lsb_release -a

查看ros的版本

roscore

接下來會寫博客介紹ROS的安裝

Testing TurtleBot Installation

roscore

打開一個新的終端,輸入

roslaunch turtlebot_bringup minimal.launch 

再打開一個新的終端,通過鍵盤控制

roslaunch turtlebot_teleop keyboard_teleop.launch

Setting Up Networking

要配置完網絡纔可以實現工作站與機器人通信

Make sure both TurtleBot and the workstation are connected to the same router.

獲取IP

  1. 在工作站和Turtlebot都要同步時鐘
    sudo apt-get install chrony
    sudo ntpdate ntp.ubuntu.com
  2. 獲取Turtlebot和工作站的IP地址,在終端執行:
    ifconfig
  3. 查看SSh狀態

    sudo service ssh status

    如果顯示ssh: unrecognized service,沒安裝ssh,則安裝:

    sudo apt-get install openssh-server

     

  4. 工作站遠程登錄Turtlebot上網本,在終端執行

    ssh turtlebot@[ip_of_turtlebot]

     

  5. You should export the variables inside your work space setup script.

    echo export ROS_MASTER_URI=http://IP_OF_TURTLEBOT:11311 >> ~/.bashrc
    echo export ROS_HOSTNAME=IP_OF_PC >> ~/.bashrc

    注意:IP_OF_TURTLEBOT爲turtlebot的Ip地址,IP_OF_PC爲工作站的IP地址

驗證

工作站
ssh turtlebot@[ip_of_turtlebot]
roslaunch turtlebot_bringup minimal.launch
再在工作站運行
roslaunch turtlebot_teleop keyboard_teleop.launch

 

ROS文件框架介紹(引自本人的碩士論文)

ROS系統是用於機器人的一種開源的後操作系統(次級操作系統)。它提供類似於操作系統所提供的功能,也提供一些工具程序和庫用於獲取、構建、編寫和運行多機整合的程序。ROS還提供了許多基本庫和工具來幫助開發機器人應用程序。從本質上,ROS是運行在Linux等計算機操作系統上的、面向機器人特點的運行支撐軟件和軟件工具集。ROS的最大的優點是有利於機器人程序開發中代碼的重複利用,集成了衆多的開源第三方庫,如導航系統、圖像處理庫等,開發者只需要專注於開發自己的核心算法而不需要花費額外的精力實現已有的功能。

       ROS是一種分佈式的框架,執行程序可以分別獨立設計、再實時的結合起來,進程之間按照功能包和功能包集的方式分組,因而可以容易地分享和發佈,無需改動就能夠在不同的機器人上覆用代碼。ROS系統的架構主要分爲三部分:文件系統級、計算圖級和開源社區級。

ROS文件系統級

ROS的文件架構按下圖所示組織:

  1. 工作空間(workspace):包含了源文件空間(放置功能包、項目)、編譯空間(爲功能包和項目保持緩存信息、配置以及其他中間文件)、開發空間(用於保存編譯後的程序)。
  2. 功能包(Package):是ROS軟件組織的基本形式。一個功能包具有用於創建ROS程序的最小結構和最小內容。它可以包含ROS運行的進程(節點)、配置文件等。ROS也允許使用自己版本的功能包代替安裝版本。
  3. 功能包清單(package.xml):功能包清單提供關於功能包、許可信息、依賴關係、編譯標誌等。
  4. 綜合功能包:將幾個具有某些功能的功能包組織在一起,即爲綜合功能包。用於引用其他功能特性類似的功能包,如導航包等。
  5. 綜合功能包清單:類似於普通功能包清單。
  6. 消息類型(Message type):消息是一個進程發送到其他進程的信息。在對應的功能包文件下有消息文件。ROS通過使用一種簡化的消息類型描述語言來描述ROS節點發布數據值。因此ROS能夠使用多種編程語言生成不同類型消息的源代碼。ROS消息中的一種特殊數據類型就是報文頭,主要用於添加時間戳、座標位置等。報文頭還允許對消息進行編號。通過在報文頭內部附加信息,可以知道哪個節點發出的消息,或可以添加一些能夠被ROS處理的其他功能。
  7. 服務類型(Service (srv) type):定義了在ROS中由每個進程提供的關於服務請求和響應的數據結構,以實現節點之間的請求/響應通信。
  8. 動作類型(Action type):定義了在ROS中由每個進程提供的關於服務的目標、結構和響應的數據結構,以實現節點間的服務的目標、結構和響應。

ROS計算圖級

計算圖是ROS處理數據的一種點對點的網絡形式。ROS會創建一個連接到所有進程的網絡。在系統中的任何節點都可以訪問此網絡,並通過該網絡與其他節點進行交互,獲取其他節點發布的信息,並將自身數據發佈到網絡上。如下圖所示

  • 節點(Node)是各自獨立的可執行的文件。如果需要一個可以與其他節點進行交互的進程,則需要創建一個節點,並將此節點連接到ROS網絡。在通常情況下,系統包含能夠實現不同功能的多個節點。每個節點具備特定的單一的功能。
  • 節點管理器(Master)用於節點的名稱註冊和查找以及節點、服務、消息之間的通信等。由於ROS本身就是一個分佈式網絡系統,可以在某一臺計算機上運行節點管理器,在該管理器或其他計算機上運行節點。節點管理器的作用是使ROS節點之間的互相查找以及通信。如下圖所示。

  • 參數服務器(Parameter Server)能夠使數據通過關鍵詞存儲在一個系統的核心位置。通過使用參數,就能在運行時配置節點或改變節點的工作任務。
  • 消息(Message)節點通過消息完成彼此間的通信。消息包含了一個節點發送到其他節點的信息數據。同時也可以基於標準消息開發自定義消息(如5.2節中所定義的VLC節點消息)。
  • 話題(topic)是節點間用來傳輸數據的總線。每個消息都必須有一個名稱來被ROS網絡路由。每一條消息都要發佈到相應的話題。當一個節點發送數據時,稱爲該節點正在向話題發佈消息。節點可以通過訂閱某個話題,接收來自其他節點的消息。一個節點可以訂閱某個話題而不需要該節點同時發佈該話題。這就保證了消息的發佈者和訂閱者之間的解耦,發佈者和訂閱者間完全無需知曉對方的存在。同一個話題可以有多個發佈者與訂閱者。如下圖所示。

  • 服務(Service)在發佈話題時,正在發送的數據能夠以多對多的方式交互。但當需要從某個節點獲得一個請求或答應時,就不能通過話題來實現了。在這種情況下,服務能夠運行兩個節點間直接進行交互。此外,服務必須有唯一的名稱。當一個節點提供某個服務時,所有的節點都可以通過使用ROS客戶端庫編寫的代碼與其進行通信。
  • 動作(Action)是在需要像服務那樣的雙向請求的情況下,使用的消息通信方式,不同於服務之處是在處理請求之後需要很長的響應,並且需要中途反饋值。動作文件也非常類似於服務,目標(goal)和結果(result)對應於請求和響應。此外,還添加了對應於中途的反饋(feedback)。它由一個設置動作目標(goal)的動作客戶端(action client)和一個動作服務器(action server),動作服務器根據目標執行動作,併發送反饋和結果。動作客戶端和動作服務器之間進行異步雙向消息通信。 節點之間的通信如下圖所示。

 

基於可見光定位的ROS功能包的運行流程

本人設計了基於ROS的VLC導航功能包。並且在19年廣東省大挑戰杯中獲得了特等獎。本人的碩士畢業論文以及相關的paper(將要publish)都有相關的算法原理、節點的設置介紹。後面會將維護好的代碼release出來,在此僅僅列出使用流程,供團隊的成員使用。

首先打開新的終端,ssh鏈接機器人

ssh [email protected]   
密碼 burger

打開終端  輸入

 roscore 

 roslaunch turtlebot3_bringup turtlebot3_robot.launch

運行這一條如果檢測到roscore沒開啓會自動開啓roscore的,這條命令的用處是啓動turtlebot3運行所需的所有相關組件,如果只是需要開啓ROS而不需要遙控機器人運動的話可以只用roscore

打開新終端,鍵盤控制機器人

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

這條命令可以運行在本機也可以運行在ssh到機器人的終端上,兩種操作不同之處在於軟件包運行的宿主不同,而最終的操作效果是一樣的

打開新終端,ssh到機器人(在機器人上開啓camera節點)

rosrun mvcam mvcam

打開新終端,使用窗口界面查看圖像:

rosrun image_view image_view image:=/camera/image

(可選,在本機運行    !警告,查看圖像會造成定位變慢)

打開新終端,啓動VLC節點所使用的命令:

rosrun vlc_locator publisher

(在本機上運行,該節點有運行依賴,依賴於相機通過節點/camera/image所傳遞的圖像,需要相機節點運行後定位節點才能運行)
打開新終端,查看座標紙圖像:

rosrun image_view image_view image:=/camera/image_show

(可選,在本機運行)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章