1. 程式人生 > >從零開始一起學習SLAM(7)為啥需要李群與李代數?

從零開始一起學習SLAM(7)為啥需要李群與李代數?

  很多剛剛接觸SLAM的小夥伴在看到李群和李代數這部分的時候,都有點濛濛噠,感覺突然到了另外一個世界,很多都不自覺的跳過了,但是這裡必須強調一點,這部分在後續SLAM的學習中其實是非常重要的基礎,不信你看看大神們的論文就知道啦。

  關於李群李代數,其實高翔的《視覺SLAM十四講》裡推導什麼的挺清楚了,本文就在高博的基礎上用比較容易理解的語言講述一下重點。

  首先,假裝(也可能是真的)自己是個小白,我們假想對面坐了一個大牛師兄,下面我們開啟問答模式。

img

為啥需要李代數?

  小白:師兄,我最近在學習SLAM,看到李群、李代數這一塊一直看不懂,不知所云啊,師兄能不能用通俗易懂的方式給我講解一下?

  師兄:好啊,正好這會有空,講完正好去吃飯。

  小白:我請師兄吃燒烤!

  師兄:哈哈,那我必須給你講明白啦!現在開始吧。

  小白:好,先問下師兄,我在看高博的書,前面幾章挺順利的,第四章突然跳出來李群和李代數,一堆公式推導,看的我頭都大了。

  師兄:這部分公式是有點多,不過李群李代數是為了解決SLAM中非常實際的問題的。到後面會用到的。

  小白:看來逃不過啊。。。

  師兄:是的,這部分必須理解的啊。剛才說到了解決SLAM中實際問題,我展開說下。我們知道SLAM的過程就是不斷的估計相機的位姿和建立地圖。其中,相機位姿也就是我們所說的變換矩陣T。

  師兄:對~下面舉個例子說明。比如你拿著相機一邊移動一邊拍,假設某個時刻相機的位姿是T,它觀察到一個在世界座標系中的一個空間點p,並在相機上產生了一個觀測資料z,那麼

z=Tp+noisez = Tp + noise

  noise是觀測噪聲。那麼觀測誤差就是

e=zTpe = z - Tp

  小白:嗯,我 知道,我們的目的就是使得誤差最小咯~

  師兄:對的,假設我們總共有N個這樣的三維點p和觀測值z,那麼我們的目標就是尋找一個最佳的位姿T,使得整體誤差最小化,也就是

img

  求解此問題,就是求目標函式J對於變換矩陣T的導數。

  小白:嗯,對矩陣求導?第一次 聽說啊。。

  師兄:聽起來確實有點怪。我們先來看看變換矩陣T,我們知道T所在的SE(3)空間,對加法計算並不封閉,也就是說任意兩個變換矩陣相加後並不是一個變換矩陣,這主要是因為旋轉矩陣對加法是不封閉造成的,它是有約束的。

  小白:旋轉矩陣對加法不封閉啥意思?

  師兄:嗯,這個我一會會細講,這裡你先記住好了。到後面你就知道了

  小白:好的,那剛才的問題怎麼解決呢?

  師兄:這個問題問的好,李代數就是解決這個問題的。我們把大寫SE(3)空間的T對映為一種叫做李代數的東西,對映後的李代數我們叫做小se(3)好了。它是由向量組成的,我們知道向量是對加法封閉的。這樣我們就可以通過對李代數求導來間接的對變換矩陣求導了。

  小白:原來如此啊!不過剛才說了那麼多概念,都是什麼意思啊?

李群怎麼理解?

  師兄:不急,我一個個說。我先說說李群吧,額,不,先說說群吧。按照數學上定義:群(group)就是一種集合加上一種運算的代數結構。群有幾個運算性質,好像高博說是“鳳姐咬你”

  小白:(瞪大了眼睛)嗯?

  師兄:哦,諧音諧音。。。就是:封閉性,結合律,么元,還有逆。對了,比如旋轉矩陣和乘法就構成了旋轉矩陣群,變換矩陣和乘法也構成了變換矩陣群。對了,你說,旋轉矩陣和加法能構成群嗎?

  小白:額。。剛才好像說不行吧?

  師兄:嗯,不行的 ,他們不滿足封閉性。剛才沒有細講,下面仔細解釋原因。我們知道旋轉矩陣R本身有一定的約束:

img

  兩個旋轉矩陣R1+R2的結果就不能滿足上述約束了,但是R1R2滿足。此外,旋轉矩陣還滿足結合律:R1R2=R2*R1,還有么元是單位矩陣I,也有逆矩陣滿足R乘以R的逆等於么元(單位陣)。還有,我們在SLAM裡最常說的有兩個,一個是特殊正交群SO(3),也就是旋轉矩陣群,還有特殊歐氏群SE(3),也就是變換矩陣群,3代表是三維的。

  小白:嗯嗯,書上看了,我差不多理解群是個什麼東東了,那李群呢?

  師兄:李群的定義是指連續光滑的群,比如我們前面說的旋轉矩陣群SO(3),你想象你拿個杯子就可以在空間中以某個支點連續的旋轉它,所以SO(3)它就是李群。如果你一般旋轉一邊移動它,也是連續的或者說光滑的運動,所以變換矩陣群SE(3)也是李群。

