• 【视觉SLAM十四讲】学习笔记-第三讲


    其他章节:
        第二讲:初识SLAM

    三维空间刚体运动

            本讲介绍视觉SLAM的基本问题之一:一个刚体在三维空间中的运动是如何描述的。

    旋转矩阵

            为了用数学语言描述物体的坐标,引入点和向量:在一个确定的坐标系下,也就是一个线性空间的基为 ( e 1 , e 2 , e 3 ) (e_1,e_2,e_3) (e1,e2,e3),那么向量 a a a的坐标为:
    a = [ e 1 , e 2 , e 3 ] [ a 1 a 2 a 3 ] = a 1 e 1 + a 2 e 2 + a 3 e 3 a=[e_1,e_2,e_3]

    [a1a2a3]" role="presentation" style="position: relative;">[a1a2a3]
    = a_1e_1 + a_2e_2 + a_3e_3 a=[e1,e2,e3] a1a2a3 =a1e1+a2e2+a3e3
            描述两个坐标系之间的旋转后平移的关系,统称为坐标系之间的变换关系。而欧式变换指的是:同一个向量在各个坐标系下的长度和夹角都不会发生变化。
            设某个单位正交基 ( e 1 , e 2 , e 3 ) (e_1,e_2,e_3) (e1,e2,e3)经过一次选择变成了 ( e 1 ′ , e 2 ′ , e 3 ′ ) (e_1',e_2',e_3') (e1,e2,e3)
    ,对于同一个向量 a a a在两个坐标系下的坐标为 [ a 1 , a 2 , a 3 ] T [a_1,a_2,a_3]^T [a1,a2,a3]T [ a 1 ′ , a 2 ′ , a 3 ′ ] T [a_1',a_2',a_3']^T [a1,a2,a3]T。根据坐标的定义:
    在这里插入图片描述
            同时左乘 e T e^T eT,得到了矩阵 R R R,也就是旋转矩阵。
    在这里插入图片描述
            根据旋转矩阵的性质,可定义旋转矩阵的集合,也就是特殊正交群:
    S O ( n ) = { R ∈ R n ∗ n ∣ R R T = I , d e t ( R ) = 1 } SO(n)=\{R \in \Reals^{n\ast n} | RR^T = I, det(R) = 1\} SO(n)={RRnnRRT=I,det(R)=1}

    关于旋转矩阵是正交矩阵的证明,可以看:证明:旋转矩阵是正交矩阵

            在欧氏变换中,除了旋转之外还有平移。那么世界坐标系中的向量 a a a经过一次旋转( R R R)和一次平移( t t t)后,得到了 a ′ a' a,即: a ′ = R A + t a'=RA+t a=RA+t。其中, t t t称为平移向量。
            由于多次变换会导致形式越来越复杂, 因此,引入齐次坐标和变换矩阵重写式,这样的话就把旋转和平移写在同一个矩阵里了。其中, T T T称为变换矩阵,记 a ~ = [ a 1 ] \widetilde{a} = {a \brack 1} a =[1a]
    在这里插入图片描述

    旋转向量与欧拉角

            虽然已经有旋转矩阵,但是有表达冗余和正交矩阵的约束的缺点,因此,引入轴角来刻画。首先,旋转向量:使用一个向量,其方向与旋转轴一致,而长度等于旋转角。
            转换关系由罗德里格斯公式表明:
    在这里插入图片描述
            转角 θ = a r c c o s ( t r ( R ) − 1 2 ) \theta=arccos(\frac{tr(R)-1}{2}) θ=arccos(2tr(R)1);旋转轴 R n = n Rn=n Rn=n

            欧拉角是吧一个旋转分解成三次绕不同轴的旋转,比较常见的使用“偏航-俯仰-滚转(yaw-pitch-roll)”来描述

    四元数

            四元数是一种扩展的复数,有三个虚部,可以表达三维空间中的旋转: q = q 0 + q 1 i + q 2 j + q 3 k q=q_0+q_1i+q_2j+q_3k q=q0+q1i+q2j+q3k,有时候也用一个标量和一个向量来表达: q = [ s , v ] , s = q 0 ∈ R , v = [ q 1 , q 2 , q 3 ] T ∈ R 3 q=[s,v], s=q_0 \in R, v=[q_1,q_2,q_3]^T \in R^3 q=[s,v],s=q0R,v=[q1,q2,q3]TR3
            虚部之间的关系:
    在这里插入图片描述

    小结表格来源:高翔视觉slam十四讲书籍习题(第三讲)

    在这里插入图片描述

    实践

    Eigen

            编程部分参考书,里面每个部分都有很详细的解释,CMakeLists的写法可以参考官方代码仓库:

    cmake_minimum_required( VERSION 2.8 )
    project( useEigen )
    
    set( CMAKE_BUILD_TYPE "Release" )
    set( CMAKE_CXX_FLAGS "-O3" )
    
    # 添加Eigen头文件
    include_directories( "/usr/include/eigen3" )
    
    add_executable( eigenMatrix eigenMatrix.cpp )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

            使用cmake .生成Makefile,再用make编译。
    在这里插入图片描述
            运行结果如下,为了便于理解,多加了一些解释性的输出:
    在这里插入图片描述

    Eigen几何模块

            运行结果如下:
    在这里插入图片描述

  • 相关阅读:
    RMQ类问题利器:线段树
    淘宝/天猫API:item_search_similar-搜索相似的商品
    几点建议,帮您做好线上价格监测
    简析CloudCompare文件夹之间的关系
    MindSpore Graph Learning
    基于SpringBoot的飘香水果购物网站
    线程池创建、执行、销毁的原理解析
    能率携手梦想改造家,打造适老化住宅新典范
    什么是分子优化(Molecule Optimization)以及相关论文
    微软开发新模型;YouTube 推出新AI功能;可折叠iPhone 或发布?
  • 原文地址:https://blog.csdn.net/weixin_43476037/article/details/126800682