最近在想著做機器人,機緣巧合接觸到了ROS,在這里分享一下我學習ROS的經歷,
首先就是安裝ROS,安裝ROS網上有很多資料可以查到,但是我在安裝的時候初始化一直出問題,基本網上什么方法都嘗試了,總是在最后一步失敗,最后實在沒辦法了,就淘寶上買了一個ROS安裝工具,很快就裝好了,真香!
安裝并測驗好ROS以后,就是學習一些ROS的核心概念,這里我主要是看古月居的視頻,我大概把我的理解說一下,(本篇文章只是把自己對基本概念的理解進行闡述)
1.1 ROS是什么
首先就是要知道ROS包括什么?在學習以后,我的理解是ROS是由通信機制、開發工具、應用功能、生態系統組成的集合,主要目標就是用來提高機器人研發中的軟體復用率,接下來就可以從這四大部分了解ROS,
- 通信機制:ROS為我們提供了一個非常重要的松耦合分布式通信框架,這個框架可以抽象成一系列的節點圖,
- 開發工具:ROS提供了諸如命令列&編譯器、TF坐標變換、Rviz、QT工具箱、Gazebo等工具來幫助開發,
- 應用功能:ROS的應用功能是非常龐大的,我們無論開發機械臂還是無人機,任意的機器人都可以在ROS里面找到相關的原型,比如Navigation(導航)、SLAM(建圖)、Movelt(機械臂運動規劃),
- 生態系統:ROS的生態系統包括:發行版(Distribution)、軟體源(Repository)、ROS wiki、郵件串列(Mailing list)、ROS Answers、博客(Blog),
- 發行版(Distribution):ROS發行版包括一系列帶有版本號、可以直接安裝的功能包,
- 軟體源(Repository):ROS依賴于共享網路上的開源代碼,不同的組織機構可以開發或者共享自己的機器人軟體,
- ROS wiki:記錄ROS資訊檔案的主要論壇,
- 郵件串列(Mailing list):交流ROS更新的主要渠道,同時也可以交流ROS開發的各種疑問,
- ROS Answers:咨詢ROS相關問題的網站,
- 博客(Blog):發布ROS社區中的新聞、圖片、視頻(http://www.ros.org/news),
1.2 ROS核心概念
- 節點和節點管理器:
- 節點(Node):是ROS中一個具體的執行單元,是用來執行某個具體功能的可獨立運行的可執行檔案,不同的節點可以使用不同的編程語言,
- 節點管理器(ROS Master):是ROS中的控制中心,是ROS 所有節點的管理者,所有的節點都需要去找節點管理器注冊,節點管理器去記錄節點的個各種資訊,幫助節點之間建立聯系,所以我們可以看到各個節點并不知道彼此的存在,他們都是通過節點管理器進行通信的,節點管理器另一個比較重要的功能就是,它可以提供引數服務器,節點可以使用此服務器存盤和檢索運行時的引數,
ROS為節點之間的通信設定了兩種通信方式:話題和服務
- 話題通信:
- 話題(Topics):采用異步通信機制,使用發布者和訂閱者模型,同一個話題的訂閱者和發布者可以不唯一,話題的通信方式是單向資料的傳輸,節點可以發布資訊到一個話題,同樣也可訂閱話題來接收訊息,
- 訊息(Messages):通道中傳輸的資料,用來描述傳輸話題資料的資料型別,有一定型別和資料結構,使用編程語言無關的.msg檔案定義,編譯程序中生成對應的代碼檔案,

- 服務通信:
- 服務(Service):采用同步通信機制,使用客戶端/服務器(C/S)模型,由客戶端發送請求資料,服務器完成處理后回傳應答資料,使用編程語言無關的.srv檔案定義請求和應答的資料結構,編程程序中生成對應的代碼檔案,

話題通信和服務通信的區別:
個人認為,話題通信類似于寫信,我們很難及時得到對方的反饋,而服務通信就類似于打電話,很快我們就可以得到對方的反饋,以下則是更加全面的對比:

- 引數(Parameter):我們知道,節點管理器另一個比較重要的功能就是,它可以提供引數服務器,它會保存一些引數作為一個全域的共享字典,所有節點都可以通過網路來訪問這個共享字典,字典里面的資料型別是多變的,變數的名字和變數的值都是要存到字典里面的,引數適合存盤靜態、非二進制的配置引數,不適合存盤動態配置的引數,
- 檔案系統
- 功能包(Package):ROS軟體中的基本單元,包含節點原始碼、組態檔、資料定義等,
- 功能包清單(Package manifest):記錄功能包的基本資訊,包含作者資訊、許可資訊、依賴選項、編輯標志等,
- 元功能包(Meta Package):組織多個用于同一目的的功能包,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/300519.html
標籤:其他
上一篇:C++模板進階