李代數是李群的親戚嗎?

  小白:嗯,師兄,那李代數呢,它和李群都姓李,他們什麼關係?

  師兄:(一臉黑線)我個人的理解是這樣的,就是我們相機在三維空間中是連續的旋轉或者變換的嘛,剛才說過,而我們SLAM目的就是優化求解相機的這個最佳的位姿T(變換矩陣),優化方法一般都採用迭代優化的方法,每次迭代都更新一個位姿的增量delta,使得目標函式最小。這個delta就是通過誤差函式對T微分得到的。也就是說我們需要對變換矩陣T求微分(導數),我們先以SO(3)空間中的旋轉矩陣 R為例來說說吧,你覺得如何對R求微分呢?

  小白:矩陣怎麼求。。求微分,這個能微分嗎?以前沒有學過啊

  師兄:可以的,李群和李代數都姓李(笑),你還別說,他們之間的確存在某種微分關係。我們先把結論放這裡:李代數對應李群的正切空間,它描述了李群區域性的導數

  小白:也就是說,李代數對應了李群的導數?

  師兄:可以這麼理解,你可以去看一下十四講中65-66頁那部分的推導,我們只關注兩個結論就行了

  第一個結論

  看下面的公式,我們發現旋轉矩陣的微分是一個反對稱(也叫斜對稱)矩陣左乘它本身,也印證了我前面說的,矩陣是可以微分的。對於某個時刻的R(t)(李群空間),存在一個三維向量φ=(φ1,φ2,φ3)(李代數空間),用來描述R在t時刻的區域性的導數

img

反對稱矩陣是啥?

  小白:等一下,師兄,反對稱矩陣是啥?第一次聽說啊

  師兄:哦哦,忘記解釋了。反對稱矩陣英文是skew symmetric matrix,有的地方也翻譯為斜對稱矩陣,其實是一個東西。

  小白:這個反對稱矩陣是啥意思?

  師兄:反對稱矩陣其實是將三維向量和三維矩陣建立對應關係。它是這樣定義的:如果一個3 X 3的矩陣A滿足如下式子

img

  那麼A就是反對稱矩陣。你看左邊有個轉置,右邊有個負號,叫反對稱矩陣,還是挺形象的。

  小白:額,好像有點明白,不過這個有啥用啊?

  師兄:先別急,先問你一個問題,你覺得反對稱矩陣它的元素有什麼特點?

  小白:啊。。特點啊,我想想(一分鐘過去了。。)

  師兄:根據它的性質,先想想對角線元素。你看,上式等式左邊矩陣A轉置後,對角線元素aii是不是還在對角線上?

  小白:對哦,師兄好厲害

  師兄:額。。別打岔,等式右邊,所有元素取負號,那麼對於對角線元素aii來說,是不是滿足aii=-aii?

  小白:是哦,所以aii=0,也就是說反對稱矩陣對角線元素都為0?

  師兄:bingo!確實是這樣。那麼非對角線元素還有6個,它們能不能精簡呢?

  小白:我想想,感覺好像是有重複的,好像可以用更少的元素來表示

  師兄:沒錯!我舉個例子,等式左邊第2行第1列位置的元素,是矩陣A元素a12轉置後到了位置a21,等式右邊原來a21變成了 -a21,所以其實對於矩陣A,元素a12 = -a21,所以用一個元素及其負數就可以表示矩陣中這兩個元素,同理,其他4個元素也是這樣。所以,其實矩陣A中非對角線元素只用3個元素就可以表示。也就是說反對稱矩陣A只有3個自由度。

  小白:嗯呢,師兄好厲害!不過。。。知道這些有啥用啊?

  師兄:這個反對稱矩陣只有3個自由度很重要啊,這樣我們就可以把一個三維向量和一個三維矩陣建立對應關係。

  小白:師兄,感覺還是很抽象啊

  師兄:哦哦,那我舉個栗子給你看看。我們假設有一個反對稱矩陣A的定義如下:

img

  小白:等下,我看看是否滿足性質:該矩陣的轉置等於該矩陣元素取負數。。

  師兄:你看是不是我們前面推算的一致啊,對角線元素為0,只有3個自由度?

  小白:是哦,確實沒錯!師兄繼續。。

  師兄:我們定義對應的一個三維向量:

img

  然後我們用一個上三角符號來表示這個向量α和三維矩陣A的對應關係

