我是靠谱客的博主 拼搏鱼,最近开发中收集的这篇文章主要介绍SLAM学习笔记(Code4)——李群李代数-Sophus库,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Sophus库:支持三维SO(3),SE(3),二维SO(2),SE(2),相似变换Sim(3)

3.1头文件

/*****通用*****/
#include <iostream>
#include <cmath>
/*****Sophus以Eigen库为基础开发*****/
#include <Eigen/Core>
#include <Eigen/Geometry>
#include <sophus/so3.h>
#include <sophus/se3.h>

3.2命名空间

/*****通用*****/
using namespace std;
/*****其他*****/
using namespace Eigen;
using namespace Sophus;

3.3定义

//李群
/*****特殊正交群(3x3)*****/
SO3 SO3_R;//直接输出是行向量so3.transpose()
SO3d SO3_R;//double型
/*****特殊欧式群(4x4)*****/
SE3 SE3_Rt;//直接输出是so3.transpose()n t.transpose()
//李代数
/*****so3(3维列向量)*****/
Vector3d so3;
/*****se3(6维列向量)*****/
Matrix<double,6,1> se3;
typedef Matrix<double,6,1> Vector6d;//可以先加入新定义
Vector6d se3;

3.4赋值

3.4.1定义时赋值

Matrix3d R = AngleAxisd(M_PI/2,Vector3d(0,0,1)).toRotationMatrix();//先定义一个旋转矩阵
Quaterniond q(R);
/*****SO3*****/
SO3 SO3_R(R);
SO3 SO3_q(q);
/*****so3*****/
Vector3d so3 = SO3_R.log();
/*****SE3*****/
SE3 SE3_Rt(R,t);
SE3 SE3_qt(q,t);
/*****se3*****/
Matrix<double,6,1> se3 = SE3.log();

3.4.2先定义后赋值

/*****SO3*****/
SO3 SO3_R;
SO3_R = SO3(R);
/*****so3*****/
Vector3d so3;
so3 = SO3.log();
/*****SE3*****/
SE3 SE3_Rt;
SE3_Rt = SE3(R,t);
/*****se3*****/
typedef Matrix<double,6,1> Vector6d;
Vector6d se3;
se3 = SE3_Rt.log();

3.5反对称阵的转化(用于叉乘)

/*****转化为反对称阵*****/
Matrix3d so3_hat = SO3::hat(so3);
cout<<so3_hat<<endl;
cout<<SO3::hat(so3)<<endl;
Matrix4d se3_hat = SE3::hat(se3);
cout<<se3_hat<<endl;
cout<<SE3::hat(se3)<<endl;
/*****反对称阵转化为李代数*****/
Vector3d so3_hat_vee = SO3::vee(so3_hat);
Vector6d se3_hat_vee = SE3::vee(se3_hat);
/*****李代数到李群*****/
SO3_R = SO3::exp(so3_hat);//error!!!
SO3_R = SO3::exp(so3);//True
SE3_Rt = SE3::exp(se3_hat);//error!!
SE3_Rt = SE3::exp(se3);//True

3.6输出

cout<<SO3_R<<endl;//输出李代数so3的转置
cout<<SO3_R.matrix()<<endl;//输出李群形式
cout<<SE3_Rt<<endl;//第一行输出so3.transpose(),第二行输出t.transpose()
cout<<SE3_Rt.matrix()<<endl;

3.7变换矩阵的更新(左乘!)

Vector6d updata_se3;
updata_se3.setZero();//初始化
updata_se3(0,0) = 1e-4d;//给第一个元素赋值
SE3 SE3_updated = SE3::exp(updata_se3)*SE3_Rt;//左乘以更新

最后

以上就是拼搏鱼为你收集整理的SLAM学习笔记(Code4)——李群李代数-Sophus库的全部内容,希望文章能够帮你解决SLAM学习笔记(Code4)——李群李代数-Sophus库所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部