TF庫的目的是實作系統中任一個點在所有坐标系之間的坐标變換,也就是說,隻要給定一個坐标系下的一個點的坐标,就能獲得這個點在其他坐标系的坐标.
使用tf功能包,a. 監聽tf變換: 接收并緩存系統中釋出的所有參考系變換,并從中查詢所需要的參考系變換。
b.廣播 tf變換: 向系統中廣播參考系之間的坐标變換關系。系統中更可能會存在多個不同部分的tf變換廣播,每個廣播都可以直接将參考系變換關系直接插入tf樹中,不需要再進行同步。
首先介紹關于TF的API的一些資料結構:
基本的資料類型有(Quaternion, Vector, Point, Pose, Transform)

這其中Quaternion 是表示四元數,vector3是一個3*1 的向量,point是一個表示一個點坐标,Pose是位姿(位姿是包括坐标以及方向) Transform是一個轉換的模版
是一種包含了除了Transform的其他幾種基本的資料結構的一種資料結構:
TF::stampedtransform是TF的一種特殊情況:它需要frame_id和stamp以及child_frame_id。
舉個例子
在機器人的定位領域有蒙特卡羅定位(AMCL)的算法,這個算法是根據給定的地圖,結合粒子濾波擷取最佳定位點Mp,這個定位點是相對于地圖map上的坐标,也就是base_link(也就是機器人的基坐标)相對map上的坐标。我們知道 odom 的原點是機器人啟動時刻的位置,它在map上的位置或轉換矩陣是未知的。但是AMCL可以根據最佳粒子的位置推算出 odom->map(就是說通過最佳粒子推算出機器人在地圖的中的位置)的tf轉換資訊并釋出到 tf主題上。因為base_link->odom的tf轉換資訊是每時每刻都在釋出的,是以它是已知的
,是以這裡有個這樣的tf關系
map->base_link(就是地圖中機器人的位置 是根據最佳粒子推算的)
base_link->odom(這是現實中機器人的位姿可以說是裡程計的資訊)
可以了解:機器人的裡程計的資訊 = 目前地圖中的機器人的的位置 減去 地圖中機器人的起點位置。
轉為公式可以寫成 :map->odom = map->base_link - base_link->odom
或者寫為:
base_link->odom = map->base_link - map->odom (這樣更容易了解)
pitch是圍繞X軸旋轉,也叫做俯仰角,
yaw是圍繞Y軸旋轉,也叫偏航角,
roll是圍繞Z軸旋轉,也叫翻滾角
TF指令行工具
(1) tf_monitor工具的功能是列印tf樹中的所有參考系資訊,通過輸入參數來檢視指定參考系之間的資訊 用法: rosrun tf tf_monitor
tf_monitor <source_frame> <target_target> 監視一個特定的轉換 For example, to monitor the transform from /base_footprint to /odom:
(2) tf_echo工具的功能是檢視指定參考系之間的變換關系。指令的格式: tf_echo <source_frame> <target_frame>
(3)static_transform_publisher工具的功能是釋出兩個參考系之間的靜态坐标變換,兩個參考系一般不發生相對位置變化
(4)view_frames 是可視化的調試工具,可以生成pdf檔案,來顯示整棵tf樹的資訊。用法:rosrun tf view_frames
具體可以檢視http://wiki.ros.org/tf/
部落格園的編輯界面真實難以編輯啊 受不鳥了 是以還是不寫了 轉向CSDN了