ROS學習筆記(topic in roscpp)

2021-08-21 11:27:07 字數 2654 閱讀 5311

一,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...