本章的内容没有理论知识,完全是由实践部分组成的。 本章主要有两大难点。 第一,g2o的使用。对此,我总结了到了之前的一章中: SLAM14讲学习笔记(十一)g2o图优化中的要点与难点(前端VO中雅克比矩阵的定义) 第二,程序的架构,各个部分的组装。确实如高博所述,这章内容让人体会到了怎么一步一步由砖头搭建起大厦的过程。搭建的过程中,文章内容缺乏注释,因此,我在学习过程中将自己的理解和注释写到了程序中,为了方便保存,上传到了github中。 github链接:slam14讲第9讲设计前端-带注释代码 如果对其中内容有疑问,欢迎star并且留言,我很快就会回复。
此外,如果是跟着代码一步一步搭起来的,有几点需要注意一下: 除了书上已经介绍的修改内容,从0.1到0.2版本,有两处还需要额外修改:第一,在common.h中,需要加入SE3相关内容(原先只有SO3)。第二,需要修改Camera.h,使其包含config.h,并修改1.0版本中的构造函数,从config.h中获得相机内参。 从0.2版本更新到0.3版本,需要额外修改两处:1.在visual_odometry.h中更新头文件 2.修改src文件夹下的CmakeList文件,使其包含g2o_types.cpp。 从0.3版本更新到0.4版本,需要额外修改两处:1.修改config下的yaml文件。2.修改run_vo.cpp文件,加入多出来的一个头文件和对于原图的描点操作。
0.4版本有个未解决的问题,即:大概在第165张图的时候,vo.cpp中num_lost会增多,每次多1,之后到第175帧的时候超出设定的最小值,vo丢失。我个人推测是由于缺乏对地图的优化导致的。我已经在高博的github中提出了疑问。等待回答之后,我会将内容补充在这里。 有网友回复了我的issue: “应该是isInFrame()这个函数的原因,我更改后可以跑完整个数据集” 我忙着找工作,现在是没时间试了,大家可以试一下,看看该怎么改。
在学习的过程中,我也参考了其他博主的内容,为了表示对他们的尊重和他们的原创性,我将他们的博客内容列在这里: 更加多注释地学习视觉SLAM第九讲程序[1] 更加多注释地学习视觉SLAM第九讲程序[2] 对本章内容有疑问的,欢迎评论交流!