12話題訊息的定義與使用

2021-10-03 06:21:06 字數 3213 閱讀 1328

1、自定義話題訊息

1.1、在learning_topic中建立資料夾msg

建立person.msg檔案

開啟該檔案,並寫入以下內容,在編譯的時候會編譯成相應的c++或python可執行檔案

string name

uint8 ***

uint8 age

uint8 unknown=0

uint8 male =1

uint8 female=2

從而完成資料介面定義

2、設定編譯規則

2.1 在package.xml中新增功能包依賴

message_generation

//編譯依賴message_generation

message_runtime

//執行依賴,會依賴於message_runtime

2.2 在cmakelist.txt新增編譯選項

新增依賴功能包,如下圖

//新增定義的訊息介面

generate_messages(dependencies std_msgs)

//編譯person.msg時,需要依賴ros已有的庫std_msgs

在catkin_package中建立執行依賴,對應上面2.1中的message_runtime,如下圖

2.3、編譯

chen@ubuntu:~/catkin_ws$ catkin_make
若編譯出錯,檢查檔案中寫入的配置是不是有誤

下圖為devel中編譯得到的c++標頭檔案

3、建立發布者和訂閱者**c++

4、配置**編譯規則

//因為有些**是動態生成的,為了可執行檔案和動態生成的程式產生依賴關係

add_executable(person_subscriber src/person_subscriber.cpp)

target_link_libraries(person_subscriber $

)add_dependencies(person_subscriber $_generate_messages_cpp)

5、執行

5.1 執行roscore

chen@ubuntu:~$ roscore
5.2執行發布者

chen@ubuntu:~$ rosrun learning_topic 

person_publisher person_subscriber.cpp velocity_publisher

person_publisher.cpp pose_subscriber velocity_publisher.cpp

person_subscriber pose_subscriber.cpp

chen@ubuntu:~$ rosrun learning_topic person_publisher

[ info]

[1582710519.920151660]: publish person info: name:tom age:18 ***:1

[ info]

[1582710520.920881810]: publish person info: name:tom age:18 ***:1

5.3執行訂閱者

chen@ubuntu:~$ rosrun learning_topic person_subscriber

[ info]

[1582710628.922461835]: subcribe person info: name:tom age:18 ***:1

[ info]

[1582710629.921415215]: subcribe person info: name:tom age:18 ***:1

5.4 關閉rosmaster

發布者和訂閱者可以正常通訊,rosmaster只是在剛開始通訊的時候進行引數註冊

ROS通訊程式設計 話題程式設計 自定義話題訊息

系統環境 ubuntu16.04 定義msg檔案 在功能包目錄下新建msg資料夾。在msg資料夾下新建person.msg檔案。在檔案person.msg中輸入以下內容並儲存。string name uint8 uint8 age uint8 unknown 0 uint8 male 1 uint8...

ROS自定義話題(發布與接收)

1.建立乙個自己的工作空間 catkin ws 2.在工作空間內建立乙個src資料夾 3.運用指令catkin create pkg 包名 依賴關係roscpp rospy std msgs 4.在建立的功能包裡面的src檔案中編寫自己的檔案 若自定義訊息,則在功能包內新建乙個msg資料夾,在裡面編...

ROS中自定義話題訊息裡面對編譯規則的解析

在package.xml中新增功能包依賴 message generation message generation 對應產生訊息 的乙個功能包,即編譯.msg時需要依賴的功能包 message runtime message runtime 對動態產生message乙個支援,即msg執行時所依賴的...