ROS 系統架構及概念


ROS 系統架構主要被設計和划分為三部分,每一部分代表一個層級的概念:文件系統級(The filesystem level)、計算圖級(The computation graph level)和開源社區級(The community level)。

   

文件系統級

ROS 的內部結構、文件結構和所需的核心文件都在這一層里,理解 ROS 文件系統是入門ROS的基礎,ROS程序的結構,是一些不同功能進行區分的文件夾

  • build 目錄:使用 C++ 時 catkin 存放庫和可執行程序的地方,使用 Python 時可以忽略該目錄的內容;
  • devel 目錄:包含了許多文件和路徑,其中最需要注意的是 setup 文件,運行這個文件可以使系統使用這個工作區以及其中包含的代碼;注意,如果打開了一個新終端,必須先添加需要使用的工作區的 setup.bash 文件,否則終端無法找到你的代碼

    命令如下

source devel/setup.bash

   

如果只有一個工作區,可以把這個命令增加到 .bashrc 文件中,這樣開啟終端的同時配置你需要的工作區

命令如下

echo "source ~/目錄/devel/setup.bash" >> ~/.bashrc

source ~/.bashrc

注意:目錄替換為你的工作區目錄

   

   

計算圖級

主要是指進程之間(節點之間)的通信。ROS創建了一個連接所有進程的網絡,通過這個網絡節點之間完成交互,獲取其他節點發布的信息。圍繞計算圖級和節點,一些重要的概念也隨即產生:節點管理器、節點、消息、主題(或稱話題)、服務、動作和消息記錄包。

  • 節點管理器:向節點提供連接信息,以便節點間可以互相傳遞信息的服務程序。每個節點都在啟動時連接到節點管理器注冊該節點發布和訂閱的消息。但一個新節點出現時,節點管理器向他提供與其他發布並訂閱相同消息主題的節點建立點對點連接的必要信息。啟動節點管理器叫做 roscore 命令,啟動 roscore 命令后,默認使用 11311 端口,在啟動命令和 ROS_MASTER_URI 環境變量中指定不同的端口號既可以實現同一個網絡中運行多個 ROS 節點管理器。

       

  • 節點:作為 ROS 系統的核心,節點是用 C++或 Python(ROS客戶端庫roscpp、rospy)編寫的程序,用來執行任務或進程。當一個節點啟動時,該進程假設存在一個名為 ROS_MASTER_URI 的環境變量,這個變化包含了一個格式為 http://hostname:11311/ 的字符串,表示節點管理器的運行實例可以通過主機 hostname 的 11311 端口進行訪問。

       

  • 消息:節點之間通過消息進行通信,這些消息包含一個節點發送給其他節點的信息數據,消息類型有ROS標准類型和基於標准消息開發的自定義類型兩種。

       

  • 主題(或稱話題):指節點發布的消息的去處。節點每一條消息都要發布到主題,一個節點a發布信息數據,就說該節點a向主題發布消息。其他節點可以訂閱這個節點a發布的主題,以此來接收a的消息。所以歸根結底節點之間的通信,是主題之間的發布和訂閱實現的。

       

  • 服務:是另一種在節點間傳遞數據的方法,服務其實就是同步的跨進程函數調用;他們能夠讓一個節點調用運行在另一個節點中的函數。

       

  • 動作:動作機制非常適合作為時間不確定,目標導向型的操作接口,服務機制是同步的,而動作機制則是異步的。與服務的請求/響應結構類似,動作使用目標來啟動一次操作,在操作完成后會發送一個結果。在此基礎上,動作引入了反饋來提供操作的進度信息,還支持取消當前進行中的操作。從原理上看,動作使用主題(或稱話題)實現,其本質上相當於一個規定了一系列話題(目標、結果、反饋等)的組合使用方法的高層協議。

       

  • 消息記錄包:用於保存消息數據的文件格式,用於存儲數據。可以進行信號的監測。

   

開源社區級

主要是指ROS資源的獲取和分享。通過獨立的網絡社區,我們可以共享和獲取知識、算法和代碼,開源社區的大力支持使得ROS系統得以快速成長,這些資源包括發行版、軟件庫、ROS維基、Bug提交系統、郵件列表、ROS問答、博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM