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

SLAM 前端

目录

SLAM 的框架

相机和路标的建模和参数化

VO 方法的定性比较

特征点提取、匹配和光流

关键帧与三角化

总结关键帧选取的策略:

三角化的数学描述


SLAM 的框架

通常的 SLAM 框架由前后端共同构成
1
前端:提取特征点,追踪相机 Pose,定位相机
2
后端:提供全局优化或滑动窗口优化
前端的步骤?初始化、正常追踪、丢失处理
2

相机路标的建模和参数化

xcamera = [R, t], xlandmark = ?
(1)
可能的路标:绝对坐标 xyz,逆深度 ρ,灰度值(灰度 Pattern),
等等
3
关键帧?
需不需要关键帧?
怎么选关键帧?
控制关键帧数量?
仅在关键帧中补充新特征点?还是对所有帧提取新特征点?
何时进行三角化?
实际上,前端非常能体现一个 SLAM 的追踪效果。
在实现中,尽管后端存在明显的理论差异,但很难直观体验在最
终精度上。
问:假设给定相同的 Pose Landmark,给定噪声范围,各种方
法是否有明显差异?还是仅仅有理论性质上的差异?
在某些理想情况下,利用仿真数据可以给出一定的结果

这个实验(双目 Pose/Landmark 估计)中,UKF(SPKF) 给出最接近真
值的结果。
1
实际情况离理论假设有多远?(高斯噪声)
2
拿到的数据究竟有多好?
在很多实际场合,很难回答某种后端算法是否明确优于另一种。
例如:ORB-SLAM2 使用 Covisibility-GraphDSO 使用带边缘化
的滑动窗口,Tango 使用 MSCKF,等等。
实验效果:ORB-SLAM2 具有较好的全局精度,但无回环时 DSO
具有漂移较少。Tango 计算量明显少于其他算法。
算法的结果和数据集关系很大。例如:Kitti 属于比较简单的(视野
开阔,动态物体少,标定准确),EUROC 一般(人工设定场景,
纹理丰富,但曝光有变化),TUM-Mono 比较难(场景多样,主要
为真实场景)
我们更多考量计算和精度的 trade-off
相比来说,前端的差异就比较明显:
追踪算法是否很容易丢失?
算法对干扰的鲁棒性如何(光照、遮挡、动态物体)?
前端更多是范式(Paradigm)之间的比较,而非范式之内的比较。
好的前端
追踪效果好,不容易丢
计算速度快
累计误差小
不好的前端
追踪效果差
计算耗时
容易出现累计误差

VO 方法的定性比较

光流法最早,最成熟,缺点也明显(抗光照干扰弱,依赖角点)
FAST+ 光流是比较实用的快速算法/GFTT+ 光流效果更好,也
具备实时性
特征匹配需要提的特征具有旋转平移缩放不变性,SIFT/SURF
最好的一类,BRISK 等次之,ORB 算比较差的
特征匹配和光流都非常依赖角点,日常生活场景中角点不明显的
很多
直接法不依赖角点,但实现效果根据选点数量变化较大
DSO 在不同关键帧数量/不同选点数量下的表现。曲线越靠左上侧越
好。

特征点提取、匹配和光流

特征点提取
我们后文以传统光流为主来展开前端的介绍。 一个传统的双目光流前端流程(正常追踪流程)
除了正常追踪流程以外,还需要考虑初始化、丢失恢复的情况。
VIO 初始化比常规 VO 多一些步骤(主要为 IMU 参数的估计),我们
留到下讲介绍。
思考:为什么要有这样的框架?

特征点提取
在光流中,我们通常选择角点来追踪。 为什么需要角点?

角点的梯度在两个方向都有分布

利用角点附近块的两个特征值大小,可以判断该区是否为角点。
SHarris = det (M) ktr (M) 2 . k = 0.04 0.06

FAST/GFTT 角点
FAST:仅含像素亮度、不含计算的快速角点提取方式;
GFTT:在 Harris 基础改进:Shi-tomasi 分数,增加固定选点数,
等等
SShiTomasi = min (λ1, λ2)

光流
光流可以追踪一个时刻的角点在下个时刻的图像位置
灰度不变假设:
I (x + dx, y + dy, t + dt) = I (x, y, t)
Warp function 的光流
I (x, y, t) = I (W(x + dx, y + dy), t + dt)
其中 W Warp Function,通常取仿射变换
.

 其中 p1 p6 W 的参数,需要在线估计。

金字塔式光流:

