JzHuai0108 / okvis

OKVIS: Open Keyframe-based Visual-Inertial SLAM.
Other
2 stars 3 forks source link

Accuray, speed and robust about your update code? #2

Open cumtchenchang opened 11 months ago

cumtchenchang commented 11 months ago

你好。最近看到你的okvis的项目修改代码,很有兴趣希望能够交流一下, 想请教一下几个问题: 1)你的代码现在逆深度的版本相比原始的okvis精度相差有多少,众所周知逆深度版本速度比较快,但是相比3D map形式优化的点精度可能也会有问题; 2)你的代码有数据集能够直接跑起来吗; 3)看了你预积分的修改,应该是简化了,我个人觉得原始是没有问题的,所以想知道这块修改带来的优势; 4)你的代码中有简化雅可比的形式,也想请问一下这块的优势; 5)看到你的代码中有加入重力方向进行优化,这块我之前也验证过,如果初始化的手已经进行重力方向的估计,优化过程中重力估计相差并不会很大,类似于vins-fusion,想请教这块在你的实际使用中差别如何; 6)我看你的项目中回环也进行了修改,不过我没有重点看,也顺便问一下这块的优势。 祝好

JzHuai0108 commented 11 months ago

很有意思和挑战的问题哈。 1)这个代码用了逆深度(x/z, y/z, 1/z).我没有专门对比过逆深度和okvis (xyzw) 表达的差异,但是我的测试体会是逆深度真的很棒,初始化容易,收敛快,Javier Civera的论文论证了这一点哈。 2)这个代码对okvis进行了增加,从而可以适配我开发的keyframe-based sliding window filter(kswf). 这个代码包含了okvis的功能,所以可以处理okvis支持的数据. KSWF在另一个repo, swift-vio. 3) 我对okvis预积分改正了关于covariance的计算,其实没有简化。同时我对他进行了扩展,可以支持估计重力方向,支持估计IMU misalignment and scale factor. 这些factor有对应的单元测试。 4) 我有写一些专门的计算雅克比的函数,他们的确有加速的效果,比如这个类. 但是我现在倾向于那种标准的写法,比如func(var, *jac = nullptr), 这个jac是可选计算的。这样更容易读懂呀。 5)okvis, kswf, vins mono, vins fusion, openvins在运行中都假定世界系z轴朝上,这样就不必把gravity放在状态向量中进行估计, 在估计时一直遵守和维护这个假设。当然另一种做法是估计重力的方向,放在状态向量中,比如fastlio. 我实现这个支持估计重力方向的imu factor的主要初衷是为了做相机和imu的标定,那个的世界坐标系是靶标,基本不是z朝上的。 6)我有尝试加回环,已经实现了,并做了初步测试,效果还凑合。但是代码比较乱,没有很好整理。现在的回环实现基本上都是独立的一个loop closure模块。可以学OpenVINS照搬VINS Mono的闭环模块. 祝好,