ROS中TF變換詳解

2021-10-22 16:57:31 字數 1967 閱讀 9077

前言

1.python實現tf發布

2.c++實現tf發布

ros中發布tf變換

tf變換時描述機械人各個座標系之間的位置變換關係,在ros中發布這些關係需要使用tf工具。tf變換具體內容可以參考官方文件:

tf變換需要設定的內容在ros wiki中已有詳細介紹:

發布主要由兩部分構成,分別是平移和旋轉變換,具體構成如下:

geometry_msgs/vector3 translation

geometry_msgs/quaternion rotation

平移變換主要是座標系a—>b的座標系原點位置關係,由三個軸的平移量構成,旋轉表示座標系a和b之間旋轉關係,使用四元數來表示。理解四元數可以參考博文:

理解旋轉變換以及平移後,接下來通過程式設計實現tf發布。以下流程為作者抽象概括理解

發布tf變換流程:

1.建立乙個廣播者(transformbroadcaster)

2.建立廣播者需要廣播的資料型別(transformstamped)

3.給資料型別賦值、

4.迴圈廣播

匯入python所需要的庫檔案:

#!/usr/bin/env python

import rospy

import tf2_ros # 此為廣播者所在庫

from geometry_msgs.msg import transformstamped # 此為要廣播的資料型別

import tf_conversions # 從尤拉角到四元數的轉換,可以直接使用,避免自己求解

初始化節點以及廣播者和廣播資料,

rospy.init_node(

"tf_test"

) br = tf2_ros.transformbroadcaster(

)# 廣播者

trans = transformstamped(

)# 廣播資料型別

rate = rospy.rate(1)

# tf發布頻率

x =0 y =

0 z =

0 theat =

0# 廣播的資料型別

接下來給廣播資料賦值並讓廣播者廣播資料

x +=

0.1# 此處實現自座標系base_link沿著x軸和y軸方向運動,速度為0.1m/s,

y +=

0.1 theat +=

1*pi/

180# 旋轉角度為1度

trans.header.frame_id =

"odom"

trans.header.stamp = rospy.time.now(

) trans.child_frame_id =

"base_link"

trans.transform.translation.x = x

trans.transform.translation.y = y

trans.transform.translation.z = z # 此處將平移變換賦值

# 接下來處理座標系旋轉 首先將尤拉角轉換為四元數

q = tf_conversions.transformations.quaternion_from_euler(0,

0, theat)

# 給發布資料中的四元數賦值

trans.transform.rotation.x = q[0]

trans.transform.rotation.y = q[1]

trans.transform.rotation.z = q[2]

trans.transform.rotation.w = q[3]

# 廣播者廣播資料

br.sendtransform(trans)

rate.sleep(

)

ROS學習之TF變換

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

ROS學習之座標變換tf

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

ROS中TF座標變換常用工具

對於機械人,無論是多機械人還是單機械人中的各個部分,其都可以以自身建立座標系,除此之外還有乙個世界座標系,對於這麼多的座標系,我們經常會需要知道某一物體在不同座標系下的位置,這就需要使用到座標變換。對於座標變換,我們知道其對應的有線性的位移和旋轉變換,在座標變換的表達上也有很多方式,例如旋轉矩陣,尤...