第4讲 李群和李代数

简介: 第4讲 李群和李代数

第4讲 李群和李代数


4.1 李群与李代数基础


特殊正交群SO(3)


特殊欧氏群SE(3)


4.2 指数与对数映射



4.3 李代数求导与扰动模型


李代数的导数:



扰动模型:



扰动模型更为实用


4.4 实践:Sophus


eigen提供了几何模块,但是没有提供李代数的支持


1. Sophus安装


https://blog.csdn.net/qq_39236499/article/details/122723766


2. 代码讲解


#include <iostream>
#include <cmath>
using namespace std; 
#include <Eigen/Core>
#include <Eigen/Geometry>
#include "sophus/so3.h"
#include "sophus/se3.h"
int main( int argc, char** argv )
{
    // 沿Z轴转90度的旋转矩阵
    Eigen::Matrix3d R = Eigen::AngleAxisd(M_PI/2, Eigen::Vector3d(0,0,1)).toRotationMatrix();
    Sophus::SO3 SO3_R(R);               // Sophus::SO(3)可以直接从旋转矩阵构造
    Sophus::SO3 SO3_v( 0, 0, M_PI/2 );  // 亦可从旋转向量构造
    Eigen::Quaterniond q(R);            // 或者四元数
    Sophus::SO3 SO3_q( q );
    // 上述表达方式都是等价的
    // 输出SO(3)时,以so(3)形式输出
    cout << "构造李群SO3: " << endl;
    cout << "SO(3) from matrix: " << SO3_R << endl;
    cout << "SO(3) from vector: " << SO3_v << endl;
    cout << "SO(3) from quaternion :" << SO3_q << endl;
    cout << endl;
    // 使用对数映射获得它的李代数
    Eigen::Vector3d so3 = SO3_R.log();
    cout << "对应的李代数so3 = \n" << so3 << endl;   //是向量
    // hat 为向量到反对称矩阵
    cout << "so3 hat= \n" << Sophus::SO3::hat(so3) << endl;  //是矩阵
    // 相对的,vee为反对称到向量
    cout << "so3 hat vee= \n" << Sophus::SO3::vee(Sophus::SO3::hat(so3)) << endl; //是向量
    // 增量扰动模型的更新
    Eigen::Vector3d update_so3(1e-4, 0, 0); //假设更新量为这么多
    Sophus::SO3 SO3_updated = Sophus::SO3::exp(update_so3) * SO3_R;
    cout << "增量扰动模型的更新: " << endl;
    cout << "SO3 updated = " << SO3_updated << endl;
    cout << endl;
    /********************萌萌的分割线*****************************/
    cout<<"************我是分割线*************"<<endl;
    // 对SE(3)操作大同小异
    Eigen::Vector3d t(1,0,0);           // 沿X轴平移1
    Sophus::SE3 SE3_Rt(R, t);           // 从R,t构造SE(3)
    Sophus::SE3 SE3_qt(q, t);           // 从q,t构造SE(3)
    cout << "SE3 from R,t= \n" << SE3_Rt << endl;
    cout << "SE3 from q,t= \n" << SE3_qt << endl;
    // 李代数se(3) 是一个六维向量,方便起见先typedef一下
    typedef Eigen::Matrix<double,6,1> Vector6d;
    Vector6d se3 = SE3_Rt.log();
    cout << "李代数 se3 = \n" << se3 << endl;  //6*1
    // 观察输出,会发现在Sophus中,se(3)的平移在前,旋转在后.
    // 同样的,有hat和vee两个算符
    cout << "se3 hat = \n" << Sophus::SE3::hat(se3) << endl;   //4*4
    cout << "se3 hat vee = \n" << Sophus::SE3::vee(Sophus::SE3::hat(se3)) << endl;  //6*1
    // 最后,演示一下更新
    Vector6d update_se3; //更新量
    update_se3.setZero();
    update_se3(0,0) = 1e-4d;
    Sophus::SE3 SE3_updated = Sophus::SE3::exp(update_se3) * SE3_Rt;
    cout << "SE3 updated = \n" << SE3_updated.matrix() << endl;   //4*4
    return 0;
}


