ROS基本程式設計 topic in roscpp

2021-09-13 18:32:52 字數 3006 閱讀 5829

#### topic demo程式

1,建立程式包(在工作空間的src目錄下):

cd catkin_ws/src/ catkin_create_pkg topic_demo roscpp std_msgs
cd topic_demo;gedit package.xml
3,編譯測試(在工作空間目錄下:cd ../.. 或者 cd ~/catkin_ws):

catkin_make
4,定義新的訊息:

cd ~/catkin_ws/src/topic_demo mkdir msg cd msg;gedit gps.msg
輸入以下**並儲存:

string state #工作狀態 

float32 x #x座標

float32 y #y座標

5,通過rosmsg show命令,檢查ros是否能夠識訊息:

rosmsg show topic_demo/gps
將會看到:

float32 x 

float32 y

string state

6,檢視package.xml, 確保它包含一下兩條語句(接近末尾處),如果沒有,新增進去:

message_generation 

message_runtime

7,修改修改cmakelists.txt檔案:

1)在find_packag函式的components的列表裡增加message_generation,就像這樣:

find_package(catkin required components 

roscpp

std_msgs

message_generation #需要新增的地方

)

2)設定執行依賴:

# 用於配置ros和packge配置檔案和cmake檔案

catkin_package(

...catkin_depends message_runtime

...)

3)用你的.msg檔案替代message*.msg:

add_message_files(files gps.msg) #指定從哪個訊息檔案生成
4)取消generate_messages()的注釋:

generate_messages(dependencies std_msgs) #用於生成訊息 #dependencies後面指定生成msg需要依賴其他什麼訊息,由於gps.msg用到了flaot32這種ros標準訊息,因此需要再把std_msgs作為依賴
8,編譯生成gps.msg對應的標頭檔案:

cd ~/catkin_ws catkin_make
9,編寫源**

1)建立訊息發布節點:

roscd topic_demo/src/ gedit talker.cpp
輸入以下**:

#include #include //自定義msg產生的標頭檔案

int main(int argc, char **ar**)

return 0;

}

2)建立訊息接收節點:

gedit listener.cpp
輸入以下**:

#include #include #include void gpscallback(const topic_demo::gps::constptr &msg)

int main(int argc, char **ar**)

10,cmakelists.txt檔案修改

在 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 $)#鏈結

11,編譯

cd ~/catkin_ws catkin_make
注:如果只想編譯工作空間某乙個包:catkin_make -dcatkin_whitelist_packages="包名"

例如:

catkin_make -dcatkin_whitelist_packages="topic_demo"
12,執行

開啟新終端輸入命令

roscore #啟動master節點
啟動talker節點:

rosrun topic_demo talker
啟動talker節點:

rosrun topic_demo listener

ROS程式設計基本語法

msg檔案存放在package的msg目錄下,srv檔案則存放在srv目錄下。msg檔案實際上就是每行宣告乙個資料型別和變數名。可以使用的資料型別如下 int8,int16,int32,int64 plus uint float32,float64 string time,duration othe...

ROS基本程式設計 多個整數相加 C

node1 發布乙個話題,發布接收到數字總數 接收話題,話題接收乙個int型 服務 求和,求話題接收到的所有數字的和 服務 清零 node2 發布乙個話題,發布int,隔乙個5s隨機時間發布 隔60s後,呼叫求和服務,把結果列印出來。接收話題,列印node1,接收到的數字數量。1,建立程式包 在工作...

ROS通訊程式設計 話題程式設計

話題程式設計的流程如下 以乙個發布者talker.cpp的原始碼舉例 該例程將發布chatter話題,訊息型別string include include ros ros.h include std msgs string.h intmain int argc,char ar return0 新增編...