前文:

ROS2 Humble + rtabmap + D435i深度相机实现视觉惯性建图(一)——环境配置

一、RTABMAP建图

1. 建图

        深度相机连接上电脑后,打开终端,输入:

ros2 launch rtabmap_examples realsense_d435i_stereo.launch.py

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

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

[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. 地图保存

        打开终端,输入:

rtabmap-databaseViewer ~/.ros/rtabmap.db

        点击上方工具栏中 View -> 3D View, 然后拖动下方的两个进度栏可以查看建图过程:

        点击上方工具栏中 File -> Export 3D Map, 可以保存地图为 .ply 或者 .pcd 格式:

对话框关键选项解释:

区域选项含义
Dense Point CloudFrom RGB-D images从 RGB‑D 图像生成稠密点云(而非激光扫描点云)。推荐勾选,因为你保存的是双目/深度地图。
Reconstruction flavorBinary file输出的 PLY/PCD 文件使用二进制格式(体积小、读取快)。
Assemble clouds/meshes:将多个关键帧的点云/网格合并成一个文件。
Normal estimationK nearest neighbors / search radius用于点云法线估计(后续网格生成用)。设为 0 则禁用。若不需网格,可保持 0。
Flip ground normals0.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:

sudo apt install meshlab
sudo apt install pcl-tools

2. 使用MeshLab查看 .ply 地图

        在终端中输入:

meshlab cloud.ply 

        可以加载.ply 地图,安装鼠标左键可以变化视角,滑动滚轮可以进行缩放,按住并拖动鼠标中键(滚轮)可以移动视角位置。

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

3. 将 .ply 文件转换为 .pcd 文件

        在文件保存目录下打开终端,输入:

pcl_ply2pcd cloud.ply cloud.pcd

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 点云文件,输入:

pcl_viewer cloud.pcd 

        查看点云地图:

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

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