BA是什么?
目录
1.EKF的步骤
一、问题定义与模型建立
二、线性化处理
三、应用卡尔曼滤波
四、迭代与收敛
五、结果评估与优化
注意事项
2.BA问题的步骤
一、问题定义与数据准备
二、构建优化模型
三、选择优化算法
四、执行优化过程
五、结果评估与优化
六、应用与验证
1.BA的定义
2.BA的基本原理
(1) 数学建模
(2) 误差函数构建
(3) 非线性优化
3.VSLAM中的优化
1.EKF的步骤
EKF,即扩展卡尔曼滤波(Extended Kalman Filter),是一种应用于非线性系统的状态估计方法。它通过泰勒级数展开将非线性系统线性化,然后使用标准的卡尔曼滤波算法进行状态估计。以下是EKF问题解决的一般步骤:
一、问题定义与模型建立
明确目标:确定要估计的状态变量,如位置、速度
建立模型:
- 状态方程:描述系统状态如何随时间变化的非线性方程。
- 观测方程:描述系统状态与观测值之间的非线性关系。
二、线性化处理
- 泰勒级数展开:对状态方程和观测方程中的非线性函数进行泰勒级数展开,并忽略二阶及以上项,得到近似的线性化模型。
- 计算雅克比矩阵:线性化后的模型需要计算状态转移矩阵F和观测矩阵H的雅克比矩阵,这些矩阵描述了线性化后的状态变化率和观测变化率。
三、应用卡尔曼滤波
初始化:设置初始状态估计值、初始状态估计误差协方差矩阵等。
预测步骤:
- 状态预测:使用线性化后的状态方程预测当前时刻的状态。
- 协方差预测:使用状态转移矩阵F和初始状态估计误差协方差矩阵预测当前时刻的协方差矩阵。
更新步骤:
- 计算卡尔曼增益:根据观测矩阵H、观测噪声协方差矩阵R和预测协方差矩阵计算卡尔曼增益。
- 状态更新:使用观测值和卡尔曼增益更新状态估计值。
- 协方差更新:使用卡尔曼增益和观测噪声协方差矩阵更新协方差矩阵。
四、迭代与收敛
- 迭代:重复预测和更新步骤,直到满足终止条件(如达到最大迭代次数或状态估计误差小于某个阈值)。
- 收敛性判断:检查状态估计值和协方差矩阵是否收敛,即是否在某个范围内稳定波动。
五、结果评估与优化
- 结果评估:通过对比实际观测值和估计值,评估EKF算法的性能。
- 优化:根据评估结果,调整模型参数、噪声协方差矩阵等,以提高EKF算法的准确性和稳定性。
注意事项
- 线性化假设:EKF依赖于局部线性化假设,当系统非线性较强时,线性化误差可能较大,导致算法性能下降。
- 噪声假设:EKF假设过程噪声和观测噪声都是高斯白噪声,且噪声统计特性已知。在实际应用中,这些假设可能不成立,需要进行适当的调整。
- 计算复杂度:EKF需要计算雅克比矩阵和进行矩阵运算,计算复杂度较高。在实际应用中,需要考虑计算资源的限制。
通过以上步骤,可以解决非线性系统中的状态估计问题,并应用EKF算法进行实时状态估计。
2.BA问题的步骤
BA问题,即束调整(Bundle Adjustment)问题,是计算机视觉和摄影测量中的一个关键问题。它本质上是一个优化问题,旨在通过最小化重投影误差来优化三维结构和相机参数。以下是BA问题解决的一般步骤:
一、问题定义与数据准备
- 明确目标:确定要优化的参数,包括三维点的位置、相机的姿态(旋转和平移)、内部校准参数(如焦距、主点等)以及可能的径向畸变参数。
- 收集数据:获取多张包含同一场景的照片以及对应的相机参数(如焦距、曝光时间等)和图像特征点(如角点、边缘等)的匹配信息。
二、构建优化模型
- 建立重投影误差模型:对于每个图像特征点,计算其在三维空间中的位置,并将其投影到对应的图像平面上,与实际观测到的位置进行比较,形成重投影误差。
- 构建非线性最小二乘问题:将重投影误差的平方和作为目标函数,形成一个非线性最小二乘问题。
三、选择优化算法
- Levenberg-Marquardt算法:BA问题通常使用Levenberg-Marquardt(LM)算法进行求解,因为它在处理非线性最小二乘问题时具有较好的收敛性和鲁棒性。
- 稀疏性利用:由于BA问题的线性系统具有稀疏块结构,可以利用稀疏性来减少计算量,提高求解效率。
四、执行优化过程
- 初始化参数:为待优化的参数设置初始值,这些初始值可以通过其他方法(如SFM、ICP等)获得或随机生成。
- 迭代优化:使用LM算法进行迭代优化,每次迭代都更新参数值,并计算新的重投影误差。
- 检查收敛性:在每次迭代后,检查目标函数的值是否满足收敛条件(如变化量小于某个阈值),如果满足,则停止迭代;否则,继续迭代。
五、结果评估与优化
- 评估结果:检查优化后的参数是否满足预期要求,如三维点的位置是否合理、相机的姿态是否准确等。
- 优化调整:如果评估结果不理想,可以调整优化算法的参数(如LM算法的阻尼因子、迭代次数等),或重新收集数据并重新执行优化过程。
六、应用与验证
- 应用优化结果:将优化后的参数应用于实际场景,如三维重建、相机定位等。
- 验证准确性:通过与其他方法(如激光扫描、GPS等)的结果进行比较,验证BA问题的优化结果的准确性。
通过以上步骤,可以解决BA问题,并优化三维结构和相机参数,为计算机视觉和摄影测量的应用提供准确的基础数据。
3.0滑窗
在视觉SLAM(Simultaneous Localization and Mapping)中,滑动窗口法是一种用于控制后端束调整(Bundle Adjustment,BA)规模的有效方法。以下是视觉SLAM中滑动窗口法的解决步骤:
一、滑动窗口法引入
在SLAM过程中,随着关键帧和路标点的增多,后端BA的计算效率会不断下降。为了避免这种情况,需要使用滑动窗口法将待优化的关键帧限制在一定的数量内,从而控制BA的规模。
二、滑动窗口法操作
滑动窗口法的核心在于如何有效地添加和删除关键帧,同时保持优化问题的稀疏性和一致性。
新增关键帧:
- 当新的关键帧被添加到窗口中时,需要将其及其观测到的路标点一起加入到BA优化问题中。
- 这通常涉及构建新的误差项,并更新整体的Hessian矩阵和残差向量。
删除旧的关键帧:
- 为了保持窗口的大小固定,需要定期删除窗口中的旧关键帧。
- 然而,直接删除关键帧会丢失信息,并破坏相邻关键帧之间的约束关系。因此,实际上采用的是边缘化的方法。
三、边缘化过程
边缘化是一种将某些变量从优化问题中移除,同时保留其信息的方法。在滑动窗口法中,边缘化通常用于处理被删除的关键帧及其观测到的路标点。
选择被边缘化的变量:
- 确定要删除的关键帧,并找出其观测到的所有路标点。
构建边缘化方程:
- 利用BA优化问题的Hessian矩阵和残差向量,构建与被边缘化变量相关的边缘化方程。
执行边缘化操作:
- 通过舒尔补(Schur complement)等方法,将被边缘化的变量从Hessian矩阵中消去,同时更新残差向量。
- 这将导致与被边缘化变量相关的变量在新的线性化点上计算雅可比矩阵,从而引入先验信息。
保持稀疏性:
- 为了保持优化问题的稀疏性,需要采取一些策略来减少Fill-in现象。例如,在边缘化旧的关键帧时,可以同时边缘化其观测到的路标点,从而将路标点的信息转换成剩下关键帧之间的共视信息。
四、滑动窗口法的迭代优化
在滑动窗口法中,随着窗口的滑动,需要不断迭代地更新Hessian矩阵和残差向量,并重新进行BA优化。这通常涉及以下步骤:
更新窗口:
- 根据一定的策略(如时间、空间等)选择新的关键帧添加到窗口中,并删除最旧的关键帧。
构建新的优化问题:
- 根据更新后的窗口内容,构建新的BA优化问题。
执行BA优化:
- 利用现有的优化算法(如Gauss-Newton、Levenberg-Marquardt等)对新的优化问题进行求解。
更新状态估计:
- 根据优化结果更新相机位姿和路标点位置等状态变量。
五、注意事项
一致性问题:
- 在滑动窗口法中,由于边缘化操作会引入先验信息,并导致与被边缘化变量相关的变量在不同的线性化点上计算雅可比矩阵,因此可能会破坏系统的一致性。为了缓解这一问题,可以采取一些策略来减少Fill-in现象,并保持优化问题的稀疏性。
滑动窗口法适用性:
- 滑动窗口法比较适合视觉里程计(Visual Odometry,VO)系统,因为它能够实时地处理新的关键帧并丢弃旧的关键帧。然而,对于大规模建图的系统来说,滑动窗口法可能无法提供足够的全局一致性信息。在这种情况下,可以考虑使用其他方法(如位姿图优化)来补充全局信息。
综上所述,视觉SLAM中的滑动窗口法是一种有效的控制后端BA规模的方法。通过合理地添加和删除关键帧,并保持优化问题的稀疏性和一致性,可以实现实时的位姿估计和地图构建。
1.BA的定义
BA的中文译为“光束法平差”,也有翻译为“束调整”、“捆绑调整”等,是一种用于计算机视觉和机器人领域的优化技术,主要用于精确优化相机参数(包括内参数和外参数)和三维空间中特征点的位置。BA的目标是通过最小化重投影误差来提高三维重建的精度和一致性。重投影误差是指实际观测到的图像点和通过估计的三维点投影到图像平面上的点之间的距离。重投影误差的示意图如图3所示,其中p1 、p2 和p3 是通过特征匹配知道的同一个空间点P的投影,但是相机的位姿是未知的。初值中P的投影p'1 与实际的p1 之间有距离e,此时可以 调整相机的位姿使之变小。由于这个调整要考虑到很多 个点,而每个点的误差不会为0,因此最终的效果应是整体误差的缩小,这种把相机和三维点放在一起进行最小化的问题统称为BA
2.BA的基本原理
BA的基本原理可以概括为以下几个步骤:
(1) 数学建模
假设有n个三维点和m个相机位置,定义一个误差函 数,该函数计算所有图像观测值与重投影值之间的误差和。 考虑空间中的第i个3D路标点坐标为Pi =[Xi ,Yi ,Zi ]T, 其投影的2D像素坐标为pi ,希望计算的相机位姿的李代 数用ξ表述,每个匹配好的特征点相应的深度为s,相机的内参矩阵为K,包含fx 、fy 、Cx 、Cy 四个参数,Pi 变换到相机坐标系下的空间点坐标为P'i ,则3D路标点到2D 特征点的转换关系如下:
(2) 误差函数构建
由于未知的相机位姿和观测中的噪声,这个等式存在 误差,无法找到一个准确的解。因此,将误差求和构造一 个最小二乘问题,然后找到最佳相机位姿以及特征点的位 置进行最小化,方程如下:
(3) 非线性优化
常用的解非线性最小二乘问题的方法有最速下降法、 高斯牛顿(GaussianNewton,GN)法、列文伯格马尔夸特(LevenbergMarquardt,LM)法等。然而,最速下降法 在计算时容易走出锯齿路线,反而增加了迭代次数,GN 法采用的近似二阶泰勒展开只能在展开点附近有较好的近似效果。
LM法可以看作是GN法和最速下降法的结合。它 通过引入一个调整参数μ来平衡GN法和最速下降法,从 而提高算法的鲁棒性和收敛速度。LM法比GN法有更好的全局收敛性,对于不良条件化问题或远离最优解的初始估计,LM法表现更好。但是,LM方法的计算成本更高。通过增量求解方程,可以求解当前变量的一个改进, LM算法的增量方程如下:
在特征点优化的过程中,式(4)是一个三维线性方程组,在位姿估计过程中,式(4)是六维线性方程组。I为一 个单位矩阵,f(x)是在x处的目标函数值。当在FPGA上部署LM算法时,为了避免重复的λ更新操作,设置缩 放因子,并在每次迭代后,检查系统的误差情况,若误差减 小,则说明优化情况良好,λ除缩放因子,若误差增大,则λ乘缩放因子。
在进行矩阵求解时,针对矩阵的规模和类型,目前最 新的成果中有FSFICholesky、FIIterative和PCG等方 法。FSFICholesky是基于Cholesky分解的直接解法, 适用于稠密矩阵,通过将矩阵分解为下三角矩阵及其转置 来解矩阵。FSFICholesky优化了传统Cholesky分解中 的除法和平方根运算,因此在处理小规模矩阵时表现良 好,尤其在硬件实现中效率更高。FIIterative是基于迭 代法的求解方法,适合大规模矩阵,尤其是稀疏矩阵。它 通过迭代计算来逐步逼近线性方程组的解,计算复杂度较 低,适合高并行度的硬件实现。PCG也是一种迭代法,适 用于大规模稀疏对称正定矩阵。它通过引入预条件器来 加速收敛,特别适合解决复杂度较高的问题,在大规模矩 阵求解中常用。
3.VSLAM中的优化
VSLAM系统中的前端和后端均涉及BA优化,它 们各自承担不同的任务,并相互配合,最终完成机器人对 环境的建图和自我定位。前端优化主要处理图像数据,提 取视觉特征并建立初步的位姿估计;后端优化是全局优 化,主要对整个系统中的地图和位姿信息进行全局一致性 的调整和优化。
前端优化算法主要分为3类:对极几何法、迭代最近点算法(Iterative Closest Point, ICP)和透视n点算法(PerspectivenPoint, PnP)。对极几何法由于主要应用于单目相机,无法获取深度信息,因此具有一定的局限性。ICP算法通过旋转和平移操作来最小化两点集之间的距离,但其精度相对较低。PnP算法通过构建非线性优化问题, 采用最小二乘法进行求解,即通常所称的BA,它是最为关键的位姿估计方法之一。在机器人应用中,只有在获得物体的三维位置和方向后,机器人才能实现高效且精确的运动。在AR应用中,系统利用真实场景中的二维或三维对象作为标记,将虚拟信息与真实场景对齐,这一过程也与相机的姿态密切相关,从而为用户带来真实的体验。因此BA的应用范围更加广泛,合性能较为优异。
在后端优化中,BA是一种全局非线性优化方法,它优化的不仅是相机的位姿,还包括3D地图点的位置。BA是一个高度复杂的非线性最小二乘问题,涉及大量的计算资源。BA 的核心目标是最小化所有帧的重投影误差,从而实现整个系统的全局一致性
相关文章:

