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

SLAM中的非线性优-3D图优化之轴角在Opencv-PNP中的应用(二)

        本节是上节内容的延续,主要展示如何利用轴角来跟四元数来求解旋转部分的雅可比跟残差,其他不变的地方不重复列出来了,接下来请看精彩内容

一. 罗德里格斯参数化

二. 计算各个偏导数

(1)  由于 θ = |w| = √(w_x² + w_y² + w_z²)

(2)∂uj / ∂wj  


其中δij是克罗内克δ函数

(3) 

最终通过整合得出结果

代码中的 dx0dr, dy0dr, dz0dr

(4) 归一化坐标导数

double dxdr = z * (dx0dr[j] - x * dz0dr[j]);

(5) 特殊情况的验证

当theta趋近于0时

如果只绕单一轴旋转,如z轴

这与直接对旋转矩阵求导的结果一致。

三. 四元数参数化

(1) 旋转用单位四元数表示:

(2)  旋转矩阵与四元数的关系:

(3) 旋转矩阵对四元数的导数

四元数求导,直接对各个元素求解

(4)四元数关于相机坐标的导数

一般形式如下:

其中qi = {w, x, y, z}

展开对各个分量求导

(5) 归一化坐标对四元数的导数

一般公式

带入即可算出相应雅可比,此处只列出w分量的雅可比,其它的类似

四. 约束处理

      由于四元数是单位四元数,需要处理约束 ||q|| = 1的情况,在优化中常用:局部参数化

使用3维局部扰动:

对应的雅可比矩阵

实际优化中使用3×2N的雅可比矩阵:

其中 Jδv→q 表示四元数对局部扰动的雅可比导数矩阵。

(1)问题描述:

在使用四参数无约束优化时可能出现以下问题:

  • 迭代过程中四元数可能丢失单位长度特性
  • 旋转矩阵的正交性难以保持
  • 这些问题会导致数值不稳定性和结果误差

(2)局部参数化方法 

在当前估计值附近定义一个三维局部扰动

其中扰动也是一个单位四元数

最常用的局部参数化:

对于小扰动采用一阶近似:

(3)链式求导:从局部参数到重投影误差,完整的导数链

关键项

完整的雅可比矩阵计算-旋转部分的雅可比

旋转对重投影误差的雅可比为:

其中Je->u

四元数约束处理的关键:

  1. 局部参数化:使用3维扰动在切空间中进行无约束优化

  2. 链式求导:通过完整的导数链计算重投影误差对局部扰动的雅可比

  3. 指数映射:将局部扰动映射回单位四元数

  4. 数值稳定:通过归一化保证四元数始终在单位球面上

总结

四元数的核心优势:

  1. 无奇异性:完全规避万向节锁问题
  2. 数值稳定性:单位四元数确保旋转矩阵正交性
  3. 插值特性:支持自然的球面线性插值

与罗德里格斯参数的比较:

  1. 参数维度:

    • 四元数:4参数(带约束条件)
    • 罗德里格斯:3参数(无约束优化)
  2. 计算特性:

    • 四元数:导数计算更复杂但数值稳定
    • 罗德里格斯:计算更简单但存在奇异点
  3. 应用场景:

    • PnP问题:倾向于使用罗德里格斯参数
    • SLAM系统:更常采用四元数表示

四元数求导要点:

  • 保持链式法则的一致性
  • 需计算旋转矩阵对四元数各分量的偏导
  • 需处理单位范数约束条件
  • 数值优势体现在大角度旋转场景

实际应用建议: 在PnP等优化问题中,罗德里格斯参数因其简洁的无约束形式更具实用价值,而四元数更适合需要数值稳定性的SLAM系统。

http://www.dtcms.com/a/605241.html

相关文章:

  • Step-Audio-EditX
  • Notepad++编译C语言 | 如何高效配置和使用Notepad++进行C语言开发
  • Hadoop学习_week1
  • 靠谱的时序数据库哪家技术强
  • VR水污染体验系统——VR 里的碧水守护
  • 重构企业运维智慧:低代码 ITSM 知识管理平台的创新与实践
  • 从C++开始的编程生活(13)——list和浅谈stack、queue
  • m序列原理及在5G的应用
  • 焦作建设网站的公司怎么让百度快速收录网站
  • API创建指定版本k8s集群
  • K8S NFS PVC PV 挂载点路径问题
  • 【CANN】开启AI开发新纪元,释放极致计算效率
  • ui展示 网站百度热门排行榜
  • Java并发编程基石:深入理解JMM(Java内存模型)与Happens-Before规则
  • 一个基于现代 C++23 Modules 的传统文化算法库,使用纯模块化设计实现(包含大六壬、六爻、紫薇斗数、八字、奇门遁甲)
  • 注释网站开发全国大型教育集团网站建设
  • PyQt5 + Qt Designer配置指令
  • setprop debug.hwui.profile visual_bars有什么作用
  • Vue3——Transition和TransitionGroup的区别以及最佳实践
  • PostIn从初级到进阶(2) - 对接口进行快捷调试
  • 河南建设网站公司简介河北项目建设备案网站
  • JAVA国际版打车APP打车顺风车滴滴车跑腿APP源码Android+IOS+H5
  • Swift 初阶 —— Sendable 协议 data races
  • RK3568平台开发系列讲解:RK VOP 显示控制器
  • 《R for Data Science (2e)》免费中文翻译 (第12章) --- Logical vectors(2)
  • Python同步vs异步性能对比实验-2
  • 深入理解C语言中的static和extern关键字
  • 做期货应关注什么网站双语网站建设网站
  • Aspose.Cells for java 在将xlsx 转化为pdf 时有渲染问题
  • 如何读懂英文科技文献中的公式:从畏难到掌握的系统方法