尤拉角的定義有許多不同的形式,為了方便使用,本文列出了ros中尤拉角的定義。為了增加可信度,本文直接採用原始碼中的注釋對ros tf中的尤拉角的定義進行說明。
在quaternion.h中,存在以下三種設定方法。
1 setrpy();
這個函式採用固定軸的旋轉方式,先繞定軸x旋轉(橫滾),然後再繞定軸y(俯仰),最後繞定軸z(偏航)。
從數學形式上說,這是繞定軸xyz矩陣依次左乘,即:r = r(z) r(y)r(x)的順序。由於是繞著定軸轉動,所以很直觀,便於人機互動。
/**@brief set the quaternion using fixed axis rpy
2 seteuler
這種方式是繞著動軸轉動,先繞y軸,在繞變換後的x軸,再繞變換後的z軸旋轉。
從數學形式上說,這是繞定軸yxz矩陣依次右乘,即:r = r(y)r(x)r(z) 的順序。
/**@brief set the quaternion using euler angles
3 seteulerzyx
與2相同,此種旋轉變換也是繞動軸旋轉,只不過次序為zyx,矩陣也是右乘,即r = r(z) r(y)r(x)。我們發現,這裡的r與1中的r的最終結果相同,所以1和3的定義最終是等價的。
/**@brief set the quaternion using euler angles
總結:ros中的尤拉角可以分為繞定軸和繞動軸的變換方式,函式沒有給出euler時,是按定軸轉動,矩陣依次左乘。若函式的名字中有euler,則表示為繞動軸轉動的方式,矩陣依次右乘。
tf中的靜態變換:
static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms
publish a static coordinate transform to tf using an x/y/z offset in meters and yaw/pitch/roll in radians. (yaw is rotation about z, pitch is rotation about y, and roll is rotation about x). the period, in milliseconds, specifies how often to send a transform. 100ms (10hz) is a good value.
static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms
這裡沒有說是繞固定軸旋轉,則預設是按照動軸的方式旋轉,即,
先繞z軸旋轉,
再繞新的y軸旋轉,
再繞新的x軸旋轉。
publish a static coordinate transform to tf using an x/y/z offset in meters and quaternion. the period, in milliseconds, specifies how often to send a transform. 100ms (10hz) is a good value.
記住啊,一定是按照z y x (eular zyx的順序變換的)
ROS tf2的內容結構
tf2 tf庫,它是所有功能概念上的總稱,接下來的都是在它的命名空間下 tf2 converts.h 資料型別轉換,是模板功能,也就是給其他具體型別的轉換提供了介面。tf2 geometry msgs.h 使用tf2 converts.h 裡的介面,也就是具體成 geometry msgs資料型別之...
尤拉角的詳解
關於旋轉永遠是做遊戲的難點和混亂點。我們知道表示乙個旋轉有多種方式,簡單的尤拉角,複雜點的四元數,再複雜點的矩陣。之前接觸unity可以用四元數和尤拉角兩種方式表示旋轉,最近一直研究虛幻引擎,目前只看到了尤拉角這一種旋轉方式。尤拉角是表達旋轉的最簡單的一種方式,形式上它是乙個三維向量,其值分別代表物...
尤拉角的詳解
關於旋轉永遠是做遊戲的難點和混亂點。我們知道表示乙個旋轉有多種方式,簡單的尤拉角,複雜點的四元數,再複雜點的矩陣。之前接觸unity可以用四元數和尤拉角兩種方式表示旋轉,最近一直研究虛幻引擎,目前只看到了尤拉角這一種旋轉方式。尤拉角是表達旋轉的最簡單的一種方式,形式上它是乙個三維向量,其值分別代表物...