在自動駕駛的目標跟蹤問題中,自車的座標系隨着自車運動,包括yaw angle。因此,在跟蹤時,需要這樣做:車身偏航角的變化率是可以得到的yaw_rate,在每次觸發跟蹤算法時根據兩幀時間戳的差值對yaw_rate做積分,就有這個時間段內產生的偏航角變化,把這個值算到卡爾曼的估計中,再和測量值做加權。也就是說,卡爾曼的預測過程=基於目標運動模型+自車座標系變化引起的座標變換(旋轉).
可以這樣理解,就是自車偏轉時的跟蹤,相當於自車不動,而將目標狀態根據yaw angle 進行座標變換。這樣目標跟蹤就始終處於自車座標系下了。
在多目標的跟蹤中,分爲三個步驟,1. 預測(包括自車yaw angle 的補償),2. 匹配,即多個測量點和對象列表中的多個ID一一對應(Apollo中用的是匈牙利算法)。3. 測量更新
由於歐拉角有萬向節死鎖的缺點,自動駕駛中常用 四元數,有關四元數的簡潔講解在下面的鏈接中:
鏈接:http://www.zhihu.com/question/23005815/answer/33971127
附上原文:
作者:Yang Eninala
鏈接:https://www.zhihu.com/question/23005815/answer/33971127
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
根據我的理解,大多數人用漢密爾頓四元數就只是做三維空間的旋轉變換(我反正沒見過其他用法)。那麼你不用學羣論,甚至不用複習線性代數,看我下面的幾張圖就可以了。
首先,定義一個你需要做的旋轉。旋轉軸爲向量,旋轉角度爲(右手法則的旋轉)。如下圖所示:
此圖中,
那麼與此相對應的四元數(下三行式子都是一個意思,只是不同的表達形式)
這時它的共軛(下三行式子都是一個意思,只是不同的表達形式),
如果你想算一個點在這個旋轉下新的座標,需要進行如下操作,
1.定義純四元數
2.進行四元數運算
3.產生的一定是純四元數,也就是說它的第一項爲0,有如下形式:
4.中的後三項就是:
這樣,就完成了一次四元數旋轉運算。
同理,如果你有一個四元數:
那麼,它對應一個以向量爲軸旋轉角度的旋轉操作(右手法則的旋轉)。
***********************************************************************************************************
如果你想對四元數有着更深入的瞭解,請往下看。
四元數由漢密爾頓發明,這一發明起源於十九世紀的某一天。在這一天早上,漢密爾頓下樓吃早飯。這時他的兒子問他,“爸爸,我們能夠對三元數組(triplet,可以理解爲三維向量)做乘法運算麼?”漢密爾頓說“不行,我只能加減它們。”
這時來自21世紀的旁白旁先生說,“大家快來看十九世紀的數學家有多二,連內積和外積都不是知道。”
十九世紀的漢密爾頓也許確實不知道內積和外積,但是他知道,他想要的三維向量乘法要比內積和外積運算“高大上”很多。這一乘法運算要滿足下列四條性質:
1.運算產生的結果也要是三維向量
2.存在一個元運算,任何三維向量進行元運算的結果就是其本身
3.對於任何一個運算,都存在一個逆運算,這兩個運算的積是元運算
4.運算滿足結合律
換而言之,漢密爾頓想定義的不是一個簡單的映射關係,而是一個羣!(後來我們知道四元數所在羣爲S3,而四元數所代表的三維旋轉是SO(3),前者是後者的兩倍覆蓋)內積連性質1都不滿足,外積不滿足性質3。
漢密爾頓先生就這麼被自己兒子提出的問題難倒了。經歷了無數個日日夜夜,他絞盡腦汁也沒想明白這個問題。終於有一天(1843年的一天),漢密爾頓先生終於意識到了,自己所需要的運算在三維空間中是不可能實現的,但在四維空間中是可以的,他是如此的興奮,以至於把四元數的公式刻在了愛爾蘭的一座橋上。
旁白:“WTF,我讓你講三維物體的旋轉,你給我扯到四維空間上去。”
(不加說明,以下所說四元數全爲單位四元數)
其實,四元數有四個變量,完全可以被看作一個四維向量。單位四元數(norm=1)則存在於四維空間的一個球面上。,四元數乘以四元數其實看作(1)對進行左旋轉,或者(2)對進行右旋轉。所以從始至終,四元數定義的都是四維旋轉,而不是三維旋轉!任意的四維旋轉都可以唯一的拆分爲一個左旋轉和一個右旋轉,表達出來就是。這裏,我們對四元數(四維向量)進行了一個左旋轉和一個右旋轉。結果當然是一個四元數,符合性質1。這個運算也同時符合性質2,3,4。
好了,說完了四維旋轉,我們終於可以說說三維旋轉了。說白了,三維旋轉就是四維旋轉的一個特例,就像二維旋轉是三維旋轉的一個特例一樣。說是特例其實不準確,準確的說是一個子集或者subgroup。爲了進行三維旋轉運算,漢密爾頓首先在四維空間裏劃出了一塊三維空間。漢密爾頓定義了一種純四元數(pure quaternion),其表達式爲。純四元數第一項爲零,它存在於四維空間的三維超平面上,與三維空間中的三維向量一一對應。然後,就有了我們常見的這種左乘單位四元數,右乘其共軛的表達式。我真心不知道漢密爾頓是怎麼想出來的,不過回過頭來看,這個運算形式是爲了限制其運算結果所在的空間。簡單的說,當對一個三維向量進行三維旋轉後,我們希望得到的是一個三維向量。(如果你真能得到一個四維向量,就不敢自己在家轉圈圈了吧,轉着轉着,就進入四次元了!)那麼這個左乘單位四元數,右乘其共軛的運算保證了結果是一個在三維超平面上中的純四元數。
把左乘和右乘表達爲矩陣形式會讓我們看的更清楚一些。依照的定義,的矩陣形式爲
很明顯,前面的矩陣雖然是一個4x4的四維旋轉矩陣,但是它只是在右下角3x3的區域內和一個單位矩陣有所不同。所以說,它是一個限制在三維超平面上的四維旋轉。如果表達式右邊不是共軛,而是任意四元數,那麼我們所作的就是一個很普通的四維旋轉。如果只是左乘一個單位四元數,右邊什麼都不乘,那麼我們得到的是四維旋轉的一個子集,這個子集並不能保證結果限制在三維超平面上。如果只右乘,不左乘也是一樣一樣的。
說了這麼多,對於堅持到最後的你,上圖一幅,以表感謝。
其實這張圖解釋了一個長久的疑問。爲什麼四元數裏用的是而不是。這是因爲做的就是一個的旋轉,而也做了一個的旋轉。我們進行了兩次旋轉,而不是一次,這兩次旋轉的結果是一個旋轉角爲的旋轉。