高斯牛顿法(GN)与列文伯格-马夸尔特方法在ORB-SLAM3中的应用

news2025/2/22 8:56:27

问题背景

高斯牛顿法(Gauss-Newton, GN)和列文伯格-马夸尔特方法(Levenburg-Marquadt, LM)是两种最常用的非线性优化方法,这两种方法在ORB-SLAM3系统中均有使用。

在ORB-SLAM3前端跟踪线程(Tracking)中,局部地图跟踪过程 Tracking::TrackLocalMap 的优化函数Optimizer::PoseInertialOptimizationLastFrame 使用了高斯牛顿法作为非线性优化问题求解器,代码如下:

// Optimizer::PoseInertialOptimizationLastFrame(Frame *pFrame, bool bRecInit) 函数
g2o::OptimizationAlgorithmGaussNewton *solver = new g2o::OptimizationAlgorithmGaussNewton(solver_ptr);

而在ORB-SLAM3后端局部建图线程(LocalMapping)中,局部地图优化函数 Optimizer::LocalInertialBA 却使用了列文伯格-马夸尔特作为其非线性优化问题的求解器,代码如下:

//  Optimizer::LocalInertialBA 函数
g2o::OptimizationAlgorithmLevenberg *solver = new g2o::OptimizationAlgorithmLevenberg(solver_ptr);

为什么在不同的阶段使用了这两种不同的非线性优化求解方法,这与ORB-SLAM3不同线程中实时性和效率的要求、优化问题的规模等问题有关,下面具体进行叙述分析。

前端跟踪中使用高斯牛顿法的原因

  • 实时性要求高
    跟踪线程需要实时运行,以确保相机的位姿能够在每一帧图像抵达时及时更新。高斯-牛顿法计算效率较高,迭代过程较为简单,能够满足实时性要求

  • 初始估计较好
    在跟踪线程中,当前帧的位姿初始估计通常由前一帧的位姿和两帧之间的运动测量推导而来,初始值较为准确。高斯-牛顿法在初始估计较好的情况下能够快速收敛,不需要复杂的迭代调整

  • 问题规模较小
    跟踪线程的目标是优化得到当前帧的位姿,跟踪线程中处理的优化问题规模相对较小,只涉及当前帧和部分局部地图点的关系。参数数量有限,问题条件较好,不容易出现病态约束。高斯-牛顿法在这种情况下能够提供足够的优化效果

后端建图优化中使用LM法的原因

  • 鲁棒性和稳定性
    局部建图线程中,局部捆绑调整涉及大量关键帧和地图点的优化,优化问题的规模较大且参数空间复杂。这种复杂性导致误差函数可能具有更强的非线性和病态约束,即误差函数的Hessian矩阵可能接近奇异,导致优化过程不稳定。Levenberg-Marquardt方法通过在高斯-牛顿法基础上引入阻尼因子,可以在处理这样的误差函数时表现得更加鲁棒和稳定,避免迭代发散或陷入局部最优解

  • 全局优化需求
    局部建图线程的目标是对局部地图进行精确优化,提升局部窗口内的地图点和位姿的估计精度。Levenberg-Marquardt方法能够更好地进行全局优化,找到误差函数的全局最小值,从而提高优化结果的准确性。

  • 计算资源允许
    局部建图线程不需要实时运行,可以在相对较长的时间内进行计算。这使得它可以使用计算复杂度较高但优化效果更好的Levenberg-Marquardt方法

总结

综上所述,在前端跟踪中使用了GN方法而在后端局部建图中使用了LM方法,主要是考虑计算效率与精度的平衡

  • 跟踪线程主要负责实时的位姿跟踪,要求快速响应,实时性是首要考虑因素,选择计算效率更高的高斯-牛顿法。
  • 局部建图线程则负责对局部地图进行精细优化,允许较长的计算时间,选择 Levenberg-Marquardt 方法能够提供更高的优化精度和更强的鲁棒性。

通过在不同的阶段选择不同的优化方法,ORB-SLAM3方法能够在保证实时性能的同时,提高整体系统的精度和稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2303322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python+Selenium+Pytest+POM自动化测试框架封装

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、测试框架简介 1)测试框架的优点 代码复用率高,如果不使用框架的话,代码会显得很冗余。可以组装日志、报告、邮件等一些高…

猿大师中间件:网页直接内嵌本机EXE、OCX控件、ActiveX控件或桌面应用程序神器

猿大师中间件自从2019年发布以来,迄今为止不断迭代升级,给第三方提供了将自己的桌面程序和OCX控件支持直接内嵌到浏览器网页运行的赋能SDK开发包。 目前针对不同需求发布了三个成熟且商用的产品: 猿大师播放器:浏览器中直接原生…

C++,设计模式,【工厂方法模式】

文章目录 如何用汽车生产线理解工厂方法模式?一、传统生产方式的困境二、工厂方法模式解决方案三、模式应用场景四、模式优势分析五、现实应用启示✅C++,设计模式,【目录篇】 如何用汽车生产线理解工厂方法模式? 某个早晨,某车企CEO看着会议室里堆积如面的新车订单皱起眉…

鸿蒙-canvas-画时钟

文章目录 前言准备分析组成部分数值计算过程 开始第一步 画圆环第二步 画格子第三步 画数字第四、五步 画指针&定时更新最后一步 前言 你在 Android 上能画出来的东西,在鸿蒙上画不出来? 画个时钟嘛,有啥难的? 你行你上&…

