ORB_SLAM2 修改,地图加载保存,动态擦除,更新依赖到最新库

版权声明:本文为博主的文章,未经博主禁止可以随意转载。 https://blog.csdn.net/ONE_SIX_MIX/article/details/84981648

前后花了接近一个月,来搞这个 ORB_SLAM2 ,真复杂。。。。
后面发现更好用的 PL_SLAM2,雪崩。。。

vs2017工程
github: https://github.com/One-sixth/my_orb_slam2

使用了EuRoCd的数据集进行测试,单目运行速度不错,双目运行速度就真的慢了。。
重跟踪的速度真快,但基本要求是在之前走过的路径上,跟走过的路差远一点就找不回跟踪了,估计是因为不同位置,就算是同一个地方的ORB特征也是有较大不同的原因。

都是简单的修改,应该算简单吧
清理代码,风格改动
头文件增加前向声明,消除多余依赖,稍微增加编译速度
迁移 DBow2 到 DBow3
更换 Dense 和 Eigen Solver 到 CSparse Solver,速度貌似有一点提升
清理 PnpSolver 的 opencv1.0 的代码
迁移到 opencv4.0
迁移 g2o 到最新版本
加入了地图读取和保存功能,参考自 https://www.cnblogs.com/mafuqiang/p/6972342.html
应用了 orb_slam2 项目主页上几个 pullrequest
修复了知乎大神发现的bug(也可能不是bug),增加了刚开始时跟踪成功的速度(单目跟踪速度提升,其他不知道),链接 https://www.zhihu.com/question/35116055
修复了一个在 Frame.cc 双目帧构造函数 bug,原始实现中,mb没有初始化就被使用了
加入关键帧和地图点从内存擦除,这个功能超麻烦。。。


对于关键帧和地图点从内存擦除,各个类之间有很复杂关联关系,弄了很多检查函数,对速度有较大的影响。。。

经过多轮的测试,除了偶尔不知为何报错之外,貌似没有什么大问题。。。

原先对清理关键帧和地图点的功能做了个使用shared_ptr指针的版本,后来调试时发现shared_ptr是个大坑,线程安全是假的,出现同一对象重复析构的问题,静待c++20的 atom_shared_ptr指针,atomic<shared_ptr>语法太烂了,目前搁置了动态指针的版本。如果运气好没报错的话,运行速度还挺快的

目前的依赖是
eigen3 最新
opencv4.0 最新
g2o 最新master
DBoW3 最新master
Pangolin 最新master

猜你喜欢

转载自blog.csdn.net/ONE_SIX_MIX/article/details/84981648