《视觉slam十四讲从理论到实践》第六讲概述总结

本文总结了《视觉SLAM十四讲从理论到实践》第六讲,探讨如何将SLAM中的状态估计问题转化为最小二乘问题。通过处理带有噪音的观测和输入数据,目标是找到一组优化的状态估计值。介绍了最大似然估计与最小二乘法的关系,以及在高斯分布下的优化过程。文章还提及了数值优化方法,如高斯-牛顿法和列文伯格-马夸特方法,用于求解最小二乘问题。
摘要由CSDN通过智能技术生成

0x00 前言

在学习《视觉slam十四讲从理论到实践》第六讲的过程中,觉得这一部分的知识在数学层面上是具有通用性的,数据的非线性优化和最小二乘法的处理知识不止在SLAM中发挥作用,还会在其他领域例如机器学习等得到应用,觉得比较重要,有必要再自己总结一下加深理解。
本文的重点放在如何将SLAM中状态估计问题转化成一个最小二乘问题。
但只是基于书本所说的内容,并且所举例子也依托于SLAM这样一个背景,并没有做额外拓展。

0x01 本讲概述总结

  我们期望,通过处理一段时间内带有随机噪音的批量观测数据和输入数据,得到一组优化后的状态估计值,并把这些估计值作为当前的状态。我们会把以上问题转化为最小二乘的问题,然后求解这个最小二乘问题的过程就是优化估计值的过程。
  可以假设观测数据为 z z z ,输入数据为 u u u ,当前位置为 x x x ,观测目标位置为 y y y ,由于在观测的过程中不可避免地带有噪音,所以我们想依据当前的观测数据,期望得到最接近真实值的估计值,度量"最接近"是一个可能性问题,那么从概率学的观点来看,可以求状态 x , y x,y x,y 的条件概率分布:
P ( x , y ∣ z , u ) . P(x,y|z,u). P(x,yz,u).
  我们可以认为上述概率最大时所对应的状态最接近真实值,但是直接求后验概率的分布是困难的,求一个状态最优估计,使得在该状态下后验概率最大化则是可行的。也可以反过来这样理解:后验概率最大化时所对应的状态为状态最优估计。那么通过贝叶斯法则的转换,可以将求解最大后验概率等价于求解最大似然估计(Maximize Likelihood Estimation, MLE):
( x , y ) ∗ M L E = a r g    m a x    P ( z , u ∣ x , y ) . {(x,y)^*}_{MLE}=arg\;max\;P(z,u|x,y). (x,y)MLE=argmaxP(z,ux,y).

直观地讲,似然是指“在现在的位姿下,可能产生怎样的观测数据”。由于我们知道观测数据,所以最大似然估计可以理解成:“在什么样的状态下,最可能产生现在观测到的数据”。这就是最大似然的直观意义。

  考虑某一次的观测,我们假设随机噪音服从高斯分布,那么似然也服从高斯分布:
P ( z j , k ∣ x k , y j ) = N ( h ( y j , x k ) , Q k , j ) . P(z_{j,k}|x_k,y_j) = N(h(y_j,x_k),Q_{k,j}). P(zj,kxk,yj)=N(h(yj,xk),Qk,j).
   h ( y j , x k ) h(y_j,x_k) h(yj,x

### 关于《视觉SLAM十四》第6章的内容 #### 6.1 单目视觉里程计初探 单目视觉里程计(Monocular Visual Odometry, V-O)旨在仅利用单一摄像头获取的图像序列来估计相机运动。由于单目摄像机无法直接测量尺度信息,因此该方法通常会引入某些假设或外部约束条件以解决尺度不确定性问题[^1]。 #### 6.2 特征点法简介 特征点法是实现V-O的一种常见方式,其核心在于检测并匹配不同帧间的稳定特征点。为了提高鲁棒性和精度,在实际应用中往往会选择具有良好区分度且易于追踪的角点作为特征点。此外,还需要采用有效的几何一致性检验机制去除误配对,从而确保后续计算准确性[^2]。 #### 6.3 直接法概述 不同于基于特征的方法,直接法则试图充分利用原始像素强度变化来进行位姿估计。这类算法一般不需要显式的特征提取步骤,而是通过对整幅图片的信息加以分析完成任务目标。尽管如此,它们对于光照条件的变化较为敏感,并可能面临遮挡等问题带来的挑战[^3]。 #### 6.4 实践指南与案例研究 本章节还提供了详细的实践指导,包括但不限于: - 数据集的选择与准备; - 参数调优技巧分享; - 性能评估指标介绍; - 常见错误排查建议。 同时附有丰富的实例解析帮助读者更好地理解和掌握所学知识点。 ```python import cv2 import numpy as np def extract_features(image): orb = cv2.ORB_create() keypoints, descriptors = orb.detectAndCompute(image, None) return keypoints, descriptors image = cv2.imread('example.jpg', 0) # 加载灰度图 keypoints, _ = extract_features(image) for kp in keypoints[:10]: print(f'Key point at ({kp.pt[0]}, {kp.pt[1]}), size={kp.size}') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值