【AI实践】阿里百炼文本对话Agent安卓版搭建

环境:安卓手机运行环境;WinsurfAI编程工具;阿里百炼提前创建Agent应用; 耗时:2小时; 1,新建安卓项目 完成文本输入,并将输入的文字显示出来。 2,安装SDK 参考文档 安…

算法很美笔记(Java)——动态规划

解重叠子问题(当前解用到了以前求过的解) 形式:记忆型递归或递推(dp) 动态规划本质是递推,核心是找到状态转移的方式,也就是填excel表时的逻辑(填的方式),而…

Jest单元测试

由于格式和图片解析问题,可前往 阅读原文 前端自动化测试在提高代码质量、减少错误、提高团队协作和加速交付流程方面发挥着重要作用。它是现代软件开发中不可或缺的一部分,可以帮助开发团队构建可靠、高质量的应用程序 单元测试(Unit Testi…

OnlyOffice:前端编辑器与后端API实现高效办公

OnlyOffice:前端编辑器与后端API实现高效办公 一、OnlyOffice概述二、前端编辑器:高效、灵活且易用1. 完善的编辑功能2. 实时协作支持3. 自动保存与版本管理4. 高度自定义的界面 三、后端API:管理文档、用户与权限1. 轻松集成与定制2. 实时协…

骶骨神经

骶骨肿瘤手术后遗症是什么_39健康网_癌症 [健康之路]匠心仁术(七) 勇闯禁区 骶骨肿瘤切除术

Nacos学习(二)——继承Feign与Config中心

目录 一、集成Feign (一)基础用法 1.添加openfeign依赖 2. 开启openFeign注解扫描 3.创建ProviderService接口 4.修改ConsumerController (二)OpenFeign日志配置 (三)参数传递 1.参数传递的问题 2.参数传递的方式 2.1URL路径传参 2.2URL上拼接参数 2.3body传参 …

计算机网络安全之一:网络安全概述

1.1 网络安全的内涵 随着计算机和网络技术的迅猛发展和广泛普及,越来越多的企业将经营的各种业务建立在Internet/Intranet环境中。于是,支持E-mail、文件共享、即时消息传送的消息和协作服务器成为当今商业社会中的极重要的IT基础设施。然而&#xff0…

uniapp中引入Vant Weapp的保姆级教学(包含错误处理)

废话不多说,直接上方法,网上的教学好多都是错误的 1.安装vant weapp 在Hbuilder的终端,输入以下代码 npm install vant/weapp -S --production 2.新建wxcomponents文件夹 在项目的跟目录新建一个“wxcomponents’文件夹,与app.…

基于Nanopi duo2的WiFi智能摄像头

1.固件包烧录 https://wiki.friendlyelec.com/wiki/index.php/NanoPi_Duo2/zh#.E8.BF.9E.E6.8E.A5WiFi 固件包链接以及烧录工具都在上面链接中 烧录过程 使用读卡器将SD卡插入到电脑,然后打开烧录工具 2.通过串口工具连接板子使其连接WiFi 对应的串口工具,就是这个HyperT…

Java 内存区域详解

1 常见面试题 1.1 基本问题 介绍下Java内存区域(运行时数据区)Java对象的创建过程(五步,建议能够默写出来并且要知道每一步虚拟机做了什么)对象的访问定位的两种方式(句柄和直接指针两种方式)…

MyBatis框架详解与核心配置解读

目录 前言 一、MyBatis框架概述 1.1 什么是MyBatis 1.2 MyBatis的优点 二、MyBatis的使用入门与案例 2.1 MyBatis核心配置文件(mybatis-config.xml) 2.2 XML映射文件(UserMapper.xml) 三、MyBatis的常用注解及其用法 3.1…

Windows 快速搭建C++开发环境,安装C++、CMake、QT、Visual Studio、Setup Factory

安装C 简介 Windows 版的 GCC 有三个选择: CygwinMinGWmingw-w64 Cygwin、MinGW 和 mingw-w64 都是在 Windows 操作系统上运行的工具集,用于在 Windows 环境下进行开发和编译。 Cygwin 是一个在 Windows 上运行的开源项目,旨在提供类Uni…

Unity Excel导表工具转Lua文件

思路介绍 借助EPPlus读取Excel文件中的配置数据,根据指定的不同类型的数据配置规则来解析成对应的代码文本,将解析出的字符串内容写入到XXX.lua.txt文件中即可 EPPlus常用API //命名空间 using OfficeOpenXml;//Excel文件路径 var fileExcel new File…

Helix——Figure 02发布通用人形机器人控制的VLA:一组神经网络权重下的快与慢双系统,让两个机器人协作干活

前言 过去一周,我花了很大的心思、力气,把deepseek的GRPO、MLA算法的代码解析通透,比如GRPO与PPO的详细对比,再比如MLA中,图片 公式 代码的一一对应 2.20日晚,无意中刷到figure 02发布Helix的一个演示视频…

进程的介绍--进程状态/切换

1.冯 • 诺依曼体系结构 1.1 体系结构 冯•诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。数学家冯•诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成&#x…

goby(蓝队红队版)扫描工具扫描使用时候报错解决方法

1.Goby 是一款开源的网络安全扫描工具,主要用于漏洞扫描、资产发现和信息收集。它旨在帮助安全研究人员、渗透测试人员和红队成员自动化和简化网络漏洞扫描过程。Goby 提供了多种功能,能够在大量的目标中高效地识别出潜在的安全漏洞。 2.今天在官网下载…