ROS2 Humble + rtabmap + D435i深度相机实现视觉惯性建图(二)—— 地图保存和查看

前文:

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

一、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 

查看点云地图:

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

相关推荐
MIXLLRED3 个月前
Ubuntu 22.04/ROS2 Humble下使用Intel RealSense D435i相机
ubuntu·d435i·ros2·深度相机
如果是君5 个月前
ubuntu20.04下使用D435i实时运行ORB-SLAM3
linux·ubuntu·orb-slam3·d435i
清朝牢弟6 个月前
基于Win系统下PCL库入门到实践:IO模块之PCD文件的读写(附详细代码)
c++·pcl·pcd
davidson147110 个月前
gazebo仿真中对无人机集成的相机进行标定(VINS-Fusion)
ubuntu·无人机·slam·d435i·px4·gazebo·vins-fusion
风筝有风+1 年前
YOLOv5+pyqt5+摄像头在特定条件下进行目标检测并采集原始数据
yolo·d435i·pyqt5·深度图
Isaac3203 年前
C# 读取pcd、ply点云文件数据
c#·点云·pcl·ply·pcd
ZPILOTE3 年前
ORB-SLAM2学习笔记6之D435i双目IR相机运行ROS版ORB-SLAM2并发布位姿pose的rostopic
vslam·orb-slam2·slam·d435i·orb-slam2/pose·位姿pose·rostopic