前文:
一、RTABMAP建图
1. 建图
深度相机连接上电脑后,打开终端,输入:
bash
ros2 launch rtabmap_examples realsense_d435i_stereo.launch.py

移动深度相机位置,完成建图后:

点击Save保存地图,并在终端 Ctrl+C 结束建图。

bash
[rtabmap-3] rtabmap: Saving database/long-term memory... (located at /home/robot/.ros/rtabmap.db)
[rtabmap-3] rtabmap: Saving database/long-term memory...done! (located at /home/robot/.ros/rtabmap.db, 17 MB)
[INFO] [rtabmap-3]: process has finished cleanly [pid 30928]
可以看到保存在home/robot/.ros/rtabmap.db(这里要看自己的)。
2. 地图保存
打开终端,输入:
bash
rtabmap-databaseViewer ~/.ros/rtabmap.db

点击上方工具栏中 View -> 3D View, 然后拖动下方的两个进度栏可以查看建图过程:
点击上方工具栏中 File -> Export 3D Map, 可以保存地图为 .ply 或者 .pcd 格式:

对话框关键选项解释:
区域 选项 含义 Dense Point Cloud From RGB-D images 从 RGB‑D 图像生成稠密点云(而非激光扫描点云)。推荐勾选,因为你保存的是双目/深度地图。 Reconstruction flavor Binary file 输出的 PLY/PCD 文件使用二进制格式(体积小、读取快)。 Assemble clouds/meshes:将多个关键帧的点云/网格合并成一个文件。 Normal estimation K nearest neighbors / search radius 用于点云法线估计(后续网格生成用)。设为 0 则禁用。若不需网格,可保持 0。 Flip ground normals 0.9 等 将接近 -Z 轴的法线翻转向 +Z,用于地面点。 Voxel size 体素滤波尺寸(米)。设为 0 禁用,设 >0 可降采样点云。 Number of samples 随机采样保留的点数(仅当合并点云时有效)。0 = 禁用。 Nodes filtering 按区域/索引筛选要导出的关键帧。 Regenerate clouds 重要:重新生成点云,可提高密度(因为在线可视化时为了性能会降采样)。 Cloud filtering 如统计离群值移除、半径滤波等。 Cloud smoothing (MLS) 移动最小二乘平滑。 Gain compensation 校正多张图像的亮度差异。 Camera projection 将相机模型用于点云着色;也可导出每个点的相机 ID。 Meshing 生成三角网格(而非点云)。需要勾选并设置相关参数(如泊松重建)。 Regenerate Clouds 子区域 - Decimation :降采样因子(1,2,4...),负数表示使用 RGB 分辨率。 - Max/Min depth :深度裁剪范围(米)。 - ROI ratios :仅提取图像中指定区域的点。 - Fill depth hole:填充深度图中的空洞。
地图导出步骤:
(1)勾选 Dense Point Cloud, 确保 From RGB-D images 被选中。
(2)如果点云太密导致文件过大,设置 Voxel size = 0.01 或 0.02 米。
(3)勾选 Assemble clouds/meshes to a single output这样所有关键帧的点云会合并成一个文件,方便后续使用。
(4)勾选 Regenerate clouds可以获得比在线地图更密的点云,并调整下方的降采样参数(如 Decimation = 1 使用原始深度分辨率)。
(5)在对话框底部选择输出文件类型(.ply 或 .pcd),点击 Save 按钮。
RTAB-Map 会遍历所有关键帧,生成并合并点云,耗时取决于数据库大小:

可以看到保存至位置及名称。
常见问题及解决方法:
|---------------|----------------------------------------------------------------|
| 问题 | 解决方法 |
| 导出后点云很稀疏 | 取消 Voxel size(设为 0),并勾选 Regenerate clouds,设置 Decimation = 1。|
| 导出过程卡死或内存不足 | 设置 Voxel size = 0.02 降采样,或先筛选一部分节点(Nodes filtering)。 |
| 网格出现大量孔洞 | 增加法线估计的 KNN 值,或调整泊松重建的深度参数。 |
| 左右亮度不一致导致颜色条纹 | 勾选 Gain compensation。 |
二、查看地图(三维点云文件)
1. 前提条件
安装MeshLab、pcl_tools:
bash
sudo apt install meshlab
bash
sudo apt install pcl-tools
2. 使用MeshLab查看 .ply 地图
在终端中输入:
bash
meshlab cloud.ply
可以加载.ply 地图,安装鼠标左键可以变化视角,滑动滚轮可以进行缩放,按住并拖动鼠标中键(滚轮)可以移动视角位置。

右边栏中的Shading和Color可以调整阴影亮度和点云颜色:

3. 将 .ply 文件转换为 .pcd 文件
在文件保存目录下打开终端,输入:
bash
pcl_ply2pcd cloud.ply cloud.pcd

bash
robot@ll-Lenovo:~/Desktop$ pcl_ply2pcd cloud.ply cloud.pcd
Convert a PLY file to PCD format. For more information, use: pcl_ply2pcd -h
PCD output format: binary
[pcl::PLYReader] cloud.ply:29: property 'float32 focal' of element 'camera' is not handled
[pcl::PLYReader] cloud.ply:30: property 'float32 scalex' of element 'camera' is not handled
[pcl::PLYReader] cloud.ply:31: property 'float32 scaley' of element 'camera' is not handled
[pcl::PLYReader] cloud.ply:32: property 'float32 centerx' of element 'camera' is not handled
[pcl::PLYReader] cloud.ply:33: property 'float32 centery' of element 'camera' is not handled
[pcl::PLYReader] cloud.ply:36: property 'float32 k1' of element 'camera' is not handled
[pcl::PLYReader] cloud.ply:37: property 'float32 k2' of element 'camera' is not handled
> Loading cloud.ply [done, 1393.21 ms : 5352642 points]
Available dimensions: x y z rgb normal_x normal_y normal_z curvature
> Saving cloud.pcd [done, 87.8349 ms : 5352642 points]
可以得到 .pcd 点云文件,输入:
bash
pcl_viewer cloud.pcd
查看点云地图:

同样可以使用鼠标进行查看。