img

  小白:這個符號感覺很神奇啊

  師兄:是的,通過這個符號,我們把向量和矩陣建立了對應關係。這個在後面非常重要。你再看看前面的第一個結論

img

  就好理解很多了。

  小白:嗯嗯。確實是呢。師兄繼續下一個結論吧。

指數對映

  師兄:好 ,下面說說第二個結論。通過高博一系列辛苦的 計算(笑),我們最終得到下面式子,它的前提是R在原點附近的一階泰勒展開,我們看到這個向量φ=(φ1,φ2,φ3)反應了R的導數性質,故稱它在SO(3)上的原點 φ0 附近的正切空間上。這個φ正是李群大SO(3)對應的李代數小so(3)。

img

  小白:好暈啊。。

  師兄:你這麼理解吧,李代數小so(3)是三維向量φ的集合,每個向量φi的反對稱矩陣都可以表達李群(大SO(3))上旋轉矩陣R的導數,而R和φ是一個指數對映關係。也就是說,李群空間的任意一個旋轉矩陣R都可以用李代數空間的一個向量的反對稱矩陣指數來近似。

  小白:好繞的繞口令啊。。

  師兄:沒事,你只要記得用旋轉矩陣表示的話就是李群空間,也是我們熟悉的表示方法。而用向量的反對稱矩陣表示的話就是李代數空間,這兩個空間建立了聯絡。

  小白:師兄,那這個古怪的式子

img

如何計算呢?

  師兄:嗯,這個用大一學的微積分就行。

  小白:微積分忘的差不多了。。。

  師兄:沒事,其實就只用到指數e的泰勒展開

img

  小白:師兄,書上的推導好麻煩啊

  師兄:先不管具體推導過程,我們先來看看結論,你說的那個指數形式的古怪的式子通過運用泰勒展開,以及反對稱矩陣的性質,我們可以得到如下結果:

img

  其中:三維向量 φ = θa,a是一個長度為1的方向向量。看到這個式子有沒有覺得很神奇?

  小白:好像在哪裡見過啊

  師兄:嗯,這個式子和羅德里格斯公式長的一模一樣

  小白:忘了什麼是羅德里格斯公式了。。。

  師兄:你還記得旋轉的表示方法嗎?有旋轉矩陣、旋轉向量、尤拉角、四元數,而羅德里格斯公式是表示從旋轉向量到旋轉矩陣的轉換過程

  小白:師兄這麼一說,我想起來了,旋轉向量也有一個旋轉角θ,旋轉軸也是單位方向向量

  師兄:其實旋轉向量就是這裡的李代數

  小白:啊?這怎麼會扯上關係?

  師兄:你可能有點反應不過來,不過的確小so(3)的李代數空間就是由旋轉向量組成的的空間,其物體意義就是旋轉向量。而前面結論二中的指數對映關係就是羅德里格斯公式,他們在數學上本質是一樣

  小白:真的好神奇啊

  師兄:嗯,這樣我們可以說旋轉矩陣的導數可以由其對應的旋轉向量指定,指導如何在旋轉矩陣中進行微積分運算。

  小白:這樣就好理解多了

李群李代數之間的指數對數對映關係

  師兄:嗯,反過來,用對數對映也能把大SO(3)李群空間中元素對映到小so(3)李代數空間中去。前面我們都是講的SO(3)上的對映關係,放到SE(3)上推導類似,也是泰勒展開,旋轉矩陣R對映結果和SO(3)一樣,平移部分指數對映後會有稍許的不同,它前面多了一個係數矩陣,這些都可以自己證明一下(留作作業)。

  小白:嗯嗯,師兄,是不是隻要記住高博大神書上的對應關係圖就行啦?

img

  師兄:這個圖要理解透徹

  小白:對了,師兄,好像還有一個左擾動,右擾動什麼的,這個是幹什麼用的呀

  師兄:這個是用李代數解決求導問題時使用的方法。對了,李代數是對加法封閉的嗎?

  小白:嗯,李代數是由向量組成的,向量對加法運算是封閉的。

  師兄:嗯,學的真快!你說的沒錯。李代數求導分兩種:一種是用李代數表示位姿,然後根據李代數加法來對李代數求導。這種方法書中也推導了,結果中有複雜的雅克比公式,不是很方便。一般都用第二種,就是對李群進行左乘或者右乘微小的擾動,然後對該擾動求導。書上高博也推導了,你看結果還是挺簡潔的。

img

  小白:那我們就用擾動模型好啦

  師兄:確實實際SLAM問題中,擾動模型比較實用方便。擾動模型的推導一定要自己推一遍哦

  小白:嗯,我儘量。。謝謝師兄耐心解答,走,請你吃燒烤去。

李代數推導

  李群李代數部分有不少推導,其中最難理解的3個推導是SO(3)左擾動模型,SO(3)李代數求導,SE(3)左擾動模型,見下面視訊: 李群李代數推導