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