《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)

读书笔记:李群与李代数

上一讲,我们介绍了三维世界中刚体运动的描述方式,包括旋转矩阵、旋转向量、欧拉角、四元数等若干种方式。我们重点介绍了旋转的表示,但是在SLAM 中,除了表示之外,我们还要对它们进行估计和优化。因为在SLAM 中位姿是未知的,而我们需要解决什么样的相机位姿最符合当前观测数据这样的问题。一种典型的方式是把它构建成一个优化问题,求解最优的R; t,使得误差最小化。
如前所言,旋转矩阵自身是带有约束的(正交且行列式为1)。它们作为优化变量时,会引入额外的约束,使优化变得困难。通过李群——李代数间的转换关系,我们希望把位姿估计变成无约束的优化问题,简化求解方式。
(这一章是纯数学的内容)
《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)_第1张图片
《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)_第2张图片
李群(Lie Group):

  • 具有连续(光滑)性质的群。
  • 既是群也是流形。
  • 直观上看,一个刚体能够连续地在空间中运动,故SO(3)和SE(3)都是李群。但是,SO(3)和SE(3)只有定义良好的乘法,没有加法,所以难以进行取极限、求导等操作。

李代数:与李群对应的一种结构,位于向量空间。

  • 通常记作小写的so(3)和se(3)。书中以哥特体突出显示。
  • 事实上是李群单位元处的正切空间。

《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)_第3张图片

《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)_第4张图片
《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)_第5张图片

实践部分

useSophus:

依然是出现上一讲的错误:

error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
 #error This file requires compiler and library support \

CMakeLists.txt中加入:

set(CMAKE_CXX_FLAGS "-std=c++11 -O2")

然后还得去3rdparty文件夹中安装相应的Sophus库文件,然后编译执行可得结果:
《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)_第6张图片
具体结果如下:

/home/wh/shenlan/slambook2/ch4/cmake-build-debug/useSophus
SO(3) from matrix:
2.22045e-16          -1           0
          1 2.22045e-16           0
          0           0           1
SO(3) from quaternion:
2.22045e-16          -1           0
          1 2.22045e-16           0
          0           0           1
they are equal
so3 =      0      0 1.5708
so3 hat=
      0 -1.5708       0
 1.5708       0      -0
     -0       0       0
so3 hat vee=      0      0 1.5708
SO3 updated = 
          0          -1           0
          1           0     -0.0001
     0.0001 2.03288e-20           1
*******************************
SE3 from R,t= 
2.22045e-16          -1           0           1
          1 2.22045e-16           0           0
          0           0           1           0
          0           0           0           1
SE3 from q,t= 
2.22045e-16          -1           0           1
          1 2.22045e-16           0           0
          0           0           1           0
          0           0           0           1
se3 =  0.785398 -0.785398         0         0         0    1.5708
se3 hat = 
        0   -1.5708         0  0.785398
   1.5708         0        -0 -0.785398
       -0         0         0         0
        0         0         0         0
se3 hat vee =  0.785398 -0.785398         0         0         0    1.5708
SE3 updated = 
2.22045e-16          -1           0      1.0001
          1 2.22045e-16           0           0
          0           0           1           0
          0           0           0           1

Process finished with exit code 0

examples:

又依然是出现上一讲的错误:

error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
 #error This file requires compiler and library support \

CMakeLists.txt中加入:

set(CMAKE_CXX_FLAGS "-std=c++11 -O2")

编译后依然出现找不到文件错误:

trajectory ./example/groundtruth.txt not found.
trajectory ./example/estimated.txt not found.

依然和上一讲那样,将路径修改清楚后再编译执行后成功:《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)_第7张图片

课后习题

《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)_第8张图片

1.验证SO(3),SE(3)和Sim(3)关于乘法成群:参考这篇博客

2.验证(R^3,R,X)构成李代数:参考这篇

3.验证so(3)和se(3)(李代数)满足李代数雅的性质,se(3)同so(3)证明相似:参考这篇

4.验证性质(4.20)和(4.21):参考这篇

5.直观的来讲,反对称矩阵p和Rp相似,相似表示的是不同基下相同的变换,此式表达的是在以R为基的(Rp) ^变换与原变换p ^相同,公式推导在这里。参考《Lie groups ,lie algebras, projective geometry and optimization for 3d Geometry,Engineering and Computer Vision》p18:

《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)_第9张图片
6:第6题 有如下2.66性质,证明见《Lie Groups:An Introduction Through Linear Groups》
《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)_第10张图片
参考《strasdat_phd2012》Lie groups部分

7:高博课程给出了结果:
《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)_第11张图片
8:可参考本人之前关于CMake的博客,也可参考这篇。
find_package采用两种模式搜索库:
Module模式:搜索CMAKE_MODULE_PATH指定路径下的FindXXX.cmake文件,执行该文件从而找到XXX库。其中,具体查找库并给XXX_INCLUDE_DIRS和XXX_LIBRARIES两个变量赋值的操作由FindXXX.cmake模块完成。
Config模式:搜索XXX_DIR指定路径下的XXXConfig.cmake文件,执行该文件从而找到XXX库。其中具体查找库并给XXX_INCLUDE_DIRS和XXX_LIBRARIES两个变量赋值的操作由XXXConfig.cmake模块完成
可选参数例如版本控制:find_package(OpenCV 3)
先决条件是首先需要安装库:如apt-get install或者sudo make install

你可能感兴趣的:(视觉SLAM十四讲,学习笔记)