在機械人的控制和軌跡規劃等領域,演算法結果常常能夠得到機械人執行器的速度,如移動機械人的角速度和線速度。在有些**情況下,或是其它需要實時更新機械人的運動狀態時,我們常常需要根據這些計算出的速度引數(控制率)對機械人的位姿姿態進行更新。這就涉及到了角速度與旋轉矩陣之間的對應轉換關係。本文將簡要給出一種它們之間的轉換關係,並在後半部分著重介紹轉換出的姿態矩陣在不同情況下的左乘、右乘的不同意義,這一問題也曾經讓作者混淆了很久。
這裡主要以peter corke的視覺伺服工具箱中給出的轉換方法為例,事實上,更為詳盡的轉換方式可以去了解一下指數對映關係,可以參見白老師的文章《 lie group and computer vision : 李群、李代數在計算機視覺中的應用》。
我們知道,乙個變數的導數等於它本身再乘以乙個係數。對於三維空間中的旋轉矩陣來說,有如下表示式: r˙
(t)=
s(ω)
⋅r(t
)
其中,s(ω
) 為關於角速度
ω 的反對稱矩陣: s(
ω)=⎡
⎣⎢0ω
z−ωy
−ωz0
ωxωy
−ωx0
⎤⎦⎥
考慮在r(t
) 處進行微分: r˙
≈r(t
+△t)
−r(t
)ζt
r(t+△t)
≈ζt⋅
s(ω)
⋅r(t
)+r(
t)≈(
ζts(
ω)+i
3×3)
)⋅r(
t)
因此,矩陣△r
=ζts
(ω)+
i3×3
即為角速度
ω 對應的旋轉矩陣。
對於線速度
v 來說,在一定時間
t內,所導致的座標系的變化只有平移沒有旋轉。因此,速度引數(控制率)v 和
ω所對應的位姿變換矩陣△t
為: △t
=[ζt
⋅s(ω
)01×
3ζtv
0]+i
4×4
當需要把位姿變換矩陣△t
轉換為速度引數v 和
ω時,按照上面的步驟反著來就行了。
1. 問題描述
上述控制率與位姿變換矩陣的轉換關係在視覺伺服工具箱中對應於 delta2tr(
v )和tr2delta(t0
,t1 )這兩個函式。書中給出了乙個具體的例子:
這個示例我們記為例1。從上面我們可以看出,經過轉換出的位姿變換矩陣△t
=del
ta2t
r(d)
最終被t0
左乘能夠得到t1
的值。 但是在具體的例程**中,如下面工具箱中的視覺伺服**的**:
我們看到,位姿變換矩陣△t
=del
ta2t
r(d)
是被攝像機位姿tc
am右乘來實現位姿更新的。
除了這個視覺伺服工具箱外,在visp開源庫中,攝像機的姿態也是通過
右乘來實現的:
函式direct(v_sat,delta_t)為利用指數對映將速度引數v_
sat 轉換為位姿變換矩陣△t
。 這兩個例子我們記為例2。那麼為什麼有些情況下是左乘,有些情況下是右乘,這兩者之間又有什麼區分呢?
2. 左乘與右乘的不同情況及意義
首先來說例1中的左乘。對於左乘的情況,需要弄清楚的一點是,例1中t0
、t1 表示的是目標姿態在相同的參考座標系(預設為世界座標系)下的表示,因此,在這個例子中 tr2delta(d)求出的速度引數
v 也是表示在這個座標系下的。
所以,速度引數
v對應的姿態轉換矩陣△t
=del
ta2t
r(d)
也是相對於這個世界座標系來表示的。因此,當從狀態t0
轉換到狀態t1
時,需要被t0
左乘(如果不理解為什麼在世界座標系下的速度對應的矩陣需要左乘,可以自己假想一下下面的場景): 位姿t
0 和位姿t1
都是在世界座標系下表示的,在t0
位姿時,使其以速度
v 進行運動,其對應的姿態轉換矩陣為△t
。考慮乙個虛擬的與世界座標系cw
orld
重合的座標系
b ,假定t0
在座標系
b 中固定不動,那麼姿態變化矩陣△t
相當於座標系
b 在世界座標系cw
orld
下的表示。即: wo
rldt
b=△t
因此,通過連桿矩陣相乘,可以得到: t1
=wor
ldtb
⋅bt0
=△t⋅
t0其次再說右乘。例2中演算法所求出的攝像機運動速度
v 均是相對於當時攝像機自身座標系來說的。因此,根據連桿矩陣變換,可以得到: t1
=t0⋅
△t此外,右乘這種情況也可以這樣理解:
攝像機的執行速度對應的位姿轉換矩陣△t
可以理解成目標新的位姿t1
在當前位姿t0
所在的座標系下的表示。比如,假定目標當前處於原點(0,0,0)的位置(自身座標系),線速度為(5,0,0),那麼當一定時間過去後,目標(新的位姿)是不是位於(5,0,0)處(原自身座標系)?
所以,同樣的對於速度引數轉換得到的位姿變換矩陣,要注意分清楚這個速度引數v是在哪個座標系下表示的,才能決定我們是左乘/右乘這個矩陣。
對於例1 中,如果要求取相對於t0
位姿自身座標系cc
am的速度v1
,那麼該如何求?
1. 計算t1
在t0 自身座標系cc
am下的表示t∗
1 ;
2. 計算t∗
1 與單位矩陣i4
×4(t
0 在自身座標系下的位姿是單位陣i4
×4)的所對應的
v 。
利用視覺伺服工具箱簡單驗證一下:
>> t0 = transl(1,2,3)*trotx(1)*troty(1)*trotz(1);
>> t1 = t0
*transl(0.01,0.02,0.03)*trotx(0.001)*troty(0.002)*trotz(0.003)
t1 =
0.2889 -0.4547
0.8425
1.0191
0.8372 -0.3069 -0.4527
1.9887
0.4644
0.8361
0.2920
3.030100
01.0000
>> t1_in_0=inv(t0)*t1;
>> i=eye(4);
>> v=tr2delta(i,t1_in_0);
>> v'
ans =
0.0100 0.0200 0.0300 0.0010 0.0020 0.0030
對於位姿變換矩陣左乘和右乘,不同的人有不同的理解。比如有些情況下,目標從位姿運動到位姿時,可以把速度首先取負號,表達從狀態運動到狀態的控制率,這種情況下右乘的 還需要先對其求逆才能相乘。
理解**於研一機械人學課件中「右乘聯體左乘基」這句話,所以說學過的基礎知識一定要學紮實,不然之後就有可能被一些不起眼的細節知識絆住☺。
個人理解,如有錯誤請指出
未經允許請勿用於商業用途)
尤拉角和旋轉矩陣的轉換
尤拉角是一種常用的描述方位的方法。這項技術是著名數學家leonhard euler 1707 1783 的名字命名的,他證明了角位移序列等價於單個角位移。想詳細了解的維基百科 1,什麼是尤拉角 尤拉角的基本思想是將角位移分解為繞三個互相垂直軸的三個旋轉組成的序列。這聽起來複雜,其實它是非常直觀的。之...
px與rem的轉換關係
rem是相對於根元素,這樣就意味著,我們只需要在根元素確定乙個參考值 例如20px 這個參考值設定為多少,完全可以根據您自己的需求來定。在瀏覽器預設的字型大小16px的情況下,來看一些px單位與rem之間的轉換關係 px rem 12 12 16 75 14 14 16 875 16 16 16 1...
旋轉向量 和 旋轉矩陣的相互轉換的幾種方法
最近在做旋轉向量轉旋轉矩陣的,嘗試了幾種方法,現在總結一下,方便以後使用,下面幾種方法求出來的旋轉矩陣都是一樣的,但是在使用之前需要對旋轉向量進行單位化。給定旋轉角度和旋轉向量 pi 3.1415926 qq 1 pi 6 p1 0.8 0.6 0.5 p2 1 2 3 pp p2 p1 對旋轉向量...