1. 程式人生 > >[ROS問題筆記二]ROS自定義話題遇到的若干問題

[ROS問題筆記二]ROS自定義話題遇到的若干問題

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;
} //把讀取到的話題資料轉存到定義好的變數中