orb-slam2+Windows系统+debug模式运行成功

来源:互联网 发布:linux 新建用户组 编辑:程序博客网 时间:2024/06/08 06:23

将github上的orb-slam2在Ubuntu上运行后,就想要搬到自己喜欢的windows上运行(高博士说,学slam 别想逃避Linux,我很愧疚),照着冯兵老师的指导,将orb-slam2 cmake到vs2013上,花了近一个月(我的天哪,浪费生命),release版本才成功运行,debug版本则是各种错误。大神们忙得很,无心理会这些错误,可是我有强迫症,我要让debug模式跑起来,于是便开始了一周的填坑工作奋斗,要知道我可是个有工作的人,还是个女的快哭了

第一:

为了方便调试,我专门针对双目模块,自己建了空工程,将stereo_kitti.cpp(主函数) 与src文件夹下的.cpp统一弄到了一个源文件文件夹下,include文件夹下的文件不变添加到头文件中。此时,我的工程什么配置都没有,一片红啊。。

第二:

接下来,各种库cmake、编译,过程大同小异,网上教程也有很多,我略过偷笑

第三:配置问题

包含目录:

F:\denpendenciesForOrb\eigen3

D:\2-4-9\opencv\myBuild\install\include

D:\2-4-9\opencv\myBuild\install\include\opencv

D:\2-4-9\opencv\myBuild\install\include\opencv2

F:\denpendenciesForOrb\Pangolin\MyBuild\src\include

F:\denpendenciesForOrb\Pangolin\include

F:\denpendenciesForOrb\glew-1.6.0\include

F:\orb-slam2-stereo\Thirdparty\g2o\g2o\core

F:\orb-slam2-stereo\Thirdparty\g2o\g2o\solvers

F:\orb-slam2-stereo\Thirdparty\g2o\g2o\stuff

F:\orb-slam2-stereo\Thirdparty\g2o\g2o\types

F:\orb-slam2-stereo\Thirdparty\g2o\g2o

库目录:

D:\2-4-9\opencv\myBuild\install\lib

F:\orb-slam2-stereo\Thirdparty\DBoW2\bin\Debug

F:\denpendenciesForOrb\Pangolin\MyBuild\src\Debug

F:\denpendenciesForOrb\glew-1.6.0\lib

F:\orb-slam2-stereo\Thirdparty\g2o\bin\Debug

链接库:

kernel32.lib
user32.lib
gdi32.lib
winspool.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
comdlg32.lib
advapi32.lib
pangolin.lib
glu32.lib
opengl32.lib

F:\denpendenciesForOrb\Pangolin\MyBuild\external\glew\lib\glew.lib
F:\denpendenciesForOrb\Pangolin\MyBuild\external\libpng\lib\libpng16_static.lib
F:\denpendenciesForOrb\Pangolin\MyBuild\external\zlib\lib\zlibstatic.lib
F:\denpendenciesForOrb\Pangolin\MyBuild\external\libjpeg\lib\jpeg.lib
dbow2.lib
g2o.lib

常规设置:全程序优化

预处理器:

WIN32
_WINDOWS
_DEBUG
NOMINMAX
WINDOWS
ORBSLAM_EXPORT
CMAKE_INTDIR="Debug"

第四:debug下生成过程及运行中的问题

在VS中出现fatal error C1128: 节数超过对象文件格式限制:请使用/bigobj 进行编译的错误

这是由于源代码文件太大的原因,需添加选项/bigobj,在项目属性-> C/C++ ->命令行的附加选项中添加/bigobj。

yaml文件加载失败

检查下你添加的lib库是否debugrelease的混了,如果都有,那么去掉不用的

指针未初始化问题:KeyFrame.cpp

点云不计算

bm变量未初始化,导致debug下自动赋值为位全1(负数),release下自动赋值为随机值。

下标出界

1、预测金字塔层数时预测值大于等于8;随机选择3/8/点处,随机值重复

2、FrameDrawer.cpp中

 map/set iterator notdereferencable(MapPoint.cpp

迭代器到头或者迭代器叠加造成

vectoriterators incompatible(void Tracking::UpdateLocalKeyFrames()中

要略过这个检查,可以用#define _HAS_ITERATOR_DEBUGGING 0不过建议还是检查线程的同步代码。

vector迭代器的几种失效的情况:

1.当插入(push_back)一个元素后,end操作返回的迭代器肯定失效。

2.当插入(push_back)一个元素后,capacity返回值与没有插入元素之前相比有改变,则需要重新加载整个容器,此时firstend作返回的迭代器都会失效。

3.当进行删除操作(erasepop_back)后,指向删除点的迭代器全部失效;指向删除点后面的元素的迭代器也将全部失效。

 

修改完以上错误,debug模型成功运行啦得意

具体问题具体联系再见


0 0
原创粉丝点击