空间映射最佳实践
Last updated: October 23, 2026
ZED SDK 的空间映射模块也可通过独立的 ZEDfu 应用程序使用,可对场景或物体进行 3D 扫描。通过从多个视角随时间整合图像、深度和位置追踪数据,可创建彩色 3D 模型(网格或融合点云)。
有关该模块的完整描述,请参阅 空间映射文档;有关 ZEDfu 工具,请参阅 ZEDfu 文档。
支持的相机
空间映射要求使用配备惯性传感器(IMU)的双目相机,例如 ZED 2i、 ZED Mini、 ZED X、 ZED X Mini和 ZED X Nano (以及已停产的 ZED 2)。
以下相机 不受支持:
最初的 ZED (已停产),没有内置 IMU;
以及 ZED X One GS/4K/S 相机,这些相机为单目相机。请注意,支持双 ZED X One 虚拟双目相机设置;在 ZEDfu 中,使用 本地流媒体 输入来接收其数据。
扫描时的最佳实践
缓慢且平稳地移动。 快速运动会产生运动模糊;模糊图像会降低位置追踪和重建 3D 几何图形的质量。
确保场景光线充足。 光线不足的区域会增加深度噪声,并可能在模型中引入伪影和错误表面。
优先选择具有纹理的场景。 无纹理的均匀表面(裸墙、玻璃等)为双目匹配和追踪提供的视觉信息很少。得益于神经深度模式,室内扫描效果比旧版 SDK 好得多,但丰富的纹理仍可改善结果。
避免反光和透明物体。 镜子、玻璃和光滑表面会产生无效的深度测量值。
与表面保持适当距离。 不要近于相机型号的最小深度范围,并记住深度精度会随距离增加而降低;因此映射范围限制为 20 m。
闭合扫描环路。 扫描房间或物体时,尝试重新经过之前扫描过的区域;这有助于位置追踪优化地图。启用 区域记忆 后,SDK 可以识别之前映射的区域并提高追踪一致性;请参阅 VSLAM 映射教程。
查看追踪状态。 在 ZEDfu 中,如果位置追踪状态切换为
SEARCHING,请将相机移回已经映射的区域,以帮助 SDK 重新定位并继续生成地图。
选择正确的设置
深度模式:在 ZEDfu 中,可以在
NEURAL LIGHT(实时表现最佳)、NEURAL(质量与表现之间的良好折中)和NEURAL PLUS(质量最高,推荐用于 SVO 文件的离线处理)之间进行选择。地图类型:选择
MESH以生成一组三角形水密网格,这些网格可在扫描后进行过滤和纹理处理;或选择POINT CLOUD以生成彩色融合点云。点云格式由于每个点都附带颜色信息,因此需要更多内存。映射分辨率:分辨率可设置在 1 cm 到 12 cm 之间。更高的分辨率会生成更详细的地图,但需要更多内存和处理能力,并会减慢地图更新速度;请使用适合应用的最低分辨率。API 提供
HIGH(2 cm,小区域)、MEDIUM(5 cm,均衡)和LOW(8 cm,大区域或碰撞网格)预设。映射范围:整合到地图中的深度数据范围可设置在 2 m 到 20 m 之间。增大范围可以快速捕获大型空间,但会牺牲精度;减小范围则可提高性能。API 提供
NEAR(3.5 m)、MEDIUM(5 m)和FAR(10 m)预设。网格过滤:捕获后,过滤会在保留几何特征的同时减少多边形数量。
LOW可填补孔洞并清理异常值;MEDIUM和HIGH还会执行网格简化。尝试不同的预设,找到最适合应用的设置。网格纹理:扫描前启用纹理选项,以记录左相机图像的子集并将其投影到网格表面。这会改善模型的视觉质量,但需要更多处理能力和内存。纹理处理仅适用于网格。
实时扫描或离线处理
空间映射模块(包括 ZEDfu)接受三种输入类型:
实时相机:由已连接的 ZED 双目相机实时捕获的数据;
本地流媒体:通过 ZED 本地流媒体服务器从远程相机接收的数据;
在 ZEDfu 中处理 SVO 文件时,建议启用 OFFLINE 模式:在开始生成地图前,会预处理完整的 SVO 文件,从而生成质量更高的地图,但处理时间更长。结合 NEURAL PLUS 深度模式,这是能够提供最佳 3D 重建质量的工作流程。
注意:ZEDfu 会将生成的地图保存到用户主目录中的 ZED/Meshes 文件夹;生成完成后,生成地图的完整路径会显示在状态栏中。
在应用程序中使用空间映射 API
ZEDfu 中提供的所有功能都可以通过 ZED SDK 集成到您自己的应用程序中。典型工作流程如下:
打开相机并使用
enablePositionalTracking()启用位置追踪;使用
enableSpatialMapping()启用模块,并配置SpatialMappingParameters(分辨率、范围、地图类型、纹理);在循环中调用
grab();模块会在后台接收图像、深度和位姿数据;使用
extractWholeSpatialMap()获取一次地图,或使用异步requestSpatialMapAsync()/getSpatialMapRequestStatusAsync()/retrieveSpatialMapAsync()函数持续获取;可选地,使用
Mesh::filter()和Mesh::applyTexture()优化网格,然后使用save("mesh.obj")保存网格;监控该模块,使用
getSpatialMappingState():FPS_TOO_LOW表示系统无法达到持续进行映射所需的帧率,而NOT_ENOUGH_MEMORY表示已达到内存限制;在这两种情况下,该模块都会停止集成新数据,但仍可提取 3D 模型。
请求和获取空间地图需要大量资源;为了提高表现,请勿过于频繁地请求新的空间地图。
有关更多详细信息,请参阅:
Camera类参考