相关文章
北京大学2017年高等代数与解析几何考研试题
1.$(15')$ \[x_1=x_2=1,x_n=x_{n-1}+x_{n-2}.\] 试用矩阵论方法给出$x_n$通项. 2.$(15')$ $\alpha,\beta$为欧氏空间$V$中两个长度相等的向量.
973 0
北京大学2016年高等代数与解析几何考研试题
本文来自TangSong.   1. $(10')$ 在 $\bbR^3$ 上定义线性变换 $\scrA,\ \scrA$ 在自然基 \[\varepsilon_1=\left(\begin{array}{c} 1\\ 0\\ 0\end{array}\right),\varepsilon_2=...
977 0
[再寄小读者之数学篇](2014-06-23 积分不等式 [中国科学技术大学2013年高等数学B 考研试题])
设 $f(x)$ 在 $[a,b]$ 上一阶连续可导, $f(a)=0$. 证明: $$\bex \int_a^b f^2(x)\rd x\leq \cfrac{(b-a)^2}{2}\int_a^b [f'(x)]^2\rd x -\cfrac{1}{2}\int_a^b [f'(x)]^2 (x-a)^2\rd x.
749 0
[再寄小读者之数学篇](2014-06-23 二阶导数估计 [中国科学技术大学2013年高等数学B 考研试题])
设 $f(x)$ 二阶连续可导, $f(0)=f(1)=0$, $\dps{\max_{0\leq x\leq 1}f(x)=2}$. 证明: $$\bex \min_{0\leq x\leq 1}f''(x)\leq -16.
765 0
[再寄小读者之数学篇](2014-06-22 积分不等式 [中国科学技术大学2012年高等数学B考研试题])
函数 $f(x)$ 在 $[0,1]$ 上单调减, 证明: 对于任何 $\al\in (0,1)$, $$\bex \int_0^\al f(x)\rd x\geq \al \int_0^1 f(x)\rd x.
1123 0
[再寄小读者之数学篇](2014-06-22 不等式 [中国科学技术大学2011年高等数学B考研试题])
证明不等式: $$\bex 1+x\ln\sex{x+\sqrt{1+x^2}}>\sqrt{1+x^2},\quad x>0. \eex$$   证明: 令 $x=\tan t,\ 0
908 0
[再寄小读者之数学篇](2014-06-22 最大值点处导数为零的应用 [中国科学技术大学2012 年高等数学B考研试题])
设 $f(x)$ 在 $[0,1]$ 上连续, 在 $(0,1)$ 内可导, 且 $f(0)=f(1)=0$, $f\sex{\cfrac{1}{2}}=1$. 证明:对于任意的实数 $\lm$, 一定存在 $\xi\in (0,1)$, 使得 $$\bex f'(\xi)-\lm f(\xi)+\lm f(\xi)=1.
1101 0
[再寄小读者之数学篇](2014-06-22 求导数 [中国科学技术大学2014年高等数学B考研试题])
设 $f(x)=x^2\ln(x+1)$, 求 $f^{(n)}(0)$.   解答: 利用 Leibniz 公式易知 $f'(0)=f''(0)=0$, $f^{(n)}(0)=(-1)^{n-3} n(n-1)\ (n\geq 3)$.
925 0
[再寄小读者之数学篇](2014-06-22 发散级数 [中国科学技术大学2012年高等数学B考研试题])
设 $a_n>0$, $S_n=a_1+a_2+\cdots+a_n$, 级数 $\dps{\vsm{n}a_n}$ 发散, 证明: $\dps{\vsm{n}\cfrac{a_n}{S_n}}$ 发散.
695 0

热门文章

最新文章