BA是什么?
目录 1.EKF的步骤 一、问题定义与模型建立 二、线性化处理 三、应用卡尔曼滤波 四、迭代与收敛 五、结果评估与优化 注意事项 2.BA问题的步骤 一、问题定义与数据准备 二、构建优化模型 三、选择优化算法 四、执行优化过程 五、结果评估与优化 六、应用与验证 1.…...
通过docker 搭建jenkins环境;
一、官网简介使用安装说明: How to use this image docker run -p 8080:8080 -p 50000:50000 jenkins This will store the workspace in /var/jenkins_home. All Jenkins data lives in there - including plugins and configuration. You will probably want to make that …...
10-高级主题
第10节 高级主题 在这一节中,我们将探讨一些 Python 中的高级主题,包括装饰器、生成器、上下文管理器、元类以及常用的设计模式。这些高级特性能够帮助你编写更强大、更灵活的代码。 10.1 装饰器 装饰器是一种特殊类型的函数,可以修改其他函数…...
harbor常见问题及解决方法分享
harbor常见问题及解决方法分享 参考自《harbor权威指南》。 1. harbor配置文件不生效 问题现象 无论是在生产环境下还是在测试环境下,都会有对配置文件进行修改的场景。很多用户在停掉Harbor容器后,都会修改配置文件然后启动Harbor,发现配…...
行列式与线性方程组解的关系
线性方程组是数学中一个重要的概念,它描述了多个变量之间的线性关系。行列式作为方阵的一个特殊值,对于判断线性方程组解的存在性和唯一性有着重要的作用。本文将探讨行列式与线性方程组解之间的关系,并区分齐次和非齐次方程组的情况。 齐次…...

