cartographer源码阅读三-sensor_bridge
这个类涉及到两个类Rigid3d和TfBridgeRigid3d类实现了一个3 维刚体变换类Rigid3vector Eigen 库中的 3x1 列向量用于存储3 维平移量x、y、z 坐标QuaternionEigen 库中的四元数用于存储3 维旋转姿态相比旋转矩阵四元数更节省内存、避免万向锁问题插值更平滑AngleAxisEigen 库中的轴角表示也是一种旋转表示方式一个旋转轴 一个旋转角度可以直接转换为四元数。提供了 3 种构造方式满足不同场景的初始化需求核心是初始化两个私有成员translation_平移和rotation_旋转。后面声明了几个静态成员函数static修饰成员函数就代表即使没有实例对象也可以调用using Rigid2d Rigid2double; using Rigid2f Rigid2float; template typename FloatType class Rigid3 { public: using Vector Eigen::MatrixFloatType, 3, 1; using Quaternion Eigen::QuaternionFloatType; using AngleAxis Eigen::AngleAxisFloatType; // 默认构造函数平移为零向量旋转为单位四元数无旋转 Rigid3() : translation_(Vector::Zero()), rotation_(Quaternion::Identity()) {} // 带参数构造函数传入平移向量和四元数旋转 Rigid3(const Vector translation, const Quaternion rotation) : translation_(translation), rotation_(rotation) {} // 带参数构造函数传入平移向量和轴角旋转内部自动转换为四元数存储 Rigid3(const Vector translation, const AngleAxis rotation) : translation_(translation), rotation_(rotation) {} static Rigid3 Rotation(const AngleAxis angle_axis) { return Rigid3(Vector::Zero(), Quaternion(angle_axis)); } static Rigid3 Rotation(const Quaternion rotation) { return Rigid3(Vector::Zero(), rotation); } static Rigid3 Translation(const Vector vector) { return Rigid3(vector, Quaternion::Identity()); } static Rigid3 FromArrays(const std::arrayFloatType, 4 rotation, const std::arrayFloatType, 3 translation) { return Rigid3(Eigen::Mapconst Vector(translation.data()), Eigen::QuaternionFloatType(rotation[0], rotation[1], rotation[2], rotation[3])); } static Rigid3FloatType Identity() { return Rigid3FloatType(); } template typename OtherType Rigid3OtherType cast() const { return Rigid3OtherType(translation_.template castOtherType(), rotation_.template castOtherType()); } const Vector translation() const { return translation_; } const Quaternion rotation() const { return rotation_; } // T [R t] T^-1 [R^-1 -R^-1 * t] // [0 1] [0 1 ] // R是旋转矩阵, 特殊正交群, 所以R^-1 R^T Rigid3 inverse() const { const Quaternion rotation rotation_.conjugate(); const Vector translation -(rotation * translation_); return Rigid3(translation, rotation); } std::string DebugString() const { return absl::Substitute({ t: [$0, $1, $2], q: [$3, $4, $5, $6] }, translation().x(), translation().y(), translation().z(), rotation().w(), rotation().x(), rotation().y(), rotation().z()); } bool IsValid() const { return !std::isnan(translation_.x()) !std::isnan(translation_.y()) !std::isnan(translation_.z()) std::abs(FloatType(1) - rotation_.norm()) FloatType(1e-3); } private: Vector translation_; Quaternion rotation_; };

相关新闻

# RK3576 平台 RTC 时钟调试全过程

# RK3576 平台 RTC 时钟调试全过程

## 概述本文档记录了在 RK3576 平台上调试 RTC(Real-Time Clock)外设的完整过程,重点解决了 AP6256 WiFi/蓝牙模块所需的 32.768kHz 低频时钟配置问题。## 一、问题背景### 1.1 硬件环境以及原理图- **SoC**: Rockchip RK3576 - **开发板**: …

2026/7/10 1:23:46 阅读更多 →
depcheck 依赖检测

depcheck 依赖检测

depcheck是Node.js 项目专属的依赖检测工具,核心作用是静态分析项目代码与package.json,自动找出未使用、缺失、冗余的依赖,解决项目迭代中依赖臃肿(装了没用)、漏装依赖(代码用了但没在package.json声明&a…

2026/7/3 15:23:01 阅读更多 →
SeqGPT-560M效果展示:同一段法律条文多次运行输出完全一致的稳定性验证

SeqGPT-560M效果展示:同一段法律条文多次运行输出完全一致的稳定性验证

SeqGPT-560M效果展示:同一段法律条文多次运行输出完全一致的稳定性验证 1. 为什么“结果一致”在法律场景里不是加分项,而是底线? 你有没有试过用AI处理合同、判决书或监管文件? 第一次跑出来一个结果,第二次又不一样…

2026/7/7 21:42:29 阅读更多 →

最新新闻

计算机大数据毕设实战-基于 Django 的音乐点播数据可视化管理系统的设计与实现 基于 Django 的热门音乐榜单挖掘分析系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

计算机大数据毕设实战-基于 Django 的音乐点播数据可视化管理系统的设计与实现 基于 Django 的热门音乐榜单挖掘分析系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/10 2:22:09 阅读更多 →
AI赋能数据治理:从元数据管理到质量管控的实战路径

AI赋能数据治理:从元数据管理到质量管控的实战路径

1. 项目概述:当数据治理遇上AI,一场效率革命数据治理,这个听起来有点“古板”和“流程化”的领域,正在被AI技术悄然重塑。过去,我们谈数据治理,脑海里浮现的往往是成堆的文档、复杂的血缘关系图、永无止境的…

2026/7/10 2:22:09 阅读更多 →
千万别乱译!日本护照翻译正确办理方式、收费及避坑大全

千万别乱译!日本护照翻译正确办理方式、收费及避坑大全

内容摘要:日本护照翻译可可通过线上正规小程序办理,只需上传护照材料,填写需求、在线缴费,完成后即可获取电子翻译件,需要纸质版可直接邮寄到家。线下需前往实体翻译门店现场办理,翻译完成可再次前往店铺领…

2026/7/10 2:18:08 阅读更多 →
AI函数调用:Function Calling从理论到实战全解析

AI函数调用:Function Calling从理论到实战全解析

📌 前言 随着大语言模型(LLM)的快速发展,我们发现纯文本对话模式下的 AI 存在明显的能力边界:它不知道今天的天气、查不到实时股价、算不出复杂的数学公式、更操作不了你电脑上的文件。 Function Calling&#xff08…

2026/7/10 2:18:08 阅读更多 →
OpenClaw:面向本地AI基建的Node.js命令行优先管理平台

OpenClaw:面向本地AI基建的Node.js命令行优先管理平台

1. 项目概述:这不是又一个“点几下就跑起来”的玩具面板OpenClaw(中文圈习惯叫它“龙虾”)不是 Docker Compose 一键拉起、改两行 env 就能当生产环境用的轻量前端工具。它是一个基于 Node.js 构建、面向本地 AI 应用全生命周期管理的命令行优…

2026/7/10 2:18:08 阅读更多 →
AIGC实战进阶:从工具使用到工作流构建与效能优化

AIGC实战进阶:从工具使用到工作流构建与效能优化

1. 项目概述:从“学”到“战”的AIGC能力跃迁最近和不少朋友聊天,发现一个挺普遍的现象:大家通过各种课程、教程,已经把AIGC(人工智能生成内容)的基础概念和工具操作摸了个七七八八。知道怎么用ChatGPT写文…

2026/7/10 2:18:08 阅读更多 →

日新闻

STM32与LTC1864高精度ADC的SPI通信实现

STM32与LTC1864高精度ADC的SPI通信实现

1. 项目背景与核心需求在工业控制和嵌入式系统开发中,模拟信号与数字系统的无缝集成一直是工程师面临的关键挑战。LTC1864作为一款16位高精度ADC转换器,配合STM32F101ZG这类主流微控制器,能够构建高性能的模拟信号采集系统。这种组合特别适合…

2026/7/10 0:03:07 阅读更多 →
猫抓插件:浏览器资源嗅探与视频下载的终极解决方案

猫抓插件:浏览器资源嗅探与视频下载的终极解决方案

猫抓插件:浏览器资源嗅探与视频下载的终极解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页视频无法下载而烦恼吗&am…

2026/7/10 0:05:09 阅读更多 →
直流有刷电机驱动方案:TC78H653FTG与MKV46F256VLH16应用

直流有刷电机驱动方案:TC78H653FTG与MKV46F256VLH16应用

1. 直流有刷电机驱动方案概述在工业自动化和消费电子领域,直流有刷电机因其结构简单、控制方便、成本低廉等优势,仍然是许多应用场景的首选驱动方案。TC78H653FTG作为东芝推出的新一代H桥驱动器,与MKV46F256VLH16微控制器配合使用&#xff0c…

2026/7/10 0:05:09 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