SE(3)
- 又稱: special Euclidean group, SE3, rigid-body transformation group
- 類別: Foundations & spatial maths › Frames & transforms
- 標籤: lie-groups, rigid-body-motion, spatial-math, kinematics, pose-estimation
3D 空間中剛體運動所構成的群,也就是所有旋轉與所有平移的組合,通常寫成 4×4 齊次變換矩陣。它描述姿態與姿態的變化。
定義
SE(3),也就是三維特殊歐幾里得群(special Euclidean group),包含所有的剛體變換:一個來自 SO(3)(行列式為 +1 的 3×3 正交矩陣所構成的群)的旋轉 R,加上一個平移向量 p。寫成 4×4 齊次矩陣(R 在左上角,p 在右側一行,最下面一列為 [0 0 0 1])時,兩個運動的合成就是矩陣乘法,其反元素的旋轉為 Rᵀ、平移為 −Rᵀp。SE(3) 的一個元素可以描述一個姿態,也就是一個座標系相對於另一個座標系的位置與方向,也可以描述把點從一個座標系帶到另一個座標系的一次運動。它有六個自由度,三個旋轉自由度與三個平移自由度;「特殊」代表排除了鏡射。
SE(3) 是一個李群(Lie group),也就是本身也是群的光滑彎曲空間,而且它不是向量空間:把兩個姿態相加,或逐項平均矩陣,都得不到有效的姿態。它在單位元素處的切空間,也就是李代數 se(3),由結合角速度與線速度的六維運動旋量(twist)組成。指數映射把運動旋量轉成變換,對數映射則把它映射回去。這些映射是下列內容的基礎:運動學的指數積公式;SLAM 與姿態圖求解器所用的流形上最佳化,其中的更新以小的運動旋量形式套用;以及姿態的正確內插與不確定性。它的平面對應版本 SE(2) 有三個自由度,即 x、y 與航向,用於移動機器人以及受限在平面上的物體,例如夾在夾爪兩片平行夾爪指之間的物體。
SE(3) 中的姿態可以儲存為齊次矩陣,儲存為一個旋轉(旋轉矩陣、單位四元數或軸角)加上一個平移向量,儲存為對偶四元數,或以運動旋量座標儲存。在學習中,輸出姿態的網路必須小心處理旋轉部分,因為四元數會把每個旋轉涵蓋兩次,而且有些參數化並不連續。SE(3) 等變(SE(3)-equivariant)網路把這個群的對稱性內建在結構中,因此當輸入場景被旋轉或平移時,輸出會一致地跟著轉換。
為何重要
機器人中的每個座標系、感測器外部參數、末端執行器目標與物體姿態,都是 SE(3) 的元素。把它當成一個群,而不是十二個彼此獨立的數字,可以避免旋轉矩陣漂移、合成順序錯誤與無效平均等常見錯誤,並讓最佳化與不確定性估測正確。
主要應用
- 正向運動學與末端執行器姿態目標
- SLAM、視覺里程計與姿態圖最佳化
- 用於抓取的物體姿態估測
- 在姿態之間內插軌跡
- 校正感測器外部參數
- 用於操作的等變學習
實際應用
在一個取放任務中,正向運動學提供夾爪在基座座標系中的姿態,手眼校正提供相機在夾爪座標系中的姿態,姿態估測器則提供物體在相機座標系中的姿態。物體在基座座標系中的姿態,就是這三個變換依此順序的乘積,而一致的座標系命名慣例能避免把順序弄混。融合多個姿態估測時,團隊在 SO(3) 上平均旋轉,例如使用四元數平均或在切空間中反覆求平均,而不是平均矩陣的各項。Sophus、manif 以及 ROS 中的 tf2 等函式庫可以處理這些運算。
常見誤解
- 姿態可以逐項平均或內插 — 結果通常不是有效的旋轉;平均與內插必須遵守群結構
- SE(3) 只是把 SO(3) 和一個平移向量並排放在一起 — 元素是一樣的,但合成運動時旋轉會作用在平移上,因此合成規則不同
- 歐拉角加上位置是安全的通用表示法 — 它們能涵蓋 SE(3),但有奇異點;四元數或旋轉矩陣可以避免這些奇異點
誰需要了解
- 處理座標系的機器人軟體工程師
- SLAM 與狀態估測工程師
- 運動學與操作工程師
- 預測姿態的機器學習研究人員
相關技術
- SO(3)
- 李代數 se(3)(Lie Algebra se(3))
- 齊次變換矩陣(Homogeneous Transformation Matrix)
- 四元數(Quaternions)
- Sophus
- tf2
相關術語
相關專案
- AprilTag: The standard visual fiducial marker system for robot localization and pose estimation
- MoveIt 2: Motion planning framework for ROS 2 robot arms, with kinematics and collision checking
- manif: Header-only C++ Lie theory library for robotics state estimation
- PyRoki: Modular Python toolkit for kinematic optimization across CPU, GPU, and TPU via JAX
- PyPose: PyTorch library for differentiable robotics with deep learning and Lie group optimization
- DART: C++ physics engine for articulated rigid body dynamics and robotics simulation