跑通GAC-mapping花了不少时间,主要问题在于opencv版本带来的麻烦。期间遇到以下几个问题:
1)opencv3.4编译时,遇到cuda的相关编译报错,"unspported GNU version! gcc versions later than 8 are not supported"
原因:从字面上看是gcc版本太高,但是改成gcc v7还是不行。可能是跟我电脑的cuda版本有关。
解决办法:绕过cuda相关选项的编译
cmake ../ -DWITH_CUDA=OFF -DMAKE_BUILD_TYPE=RELEASE
make -j4
sudo make install
2)catkin_make编译警告,warning: libopencv_core.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_core.so.3.4。
原因:Ubuntu20.04用apt安装的cv_bridge用的opencv是4.2,然而GAC-mapping用的是opencv3。虽然是警告,但是不解决的话会造成程序崩溃。
解决办法:卸载原有cv_bridge,下载vision_opencv(选择noetic分支,下载zip文件),只编译cv_bridge:
mkdir build && cd build && make -j4 && sudo make install
3)catkin_make报错,CV_OVERRIDE dose not name a type。即使CMakesLists.txt中设置了-std=c++14也没用。
原因:未知。理论上CV_OVERRIDE是c++11特性,不应该有这个错误。
解决办法:将CV_OVERRIDE改成override(我的是在/usr/include/opencv2/中修改descriptor.hpp)
4)patch-netvlad预训练模型无法下载。
原因:patch-netvlad作者原先使用的cloudstor这个托管预训练模型的网站在2023年12月关闭了,只有源仓库的readme更新了,其他转发仓库的readme并没有更新
解决办法:看原作者的github网站patch-netvlad,找到"alternatively, you can manually ..."这一行,单击打开,就可以看到新的预训练模型网站了。