最近研究了一下orb slam2 .就是网上看了许多的文章和作者的论文。像泡泡机器人啊 ,许多人都有完整的代码分析和数学分析。怎么样编译源代码这些都有。对我来说,我不是研究生,也不是搞学术的。也走不上这一条路。工业上面关心的是这个orb slam2到底能不能够在实际场景上运用?到底能不能够总成产品呢?
首先,orb slam2的源代码非常清晰,注释非常清楚,编译非常容易。然后阅读代码的时候,感觉到作者的编程水平不弱。有的人在网络上说他们有什么学术创新。太面向对象。实际上面orb slam2的代码实际上面践踏了面向对象的规范。这个说明作者的编程水平很高。然后他里面有许多参数并没有理论依据。说明作者是很有实践精神的。所以我看的时候,就觉得这个代码是经过测试了的。然后作者在实际场合测试过了。我自己检验的时候,得出的结论就是:作者的论文没有假,结果也真的是可以。并不是挑的最优结果。
ORBSLAM2的代码我跑了几个小时也没有崩溃。当然有的时候也会因为内存问题崩溃。但是基本上是很稳定的。
我用自己的摄像头,在公园里面跑了几天,在商场外面跑了,我放在摩托车上面跑了,最后我得出的结论就是:orb slam的论文里面的结果是真实的。我可以做出一样的结果,甚至更好。这个也是ORB SLAM2在许多论文里面鹤立鸡群的原因吧。
那么,运用到实际上面,ORB SLAM2到底行不行呢?我观察的结果就是勉强合格。已经是出人意料的能够在实际环境中跑。我把电脑放在摩托车上面,绕着跑了几公里。虽然没有闭环(我参数设置的问题)。后面我又放在车上跑了一个公园。确实和地图对应的很准。
这几天跑下来的结果是
orbslam2 的优点
非常的耐操。我是一个做产品出身的程序员。我开始就是拿着笔记本跑了。那个时候我还没看过代码。我的摄像头没有标定,甚至我连摄像头都没有固定焦距。但是orbslam依然能够追踪,能够生成点云。我甚至在晚上在路灯下面跑过,也是能够追踪的,很容易丢。晚上也是能够追踪的。我的摄像头就是笔记本的摄像头。也不是什么全局快门的镜头。然后摩托车是非常的震的,他也可以追踪和闭环。然后用手拿着的是,基本上可以自由走动,不需要顾虑太多。然后各式各样的地面,包括全黑的泊油路,水泥,人行道,汽车道都是可以追踪的。在草地,人行道,瓷砖路是最好的。orbslam是实际可用的。
orbslam2的缺点
要说缺点,我想所有的视觉追踪都有这个缺点。就是路径是有方向性质的。就是你正方向走和反方向走是不能关联的。我想orb slam必须用全向镜头才行。如果是单个镜头,你走过的路径,正方向和反方向的关键帧是没有关联的。所以正方向和反方向的路径之间只是靠几个点连着。
另外一个缺点就是orbSLAM的点云只能用来定位。不能用来蔽障。基本上因为定位和追踪的要求。
orbslam2的精度
作者论文里面有说。其实也没有意义的。要看你的标定和你初始化的场景。还有你闭环的技巧。还有你所拍摄的景物的距离。。orb slam2 的精度非常非常依赖闭环。因为单目会有尺度漂移。然后如果是光线比较暗淡,如果追踪的点里面有outlier,你能看到追踪的出来的摄像头在抖动。如果你拍摄的时候突然有一辆车子过来占据了大部分的画面,就没有什么精度可以说。不过因为他是图优化,然后里面层层把关,最终的轨迹是很好看的。
orbslam2实际建图技巧
1.就是你拍摄时候,最好拍摄2-5米之内的物品。我说的是手拿着的时候。在摩托车上面因为跑得快,基本上依赖的是很远的物体。orbslam是能够追踪几十米,几百米的建筑。但是如果太远的东西,就只有旋转没有视差。然后你生成的关键帧就非常的稀疏,就没有什么精度可言。甚至闭环之后的路径特别难看。
2.你要考虑你特征点在屏幕上的运动。追踪断是最烦人的。你要保证每一个图像里面大概有一半的特征点是老的。不要青黄不接。比如说突然有个很近的东西进入到画面里面,因为他近,移动速度快,占据大部分的画面,这下子,这个新的帧就和以前的关键帧没有多少匹配点了。一下子就断了。这种断的情况特别容易发生在拐弯的时候,所以摄像头45度朝下是比较保险的方法。如果放在车子上面,因为车子速度快,就得垂直向后。这样远处的景物总是不怎么动的。不那么容易断。拐弯的时候要特别慢。
3.尽量多闭环。就是说你走路径的时候,总是同一个方向走过同一个地方,因为反方向的路径和正方向的路径关联不了。就是同方向的摄像头才会关联起来。然后一个路径得走2遍这样关联才会多。关联多了,误差才会小。
4.想象orbSLAM2其实就是一个大的光电鼠标。确实是这样的,他和我们人的定位方式完全不同。他只能依赖近处的景物。然后他能够记住地面上的斑点,每一片树叶。分辨出水泥裂纹的不同。orbslam就是一个大鼠标。
5.如何得到漂亮的点运。对同一个景物各个角度都要拍一下,这样才能得到准确的Z
6.不要做纯旋转。其实这个很容易的。比如说摩托车拐弯不是以镜头位轴旋转的,然后人走的时候旋转的时候也不是以手腕为中心。
orbsam的配置参数
1.标定的参数。标定的参数会影响到点运的结果。但是你没标定也能追踪。但是你如果需要漂亮的点运,还是得标定
2. fps设置。FPS可以设置成1,也可以30.不过我自己改了一下代码加了个显示刷新的频率。
3.特征点的个数和层数。这个是最重要的参数,最影响性能和初始化和追踪。如果特征点层数多,相应的分配到每一层的特征点就少了,就应该增加更多的特征点。然后特诊点少了初始化比较难,追踪也比较容易断。起码的1600,层数多的话2000. 我是这么想的,在车上我是把层数加到16层,特征点加到2000.就是我自己还没有完全看完代码。我是想,如果是景物都是在图像里面平移,应该层数少一点没关系。如果是像朝向车子后面,图像都是缩放,所以层数应该多一点。我没看我代码并没有证实。然后我发现好像如果层数少一点,点运也更准一点。
反正我是在公园里面跑了一天,对着自己的摩托拍了,标定之前跑了,标定之后跑了。也跑出来漂亮的点运。只是图片在iPhone上面。过今天上传
这个是一个没开张的商场外面的。有人行道。泊油路。商场的外面,相当于步行街。面积,就和几栋楼差不多大。
这个点运漂亮吧。这个是一排树木的点云。我还有更漂亮的。。。过几天上传。还有摩托车上跑的结果
原文:http://www.cnblogs.com/tscmga/p/6359721.html