点云捕获过程

捕获API会在相机完成原始图像捕获之后,点云处理完成之前或之时返回。这取决于GPU(供应商和驱动程序)。因此,在捕获 API 返回后,点云处理可能仍在后台运行。

小技巧

采用 推荐的硬件 以最小化计算时间。

跳转到源

source

const auto frame = camera.capture(settings);
跳转到源

source

using(var frame = camera.Capture(settings))
跳转到源

source

with camera.capture(settings) as frame:

获取点云的API总是会立即返回一个点云对象。点云对象持有GPU内存中点云数据的句柄。此时点云处理也可能仍在后台运行。

跳转到源

source

const auto pointCloud = frame.pointCloud();
跳转到源

source

var pointCloud = frame.PointCloud;
跳转到源

source

point_cloud = frame.point_cloud()

我们需要调用API将点云从GPU内存复制到CPU内存。复制功能将阻塞并等到数据可用后再复制。当函数返回时,数据已经在CPU内存中并处于可使用的状态。

备注

即使使用带有集成GPU的CPU,数据也会被复制到同一主RAM上的不同区域。

跳转到源

源码

const auto data = pointCloud.copyData<Zivid::PointXYZColorRGBA>();
跳转到源

源码

var pointCloudData = pointCloud.CopyPointsXYZColorsRGBA();
跳转到源

source

xyz = point_cloud.copy_data("xyz")
rgba = point_cloud.copy_data("rgba")

当点云在CPU内存上可用时,我们即可在机器视觉应用程序中使用它。

关于性能的注意事项

Zivid点云操作函数

Zivid SDK中对点云的相关操作,例如降采样、转换和法线,都是点云仍在GPU内存中时在GPU上进行计算的。这允许用户避免由于在GPU和CPU之间来回移动数据以进行计算而导致的额外时间。通过使用Zivid API在GPU上进行降采样,也可以减少复制到CPU的数据。因此,出于性能的考量,使用Zivid SDK进行这些操作是有益的。使用第三方库实现这些点云操作可能会更加耗时。通常情况下在CPU上进行这些计算要慢得多。如果使用其它软件在GPU上进行同样的的计算,则需要将数据从GPU复制到CPU,然后再复制回来。

曝光时间的可预测性

备注

仅适用于Zivid Two。 Zivid One+不支持此功能。

在使用HDR模式进行捕获时,Zivid Two将把每次采集的曝光进行连续排列。当投影仪完成所有图案的投射时,相机即完成了场景捕获。这将使您能够准确地预测场景捕获完成并可以更改场景的时间。例如,移动机器人或移动场景中的对象。

例如,如果您使用由 \(10ms\) 曝光时间和 \(5ms\) 曝光时间组成的HDR捕获,您可以使用以下等式进行估算。这里假设您正在使用phase engine进行3D捕获。Phase engine每次曝光包含了13幅投影图案。

\[(10ms * 13) + (5ms * 13) + 5ms_{tolerance} = 200ms\]

机器人可以在 \(200ms\) 之后移动,该时间是包含了安全余量的估计的3D采集时间。数字13表示phase engine中的图案数量。您可以使用下表来确定采集的图案数量:

Engine

图案数量

Phase

13

Stripe

33

警告

请注意,在高占空比下使用Zivid Two会触发热安全机制。这将使采集时间变得不可预测,因为它会减慢相机的占空比以防止过热。如果占空比高于50%且亮度高于1.0,则会发生这种情况。有关该主题的更多信息,请查看 投影仪亮度 页面。

版本历史

SDK

变更

2.8.0

提升了Zivid Two的捕获速度。