一,topic通訊
topic是ros裡一種非同步通訊的模型,一般是節點間分工明確,有的只負責傳送,有的只負責接收處理。對於絕大多數的機械人應用場景,比如感測器資料收發,速度控制指令的收發,topic模型是最適合的通訊方式。
首先我們要在我們的工作空間catkin_ws/src檔案下來自定義我們的訊息來模擬gps訊息,在src檔案下我們先建立乙個功能包lichao_demo,在功能包裡建立msg資料夾,在msg資料夾裡建立乙個gps.msg。建立好了之後的路徑是catkin_ws/src/lichao_demo/msg/gps.msg
在catkin_ws/src/lichao_demo/msg/gps.msg裡寫好自定義的檔案
string state #工作狀態
float32 x #x座標
float32 y #y座標
以上就定義了乙個gps型別的訊息,你可以把它理解成乙個c語言中的結構體,類似於
struct gps
在程式中對乙個gps訊息進行建立修改的方法和對結構體的操作一樣。當你建立完了msg檔案,記得修改cmakelists.txt和package.xml,從而讓系統能夠編譯自定義訊息。在cmakelists.txt中需要改動
find_package(catkin required components
roscpp
rospy
std_msgs
message_generation
)#需要新增的地方
add_message_files(
files
gps.msg
)#,指定從哪個訊息檔案生成
generate_messages(
dependencies
std_msgs
)#dependencies後面指定生成msg需要依賴其他什麼訊息,由於gps.msg用到了flaot32這種ros標準訊息,因此需要再把std_msgs作為依賴
package.xml 中需要的改動
message_generation
message_runtime
當你完成了以上所有工作,就可以回到工作空間,然後編譯了。
要在**中使用自定義訊息型別,只要 #include ,然後宣告,按照對結
構體操作的方式修改內容即可。
topic_demo::gps mygpsmsg;
mygpsmsg.x = 1.6;
mygpsmsg.y = 5.5;
mygpsmsg.state = "working";
定義完了訊息,就可以開始寫ros**了。通常我們會把訊息收發的兩端分成兩個節點來
寫,乙個節點就是乙個完整的c++程式。
見 lichao_demo/src/talker.cpp
見 lichao_demo/src/listener.cpp
在 cmakelists.txt 新增以下內容,生成可執行檔案
add_executable(talker src/talker.cpp) #生成可執行檔案talker
add_dependencies(talker topic_demo_generate_messages_cpp)
#表明在編譯talker前,必須先生編譯完成自定義訊息
#必須新增add_dependencies,否則找不到自定義的msg產生的標頭檔案
#表明在編譯talker前,必須先生編譯完成自定義訊息
target_link_libraries(talker $) #鏈結
add_executable(listener src/listener.cpp ) #聲稱可執行檔案listener
add_dependencies(listener topic_demo_generate_messages_cpp)
target_link_libraries(listener $)#鏈結
完成後編譯一下,開啟master,
啟動talker
啟動listener
最後我們來寫乙個模版自定義訊息+發布接收的基本模型
機械人上幾乎所有的感測器,幾乎都是按照固定頻率發布訊息這種通訊方式來傳輸資料,只
是發布頻率和資料型別的區別。
ROS學習筆記
catkin make首先輸出它所使用到的每個空間所在的路徑。更多關於空間的資訊,請參考rep128和catkin workspaces。需要注意的是由於這些空間存在預設配置的原因,有幾個資料夾已經在catkin工作空間自動生成了,使用ls檢視 build devel src build 目錄是bu...
ros學習筆記 ros的服務
服務 services 是節點之間通訊的另一種方式。服務允許節點傳送請求 request 並獲得乙個響應 response rosservice 可以很輕鬆的使用 ros 客戶端 伺服器框架提供的服務。rosservice 提供了很多可以在 topic 上使用的命令,如下所示 使用方法 rosser...
ROS學習筆記 零 ROS安裝
詳細步驟 官方安裝ros說明 安裝流程 1.配置ubuntu倉庫,確保 restricted,universe,and multiverse.勾選 2.安裝源 sudo sh c etc lsb release echo deb lsb release cs main etc apt sources...