0


根据本人安装步骤下的slambook2例程报错及解决

前篇:ubuntu20下slambook2环境安装及问题解决

一、Eigen(ch3)

问题一:#include错误,请更新includePath

Eigen有路径问题,它被下载到"/usr/local/include/eigen3"和"/usr/include/eigen3"中,使用vsc时,会划红色波浪线--#include错误,请更新includePath

我们只需将"/usr/local/include/eigen3"中的Eigen复制到上级目录(不推荐复制"/usr/include/eigen3",因为"/usr/include/"是系统路径,让系统自己管理是最好的,详见**参考[1]**),即"/usr/include/"中即可。"eigen3"下打开终端。

sudo cp --recursive ./Eigen ..

之后的类似问题雷同。

问题二:error:‘decay_t’is not a nenber of 'std'; did you mean 'decay'?

c24bf667a7a944bcb71749087441aa31.png

这是CMakelists.txt有问题。原:

995c8c8206df44198eb5decb841bd05e.png

只需修改第四行即可,原因是当时写这个代码的库的版本太老,因此c++标准是c++11即可,而我们下的库版本太新,用到了c++新版本的东西。改:

d210fe1d2b154f0486cadcb02b11688d.png

二、Sophus(ch4)

问题一:error: ‘std::optional’ has not been declared572|std::optional<Scalar> const& theta_o = std::nullopt){

58e96165dfd2463b99a8c5af4d7ff564.png

同一、Eigen问题二,改:

e12858f800074687988e4fef00be108b.png

三、OpenCV(ch5、ch7、ch8、ch13)

ch5:

问题一: error:‘decay_t’is not a nenber of 'std'; did you mean 'decay'?

同一、Eigen问题二,改下c++标准。

ch5:

问题二:terninate called after throwing an instance of 'std ::logic_errorwhat():basic_string: :_M_construct null not valid

fdb71aa20f684456a73b0cb4c9f21553.png

原因是缺少参数输入,因此只要在后面参数传入一个图像路径即可。改:

6aa91d04e5a94430afd76456a8a05c28.png

ch7:

问题一:Could not find a configuration file for package "OpenCV" that is compatiblewith requested version "3".

原因是当时编译时用的apt安装,安装的4.2,不是3.x版本。修改CMakeLists.txt,将"OpenCV 3 REQUIRED"改为"OpenCV 4 REQUIRED"。

ch7:

问题二:error:‘CV_LOAD_IMAGE_cOLOR’was not declared in this scope

原因是3和4版本的命名不同,详细看**参考[3]**,将所有.cpp文件中的这个变量改为"-1"。

ch7:

问题三:error: 'cv_FM_8POINT’ was not declared in this scope

原因同ch8_问题三,将"CV_FM_8POINT"改为"FM_8POINT"。

ch8:

问题一:error: ‘CV_GRAY2BGR’ was not declared in this scope

同上,名称问题,将"CV_GRAY2BGR"改为"cv::COLOR_GRAY2BGR"

ch13:

问题一:****error: ‘CV_FILLED’ was not declared in this scope

把"ch13/src/fronted.cpp"文件"CV_FILLED"改为"cv::FILLED"即可。

四、g2o(ch6)

问题一:error:'Pake_ unique' is not a menber of 'g2o'; did you mean ' std : :make_unique’?

c++标准已经改为17之后,报错:

6f7cfb69948f4d53b8143ca46b5fb703.png

看来不是c++标准的问题,根据**参考[3]**,我当前时间下的是最新的g2o(20230806_git),我决定重装为20230223_git:

374995a1465443f985a64514c63061cd.png

卸载g2o,参考[4]。

重新编译安装:

github:20230323_git下载

我选择根据下载的g2o文档"README.md"进行编译重装。

sudo apt install libeigen3-dev libspdlog-dev libsuitesparse-dev qtdeclarative5-dev qt5-qmake libqglviewer-dev-qt5
cd g2o-20230223_git
mkdir build && cd build
cmake ..
make -j8
sudo make install

编译slambook2/ch6成功!

efe0f3cf61a941e6ae7091d1565e05e2.png

五、CSparse(ch9)

问题一:cmake/FindcSparse.cmake:24(find_package_handle_standard_args)

问题二:bundle_adjustment_g2o.cpp:(.text+0x1961): undefined reference to `g2o::csparse::CSparse::CSparse()'

依据**参考[5]**在"ch9/CMakeLists.txt"中加入

target_link_libraries(g2o_demo  ${catkin_LIBRARIES} g2o_core g2o_types_slam3d g2o_solver_csparse g2o_stuff g2o_csparse_extension)
target_link_libraries(bundle_adjustment_g2o  ${catkin_LIBRARIES} g2o_core g2o_types_slam3d g2o_solver_csparse g2o_stuff g2o_csparse_extension)

具体如图所示:

六、DBoW3(ch11)

问题一:error: ISO C++17 does not allow dynamic exception specifications

这次不要将CMakeLists.txt中的std标准改为C++17,而是改为C++14。因为动态异常规格已在C++17标准中被移除。

问题二:make[2]: *** 没有规则可制作目标“/usr/local/lib/libDBoW3.a”,由“gen_vocab” 需求。 停止。

将CMakeLists.txt中的

set( DBoW3_LIBS "/usr/local/lib/libDBoW3.a" )

改为

set( DBoW3_LIBS "/usr/local/lib/libDBoW3.so" )

因为通过

可以知道它没静态库,只有动态库了。

至此,slambook2的例程都能编译成功了。

七、参考

参考[1]:Linux笔记之本地安装(用户安装)目录和系统安装目录

参考[2]:SLAM十四讲,第七章程序ch7报错, error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope

参考[3]:error: ‘make_unique’ is not a member of ‘g2o’ 的参考解决方法

参考[4]:ubuntu卸载g2o库

参考[5]:关于G2O库的坑~

标签: linux 机器人 c++

本文转载自: https://blog.csdn.net/qq_52086693/article/details/141180345
版权归原作者 noob_qing 所有, 如有侵权,请联系我们删除。

“根据本人安装步骤下的slambook2例程报错及解决”的评论:

还没有评论