ROS中TF座標變換常用工具

2021-09-25 04:22:20 字數 1977 閱讀 7058

對於機械人,無論是多機械人還是單機械人中的各個部分,其都可以以自身建立座標系,除此之外還有乙個世界座標系,對於這麼多的座標系,我們經常會需要知道某一物體在不同座標系下的位置,這就需要使用到座標變換。

對於座標變換,我們知道其對應的有線性的位移和旋轉變換,在座標變換的表達上也有很多方式,例如旋轉矩陣,尤拉角,四元數等方式,我們不詳細討論這些座標變換的具體內容,我們主要關注在ros中帶有的座標變換的tf功能包。

在tf功能包中常見的幾個tf工具有tf_monitor、tf_echo、static_transform_publisher、view_frames等,這幾個工具能夠實現tf座標變換的簡單顯示。

tf_monitor是用於檢視tf樹中的座標系的發布狀態,可以檢視所有座標系的發布狀態,也可以檢視指定座標系之間的發布狀態。

我們執行如下命令:

rosrun tf tf_monitor
即可檢視所有座標系的發布狀態,我現在執行了幾個小烏龜,其顯示發布狀態如下:

在上面的顯示發布資訊中,我們可以看到,我們一共發布了三個小烏龜的資訊,後面顯示的是平均延時和最大延時的資訊。

要想看兩個座標系之間的座標變換,我們可以使用tf_echo命令,顯示不同座標系之間的轉換關係。執行如下命令:

rosrun tf tf_echo turtle1 turtle2
可以顯示兩個座標系之間的轉換關係,其中第乙個是源座標系,第二個是目標座標系,其輸出如下:

我們可以看到,顯示的座標轉換的訊息主要包括如下資訊:

1、時間戳資訊,顯示特定時刻下的轉換關係,由於座標系之間可能會隨著時間變化而變化。

2、平移變換,以向量的形式發布在x,y,z上的平移變換

2、旋轉變換,旋轉變換的資訊表示有三種,分別是以四元數、弧度下的尤拉角、角度下的尤拉角表示。

除了顯示不同座標系之間的變換關係外,我們還可以發布兩個座標系之間的靜態座標變換,使用如下命令

rosrun tf static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms
這個命令發布兩個座標系之間的額靜態的座標變化,這兩個座標系不發生相對位置變化,相當於設定乙個父座標和子座標之間的變換關係。

上述命令中的x,y,z表示其變換的平移,後邊三個分別為yaw偏航角,繞z軸逆時針旋轉,pitch俯仰角,繞y軸逆時針旋轉,roll翻滾角,繞x軸逆時針旋轉,旋轉變換的三個角正好是按著zyx這樣反著的順序來的,如果對尤拉角相關不熟,可以參考飛機飛行姿態時的角度訊息,會對這些角有更形象的理解。

除此之外,還可以用四元數來表示旋轉資訊。命令和上面的命令十分接近,如下:

rosrun tf static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms
由上面的命令可以看出,我們只是把尤拉角的引數換成了四元數,四元數是定義了乙個有乙個實部,三個虛部的數,可以和旋轉向量之間進行轉換。這裡有關尤拉角、旋轉變換、四元數以及萬向鎖的的問題,以後有空再講。

除了以上的命令外,tf還有視覺化的除錯工具,可以生成pdf檔案進行檢視整個tf樹。使用如下命令可以生成pdf檔案:

rosrun tf view_frame
我們生成的pdf顯示如下:

可以看出,整個tf樹中,我們有世界座標系和三個小烏龜的座標系。

在後續中的文章中,對tf的例程進行說明。

ROS學習之座標變換tf

即使前方荊棘滿地,也要跨上戰馬,一路前行!keep learning,keep programing ros中的座標變換主要形式為廣播和監聽,可以發布座標系a 座標系b與世界座標系的關係,可以監聽得到座標系a與座標系b之間的轉換關係,本文主要參考古月老師的教程,發布turtle1 turtle3與w...

ROS自學筆記10 ROS常用工具

ros的 工具 gazebo ros的除錯和視覺化 rviz和rqt 命令列工具 rostopic,rosbag 專用工具 moveit 這個是機械人 工具,相容的物理引擎是ode。用於動力學,感知,導航等任務的模擬。全稱是the robot visualization tool視覺化工具,方便監控...

ROS複習筆記之 座標變換(TF)

參考資料為 ros中的座標轉換tf在描述組成機械人的每個部分 障礙物和外部物體時是最有用的概念之一。這些可以被描述為位置 position 和方向 direction 統稱為姿態 pose 在此,位置由x y z這3個向量表示,而方向是用四元數 quaternion x y z w表示。四元數並不直...