3、李代数求导与扰动模型
(1)BCH公式及近似形式
BCH公式展开式的前几项,其中[]为李括号:
考虑SO(3)上的李代数,且φ1或φ2为小量时,忽略小量二次以上的项,BCH线性近似为:
其中,
当一个旋转矩阵R2(李代数为φ2)左乘一个微小旋转矩阵JR1(李代数为φ1)时,可以近似地看作,在原有的李代数φ2上,加上了一项Jl(φ2)-1φ1
总结:SO(3)和SE(3)上的BCH近似公式,及李代数上的加法对应于李群上带左右雅可比的乘法。
(2)SO(3)李代数上的求导
-
重要意义:在实际SLAM过程中,经常会构建与位姿有关的函数,然后讨论该函数关于位姿的导数,以调整当前的估计值。
-
问题描述:假设某个时刻机器人的位姿为T,观察到一个世界坐标位于p的点,产生了一个观测数据z,则有:z = Tp + w,其中w是观测噪声。
我们通常计算理想与实际数据间的误差:e = z - Tp,假设有N个这样的路标点和观测,
则对机器人位姿的估计相当于找一个最优的T**,使得整体误差最小化**:
-
问题解决:需要计算目标函数J关于变换矩阵T的导数
用李代数解决求导问题的思路有:- 用李代数表示姿态,然后对根据李代数加法对李代数求导
- 对李群左乘或右乘微小扰动,然后对该扰动求导,称为左扰动和右扰动模型
- 用李代数表示姿态,然后对根据李代数加法对李代数求导
-
具体推导
- 李代数求导
- 扰动模型(左乘)
SO(3)
SE(3)
- 李代数求导
4、实践:Sophus
CMakeLists.txt
cmake_minimum_required(VERSION 2.6)
project(usesophus)
set(CMAKE_BUILD_TYPE "Debug")
include_directories("/usr/include/eigen3")
find_package(Sophus REQUIRED)
include_directories(${
Sophus_INCLUDE_DIRS})
add_executable(usesophus main.cpp)
target_link_libraries(usesophus ${
Sophus_LIBRARIES}