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


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

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

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

 


為啥需要李代數?

小白:師兄,我最近在學習SLAM,看到李群、李代數這一塊一直看不懂,不知所雲啊,師兄能不能用通俗易懂的方式給我講解一下?
師兄:好啊,正好這會有空,講完正好去吃飯。
小白:我請師兄吃燒烤!
師兄:哈哈,那我必須給你講明白啦!現在開始吧。
小白:好,先問下師兄,我在看高博的書,前面幾章挺順利的,第四章突然跳出來李群和李代數,一堆公式推導,看的我頭都大了。
師兄:這部分公式是有點多,不過李群李代數是為了解決SLAM中非常實際的問題的。到后面會用到的。
小白:看來逃不過啊。。。
師兄:是的,這部分必須理解的啊。剛才說到了解決SLAM中實際問題,我展開說下。我們知道SLAM的過程就是不斷的估計相機的位姿和建立地圖。其中,相機位姿也就是我們所說的變換矩陣T。
小白:嗯嗯,是。上節課《從零開始一起學習SLAM | 三維空間剛體的旋轉》中還講了變換矩陣呢!
師兄:對~下面舉個例子說明。比如你拿着相機一邊移動一邊拍,假設某個時刻相機的位姿是T,它觀察到一個在世界坐標系中的一個空間點p,並在相機上產生了一個觀測數據z,那么
z = Tp + noise
noise是觀測噪聲。那么觀測誤差就是
e = z - Tp
小白:嗯,我 知道,我們的目的就是使得誤差最小咯~
師兄:對的,假設我們總共有N個這樣的三維點p和觀測值z,那么我們的目標就是尋找一個最佳的位姿T,使得整體誤差最小化,也就是

 


求解此問題,就是求目標函數J對於變換矩陣T的導數。
小白:嗯,對矩陣求導?第一次 聽說啊。。
師兄:聽起來確實有點怪。我們先來看看變換矩陣T,我們知道T所在的SE(3)空間,對加法計算並不封閉,也就是說任意兩個變換矩陣相加后並不是一個變換矩陣,這主要是因為旋轉矩陣對加法是不封閉造成的,它是有約束的。
小白:旋轉矩陣對加法不封閉啥意思?
師兄:嗯,這個我一會會細講,這里你先記住好了。到后面你就知道了
小白:好的,那剛才的問題怎么解決呢?
師兄:這個問題問的好,李代數就是解決這個問題的。我們把大寫SE(3)空間的T映射為一種叫做李代數的東西,映射后的李代數我們叫做小se(3)好了。它是由向量組成的,我們知道向量是對加法封閉的。這樣我們就可以通過對李代數求導來間接的對變換矩陣求導了。
小白:原來如此啊!不過剛才說了那么多概念,都是什么意思啊?

李群怎么理解?
師兄:不急,我一個個說。我先說說李群吧,額,不,先說說群吧。按照數學上定義:群(group)就是一種集合加上一種運算的代數結構。群有幾個運算性質,好像高博說是“鳳姐咬你”
小白:(瞪大了眼睛)嗯?
師兄:哦,諧音諧音。。。就是:封閉性,結合律,幺元,還有逆。對了,比如旋轉矩陣和乘法就構成了旋轉矩陣群,變換矩陣和乘法也構成了變換矩陣群。對了,你說,旋轉矩陣和加法能構成群嗎?
小白:額。。剛才好像說不行吧?
師兄:嗯,不行的 ,他們不滿足封閉性。剛才沒有細講,下面仔細解釋原因。我們知道旋轉矩陣R本身有一定的約束:

兩個旋轉矩陣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時刻的局部的導數。

 


反對稱矩陣是啥?
小白:等一下,師兄,反對稱矩陣是啥?第一次聽說啊
師兄:哦哦,忘記解釋了。反對稱矩陣英文是skew symmetric matrix,有的地方也翻譯為斜對稱矩陣,其實是一個東西。
小白:這個反對稱矩陣是啥意思?
師兄:反對稱矩陣其實是將三維向量和三維矩陣建立對應關系。它是這樣定義的:如果一個3 X 3的矩陣A滿足如下式子

 


那么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的定義如下:

 


小白:等下,我看看是否滿足性質:該矩陣的轉置等於該矩陣元素取負數。。
師兄:你看是不是我們前面推算的一致啊,對角線元素為0,只有3個自由度?
小白:是哦,確實沒錯!師兄繼續。。
師兄:我們定義對應的一個三維向量:

 


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

小白:這個符號感覺很神奇啊
師兄:是的,通過這個符號,我們把向量和矩陣建立了對應關系。這個在后面非常重要。你再看看前面的第一個結論

 

就好理解很多了。
小白:嗯嗯。確實是呢。師兄繼續下一個結論吧。

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

 

