点云捕获过程
捕获API会在相机完成原始图像捕获之后,点云处理完成之前或之时返回。这取决于GPU(供应商和驱动程序)。因此,在捕获 API 返回后,点云处理可能仍在后台运行。
小技巧
采用 推荐的硬件 以最小化计算时间。
const auto frame = camera.capture(settings);
using(var frame = camera.Capture(settings))
with camera.capture(settings) as frame:
获取点云的API总是会立即返回一个点云对象。点云对象持有GPU内存中点云数据的句柄。此时点云处理也可能仍在后台运行。
const auto pointCloud = frame.pointCloud();
var pointCloud = frame.PointCloud;
point_cloud = frame.point_cloud()
我们需要调用API将点云从GPU内存复制到CPU内存。复制功能将阻塞并等到数据可用后再复制。当函数返回时,数据已经在CPU内存中并处于可使用的状态。
备注
即使使用带有集成GPU的CPU,数据也会被复制到同一主RAM上的不同区域。
const auto data = pointCloud.copyData<Zivid::PointXYZColorRGBA>();
var pointCloudData = pointCloud.CopyPointsXYZColorsRGBA();
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幅投影图案。
机器人可以在 \(200ms\) 之后移动,该时间是包含了安全余量的估计的3D采集时间。数字13表示phase engine中的图案数量。您可以使用下表来确定采集的图案数量:
Engine |
图案数量 |
---|---|
Phase |
13 |
Stripe |
33 |
警告
请注意,在高占空比下使用Zivid Two会触发热安全机制。这将使采集时间变得不可预测,因为它会减慢相机的占空比以防止过热。如果占空比高于50%且亮度高于1.0,则会发生这种情况。有关该主题的更多信息,请查看 投影仪亮度 页面。
版本历史
SDK |
变更 |
---|---|
2.8.0 |
提升了Zivid Two的捕获速度。 |