当前位置: 首页 > news >正文

视觉Slam14讲笔记第4讲李群李代数【更新中】

一、李群李代数

二、使用示例

注意:
1.如果报编译Sophus报错: error: implicitly-declared
解决对策:在CMakeLists.txt中加入

set(CMAKE_CXX_FLAGS "-Wno-error=deprecated-declarations -Wno-deprecated-declarations ")

在这里插入图片描述
2.如果编译useSophus时报错:/usr/local/include/sophus/common.hpp:11:10: fatal error: Eigen/Core:
确保正确安装Eigen的前提下

sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen```**代码部分**```cpp
#include <cmath>
#include <eigen3/Eigen/Core>
#include <eigen3/Eigen/Geometry>
#include <iostream>#include "sophus/se3.hpp"using namespace std;
using namespace Eigen;////本程序演示Sophus的使用方法
int main(int argc, char **argv) {// 沿Z轴旋转90度的旋转矩阵Matrix3d R = AngleAxisd(M_PI_2, Vector3d(0, 0, 1)).toRotationMatrix();// 或者四元素Quaterniond q(R);Sophus::SO3d SO3_R(R);  // Sophus::SO3d可以直接从旋转矩阵构造Sophus::SO3d SO3_q(q);  // 也可以从四元素构造// 二者是等价的cout << "SO(3) from matrix: \n" << SO3_R.matrix() << endl;cout << "SO(3) from quaternion: \n" << SO3_q.matrix() << endl;cout << "they are equal " << endl;// 使用对数映射获得它的李代数Vector3d so3 = SO3_R.log();cout << "so3 = " << so3.transpose() << endl;// hat 为向量反对阵矩阵cout << "so3 hat = " << Sophus::SO3d::hat(so3) << endl;// 相对的,vee为反对阵的向量cout << "so3 hat vee = "<< Sophus::SO3d::vee(Sophus::SO3d::hat(so3)).transpose() << endl;// 增量扰动模型的更新Vector3d update_so3(1e-4, 0, 0);  // 假设更新量为1e-4Sophus::SO3d SO3_updated = Sophus::SO3d::exp(update_so3) * SO3_R;cout << "SO3 updated = \n" << SO3_updated.matrix() << endl;cout << "**************************************" << endl;// 对SE(3)操作大同小异Vector3d t(1, 0, 0);        // 沿X轴平移1Sophus::SE3d SE3_Rt(R, t);  // 从R,t构造SE(3)Sophus::SE3d SE3_qt(q, t);  // 从q,t构造SE(3)cout << "SE3 from R,t: \n" << SE3_Rt.matrix() << endl;cout << "SE3 from q,t: \n" << SE3_qt.matrix() << endl;cout << "they are equal " << endl;// 李代数se(3)是一个六维向量,方便一下先typedef一下typedef Eigen::Matrix<double, 6, 1> Vector6d;Vector6d se3 = SE3_Rt.log();cout << "se3 = " << se3.transpose() << endl;// 观察输出,会发现在Sophus中,se(3)的平移在前,旋转在后// 同样的,有hat和vee运算符cout << "se3 hat = \n" << Sophus::SE3d::hat(se3) << endl;cout << "se3 hat vee = "<< Sophus::SE3d::vee(Sophus::SE3d::hat(se3)).transpose() << endl;// 演示更新Vector6d update_se3;update_se3.setZero();update_se3(0, 0) = 1e-4;Sophus::SE3d SE3_updated = Sophus::SE3d::exp(update_se3) * SE3_Rt;cout << "SE3 updated = \n" << SE3_updated.matrix() << endl;return 0;
}

输出结果如下:

SO(3) from matrix: 
2.22045e-16          -1           01 2.22045e-16           00           0           1
SO(3) from quaternion: 
2.22045e-16          -1           01 2.22045e-16           00           0           1
they are equal 
so3 =      0      0 1.5708
so3 hat =       0 -1.5708       01.5708       0      -0-0       0       0
so3 hat vee =      0      0 1.5708
SO3 updated = 0          -1           01           0     -0.00010.0001 2.03288e-20           1
**************************************
SE3 from R,t: 
2.22045e-16          -1           0           11 2.22045e-16           0           00           0           1           00           0           0           1
SE3 from q,t: 
2.22045e-16          -1           0           11 2.22045e-16           0           00           0           1           00           0           0           1
they are equal 
se3 =  0.785398 -0.785398         0         0         0    1.5708
se3 hat = 0   -1.5708         0  0.7853981.5708         0        -0 -0.785398-0         0         0         00         0         0         0
se3 hat vee =  0.785398 -0.785398         0         0         0    1.5708
SE3 updated = 
2.22045e-16          -1           0      1.00011 2.22045e-16           0           00           0           1           00           0           0           1
http://www.dtcms.com/a/391028.html

相关文章:

  • 【无人机】ardupilot事项笔记
  • 大端模式与小端模式
  • Openwrt 平台下移植rk3568 rknn_yolov5_demo 应用程序问题分析
  • Dioxus后端代码
  • 概念篇:ReactJS + AppSync + DynamoDB 性能优化核心概念
  • 实践篇:ReactJS + AppSync + DynamoDB 性能优化实践
  • GPS 定位:守护财产安全的 “隐形防盗锁”
  • Vue3 + Three.js 进阶实战:批量 3D 模型高效可视化、性能优化与兼容性解决方案
  • 海外VPS索引版本兼容性检查,版本兼容问题检测与多系统适配方法
  • uniapp 常用
  • C语言入门教程 | 阶段一:基础语法讲解(数据类型与运算符)
  • 现代AI工具深度解析:从GPT到多模态的技术革命与实战应用
  • 自由学习记录(101)
  • 2025最新口红机防篡改版本源码
  • Unity2D-图片导入设置
  • 今日赛事前瞻:德甲:斯图加特VS圣保利,意甲:莱切VS卡利亚里
  • AWS CloudTrail 监控特定 SQS 队列事件完整配置指南
  • 【算法】【优选算法】BFS 解决 FloodFill 算法
  • 量化交易 - Stochastic Gradient Descent Regression (SGDRegressor) 随机梯度下降回归 - 机器学习
  • AWS WAF防护IoT设备劫持攻击:智能设备安全防护实践
  • 分享mysql数据库自动备份脚本(本机和docker都可用)
  • avue crud表头跨列
  • 鸿蒙网络优化实战:从智能切换到缓存加速的完整指南
  • Redis-实现分布式锁
  • 软件工程实践五:Spring Boot 接口拦截与 API 监控、流量控制
  • 【LINUX网络】NAT _ 代理_ 内网穿透
  • 智慧养老+数字大健康:当科技为“银发时代”按下温暖加速键
  • rook-ceph的ssd类osd的纠删码rgw存储池在迁移时的异常处理
  • Http升级Https使用Certbot申请证书并免费续期
  • scTenifoldKnk:“虚拟敲除基因”,查看转录组其他基因的变化幅度(升高or降低)