在编译openvslam的过程中遇到了如下几个问题:
1、有关opencv中undistortPoints函数参数的问题:opencv版本过低,选用高版本即可。
2、pangolin中函数was not declared。参考https://blog.csdn.net/liudahanghang/article/details/80601136
把pangolin版本回退到文档中指定的ad8b5f8即可。
3、报错如下:
/home/yasaburo3/project/openvslam/test/openvslam/data/bow_vocabulary.cc:38:26: error: ‘util’ has not been declared
bow_vocab->transform(util::converter::to_desc_vec(desc1), bow_vec_1, bow_feat_vec_1, 4);
^~~~
/home/yasaburo3/project/openvslam/test/openvslam/data/bow_vocabulary.cc:39:26: error: ‘util’ has not been declared
bow_vocab->transform(util::converter::to_desc_vec(desc2), bow_vec_2, bow_feat_vec_2, 4);
找到出现问题的代码:
#ifdef USE_DBOW2
bow_vocab->transform(util::converter::to_desc_vec(desc1), bow_vec_1, bow_feat_vec_1, 4);
bow_vocab->transform(util::converter::to_desc_vec(desc2), bow_vec_2, bow_feat_vec_2, 4);
#else
bow_vocab->transform(desc1, 4, bow_vec_1, bow_feat_vec_1);
bow_vocab->transform(desc2, 4, bow_vec_2, bow_feat_vec_2);
#endif
这里说明在使用DBoW2的情况下会用util::converter,干脆直接用FBoW了,在编译的时候,添加设置:
-DBOW_FRAMEWORK=FBoW
4、
/usr/bin/ld: warning: libavcodec-ffmpeg.so.56, needed by /usr/local/opencv-4.3.0/build/lib/libopencv_videoio.so.4.3.0, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libavformat-ffmpeg.so.56, needed by /usr/local/opencv-4.3.0/build/lib/libopencv_videoio.so.4.3.0, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libavutil-ffmpeg.so.54, needed by /usr/local/opencv-4.3.0/build/lib/libopencv_videoio.so.4.3.0, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libswscale-ffmpeg.so.3, needed by /usr/local/opencv-4.3.0/build/lib/libopencv_videoio.so.4.3.0, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libopencv_core.so.3.2, needed by //usr/local/lib/libfbow.so, may conflict with libopencv_core.so.4.3
后面是一堆未定义的引用。
找到这个库,ldd一下,确实是找不到这几个库
ldd libopencv_videoio.so.4.3.0
libavcodec-ffmpeg.so.56 => not found
libavformat-ffmpeg.so.56 => not found
libavutil-ffmpeg.so.54 => not found
libswscale-ffmpeg.so.3 => not found
但x86_64-linux-gnu文件夹里面有很多类似名字的库:
/usr/lib/x86_64-linux-gnu$ ls libavcodec*
libavcodec.a libavcodec.so.57 libavcodec.so.58
libavcodec.so libavcodec.so.57.107.100 libavcodec.so.58.35.100
我猜是这个库更新了之后名字改了?尝试创建软链接之后并没有效果。
整理一下问题:
使用DBoW2时util报错 -> 改用FBoW -> opencv4报错 -> 改用ubuntu自带的opencv3.2.0 -> 版本不够(至少3.3.1)
所以只好重新装了一个opencv3.4.0,在安装的过程中又遇到了很多坑,花了一整天的时间,才把opencv也搞定。
最后使用opencv3.4.0,以及FBoW,终于跑通了。
./run_euroc_slam\
> -v /home/yasaburo3/Documents/FBoW_orb_vocab-main/orb_vocab.fbow\
> -d /home/yasaburo3/Datasets/EuRoC/MH_01_easy/mav0\
> -c ../example/euroc/EuRoC_mono.yaml
参考:https://blog.csdn.net/xiangxianghehe/article/details/90600396