四、自然语言处理_02RNN基础知识笔记
1、RNN的定义 RNN(Recurrent Neural Network,循环神经网络)是一种专门用于处理序列数据的神经网络架构,它与传统的前馈神经网络(Feedforward Neural Network)不同,主要区别在于它能够处理输入数…...
Spring 容器管理 Bean
Bean是什么 Bean 是指 Java 中的可重用软件组件,容器会根据提供的元数据来创建和管理这些 Bean,也包括它们之间的依赖关系。Spring 容器对 Bean 并没有太多的要求,无须实现特定接口或依赖特定库,只要是最普通的 Java 对象即可,这类对象也被称为 POJO(Plain Old Java Obj…...

SpringBoot开发——Spring Boot3.4 强大的结构化日志记录
文章目录 1. 简介2. 实战案例2.1 环境依赖2.2 快速入门2.3 输出到文件2.4 添加附加字段2.5 自定义日志格式总结1. 简介 日志记录是应用故障排除中早已确立的部分,也是可观测性的三大支柱之一,另外两个是指标和追踪。在生产环境中,没有人喜欢盲目行事,而当故障发生时,开发…...

信号和槽思维脑图+相关练习
将登录框中的取消按钮使用信号和槽的机制,关闭界面。 将登录按钮使用信号和槽连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为"123456",如果账号密码匹配成功,当前界面关…...

Unity Feel插件快速入门
What is Feel? Feel是一个即用型解决方案,让你的Unity项目提高游戏体验,增强玩家获得的反馈感,例如相机震动,屏幕闪烁,淡入淡出,等等几十种效果。这是一个模块化、用户友好、易于扩展的系统。 本文旨在让你快速入门,从全局快速了解这个插件,以及基本用…...

数据链路层(四)---PPP协议的工作状态
1 PPP链路的初始化 通过前面几章的学习,我们学了了PPP协议帧的格式以及组成,那么对于使用PPP协议的链路是怎么初始化的呢? 当用户拨号上网接入到ISP后,就建立起了一条个人用户到ISP的物理链路。这时,用户向ISP发送一…...

【C++】入门【六】
本节目标 一、继承的概念及定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 八、继承的总结和反思 九、笔试面试题 一、继承的概念及定义 1.继承的概念 继承是面向对象…...

UE5 C++ 不规则按钮识别,复选框不规则识别 UPIrregularWidgets
插件名称:UPIrregularWidgets 插件包含以下功能 你可以点击任何图片,而不仅限于矩形图片。 UPButton、UPCheckbox 基于原始的 Button、Checkbox 扩展。 复选框增加了不规则图像识别功能,复选框增加了悬停事件。 欢迎来到我的博客 记录学习过…...

Elasticsearch Serverless 现已正式发布
作者:来自 Elastic Yaru Lin 基于全新无状态(stateless)架构的 Elasticsearch Serverless 现已正式发布。它采用完全托管方式,因此你可以快速启动项目而无需操作或升级,并且可以使用最新的向量搜索和生成式 AI 功能。 …...

如何使用apache部署若依前后端分离项目
本章教程介绍,如何在apache上部署若依前后端分离项目 一、教程说明 本章教程,不介绍如何启动后端以及安装数据库等步骤,着重介绍apache的反向代理如何配置。 参考此教程,默认你已经完成了若依后端服务的启动步骤。 前端打包命令使用以下命令进行打包之后会生成一个dist目录…...
openEuler安装UKUI桌面
# 升级更新 sudo yum -y update # 安装UKUI界面 dnf install ukui # 设置图形启动 systemctl set-default graphical.target # 重启 # 查看当前系统启动模式 systemctl get-default # 修改默认启动模式为 命令行界面模式 systemctl set-default multi-user.target 在UK…...

深入理解Oracle DB的锁和闩
1. 引言 本文深入介绍Oracle DB的锁和闩。 2. Oracle DB 锁的基本概念 2.1 定义与作用 锁是 Oracle 数据库用于控制并发访问的一种机制。它用于防止多个事务同时对同一数据进行不一致的操作,确保数据的完整性和一致性。例如,当一个事务正在更新一行数…...

jenkins+github+springboot自动部署
背景: 最近看流水线有点意思,就说自己也搞一套。 预期效果: idea提交代码后,GitHub接收,jenkins自动部署。【后续加个自动部署时的代码检查、单元测试、安全测试、sonarqube】 思路分析: idea上的spring代码push到gi…...
HTML5系列(10)-- 地理位置服务指南
前端技术探索系列:HTML5 地理位置服务指南 🌍 致读者:探索位置服务的魅力 👋 前端开发者们, 今天我们将深入探讨 HTML5 的地理位置服务(Geolocation API),这项强大的功能让我们能…...
【MySQL 进阶之路】SQL 优化
6.SQL 性能分析笔记 在现代数据库的高并发环境下,SQL 查询优化成为提升系统性能和响应速度的关键。本文将总结常见的 SQL 优化策略,包括插入优化、主键设计、排序优化、GROUP BY 优化等,帮助你在面对大规模数据时,做到高效查询和…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...

9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...

[拓扑优化] 1.概述
常见的拓扑优化方法有:均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有:有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...

UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...