视觉SLAM十四讲ch5问题记录

1.rgbd

1.1 报错:编译执行make时报错(没有规则可制作目标“/usr/lib/libOpenNI.so)

Scanning dependencies of target joinMap
[ 50%] Building CXX object CMakeFiles/joinMap.dir/joinMap.o
make[2]: *** 没有规则可制作目标“/usr/lib/libOpenNI.so”,由“joinMap” 需求。 停止。
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/joinMap.dir/all' failed
make[1]: *** [CMakeFiles/joinMap.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

解决:这应该是未安装Pangolin或之前的安装损坏不能用了,可参考一下链接安装:

Ubuntu20.04安装Pangolin(视觉SLAM十四讲)-优快云博客

1.2 但如果之前在别的目录安装过,现在不能用了,再次安装Pangolin可能会报如下错误:

CMake Error: The current CMakeCache.txt directory /home/qh/Desktop/gaoxiang_code/slambook2/3rdparty/Pangolin/build/CMakeCache.txt is 
different than the directory /home/qh/Desktop/slambook/3rdparty/Pangolin/build where 
CMakeCache.txt was created. This may result in binaries being created in the wrong place. 
If you are not sure, reedit the CMakeCache.txt
CMake Error: The source "/home/qh/Desktop/gaoxiang_code/slambook2/3rdparty/Pangolin/CMakeLists.txt" 
does not match the source "/home/qh/Desktop/slambook/3rdparty/Pangolin/CMakeLists.txt" 
used to generate cache.  Re-run cmake with a different source directory.

这个问题涉及到CMake在构建项目时遇到的路径不一致问题。具体来说,CMake缓存文件(CMakeCache.txt)的当前目录与创建该缓存文件时所用的目录不一致,同时CMakeLists.txt文件的路径也不匹配。这通常发生在尝试在不同目录下复用或重新构建项目时,而没有正确清理或重新配置CMake环境。

解决:删掉原安装目录里的文件及现要安装目录下build文件夹的里文件,再重新安装Pangolin。

1.3 Pangolin安装后还可能报一大堆错(报错打印末尾段如下)

text<char, fmt::v8::detail::error_handler> > >&)’中:
joinMap.cpp:(.text._ZN3fmt2v86detail15do_parse_arg_idIcRZNS1_15parse_precisionIcRNS1_13specs_checkerINS1_21dynamic_specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEEEEEEEEPKT_SE_SE_OT0_E17precision_adapterEESE_SE_SE_SG_[_ZN3fmt2v86detail15do_parse_arg_idIcRZNS1_15parse_precisionIcRNS1_13specs_checkerINS1_21dynamic_specs_handlerINS0_26basic_format_parse_contextIcNS1_13error_handlerEEEEEEEEEPKT_SE_SE_OT0_E17precision_adapterEESE_SE_SE_SG_]+0xb5):对‘fmt::v8::detail::assert_fail(char const*, int, char const*)’未定义的引用
CMakeFiles/joinMap.dir/joinMap.o:在函数‘int fmt::v8::detail::get_dynamic_spec<fmt::v8::detail::width_checker, fmt::v8::basic_format_arg<fmt::v8::basic_format_context<fmt::v8::appender, char> >, fmt::v8::detail::error_handler>(fmt::v8::basic_format_arg<fmt::v8::basic_format_context<fmt::v8::appender, char> >, fmt::v8::detail::error_handler)’中:
joinMap.cpp:(.text._ZN3fmt2v86detail16get_dynamic_specINS1_13width_checkerENS0_16basic_format_argINS0_20basic_format_contextINS0_8appenderEcEEEENS1_13error_handlerEEEiT0_T1_[_ZN3fmt2v86detail16get_dynamic_specINS1_13width_checkerENS0_16basic_format_argINS0_20basic_format_contextINS0_8appenderEcEEEENS1_13error_handlerEEEiT0_T1_]+0x27e):对‘fmt::v8::detail::error_handler::on_error(char const*)’未定义的引用
CMakeFiles/joinMap.dir/joinMap.o:在函数‘int fmt::v8::detail::get_dynamic_spec<fmt::v8::detail::precision_checker, fmt::v8::basic_format_arg<fmt::v8::basic_format_context<fmt::v8::appender, char> >, fmt::v8::detail::error_handler>(fmt::v8::basic_format_arg<fmt::v8::basic_format_context<fmt::v8::appender, char> >, fmt::v8::detail::error_handler)’中:
joinMap.cpp:(.text._ZN3fmt2v86detail16get_dynamic_specINS1_17precision_checkerENS0_16basic_format_argINS0_20basic_format_contextINS0_8appenderEcEEEENS1_13error_handlerEEEiT0_T1_[_ZN3fmt2v86detail16get_dynamic_specINS1_17precision_checkerENS0_16basic_format_argINS0_20basic_format_contextINS0_8appenderEcEEEENS1_13error_handlerEEEiT0_T1_]+0x27e):对‘fmt::v8::detail::error_handler::on_error(char const*)’未定义的引用
CMakeFiles/joinMap.dir/joinMap.o:在函数‘void fmt::v8::detail::check_string_type_spec<fmt::v8::detail::error_handler>(fmt::v8::presentation_type, fmt::v8::detail::error_handler&&)’中:
joinMap.cpp:(.text._ZN3fmt2v86detail22check_string_type_specINS1_13error_handlerEEEvNS0_17presentation_typeEOT_[_ZN3fmt2v86detail22check_string_type_specINS1_13error_handlerEEEvNS0_17presentation_typeEOT_]+0x22):对‘fmt::v8::detail::error_handler::on_error(char const*)’未定义的引用
CMakeFiles/joinMap.dir/joinMap.o:在函数‘unsigned long long fmt::v8::detail::width_checker<fmt::v8::detail::error_handler>::operator()<int, 0>(int)’中:
joinMap.cpp:(.text._ZN3fmt2v86detail13width_checkerINS1_13error_handlerEEclIiLi0EEEyT_[_ZN3fmt2v86detail13width_checkerINS1_13error_handlerEEclIiLi0EEEyT_]+0x2f):对‘fmt::v8::detail::error_handler::on_error(char const*)’未定义的引用
CMakeFiles/joinMap.dir/joinMap.o:在函数‘unsigned long long fmt::v8::detail::width_checker<fmt::v8::detail::error_handler>::operator()<unsigned int, 0>(unsigned int)’中:
joinMap.cpp:(.text._ZN3fmt2v86detail13width_checkerINS1_13error_handlerEEclIjLi0EEEyT_[_ZN3fmt2v86detail13width_checkerINS1_13error_handlerEEclIjLi0EEEyT_]+0x2f):对‘fmt::v8::detail::error_handler::on_error(char const*)’未定义的引用
CMakeFiles/joinMap.dir/joinMap.o:joinMap.cpp:(.text._ZN3fmt2v86detail13width_checkerINS1_13error_handlerEEclIxLi0EEEyT_[_ZN3fmt2v86detail13width_checkerINS1_13error_handlerEEclIxLi0EEEyT_]+0x32): 跟着更多未定义的参考到 fmt::v8::detail::error_handler::on_error(char const*)
collect2: error: ld returned 1 exit status
CMakeFiles/joinMap.dir/build.make:113: recipe for target 'joinMap' failed
make[2]: *** [joinMap] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/joinMap.dir/all' failed
make[1]: *** [CMakeFiles/joinMap.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

这应该是cmakelists文件没有写完整,改成如下代码:
参考自:Ubuntu20.04 18.04编译视觉SLAM十四讲slambook2/ch5/rgbd_ch5点云共有0个点-优快云博客

project(rgbd)
 
cmake_minimum_required(VERSION 3.10)
 
find_package(Sophus REQUIRED)
 
add_executable(joinMap joinMap.cpp)
 
include_directories(${Sophus_INCLUDE_DIRS})
 
#链接OpenCV库
 
find_package(OpenCV REQUIRED)
 
#添加头文件
 
include_directories( ${OpenCV-INCLUDE_DIRS})
 
target_link_libraries(joinMap ${OpenCV_LIBS} ${Pangolin_LIBRARIES})
 
 
find_package(Pangolin REQUIRED)
 
 
target_link_libraries(joinMap ${OpenCV_LIBS} ${Pangolin_LIBRARIES})
 
 
# Eigen
 
include_directories("/usr/local/include/eigen3")
 
target_link_libraries(joinMap ${Sophus_LIBRARIES} fmt)
 
 
#链接c++11
 
set(CMAKE_CXX_FLAGS "-std=c++11") 

rgbd程序运行成功记录:


### 关于《视觉SLAM十四》第七章的实践指导与代码实现 对于《视觉SLAM十四》第七章中的实践部分,该章节主要围绕着直接法和特征点法进行深入探讨,并提供了相应的理论基础以及算法实现思路。为了帮助读者更好地理解和应用这些方法,在书籍配套资源中确实包含了丰富的代码实例。 #### 获取第七章相关代码示例的方法: 可以通过访问书籍官方提供的GitHub仓库来获取完整的源码包[^1]。具体来说,《视觉SLAM十四》第二版的所有实验代码都托管在这个地址:<https://github.com/gaoxiang12/slambook2>。此仓库不仅涵盖了书中提到的各种算法的具体实现细节,还包括了必要的依赖库安装指南和其他辅助工具。 针对第七章的内容,建议重点查看`chapter7`文件夹下的项目结构。这里通常会包含用于演示直接法和基于特征点的地图构建过程的相关脚本。通过阅读并运行这部分代码,可以加深对这两种不同SLAM技术的理解。 另外,如果遇到任何编译或环境配置方面的问题,可参照其他用户的笔记分享获得额外的帮助和支持[^2]。例如,有学习者记录下了如何正确设置开发环境的过程,这对于初学者尤其有用。 #### 示例代码片段展示: 以下是来自书中原生C++代码的一个简化版本,展示了如何初始化一个顶点(Vertex),它代表了一个位姿估计问题中的未知变量。注意这里的维度设定是为了适应特定的任务需求——即同时考虑到了旋转和平移的变化情况。 ```cpp // 定义一个具有九个自由度的姿态节点类 class VertexPose : public g2o::BaseVertex<9, Eigen::Matrix<double, 9, 1>> { protected: virtual void oplusImpl(const number_t* update_) override; public: EIGEN_MAKE_ALIGNED_OPERATOR_NEW; // 构造函数 VertexPose() {} // 设置初始姿态参数(R,t,f,k0,k1) }; ``` 上述代码摘自实际案例研究的一部分,其中涉及到了g2o框架内的某些特性。更多详细的解释可以在原作者提供的文档里找到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值