视觉SLAM十四讲(第二版)ch12实践问题

文章讲述了在使用PCL库时遇到的编译错误,包括`dense_mapping.cpp`中的`update`函数类型修改和`surfel_mapping.cpp`中`setPolynomialFit`函数的名称错误。解决方法是更新CMakeLists文件,将C++标准从c++11改为c++14。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.dense_mapping.cpp

运行可执行程序时出现segmention fault段错误

解决方法:

将update函数类型由bool改成void(原函数段没有写返回值)

2.pointcloud_mapping.cpp

(c++11标准)编译执行make命令后报一系列错误:

/usr/include/pcl-1.12/pcl/common/point_tests.h:124:38: error: ‘pcl::traits::HasNoXYZ’ has not been declared
  124 |   template <typename PointT, traits::HasNoXYZ<PointT> = true> constexpr inline bool
      |                                      ^~~~~~~~
/usr/include/pcl-1.12/pcl/common/point_tests.h:124:46: error: expected ‘>’ before ‘<’ token
  124 |   template <typename PointT, traits::HasNoXYZ<PointT> = true> constexpr inline bool
...

In file included from /usr/include/c++/11/algorithm:62,
                 from /usr/local/include/opencv4/opencv2/core/base.hpp:55,
                 from /usr/local/include/opencv4/opencv2/core.hpp:53,
                 from /usr/local/include/opencv4/opencv2/core/core.hpp:48,
                 from /home/jadrian/fslambook2/ch12/dense_RGBD/pointcloud_mapping.cpp:6:
/usr/include/c++/11/bits/stl_algo.h: In instantiation of ‘_OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = __gnu_cxx::__normal_iterator<const pcl::Vertices*, std::vector<pcl::Vertices> >; _OIter = std::back_insert_iterator<std::vector<pcl::Vertices> >; _UnaryOperation = pcl::PolygonMesh::concatenate(pcl::PolygonMesh&, const pcl::PolygonMesh&)::<lambda(int)>]’:
/usr/include/pcl-1.12/pcl/PolygonMesh.h:42:21:   required from here
/usr/include/c++/11/bits/stl_algo.h:4296:31: error: no match for call to ‘(pcl::PolygonMesh::concatenate(pcl::PolygonMesh&, const pcl::PolygonMesh&)::<lambda(int)>) (const pcl::Vertices&)’
 4296 |         *__result = __unary_op(*__first);
      |                     ~~~~~~~~~~^~~~~~~~~~

...

make[2]: *** [dense_RGBD/CMakeFiles/surfel_mapping.dir/build.make:76:dense_RGBD/CMakeFiles/surfel_mapping.dir/surfel_mapping.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:198:dense_RGBD/CMakeFiles/surfel_mapping.dir/all] 错误 2
make: *** [Makefile:91:all] 错误 2

原因:

PCL1.9以上版本使用的是c++14标准

解决办法:

在dense_RGBD下的cmakelist文件中,将:

set(CMAKE_CXX_FLAGS "-std=c++11 -O2")

改为:

set(CMAKE_CXX_FLAGS "-std=c++14 -O2")3.

3.surfel_mapping.cpp

编译过程报错:(成员函数setPolynomialOrder)

error: ‘class pcl::MovingLeastSquares<pcl::PointXYZRGB, pcl::PointXYZRGBNormal>’ has no member named ‘setPolynomialFit’; did you mean ‘setPolynomialOrder’?

31 |     mls.setPolynomialFit(polynomial_order > 1);
      |         ^~~~~~~~~~~~~~~~
      |         setPolynomialOrder

解决办法:

根据提示,将对应对应函数名更改。

### 关于《视觉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框架内的某些特性。更多详细的解释可以在原作者提供的文档里找到。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值