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執行時所依賴的...