一、訊息
乙個節點通過向特定主題發布訊息,從而將資料傳送到另乙個節點。
訊息具有一定的型別和資料結構,包括ros提供的標準型別和使用者自定義型別。
訊息型別標準命名方式:功能包名稱/ .msg檔名稱。
如:std_msgs/msg/string.msg 的訊息型別是std_msgs/string。
命令列工具:
1)rosmsg show 顯示一條訊息的字段
2)rosmsg list 列出所有訊息
3)rosmsg package 列出功能包的所有訊息
4) rosmsg packages 列出所有具有該訊息的功能包
5)rosmsg users 搜尋所有該訊息型別的**檔案
6)rosmsg md5 顯示一條訊息的md5求和結果
二、服務
當你直接與節點通訊並獲得應答時,將無法通過主題(資料傳輸的匯流排)實現,而需要使用服務。
服務需要由使用者開發。
服務型別:服務關聯乙個以功能包中.srv檔案命名的服務型別。與其他基於ros檔案系統的型別一樣,服務型別是功能包名稱和.srv檔名稱的組合。
例如:chapter2_tutorials/srv/chapter2_srv1.srv檔案的服務型別是chapter2_tutorials/chapter2_srv1。
服務命令列工具:rossrv和rosservice.
1)rosservice call /service args 根據命令列引數呼叫服務。
2)rosservice find msg-type 根據服務型別查詢服務。
3)rosservice info /service 輸出服務資訊
4)rosservice list 輸出活動服務清單
5) rosservice type /service 輸出服務型別。
6)rosservice uri /service 輸出服務的rosrpc uri
三、建立msg和srv檔案
這一節中,我們將會學習如何在節點中建立msg和srv檔案。它們是用於定義傳輸資料型別和資料值的檔案。ros會根據這些檔案自動為我們建立所需**,以便msg和srv檔案能夠被節點所使用。
msg檔案
1)在chapter2_tutorials功能包下建立msg資料夾
2)在msg資料夾下建立乙個新的檔案chapter2_msg1.msg.
3)在檔案中增加以下行:
int32 a
int32 b
int32 c
4)編輯cmakelist.txt,從#rosbuild_genmsg()這一行中刪除#
5)然後使用rosmake命令編譯功能包:
$rosmake chapter2_tutorials
6)檢查編譯是否正確,使用rosmsg命令
$ rosmsg show chapter2_tutorials/chapter2_msg1
如果你在chapter2_msg1.msg檔案中看到一樣的內容,說明編譯正確。
srv檔案
1)在chapter2_tutorials資料夾下建立乙個名為srv的資料夾
2)在srv資料夾下新建檔案chapter2_srv1.srv,在檔案中增加以下行:
int32 a
int32 b
int32 c
...int32 sum
3)編輯cmakelist.txt檔案,從#rosbuild_gensrv()這一行中刪除#
4)編譯功能包
$rosmake chapter2_tutorials命令編譯功能包。
5)通過rossrv工具來檢查編譯是否正確
$ rossrv show chapter2_tutprials/chapter2_srv1
如果你在chapter2_srv1.srv檔案中看到一樣的內容,說明編譯正確。
理解ROS 建立並使用自己的msg和srv
在包的src同一級建立msg和srv資料夾,並在裡面建立自己的訊息和服務。如 my msg.msg header header string child frame id geometry msgs posewithcovariance pose geometry msgs twistwithcov...
修改檔案時間和建立新的檔案
訪問時間 access time atime,讀取一次檔案的內容,該時間便會更新。要想看到檔案訪問時間可使用ls ul命令。修改時間 modified time mtime,對檔案內容修改一次便會更新該時間。ls l列出的時間便是這個時間。改變時間 change time ctime,例如更改檔案的...
檔案的建立 刪除和維護
應用程式可以使用gettempfilename 函式來獲取臨時檔案的檔名,而gettemppath 將返回建立臨時檔案的目錄的路徑。下面的例子將乙個檔案複製到另乙個檔案。目標檔案將對原始檔中的內容進行大寫轉換。應用程式使用createfile 開啟檔案original.txt 然後,應用程式使用ge...