第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;
}


目录
相关文章
无法理解高等数学怎么办?
我们学高等数学的时1候是这样的: 这当然学不懂了,跨度太大了。这个锅,教材(对,说的就是同济《高等数学》)肯定得背。 1 应该怎么学习? 学习应该循序渐进,意思就是,应该从已有的知识出发,保持足够小的步伐前进。
1490 0
|
Perl 人工智能
跟锦数学2017年05月
(170501) 证明: 当 $m\sqrt{1+x^2},\quad x>0. \eex$$       (170513) 设数列 $\sed{x_n}$ 满足 $00,\st \\ \sen{x}\leq 1,\ \sen{y}\leq 1,\ \sen{x-y}\geq \ve\ra \sen{x+y}\leq 2(1-\del).
1156 0
|
Perl
跟锦数学2017年04月
(170430) 令 $\dps{B(m,n)=\sum_{k=0}^n C_n^k \frac{(-1)^k}{m+k+1}}$, $m,n\in\bbN^+$. (1) 证明 $B(m,n)=B(n,m)$; (2) 计算 $B(m,n)$.
1091 0
|
资源调度 Perl
跟锦数学2017年03月
(170331) [南开大学 2014 年高等代数考研试题] 设 $\sigma,\tau$ 为线性变换, 且 $\sigma$ 有 $n$ 个不同的特征值. 证明: 若 $\sigma\tau=\tau\sigma$, 则 $\tau$ 可由 $I$, $\sigma$, $\sigma^2$, $\cdots$, $\sigma^{n-1}$ 线性表出, 其中 $I$ 为恒等变换.
1076 0
跟锦数学2017年02月
(170228) 已知 $c^2-4ab\neq 0$, 计算行列式 $$\bex \sevm{ c&a&&&\\ b&c&a&&\\ &\ddots&\ddots&\ddots&\\ &&b&c&a\\ &&&b&c }.
840 0
跟锦数学2017年01月
(170131) 设 $u$ 为 $n$ 维欧氏空间 $\bbR^5$ 中的单位向量, 定义 $T_u(x)=x-2\sef{x,u}u$. 现设 $\al,\be$ 是 $\bbR^5$ 中线性无关的两个单位向量, 问当 $\al,\be$ 满足什么条件时, 存在正整数 $k$ 使得 $(T_\al T_\be)^k$ 为单位映射.
1260 0
|
机器学习/深度学习 资源调度 Perl
跟锦数学2016年
(161231) 已知函数 $f(x)$ 的反函数是 $\varphi(y)$, 写出用 $f',f'',f'''$ 表示 $\varphi'$, $\varphi''$, $\varphi'''$ 的表达式.
913 0
跟锦数学2016-2017年
跟锦数学   购买方式: 直接点击 solution 链接购买; 或者整本电子版购买, 点击链接查看.   跟锦数学 (Following Mathematics, 简称 FM)专注于大学数学问题 (最好是考研试题) 的解答.
1013 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.
789 0