NGD-SLAM(三)

有了ORB-SLAM3在win7下编译的经验,就想能不能直接把NGD-SLAM在win7下编译,用CMake生成了vs的项目文件,编译遇到不少问题。

首先是Eigen,编译的时候会报以大堆warning,直接导致编译器的堆空间不够用,换了几个版本的Eigen,结果都一样,感觉过度使用模板,会导致编译时间过长,还导致一堆问题,在网上查了解决方案,在vcxproj文件中加入 x64 ,部分解决了问题,但有几个Eigen文件,修改了vcxproj文件仍然会报错,又在网上查了查,需要修改Eigen的代码才能解决问题,最后关闭所有的warning提示,编译过程清静了不少。

然后是opencv,因为下载的版本是4.1.1(用的vs2015,对C++11支持不是很彻底,最新版4.12.0编译会有问题),等到调试的时候,才发现读取YOLO的Darknet是会出问题,然后查看文档才发现,NGD-SLAM需要opencv4.4以上的版本,已经编译了半天的opencv,实在不想再下个新版本了,就查看了4.12.0的读取darknet的文件darknet_io.cpp,把里面的读取layer的部分代码替换了4.1.1的版本,重新编译,调试通过。

再有就是调试的问题,编译通过了运行程序,发现窗口一直处于Waiting for image的状态,因为还没来的及仔细阅读代码,大致跟踪了一下,发现是YOLO的问题,因为mbFinishRequested变量没有被初始化导致YOLO线程执行一次之后直接退出,而Track线程会一直等待YOLO线程的处理结果从而导致Track没有更新,画面一直处于等待状态。

记录下编译过程,希望对有NGD-SLAM有兴趣的人有所帮助。

最后放上一张win7下的截图,可以看到NGD-SLAM处理动态场景还是不错的,虽然有些时候还是会出现误判,而且optical flow似乎不是很稳定,有时候会crash,等仔细阅读了代码再看能不能解决。