ROS學習之tf 2 編寫乙個TF廣播器(C )

2021-08-20 09:47:59 字數 3594 閱讀 2961

ros.tf2.

編寫乙個

tf廣播器(

c++)

宣告:本教程來自於ros.wiki,本人在整理過程中可能出現一些錯誤和問題,有問題可以去檢視官網版本也可以諮詢本人

1.1在接下來的兩篇教程中,我們將編寫**來重現

tf入門教程中的演示。之後,以下教程將重點介紹使用更高階的

tf功能擴充套件演示。在我們開始之前,您需要為此專案建立乙個新的

ros包。在沙箱資料夾中,建立乙個名為

learning_tf

的包,該包依賴於tf,

roscpp

,rospy

和turtlesim

$ cd %your_catkin_workspace_home%/src
$ catkin_create_pkg learning_tf tf roscpp rospy turtlesim
1.2

建立新的軟體包,然後才能使用

roscd

$ cd %your_catkin_workspace_home%/
$ catkin_make
$ source./devel/setup.bash
2.1

如何廣播轉換

本教程將告訴您如何向

tf我們先建立原始檔。轉到我們剛剛建立的包:

轉到src/

資料夾並啟動您的編輯器,將以下**貼上到名為

src/ turtle_tf_broadcaster.cpp

的新檔案中。

#include 

#include #include std::string turtle_name;

void posecallback(const turtlesim::poseconstptr& msg)

int main(int argc, char** argv)

turtle_name = argv[1];

ros::nodehandle node;

ros::subscriber sub = node.subscribe(turtle_name+"/pose",10, &posecallback);

ros::spin();

return 0;

}

2.2

**解釋

現在,我們對**的關鍵部分進行解釋。

(1).#include

tf軟體包提供了

transformbroadcaster

的實現,以幫助簡化發布轉換的任務。要使用

transformbroadcaster

,我們需要包含

tf/ transform_broadcaster.h

標頭檔案。

(2).static

tf::transformbroadcaster br;

在這裡,我們建立乙個

transformbroadcaster

物件,稍後我們將使用它來通過電線傳送變換。

(3).

tf::transform transform;

transform.setorigin(tf::vector3(msg->x, msg->y, 0.0) );

tf::quaternion q;

q.setrpy(0,0, msg->theta);

在這裡,我們建立乙個

transform

物件,並將

2d海龜姿勢的資訊複製到

3d變換中。

(4).transform.setrotation(q

);這裡我們設定旋轉。

(5).

br.sendtransform

(tf:: stampedtransform

(transform

,ros:: time :: now

(),「

world」

,turtle_name));

這是真正的工作完成的地方。使用

transformbroadcaster

傳送變換需要四個引數。

首先,我們通過轉換本身。

現在我們需要給發布的變換乙個時間戳,我們會用當前時間戳

ros:: time :: now

()

然後,我們需要傳遞我們建立的鏈結的父框架的名稱,「世界」

最後,我們需要傳遞我們建立的鏈結的子框架的名稱,這是烏龜本身的名稱

注意:

sendtransform

和stampedtransform

與父母和子女的順序相反。

3.1

執行廣播公司

現在我們建立了**,讓我們先編譯它。

開啟cmakelists.txt

檔案,並在底部新增以下行:

add_executable(turtle_tf_broadcastersrc/turtle_tf_broadcaster.cpp)

target_link_libraries(turtle_tf_broadcaster$

進入你的的工作包

$ catkin_make
如果一切順利,您的

devel/ lib /learning_tf

資料夾中應該有乙個名為

turtle_tf_broadcaster

的二進位制檔案。如果是這樣,我們準備為這個演示建立乙個啟動檔案。

進入

learning_tf建立乙個

launch資料夾

$ mkdir launch
使用文字編輯器建立乙個名為

start_demo.launch

的新檔案

$ vim start_demo.launch
然後新增以下行:

首先,確保你停止了前一篇教程中的啟動檔案(使用

ctrl-c

$ roslaunch learning_tf start_demo.launch
你應該看到乙隻烏龜。

檢查結果

現在,使用

tf_echo

工具來檢查烏龜姿勢是否實際上正在廣播到tf:

$ rosrun tf tf_echo /world /turtle1
這應該告訴你第一只烏龜的姿勢。使用箭頭鍵在烏龜周圍驅動(確保您的終端視窗處於活動狀態,而不是您的模擬器視窗)。如果你執行

tf_echo

來進行世界和海龜

2之間的轉換,你不應該看到轉換,因為第二隻海龜還沒有。但是,只要我們在下乙個教程中新增第二隻烏龜,烏龜

2的姿勢就會廣播給tf。

要實際使用廣播到

tf的轉換,您應該轉到下乙個關於建立

tf偵聽器的教程(

c+

ROS學習之tf 3編寫乙個tf接收器(C )

ros.tf3 編寫乙個 tf接收器 c 宣告 本教程來自於ros.wiki,本人在整理過程中可能出現一些錯誤和問題,有問題可以去檢視官網版本也可以諮詢本人 在之前的教程中,我們建立了乙個 tf廣播公司向 tf發布乙隻烏龜的姿勢。在本教程中,我們將建立乙個 tf接收器來開始使用tf。1.1如何建立乙...

編寫乙個tf廣播

1 include 2 include 專用標頭檔案 3 include 4 5 std string turtle name 6 7 8 9 void posecallback const turtlesim poseconstptr msg 18 這是真正的工作完成的地方。用transformb...

ROS學習之TF變換

tf能夠根據時間緩衝並維護多個參考係之間的座標變換,可以在任意時間,將點 向量 等資料的座標,完成座標變換。tf的使用方法 兩個概念了解一下 監聽tf變換 接收並快取系統中發布的所有參考係變換,並從中查詢所需要的參考係變換。廣播tf變換 向系統中廣播參考係之間的座標變換關係。系統中更能可能會存在多個...