ROS(Robot Operating System) 是一個開源的機器人操作系統,目的是提供開發平臺、工具及生態給開發人員,可以讓開發人員快速開發。本課程通過精心設計的案例,分析技術要點、理解運行原理,以達到舉一反三的效果,從而應用到自己的機器人開發工作中去。
本課程將詳細介紹 ROS 的使用,課程包括了 Topic 通訊,Service 通訊,ROS 自定義消息,URDF可視化,TF座標轉換等技術要點。每個技術點都會結合例子先把原理講解清楚,爲了達到學以致用的目的,我們會再進行知識拓展,針對每個技術點實現對應的生動有趣的需求,保證學完後會有很大的收穫。
實驗介紹
在進行 ROS 項目開發前,首先介紹下整個 ROS 項目在部署運行過程中分爲幾個部分,以及瞭解工程結構中 Workspace、Package、Node 它們之間的包含關係。
知識點
- 架構介紹
- 文件目錄結構
- Workspace 創建
- Package 創建
架構介紹
系統基本架構
總體來說,整個 ROS 項目在部署運行過程中,分爲以下幾個部分:
- 環境
包含硬件環境和軟件環境。通常一個 ROS 機器人,需要一個開發主板用於運算和控制操作。
例如我們用樹莓派作爲開發板,用於機器人的運算和控制操作,那麼這就是軟件所運行的硬件環境。當然開發板上可能會外接一些其它硬件,如攝像頭,那麼這些也屬於硬件環境。
開發板上通常需要有操作系統,所裝的操作系統屬於軟件環境。
執行器
執行器的主要作用是給操作系統發送一些指令,通過指令去控制硬件操作。例如發送指令給開發板,讓開發板外接的舵機轉動,然後驅動物體運動。執行器更像是硬件驅動的輸入。傳感器
在硬件環境中,可能會安裝一些環境探測的硬件,例如溫度感應器。這些硬件感應器會將感覺的數據發佈出來,傳感器其實扮演的就是這些硬件發佈數據的傳播者,更像是硬件驅動的輸出。軟件結構
這裏所說的軟件結構是指,ROS 機器人運行時部署的軟件及軟件間的關係。
機器人運行起來後,內部會有很多單元程序運行,每個單元程序做很小的事情。比如讀取硬件驅動傳遞的數據、處理讀取的數據、判斷數據、發出指令等。
總之,ROS 將複雜的程序分解成了很小的一部分,每部分幹很少的活,這樣每個部分還可以複用。
ROS 軟件結構組成
我們開發的每個節點都需要到 ROS Master 中去註冊,如下圖所示:
ROS Master:
- 管理 Node 節點間的通訊。
- 每個 Node 節點都需要到 Ros Master 中進行註冊。
啓動節點前,必須啓動 ROS Master。命令爲 roscore
。
ROS Node:
我們在 ROS 中所做的其實就是開發節點工作:
- 具備單一功能的可執行程序。
- 可以單獨編譯,可執行,可管理。
- 存放在 package 中。
文件系統
工作目錄結構
Workspace、Package、Node 是工程結構中的幾個關鍵詞,也是核心概念。以下圖片展示了三者之間的關係:
標準的 Workspace 工作目錄結構如下:
工作目錄理解
類似在企業中通過部門管理員工,俗話說人多瞎胡亂、雞多不下蛋。一旦項目變得複雜後,組織結構化和規範化就變得非常重要。
工作目錄說明
我們在開發一個 ROS 項目時,是以工作空間(workspace
)來表示一個項目,一個工作空間包含如下 5 個部分:
-
build
:ROS 編譯打包的結果產出目錄。我們不需要對這個文件夾做任何編輯操作,屬於自動生成。 -
devel
:開發所需要的目錄。 -
src
:存放 package 的目錄。 -
CMakeLists.txt
:整個工作空間編譯的腳本。此文件我們通常不用修改。 -
package
:工作單元。
一個項目可以創建多個工作單元(package
),一個工作單元包含如下幾個部分:
-
pkg1
:package 的名稱,開發過程中根據自己實際情況進行創建設定。 -
CMakeLists.txt
:當前 package 的編譯腳本。通常需要爲 c++ 代碼添加編譯時的依賴、執行等操作。 -
package.xml
:package 相關信息。通常添加一些 ros 庫的支持。 -
include
文件夾:存放 c++ 頭文件。 -
config
文件夾:存放參數配置文件,格式爲 yaml。 -
launch
文件夾:存放 .launch 文件。 -
src
:c++ 源代碼。 -
scripts
:Python 源代碼。 -
srv
:存放定義的 service。 -
msg
:存放自定義的消息協議。 -
action
:存放自定義的 action。
實驗總結
通過上面的實驗,我們熟悉了 ROS 的系統架構以及 ROS 文件系統層次中的關鍵概念,並講解了 Clion Python 環境的搭建與配置,使我們更加清晰的瞭解 ROS 的運行機制、能夠更高效的編寫程序。
本實驗完整代碼下載:
wget https://labfile.oss.aliyuncs.com/courses/2947/code1.tar.gz
# 解壓縮,使用如下命令
tar -zxf code1.tar.gz
以上選自新課《ROS 機器人操作系統進階實戰》第一章,感興趣的話點擊鏈接查看課程瞭解詳情哦!