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

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

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

解决办法:

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值