前幾篇文章介紹了三維世界剛體運動的描述。因為在slam中位姿是未知的,而我們需要解決什麼樣的相機位姿最符合當前觀測資料這樣的問題。乙個典型的方法是把它構建成乙個優化問題,求解最有的r、t,使得誤差最小化。
其中利群與李代數就是為了弄清楚上面公式,具體推導過程可看相關書籍。
該公式學要解決一下兩個問題:
1.如果上式成立,那麼給定的某時刻r,我們就能求出乙個ф,他描述了r在區域性的導數關係,而ф正是so(3)上的李代數。
2.其次,矩陣指數的計算,事實上,這正是利群李代數間的指數/對數對映。
解決問題1:上式為so(3)李代群內容。它們是乙個由三維向量組成的集合,每個向量對應到乙個反對成矩陣,可以表達旋轉矩陣的導數,它與so(3)的關係由指數對映給定:
解決問題2:
so(3)上的指數對映:我們可以把指數對映寫成(推導步驟省略):
這表明so(3)李代數實際上就是由所謂的旋轉向量組成的空間,而指數對映即羅德里格斯公式》通過它們,我們把李代數中任意乙個向量對應到了乙個位於so(3)中的旋轉矩陣,反之,如果定義對數對映,也能把so(3)中的元素對應到李代數中。
so(3)與李代數的結論似乎在我們的意料之中。它和我們前面講的旋轉向量與旋轉矩陣很相似,而指數對映即是羅德里格斯公式。
使用李代數的一大動機就是進行優化。下面考慮乙個問題,當在so(3)中完成兩個矩陣乘法時李代數上會相加嗎?
很遺憾,答案是不會的。
特別的,考慮so(3)上的李代數(下式),當ф1或ф2為小量時,小量二次以上的項都可以被忽略。此時,bch擁有線性近似表示式:
在使用時,我們須注意是我們用的是左乘模型和右乘模型。
我們經常會構建與位姿有關的函式,然後討論該函式關於位姿的導數,以調整當前的估計值。然而利群上並沒有良好的定義加法,他們只是群。如果我們把t當成普通矩陣處理優化,那就必須對它加以約束。而從李代數的角度來說,由於李代數由向量組成,具有良好的加法運算,因此,使用李代數解決求導問題的思路分為兩種:
1.用李代數表示姿態,然後根據李代數加法來對李代數進行求導。
2.對利群左乘或右乘微小擾動,然後對該模型求導,稱為左擾動和右擾動模型。
乙個較好的李代數庫是sophus,其支援本章所講的so(3)、se(3)
sophus的安裝網上教程較多,就不講解了,直接上**:
檔名:usesophus.cpp
#include #include using namespace std;
#include #include #include "sophus/so3.h"
#include "sophus/se3.h"
int main( int argc, char** ar** )
)add_executable(usesophus usesophus.cpp)
target_link_libraries(usesophus $)
然後就可以對它進行編譯與執行了! SLAM學習 李群李代數
1.李群 李群是具有連續 光滑 性質的群 它既是群也是流行 直觀上看,乙個剛體能夠連續的在空間中運動,故so 3 和se 3 都是李群。注 so 3 是特殊正交群 se 3 是特殊歐式群,由於旋轉矩陣r是3乘3的維度,但自由度的約束只有3個自由度,所以旋轉矩陣r在9維空間中是乙個連續的3維曲面或流形...
SLAM中的李群與李代數
群是一些資料,並有特定的運算方式,通俗點,元素集合加上代數運算,使得集合中任意兩個元素經過運算後形成的第三個元素仍然在這個集合裡面。群必須滿足四種公理 封閉性 closure 結合性 associtivity 單位元 identity,也叫么元 逆元 invertibility 鳳姐咬你 李群除了滿...
slam十四講(二)李群李代數
李群 群 group 是一種集合加上一種運算的代數結構。我們把集合記作 a,運算記作 g a,性質 特殊正交群 so n 也就是所謂的旋轉矩陣群,其中 so 2 和 so 3 最為常見。特殊歐氏群 se n 也就是前面提到的 n 維歐氏變換,如 se 2 和 se 3 李代數 李代數由乙個集合 v,...