[ROS問題筆記二]ROS自定義話題遇到的若干問題
阿新 • • 發佈:2018-12-21
1、自定義話題的環境配置問題
在設計自定義話題的時候,除了需要新建一個msg檔案外還需要在package.xml 和CMakeLists.txt 中進行環境配置。具體配置過程大家可以參考這位大佬的文章: 張京林要加油,[ROS自定義msg型別及使用] https://blog.csdn.net/plokm789456/article/details/79290592 這裡面很詳細的介紹如何配置。
不過這裡需要提出一點,在修改package.xml 過程中要新增這一段: <run_depend>message_runtime</run_depend> 我在添加了這行命令後,編譯會報錯。(我安裝的是kinetic版本) 我上網查了一下,是ROS新舊版的問題,只需要把上面那行命令改成: <exec_depend>message_runtime</exec_depend> 就可以順利通過編譯。
PS:不過這裡說一句,下一個IDE什麼都解決了。我使用的是Roboware,在操作介面中直接新增,它會自動幫你配置好環境。
2、自定義話題的訂閱問題
自定義話題的呼叫,上面那篇文章也有介紹。 我就拿尤拉角讀取作為例子跟大家說一下。
第一步、自定義一個話題 rulerMsg.msg 步驟上面已經介紹。 具體話題內容如下:
int16 yaw
int16 pitch
int16 roll
第二步、建立相應的Publisher和Subscriber 整個檔案我就不復制貼上了,只給大家一些關鍵命令列 Publisher:
//釋出名為 ruler_pub的話題,型別為自定義的rulerMsg ros::Publisher ruler_pub = n.advertise<gps::rulerMsg>("ruler_pub", 1000);
Subscriber: 首先要呼叫標頭檔案
#include <gps/rulerMsg.h> //gps 是我的包名,rulerMsg是我自定義話題的名稱
然後建立訂閱函式
//訂閱話題 ruler_pub 並呼叫回撥函式 rulerCallback
ros::Subscriber ruler_sub = n.subscribe("ruler_pub", 1000, rulerCallback);
最後編輯回撥函式
gps::rulerMsg ruler; //定義一個rulerMsg 變數 ruler void rulerCallback(const gps::rulerMsg::ConstPtr& msg) { ruler.yaw = msg->yaw; ruler.pitch = msg->pitch ; ruler.roll = msg ->roll; } //把讀取到的話題資料轉存到定義好的變數中