news 2026/5/5 18:57:10

SLAM中的非线性优-3D图优化之相对位姿g2o::EdgeSE3Expmap(十)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SLAM中的非线性优-3D图优化之相对位姿g2o::EdgeSE3Expmap(十)

本讲总结下g2o中实现的相对位姿约束,本节主要还是参考了“白巧克力亦唯心”的那篇博客,尊重下原创,当然个人对g2o的代码风格不太喜欢,并且时间有限,因此这里只是展示下,不做代码验证,依然沿用之前的图进行说明

一. 基础知识

Ethan Eade的《Lie Groups for 2D and 3D Transformations》,发现他的文档早已有相关推导。比如针对两个SO3乘积对其中一个求导:

上面这两个推导都利用了伴随矩阵(adjoint)的性质。这部分内容在Ethan Eade的文档中有阐述,也可参考Strasdat博士论文2.4.7节的定义:

以及

利用该性质可以交换二者的乘法顺序(左乘变为右乘),这在求导时非常有用。同理可得其变体形式:

二. EdgeSE3Expmap边分析

新版貌似不在那个文件下了,不过问题不大

void computeError() { const VertexSE3Expmap* v1 = static_cast<const VertexSE3Expmap*>(_vertices[0]); const VertexSE3Expmap* v2 = static_cast<const VertexSE3Expmap*>(_vertices[1]); SE3Quat C(_measurement); SE3Quat error_= v2->estimate().inverse()*C*v1->estimate(); _error = error_.log(); }

void EdgeSE3Expmap::linearizeOplus() { VertexSE3Expmap * vi = static_cast<VertexSE3Expmap *>(_vertices[0]); SE3Quat Ti(vi->estimate()); VertexSE3Expmap * vj = static_cast<VertexSE3Expmap *>(_vertices[1]); SE3Quat Tj(vj->estimate()); //注意这里把测量标记为Tij应该是标记错误了,应该是Tji,不然整个误差公式说不通了 //这个可以看orbslam EdgeSim3里添加测量时就是用的Sji const SE3Quat & Tij = _measurement; // shoulb be Tji SE3Quat invTij = Tij.inverse(); SE3Quat invTj_Tij = Tj.inverse()*Tij; SE3Quat infTi_invTij = Ti.inverse()*invTij; _jacobianOplusXi = invTj_Tij.adj(); _jacobianOplusXj = -infTi_invTij.adj(); }

总结

本节博客主要总结,收集相关理论,并非个人原创,因为本博客系列是以后端优化为背景介绍的,虽然个人不太愿意完全参考别人的博客,但出于完整性考虑,此处还是搬运下,也作为以后的工具可查询。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 4:21:36

毕业设计实战:基于SpringBoot+MySQL的毕业生实习与就业管理系统设计与实现,从需求到测试全流程避坑指南!

毕业设计实战&#xff1a;基于SpringBootMySQL的毕业生实习与就业管理系统设计与实现&#xff0c;从需求到测试全流程避坑指南&#xff01; 谁懂啊&#xff01;当初做毕业生实习与就业管理系统毕设时&#xff0c;光“就业信息表”和“学生表”的外键关联就卡了3天——一开始没给…

作者头像 李华
网站建设 2026/5/2 10:15:20

06_C 语言进阶之避坑指南:字符串与 char 指针 —— 从内存本质避开那些致命陷阱

C 语言进阶之避坑指南:字符串与 char 指针 —— 从内存本质避开那些致命陷阱 一、字符串与 char 指针的 “坑”,你踩过吗? “char 指针赋值后打印出现乱码,甚至程序直接崩溃?” “字符串拷贝时少加一个 \0,导致后续数据被污染?” “用 char * 指向字符串常量,试图修…

作者头像 李华
网站建设 2026/5/5 12:44:46

Jira + DeepSeek 全流程:需求创建到任务分配的智能话术生成实战指南

Jira DeepSeek 全流程&#xff1a;需求创建到任务分配的智能话术生成实战指南引言&#xff1a;项目管理中的沟通痛点与智能化机遇在现代软件开发与项目管理中&#xff0c;效率与精准度是成功的关键。然而&#xff0c;从最初的模糊需求到最终清晰可执行的任务分配&#xff0c;这…

作者头像 李华
网站建设 2026/5/1 10:27:49

Kubernetes 可观测性体系构建指南:从传统监控到云原生生产级实践

Kubernetes 可观测性体系构建指南:从传统监控到云原生生产级实践 在 Kubernetes 环境中,“看不见”往往比“故障本身”更危险。 Pod 的短暂生命周期、服务的高频变更、以及跨多层组件的问题传播,使得传统以“主机 + 静态指标”为中心的监控模式迅速失效。 要构建一套真正有…

作者头像 李华
网站建设 2026/4/23 14:52:56

YashanDB数据库的分区表设计技巧与性能提升方法.

在设计 YashanDB 或其他数据库的分区表时&#xff0c;合理的设计方案能够显著提升数据库的性能和管理效率。以下是一些分区表设计技巧和性能提升方法&#xff1a;1. 分区策略选择- 范围分区&#xff08;Range Partitioning&#xff09;: 根据某个字段的范围&#xff08;如日期&…

作者头像 李华
网站建设 2026/4/24 0:10:57

面试手撕排序

手撕排序 &#xff08;写的时候别忘了关提示&#xff0c;很多时候负面&#xff0c;给我错的代码还分心自己&#xff09; &#xff08;小心别敲错一些变量&#xff0c;算法对了但是结果有问题&#xff0c;顺着逻辑梳理&#xff0c;看变量敲没敲错&#xff09; 冒泡排序 原理&…

作者头像 李华