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

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

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

李群(Lie Group):

  • 具有连续(光滑)性质的群。
  • 既是群也是流形。
  • 直观上看,一个刚体能够连续地在空间中运动,故SO(3)和SE(3)都是李群。但是,SO(3)和SE(3)只有定义良好的乘法,没有加法,所以难以进行取极限、求导等操作。
李代数:与李群对应的一种结构,位于向量空间。
  • 通常记作小写的so(3)和se(3)。书中以哥特体突出显示。
  • 事实上是李群单位元处的正切空间。
视觉SLAM十四讲|《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)
文章图片

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

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

实践部分 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十四讲|《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)
文章图片

具体结果如下:
/home/wh/shenlan/slambook2/ch4/cmake-build-debug/useSophus SO(3) from matrix: 2.22045e-16-10 1 2.22045e-160 001 SO(3) from quaternion: 2.22045e-16-10 1 2.22045e-160 001 they are equal so3 =00 1.5708 so3 hat= 0 -1.57080 1.57080-0 -000 so3 hat vee=00 1.5708 SO3 updated = 0-10 10-0.0001 0.0001 2.03288e-201 ******************************* SE3 from R,t= 2.22045e-16-101 1 2.22045e-1600 0010 0001 SE3 from q,t= 2.22045e-16-101 1 2.22045e-1600 0010 0001 se3 =0.785398 -0.7853980001.5708 se3 hat = 0-1.570800.785398 1.57080-0 -0.785398 -0000 0000 se3 hat vee =0.785398 -0.7853980001.5708 SE3 updated = 2.22045e-16-101.0001 1 2.22045e-1600 0010 0001Process 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十四讲|《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)
文章图片

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

1.验证SO(3),SE(3)和Sim(3)关于乘法成群:参考这篇博客
2.验证(R^3,R,X)构成李代数:参考这篇
3.验证so(3)和se(3)(李代数)满足李代数雅的性质,se(3)同so(3)证明相似:参考这篇
【视觉SLAM十四讲|《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)】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十四讲|《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)
文章图片

6:第6题 有如下2.66性质,证明见《Lie Groups:An Introduction Through Linear Groups》
视觉SLAM十四讲|《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)
文章图片

参考《strasdat_phd2012》Lie groups部分
7:高博课程给出了结果:
视觉SLAM十四讲|《视觉SLAM十四讲 第二版》笔记及课后习题(第四讲)
文章图片

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

    推荐阅读