news 2026/7/23 4:43:47

Slam14讲学习,再新版本的sophus的ch4代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Slam14讲学习,再新版本的sophus的ch4代码

1.修改后的代码

#include <iostream> #include <cmath> #include <Eigen/Core> #include <Eigen/Geometry> #include <sophus/so3.hpp> #include <sophus/se3.hpp> using namespace std; using namespace Eigen; int main(int argc, char **argv) { // 旋转矩阵 (绕Z轴旋转90度) Matrix3d R = AngleAxisd(M_PI / 2, Vector3d(0, 0, 1)).toRotationMatrix(); // 四元数 Quaterniond q(R); // 平移向量 // ---------- SO(3) ---------- // 从旋转矩阵构造 Sophus::SO3<double> SO3_R(R); // 从旋转向量构造 (使用指数映射) Vector3d v(0, 0, M_PI / 2); Sophus::SO3<double> SO3_v = Sophus::SO3<double>::exp(v); // 从四元数构造 Sophus::SO3<double> SO3_q(q); // 输出时需转换为矩阵或对数 cout << "SO(3) from matrix:\n" << SO3_R.matrix() << endl; cout << "SO(3) from vector (exp):\n" << SO3_v.matrix() << endl; cout << "SO(3) from quaternion:\n" << SO3_q.matrix() << endl; // 对数映射 (李代数) Vector3d so3 = SO3_R.log(); cout << "so3 = " << so3.transpose() << endl; // hat 和 vee cout << "so3 hat =\n" << Sophus::SO3<double>::hat(so3) << endl; cout << "so3 hat vee = " << Sophus::SO3<double>::vee(Sophus::SO3<double>::hat(so3)).transpose() << endl; // 扰动更新 (左乘) Vector3d update_so3(1e-4, 0, 0); Sophus::SO3<double> SO3_updated = Sophus::SO3<double>::exp(update_so3) * SO3_R; cout << "SO3 updated matrix:\n" << SO3_updated.matrix() << endl; cout<<"************我是分割线*************"<<endl; // ---------- SE(3) ---------- Vector3d t(1, 0, 0); Sophus::SE3<double> SE3_Rt(R, t); // 从 R, t 构造 Sophus::SE3<double> SE3_qt(q, t); // 从 q, t 构造 cout << "SE3 from R,t (matrix):\n" << SE3_Rt.matrix() << endl; cout << "SE3 from q,t (matrix):\n" << SE3_qt.matrix() << endl; // 李代数 se(3) typedef Matrix<double, 6, 1> Vector6d; Vector6d se3 = SE3_Rt.log(); cout << "se3 = " << se3.transpose() << endl; // hat 和 vee cout << "se3 hat =\n" << Sophus::SE3<double>::hat(se3) << endl; cout << "se3 hat vee = " << Sophus::SE3<double>::vee(Sophus::SE3<double>::hat(se3)).transpose() << endl; // 扰动更新 Vector6d update_se3 = Vector6d::Zero(); update_se3(0) = 1e-4; Sophus::SE3<double> SE3_updated = Sophus::SE3<double>::exp(update_se3) * SE3_Rt; cout << "SE3 updated matrix:\n" << SE3_updated.matrix() << endl; return 0; }

CMakeList.txt

cmake_minimum_required( VERSION 3.10 ) project( useSophus ) # Sophus set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Eigen3 REQUIRED) find_package( Sophus REQUIRED ) add_executable( useSophus useSophus.cpp ) # 现代写法:自动带入头文件路径+依赖,不需要手动include_directories target_link_libraries( useSophus Sophus::Sophus )

2. 修改不同

方面原始代码(书中)修正后代码(适配新版)
类型声明Sophus::SO3 R;(无模板参数)Sophus::SO3<double> R;(必须指定标量类型)
从旋转向量构造Sophus::SO3 SO3_v(0, 0, M_PI/2);改为auto SO3_v = Sophus::SO3<double>::exp(Vector3d(0,0,M_PI/2));(使用指数映射)
输出对象cout << SO3_R << endl;(直接流输出)cout << SO3_R.matrix() << endl;(调用.matrix().log()等)
静态方法调用Sophus::SO3::hat(so3)Sophus::SO3<double>::hat(so3)(也要加模板参数)
头文件#include <sophus/so3.h>#include <sophus/so3.hpp>(但新版也兼容.h旧名,更推荐.hpp
C++ 标准默认 C++11/14必须在 CMake 中设置CMAKE_CXX_STANDARD 17
依赖项仅需 Eigen额外需要fmt库(新版依赖
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/23 4:43:20

TMS570LC4357-EP内存管理与系统互连:从MasterID到ECC的实战解析

1. 项目概述&#xff1a;从芯片手册到实战理解每次拿到一款新的微控制器&#xff0c;尤其是像TI TMS570LC4357-EP这种面向功能安全的高性能MCU&#xff0c;我习惯先翻到系统架构和内存管理相关的章节。这就像看一座大楼的施工蓝图&#xff0c;不先搞清楚承重墙、水电管道和消防…

作者头像 李华
网站建设 2026/7/23 4:42:48

HybridSim:毫米波雷达人体感知的数字孪生仿真平台实践

如果你正在开发基于毫米波雷达的人体感知应用&#xff0c;可能已经体会过数据采集的艰辛&#xff1a;租用专业设备、招募测试人员、处理海量原始信号数据……整个过程既耗时又昂贵。更让人头疼的是&#xff0c;一旦部署环境发生变化&#xff0c;模型性能就可能大幅下降。这正是…

作者头像 李华
网站建设 2026/7/23 4:40:49

达梦数据库单机主备集群搭建实战指南

1. 前言达梦数据库&#xff08;DM Database&#xff09;作为国产数据库的代表&#xff0c;其高可用方案是保障业务连续性的关键。主备集群&#xff08;DataWatch&#xff09;是达梦数据库实现高可用的核心组件&#xff0c;通过实时同步数据&#xff0c;在主库故障时能够快速切换…

作者头像 李华
网站建设 2026/7/23 4:32:49

灰狼优化与AdaBoost混合CNN训练方法解析

1. 项目背景与核心价值在深度学习领域&#xff0c;优化算法的选择直接影响模型性能。传统梯度下降法容易陷入局部最优&#xff0c;而群体智能算法虽具全局搜索能力却收敛缓慢。这项研究创新性地将灰狼优化(GWO)与AdaBoost集成到CNN训练中&#xff0c;形成混合优化器&#xff0c…

作者头像 李华
网站建设 2026/7/23 4:32:01

深入理解 Java 动态绑定原理

1. 什么是动态绑定动态绑定&#xff08;Dynamic Binding&#xff09;&#xff0c;也称为后期绑定&#xff08;Late Binding&#xff09;或运行时绑定&#xff08;Runtime Binding&#xff09;&#xff0c;是面向对象编程中多态性的核心实现机制。在 Java 中&#xff0c;它指的是…

作者头像 李华
网站建设 2026/7/23 4:29:08

德钟壶稳坐茶席,红紫窑变自有分量

钟腹稳茶台&#xff0c; 红紫绕壶身。 火色虽浓重&#xff0c; 端坐自安然。 德钟壶讲究的是一个“稳”字。壶身饱满&#xff0c;重心落得低&#xff0c;壶嘴与壶把左右舒展&#xff0c;整把壶像稳稳坐在茶席上。 这份端正&#xff0c;正好承住了红紫窑变的浓厚。颜色再丰富&am…

作者头像 李华