SLAM十四讲第12讲pointcloud_mapping.cpp报错
报错如下
点击查看代码
/home/vipuser/桌面/slambook2/ch12/ch12_gzj/cmake-build-debug/dense_RGBD/pointcloud_mapping
正在将图像转换为点云...
转换图像中: 1
进程已结束,退出代码为 139 (interrupted by signal 11:SIGSEGV)
*pointCloud += *tmpFiltered
拼接操作,会触发 PCL 的点云拷贝逻辑,而 Eigen 的Isometry3d对齐约束在多线程 / 拷贝场景下仍会失效,最终导致段错误(即使内存充足)。
步骤 1:修改代码(注释统计滤波,保留核心点云转换)
找到代码中统计滤波的这段:
点击查看代码
// 统计滤波去除离群点(避免噪声点影响)
if (!current->empty()) {
PointCloud::Ptr tmpFiltered(new PointCloud);
pcl::StatisticalOutlierRemoval<PointT> statistical_filter;
statistical_filter.setInputCloud(current);
statistical_filter.setMeanK(50); // 邻域点数
statistical_filter.setStddevMulThresh(1.0); // 标准差阈值
statistical_filter.filter(*tmpFiltered);
// 合并到总点云
*pointCloud += *tmpFiltered;
cout << "第 " << i+1 << " 张图像滤波后点数: " << tmpFiltered->size() << endl;
}
点击查看代码
// 临时跳过统计滤波,先验证核心逻辑
if (!current->empty()) {
// 直接合并原始点云,不滤波(避免PCL滤波的对齐冲突)
*pointCloud += *current;
cout << "第 " << i+1 << " 张图像点数: " << current->size() << endl;
}
点击查看代码
/home/vipuser/桌面/slambook2/ch12/ch12_gzj/cmake-build-debug/dense_RGBD/pointcloud_mapping
正在读取图像和位姿...
读取彩色图: ./data/color/1.png
读取深度图: ./data/depth/1.png
读取彩色图: ./data/color/2.png
读取深度图: ./data/depth/2.png
读取彩色图: ./data/color/3.png
读取深度图: ./data/depth/3.png
读取彩色图: ./data/color/4.png
读取深度图: ./data/depth/4.png
读取彩色图: ./data/color/5.png
读取深度图: ./data/depth/5.png
图像和位姿读取完成,共 5 组数据。
正在将图像转换为点云...
转换第 1 张图像...
第 1 张图像点数: 307200
转换第 2 张图像...
第 2 张图像点数: 307200
转换第 3 张图像...
第 3 张图像点数: 307200
转换第 4 张图像...
第 4 张图像点数: 307200
转换第 5 张图像...
第 5 张图像点数: 307200
原始拼接点云总数: 1536000
体素滤波后点云总数: 47165
成功保存点云到: map.pcd
进程已结束,退出代码为 139 (interrupted by signal 11:SIGSEGV)

猜测:Ubuntu 20.04 下 Eigen 和 PCL 默认版本不兼容,是导致内存对齐崩溃的核心根源(这是 20.04 系统下 SLAM 开发的经典坑)。
卸载pcl 1.10版本 重装pcl 1.12.0
点击查看代码
# 1. 卸载旧版PCL
sudo apt remove libpcl-dev
sudo apt autoremove
# 2. 安装依赖
sudo apt install libflann-dev libvtk7-dev libqhull-dev libusb-1.0-0-dev libopenni2-dev
# 3. 下载PCL 1.12.0源码
cd ~
wget https://github.com/PointCloudLibrary/pcl/archive/refs/tags/pcl-1.12.0.tar.gz
tar -zxvf pcl-1.12.0.tar.gz
cd pcl-pcl-1.12.0 && mkdir build && cd build
# 4. 编译安装(约10分钟)
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j1
sudo make install


浙公网安备 33010602011771号