小白:好暈啊。。
師兄:你這么理解吧,李代數小so(3)是三維向量φ的集合,每個向量φi的反對稱矩陣都可以表達李群(大SO(3))上旋轉矩陣R的導數,而R和φ是一個指數映射關系。也就是說,李群空間的任意一個旋轉矩陣R都可以用李代數空間的一個向量的反對稱矩陣指數來近似。
小白:好繞的繞口令啊。。
師兄:沒事,你只要記得用旋轉矩陣表示的話就是李群空間,也是我們熟悉的表示方法。而用向量的反對稱矩陣表示的話就是李代數空間,這兩個空間建立了聯系。
小白:師兄,那這個古怪的式子

 

如何計算呢?
師兄:嗯,這個用大一學的微積分就行。
小白:微積分忘的差不多了。。。
師兄:沒事,其實就只用到指數e的泰勒展開

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

 


其中:三維向量 φ = θa,a是一個長度為1的方向向量。看到這個式子有沒有覺得很神奇?
小白:好像在哪里見過啊
師兄:嗯,這個式子和羅德里格斯公式長的一模一樣
小白:忘了什么是羅德里格斯公式了。。。
師兄:你還記得旋轉的表示方法嗎?有旋轉矩陣、旋轉向量、歐拉角、四元數,而羅德里格斯公式是表示從旋轉向量到旋轉矩陣的轉換過程
小白:師兄這么一說,我想起來了,旋轉向量也有一個旋轉角θ,旋轉軸也是單位方向向量
師兄:其實旋轉向量就是這里的李代數
小白:啊?這怎么會扯上關系?
師兄:你可能有點反應不過來,不過的確小so(3)的李代數空間就是由旋轉向量組成的的空間,其物體意義就是旋轉向量。而前面結論二中的指數映射關系就是羅德里格斯公式,他們在數學上本質是一樣的
小白:真的好神奇啊
師兄:嗯,這樣我們可以說旋轉矩陣的導數可以由其對應的旋轉向量指定,指導如何在旋轉矩陣中進行微積分運算。
小白:這樣就好理解多了

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

 

師兄:這個圖要理解透徹
小白:對了,師兄,好像還有一個左擾動,右擾動什么的,這個是干什么用的呀
師兄:這個是用李代數解決求導問題時使用的方法。對了,李代數是對加法封閉的嗎?
小白:嗯,李代數是由向量組成的,向量對加法運算是封閉的。
師兄:嗯,學的真快!你說的沒錯。李代數求導分兩種:一種是用李代數表示位姿,然后根據李代數加法來對李代數求導。這種方法書中也推導了,結果中有復雜的雅克比公式,不是很方便。一般都用第二種,就是對李群進行左乘或者右乘微小的擾動,然后對該擾動求導。書上高博也推導了,你看結果還是挺簡潔的。

 

小白:那我們就用擾動模型好啦
師兄:確實實際SLAM問題中,擾動模型比較實用方便。擾動模型的推導一定要自己推一遍哦
小白:嗯,我盡量。。謝謝師兄耐心解答,走,請你吃燒烤去。

以上內容參考了高博的《視覺SLAM十四講》,SLAM入門必備,優惠購買鏈接

彩蛋
李群李代數部分有不少推導,其中最難理解的3個推導是SO(3)左擾動模型,SO(3)李代數求導,SE(3)左擾動模型,知識星球:從零開始學習SLAM中關於上面3個過程的推導進行了視頻講解,見下面視頻:
李群李代數疑難公式詳細推導

本講練習
1、重要理論推導題
推導李代數小se(3)的指數映射。
我們知道對於大SE(3),其對應的李代數為小se(3)。其定義如下

 

證明1:

 

證明2:令ρ=θa,那么

 

提示:
參考《視覺SLAM十四講》P68-71頁內容。參考SO(3) 的泰勒展開,然后合並奇偶數項級數

2、編程練習
SLAM問題的目標之一就是精確的估計相機運動的軌跡(姿態),如果我們將相機運動的軌跡繪制出來,就可以直觀的觀察它的運動是否符合預期。給定一個軌跡文件trajectory.txt,該文件的每一行由若干個數據組成,格式為 [time, tx, ty, tz, qx, qy, qz, qw],其中 time 為時間,tx,ty,tz 為平移部分,qx,qy,qz,qw 是四元數表示的旋轉部分,請完成數據讀取部分的代碼,繪制部分代碼已經給出。

公眾號菜單欄回復:“軌跡”,即可下載上面代碼框架和軌跡數據。

歡迎留言討論,更多學習視頻、文檔資料、參考答案等在菜單欄點擊“知識星球”,進入《知識星球:從零開始一起學習SLAM》和其他學習SLAM學的伙伴一起學習交流~

相關閱讀
從零開始一起學習SLAM | 為什么要學SLAM?
從零開始一起學習SLAM | 學習SLAM到底需要學什么?
從零開始一起學習SLAM | SLAM有什么用?
從零開始一起學習SLAM | C++新特性要不要學?
從零開始一起學習SLAM | 為什么要用齊次坐標?
從零開始一起學習SLAM | 三維空間剛體的旋轉
零基礎小白,如何入門計算機視覺?
原文鏈接:零開始一起學習SLAM | 為啥需要李群與李代數?


---------------------
作者:electech6
來源:CSDN
原文:https://blog.csdn.net/electech6/article/details/83579286
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM