1. 程式人生 > >ROS系統架構及概念 學習筆記(二)

ROS系統架構及概念 學習筆記(二)

理解ROS檔案系統級

指令學習:

標準cmake流程,一次僅能編譯一個包:

$ camke packageToBuild/
$ make

編譯工作空間所有包:

$ cd workspace
$ catkin_make

為了建立  修改  或者使用功能包.ROS給我們提供了一些工具:

rospack: 獲取資訊或在系統中查詢工作空間
catkin_create_pkg: 建立新的功能包
catkin_make: 編譯工作空間
rosdep: 安裝功能包的依賴項
rqt_dep: 檢視包依賴關係圖
roscd: 更改目錄
rosed: 編輯檔案
roscp: 從一些功能包複製檔案
rosd: 列出功能包目錄
rosls: 列出功能包下的檔案

定位ros_tutorials綜合功能包:

$ rosstack find ros_tutorials

顯示路徑為:/opt/ros/kinetic//share/ros_tutorials

檢視裡面的程式碼:

$ gedit /opt/ros/kinetic/share/ros_tutorials/package.xml

檢視訊息的結構的命令:

$ rosmsg show std_msgs/Header

輸出:

uint32 seq
time stamp
string frame_id

理解ROS計算圖級

節點(Node ) :  主要的計算機執行程序

節點管理器(Master) :   用於節點的名稱註冊和查詢等

引數伺服器(Parameter Server) :   能夠使資料通過關鍵詞儲存在一個系統的核心位置

訊息(Message): 包含一個節點發送到其他節點的資訊資料

主題(Topic): 每個訊息都必須有一個名稱來被ROS 網路路由

服務(Service): 從節點獲取一個請求或應答需要服務實現

訊息記錄包(bag): 是一種用於儲存和回收ROS訊息資料的檔案格式

ROS提供的處理節點的工具: rosnode

rosnode info NODE 輸出當前節點資訊
rosnode kill NODE 結束當前執行節點程序或傳送給定訊號
rosnode list 列出當前活動節點
rosnode machine hostname 列出某一特定計算機上執行的節點或列出主機的名稱
rosnode ping NODE 測試節點間的連通性
rosnode cleanup 將無法訪問的節點的註冊資訊清除

改變主題名稱:

$ rosrun book_tutorials tutorialX topic1:=/level1/topic1

命令將主題名稱從topic1改為/level1/topic1

更改節點引數:

$ rosnode book_tutorials tutorialX _param:=9.0

這樣引數(param)就設定為浮點數9.0

下邊是系統保留的關鍵子名稱,不能用作引數名:

_name  為節點名稱保留的一個特殊關鍵字

_log 為記錄節點日誌儲存地址保留的一個關鍵字

_ip和_hostname表示ROS_IP和ROS_HOSTNAME的關鍵字

_master 表示ROS_MASTER_URI 的關鍵字

_ns 表示ROS_NAMESPACE  的關鍵字

主題

概念:節點間用來傳輸資料的匯流排   

一個主題可以有多個訂閱者也可以有多個釋出者,但是你需要注意用不同的節點發布同樣的主題

ROS的主題可以使用TCP/IP和UDP傳輸

ROS預設傳輸TCP/IP 長連線--->TCPROS

UDP傳輸--->UDPROIS是一種低延遲高效率的傳輸方式,但是可能丟失資料,最適合遠端操控的任務

ROS提供了一個操作主題的工具: rostopic

rostopic bw /topic 顯示主題所使用的寬頻
rostopic echo /topic 將訊息輸出到螢幕
rostopic find message_type 按照型別查詢主題
rostopic hz /topic  顯示主題的釋出頻率
rostopic info /topic
rostopic list 輸出活動主題的列表
rostopic pub /topic type args 將資料釋出到主題,它允許我們直接從命令列中對任意主題建立和釋出資料
rostopic type /topic 輸出主題的型別,或者說主題中釋出的訊息型別

服務

直接與節點通訊並獲得應答得使用服務

ROS關於服務的命令列工具有兩個:rossrv和rosservice    通過rossrv看到有關服務資料結構的資訊與rosmsg具有完全一致的用法

rosservice可以列出服務列表和查詢某個服務

rosservice call/service args 根據命令列引數呼叫服務
rosservice find msg-type 根據服務型別查詢服務
rosservice info/service 輸出服務資訊
rosservice list 輸出活動服務清單
rosservice type/service 輸出服務型別
rosservice uri/service 輸出服務的ROSRPC URI

訊息

訊息型別包括ros提供的標準型別和使用者自定義型別

訊息型別在ros中按照以下命名方式進行約定:功能包名稱/.msg檔名稱  例如,std_msgs/msg/String.msg的訊息型別是std_msgs/String

ROS使用命令列工具rosmsg來獲取有關資訊的訊息
 

rosmsg show 顯示一條訊息的欄位
rosmsg list 列出所有訊息
rosmsg package 列出功能包的所有訊息
rosmsg packages 列出所有具有該訊息的功能包
rosmsg users 搜尋使用該訊息型別的程式碼檔案
rosmsg md5 顯示一條訊息的MD5求和結果

訊息記錄包

訊息記錄包是由ROS建立的一組檔案  使用.bag格式儲存訊息\主題\服務和其他ROS資料訊息

使用視覺化工具呼叫和回放資料

rosbag 用來錄製\播放和執行其他操作
rqt_bag 用於視覺化圖形環境中的資料
rostopic 幫助我們看到節點發送的主題

ROS節點管理器

ROS節點管理器向ROS系統中其他節點提供命名和註冊服務

跟蹤主題的釋出者和訂閱者

節點管理器的作用是使用ROS節點之間能夠相互查詢

節點管理器通常使用roscore命令執行,它會載入ROS節點管理器及其他ROS核心元件

引數伺服器是可以通過網路訪問的共享的多變數字典。節點使用此伺服器來儲存和檢索執行時的引數。

XMLRPC是一個使用XML編碼並以HTTP作為傳輸機制的遠端呼叫(Remote Procrdure Call, RPC)協議。

引數伺服器使用XMLRPC資料型別為引數賦值,包括以下型別:

  • 32位整數
  • 布林值
  • 字串
  • 雙精度浮點
  • ISO 8601 日期
  • 列表
  • 基於64位編碼的二進位制資料

ROS中關於引數伺服器工具是rosparam。支援的引數如下所示:

rosparam list 列出了伺服器中的所i有引數。
rosparam get parameter 獲取引數值。
rosparam set parameter value 設定引數值。
rosparam delete parameter 刪除引數。
rosparam dump file 將引數伺服器儲存到一個檔案。
rosparam load file 載入引數檔案到引數伺服器。

理解ROS開源社群級

ROS檔案系統:

檢視turtlesim包路徑:

$ rospack find turtlesim
將顯示  /opt/ros/kinetic/share/turtlesim

尋找已經在系統中安裝了的某個綜合功能包:

[email protected]:~$ rosstack find ros_comm
/opt/ros/kinetic/share/ros_comm

獲得功能包或功能包集下面的檔案列表,那麼需要使用:

[email protected]:~$ rosls turtlesim
cmake  images  msg  package.xml  srv

進入資料夾下:

[email protected]:~$ roscd turtlesim
[email protected]:/opt/ros/kinetic/share/turtlesim$ 

獲得路徑:

[email protected]:/opt/ros/kinetic/share/turtlesim$ pwd
/opt/ros/kinetic/share/turtlesim

檢視ROS正在使用的空間:

[email protected]:/opt/ros/kinetic/share/turtlesim$ echo $ROS_PACKAGE_PATH
/home/ubuntu/catkin_ws/src:/opt/ros/kinetic/share

建立工作空間:

$ mkdir -p ~/dev/catkin_ws/src
$ cd ~/dev/catkin_ws/src
$ catkin_init_workspace

建立完成,裡面沒有功能包,只有CMakeList.txt  編譯工作空間,使用如下命令:

$ cd ~/dev/catkin_ws
$ catkin_make

輸入ls命令,可以看到上面命令建立的新資料夾,分別是build和devel資料夾

完成配置,使用下面命令:

$ source devel/setup.bash

這一步只是重新載入了setup.bash檔案  如果你關閉並開啟一個新的終端,也將得到同樣的效果

解決每次使用此命令,在~/.bashrc中加入下邊命令列:

$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

建立ROS功能包和綜合功能包

在工作空間建立新的功能包:

$ cd ~/dev/catkin_ws/src
$ catkin_create_pkg chapter2_tutorials std_msgs roscpp

格式:catkin_create_pkg [package_name] [depend1] [depend2] [depend3] ...

  • std_msgs 包含了常見訊息型別,表示基本的資料型別和其他基本的訊息構造,如多維陣列
  • roscpp 使用C++實現ROS的各種功能 他提供了一個客戶端,讓C++程式設計師能夠呼叫這些介面快速完成與ROS的主題\服務和引數相關的開發工作
rospack profile 此命令用於通知新新增的內容
rospack find chapter2_tutorials  此命令用於查詢路徑
rospack depends chapters2_tutorials 此命令用於檢視依賴關係
rosls chapter2_tutorials 此命令用於檢視內容
roscd chapter2_tutorials 此命令會更改實際路徑

編譯ROS功能包

編譯功能包:

$ cd ~/dev/catkin_ws/
$ catkin_make

使用ROS節點

在使用ROS前,必須使用 $ roscore 命令啟動roscore

使用rosnode獲取節點資料

獲取引數更詳細的解釋:

 $ rosnode <param> -h

roscore正在執行,我們想要獲取正在執行節點的相關資訊:

$ rosnode list

發現僅僅有 /rosout節點,這個節點是隨著roscore執行而執行

使用下列命令能夠獲得更詳細的資訊:

$ rosnode info
$ rosnode ping
$ rosnode machine
$ rosnode kill
$ rosnode cleanup

使用rosrun 命令啟動一個新節點,如下所示

$ rosrun turtlesim turtlesim_node

檢視節點資訊:

$ rosnode info /turtlesim

如何使用主題與節點互動

要進行互動並獲取主題的資訊,可以使用rostopic工具  此工具接受以下引數:

rostopic bw TOPIC 顯示主題所使用的寬頻
rostopic echo TOPIC 將訊息輸出到螢幕
rostopic find TOPIC 按照型別查詢主題
rostopic hz TOPIC 顯示主題的釋出頻率
rostopic info TOPIC 輸出活動主題資訊
rostopic list TOPIC 列出活動主題
rostopic pubs TOPIC 將資料釋出到主題
rostopic type TOPIC 輸出主題的型別

檢視有關這些引數的詳細資訊,請使用-h,如下所示:

$ rostopic bw -h