droid_SLAM代码注记

droid-SLAM 简介

droid-SLAM,DORID(Differential Recurrent Optimized-Inspired Design)实现了端到端可微的SLAM系统,于21年发表在Advances in neural information processing systems,仅使用仿真数据集Tartan Air训练就达到了SOTA精度,同时说明算法的泛化性能很强。

运行速度及硬件要求:

根据论文,使用两台3090,一台用于前端,一台用于后端,将图像降采样并适当降低帧率,可以在Euroc、TUM-RGBD数据集上实时推理,如果仅适用前端,则可以在一台1080Ti上跑,但需注意内存可能不足。

流程及原理:

通过在光流估计模块(RAFT)后添加可微的DBA(Dense Bundle Adjusr)模块,实现了端到端可微的SLAM系统。在DBA模块通过RAFT的光流估计优化图像序列状态(包括位置姿态和深度估计),并根据现有图像序列的状态重新计算光流,再将新计算的光流传入RAFT中更新纠正,通过多次迭代更新,光流趋于真值,通过光流迭代更新的图像序列状态也得到高精度解算。

光流估计网络的loss使用了位姿和光流,通过DBA模块计算得到以上两个loss,即DBA模块也参与了后向传播(back propogation)过程,使得网络参数权重朝着使DBA模块残差降低的方向学习。在深度学习网络中融入了几何约束,实现了传统算法与深度学习算法的结合。

在论文的Appendix B中也补充说明了如果在训练过程中没有包含DBA模块,也即直接拼接RAFT和DBA,结果会不稳定并产生较大误差。

代码结构:

目前只看完了推理部分。训练部分大同小异。

主要结构:

depth_video: 存储视频序列各帧的状态,包括位姿、深度、内参等。同时包含了帧间距离计算以及BA函数,方便因子图时调用。

factor_graph: 根据radius(索引较近的边被直接连接)、nms(索引较近的边被抑制)、distance(低于该距离可以形成连接边)

前端:仅光流差异较大(超过filter_thresh)的帧会被传入前端。分为更新和初始化,初始化,积累够一定光流差异较大(超过filter_thresh)的帧数后(超过warmup阈值),进行初始化,进入更新函数调用。在更新并初步迭代后,若frame_distance较低,则删除该帧,继续跟踪直到距离大于keyframe_distance阈值。

后端:类似于前端的更新,因子图连接边数更多。

坐标系定义

原始tartanAir使用NED坐标系,即Z轴指向为向下,而相机一般为水平拍摄,不适用于相机的Z轴指向为前\后,因此将坐标系修改为如下。

参考:Question about the pose parsing in TartanAir dataset · Issue #14 · princeton-vl/DROID-SLAM · GitHub

X = right / left
Y = up / down
Z = forward / backward

This is the typical format used by most datasets I've encountered like ETH3D and TUM-RGBD.

The main reason for this conversion is that this is the format that I'm most comfortable working with. Also leads to simpler equations for projecting points between images.

回环检测原理

在后端部分通过光流计算图像之间的相似度构建边,如果图像较为相似则会被加入到因子图中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值