SLAM十四讲ch5及ch13(第二版ch12)点云相关问题

这两章点云部分的内容基本相同,区别是ch13对点云做了进一步处理来增强地图的可视化效果。而这两部分出错的位置基本也相同,都是段错误,因此一起做一个整理。具体报错如下:

既然是段错误,就利用core来调试。

1.命令行输入ulimit -a查看core文件大小,然后修改其大小。具体如下:

ulimit -a
ulimit -c unlimited

2.GDB调试

在命令行输入gdb build/pointcloud_mapping core

gdb build/pointcloud_mapping  core

结果如下;

 可以看出是Eigen对象的问题,根据大佬说明,在矩阵运算时调用了 Eigen 库,为了提高运算速度,向量化必须要求向量是以 16 字节即 128bit 对齐的方式分配内存空间,所以针对这个问题,容器需要使用 eigen 自己定义的内存分配器。对 Eigen 中的固定大小的类使用 STL 容器的时候,如果直接使用就会出错。

3.解决方法

加入头文件:#include<eigen3/Eigen/StdVector>

#include<eigen3/Eigen/StdVector>

将vector<Eigen::Isometry3d> poses改为vector<Eigen::Isometry3d,Eigen::aligned_allocator<Eigen::Isometry3d>> poses;

//vector<Eigen::Isometry3d> poses;        //相机位姿
vector<Eigen::Isometry3d,Eigen::aligned_allocator<Eigen::Isometry3d>> poses;

重新编译,运行成功!

 资料:

(44条消息) SLAM十四讲点云实践中段错误核心转储解决方法_luanfei3717的博客-CSDN博客icon-default.png?t=M3C8https://blog.csdn.net/luanfei3717/article/details/80268597

猜你喜欢

转载自blog.csdn.net/weixin_52402390/article/details/124309161