Coarse-to-Fine:从顶层最模糊的图像开始计算光流,一直往下迭代到
最高分辨率
光流在SLAM 中的应用
光流可以追踪上一帧的角点
2
可以一直追踪该角点,直到超出图像范围或被遮挡
3
在单目 SLAM 中,新提出的角点没有 3D 信息,因此可通过追踪
角点在各图像位置,进行三角化
光流的局限性
容易受光照变化影响
2
只适合连续图像中的短距离追踪,不适合更长距离
3
图像外观发生明显变化时不适用(例:远处的角点凑近看之后不
为角点了)
4
对角点强依赖,对 Edge 类型点表现较差
5
稀疏光流不约束各点光流的方向统一,可能出现一些 outlier

关键帧与三角化

为什么需要关键帧
1
后端通常实时性较差,不适合处理所有帧;
2
如果相机停止,可能给后端留下无用的优化,甚至导致后端问题
退化a
a想象我们对一个停留在原地的窗口做优化会发生什么。
如何选择关键帧
1
关键帧之间不必太近(退化或三角化问题)
2
关键帧之间不能太远(共视点太少)
3
VIO 中,定期选择关键帧(假设 bg, ba 在关键帧期间不变)
对于非关键帧,只执行前端算法,不参与后端优化
因此,对于非关键帧,它的误差会逐渐累积。直接该帧被作为关
键帧插入后端,BA 才会保证窗口内的一致性

总结关键帧选取的策略:

在计算量允许范围内,且不引起退化时,尽可能多地插入关键帧
ORB-SLAM2 使用非常宽松的关键帧策略(大多数时候只要后端线程
Idle 就会插入关键帧),然后在后端剔除冗余的关键帧
DSO 利用光度误差插入关键帧(插入比较频繁)。然后在后端计算每
个关键帧的 Active LandmarksMarg 对窗口贡献最低的2
因此,DSO 的关键帧窗口通常有一个很远的和两三个很近的,其他几
个分布在中间
在单目 SLAM 中,通常在插入关键帧时计算新路标点的三角化。
有的 SLAM 系统在关键帧时提取新 FeatureDSO, SVO),也有
的方案对每个帧都提新 FeatureVINS, ORB)。
前者节省计算量(非关键帧无需提点,节省 5-10ms 左右);后者
效果好(在单目里需要防止三角化 Landmark 数量不够)。

三角化的数学描述

考虑某路标点 y 在若干个关键帧 k = 1, · · · , n 中看到。
y R 4,取齐次坐标。每次观测为 xk = [uk, vk, 1],取归一化平
面坐标(这样可以忽略掉内参)。
记投影矩阵 Pk = [Rk, tk] R 3×4,为 World 系到 Camera
投影关系:
k, λkxk = Pky.
(10)
其中 λk 为观测点的深度值(未知)
根据上式第三行:
λk = P k,3y
(11)
其中 Pk,3 Pk 的第 3
http://www.lryc.cn/news/588196.html

相关文章:

  • Doll靶机渗透
  • openEuler系统PCIE降速方法简介
  • 基于YOLOV8的烟火检测报警系统的设计与实现【全网独一、报警声音机制、实时画面、系统交互、日志记录】
  • SSM框架学习——day1
  • MySQL窗口函数详讲
  • VUE3 添加长按手势
  • Web 前端面试
  • C++-linux 7.文件IO(一)系统调用
  • Day34 Java方法05 可变参数
  • OSPF高级特性之GR
  • 现有医疗AI记忆、规划与工具使用的创新路径分析
  • 【Java笔记】七大排序
  • Android Studio C++/JNI/Kotlin 示例 二
  • 清除 Android 手机 SIM 卡数据的4 种简单方法
  • 如何将数据从一部手机传输到另一部手机?
  • SSH 登录失败,封禁IP脚本
  • Oracle 学习笔记
  • 【橘子分布式】Thrift RPC(理论篇)
  • LINUX714 自动挂载/nfs;物理卷
  • 基于STM32的智能抽水灌溉系统设计(蓝牙版)
  • 前端开发中的常见问题及解决方案
  • 数据结构——优先队列(priority_queue)的巧妙运用
  • 渗透第一次总结
  • 【Python办公】Python如何批量提取PDF中的表格
  • 前端基础之《Vue(22)—安装MongoDB》
  • 【Java EE初阶 --- 网络原理】初识网络
  • 第十七节:第五部分:网络通信:TCP通信-支持与多个客户端同时通信
  • 如何使用Cisco DevNet提供的免费ACI学习实验室(Learning Labs)?(Grok3 回答)
  • 笔试——Day6
  • CISSP知识点汇总- 通信与网络安全