借助精确时间协议(PTP)同步IDS GigE Vision相机

时钟对比

在某些应用场合中,如果需要处理来自多台相机的图像时,则图像记录的精确时间或准确的先后顺序对后续处理至关重要。若相机能够提供时间戳,则可为不同的图像数据建立时间基准。然而,相机的时间基准要能够精确匹配,这一点至关重要。通过使用“精确时间协议”(PTP),IDS GigE Vision相机(固件版本2.2或以上)能够轻松实现同步。

借助精确时间协议(PTP)同步IDS GigE Vision相机

精确时间协议(PTP)是一种时间同步标准(IEEE1588),它使通过网络连接的设备实现时间同步。支持此标准的相机可在特定的周期内与主时钟交换同步信息。利用各自发送和接收时间中的时间戳信息,相机内部的计数器可实现精确地校准和同步。

所有固件版本为2.2的IDS GigE Vision相机都可与PTP兼容!

USB接口的工业相机现尚不支持PTP,因此此应用说明仅适用于IDS GigE Vision相机。

IEEE1588时间戳是以1970年1月1日0时0分为计时起点,支持1纳秒(1 GHz)的时间分辨率。然而,由于延迟和信号运行时的不准确性,联网设备的时间同步精度达微秒级!

PTP应用案例

PTP作为一种基础协议,通过为图像数据提供时间基准,为各种应用奠定基础。视应用要求及网络基础设施的复杂性的不同,PTP可以通过不同的方式来实现。

1. 相对时间戳同步

在本案例中,所有相机都在同一个网络。其中一台相机为主服务器,其余相机为从服务器。所有从相机的时间戳与主相機相机同步。相机既不提供绝对时间戳(实时),同时在无其他操作的情况下,也无法实现同步触发。

优势:

  • 在该应用场合中,相对时间戳确定所有相机图像记录的时间分配。此外,相对时间戳还能确定哪一张图像为第一张,以及不同相机的图像时差大小。

  • 无需额外的操作和成本,即可为特定的网络基础架构生成相对时间戳。

2. 利用绝对时间同步时间戳。

 

本案例中,联网相机与外部主时钟同步。该PTP主时钟可以是支持“硬件时间戳”的网卡——若无硬件支持,同步精度将显著降低。除必要的硬件外,还需要支持PTP的软件(不包含在IDS peak中!)

优势:

  • 具备全局(实时)时间戳的图像内容可跨越当前的应用限制,与任何其他使用实时时间基准的信息相关联。

  • 对于其它使用全局时间基准的应用场合或评估,图像内容可以重用。

使用PTP:“相对同步”

下一节中的示例描述的是如何在两台支持PTP的联网相机中实现时间戳的“相对同步”。

硬件设置

两台不同的固件版本为2.2(支持PTP)的IDS GigE Vision相机(GV-526xFA-C和GV-504xCP-M)连至同一网络交换机。一台额外的主机PC,仅用于控制和配置相机,不涉及相机的PTP同步。

软件设置

可通过“PtpControl”下的相机功能节点图查找所有PTP配置功能。只有固件需为2.2或以上版本的相机才能使用这些功能。我们在主机PC上安装IDS peak,并使用其Vision Cockpit来设置PTP同步。

将一台相机配置为PTP主时钟

GV-526xFA-C相机应设置为PTP主时钟。在Vision Cockpit中打开相机,并将“PtpEnable”设为“True”,以此启用PTP。另外,将“PtpSlaveOnly”设为“False”为相机赋予“主时钟”角色。

# Configure master camera
PtpEnable = True
PtpSlaveOnly = False

将另一台相机配置为PTP从时钟

GV-504xCP-M相机应设为PTP从时钟。同理,将“PtpEnable”设为“True”以启用PTP。此时,这台相机仅作为从时钟使用。将“PtpSlaveOnly”仍设为“True”。

# Configure slave camera
PtpEnable = True
PtpSlaveOnly = True

创建主从等级

在完成主从时钟配置后,主-从等级将自动创建。对于主时钟相机,可通过“PtpStatus”由“Listening ”变成“Master”来确定。 对于从时钟相机,可通过“PtpStatus”先由“Listening”变为“Uncalibrated”,并在与主时钟相机同步后变为“Slave”来确定。

在通过相机的新PTP功能完成主从等级创建后,“相对同步”也随之完成。

启用时间戳

如果您希望对图像数据使用已同步相机生成的时间戳,则必须将时间戳作为元数据,启用元数据(及块数据)传输。
首先,将“ChunkModeActive”设为“True”,以通过图像缓冲区启用块数据传输。然后,通过“ChunkSelector”选择“Timestamp”,并通过“ChunkEnable”开关启用时间戳。

# activate chunk data creation
ChunkModeActive = True
 
# enable "ChunkTimestamp"
ChunkSelector = Timestamp
ChunkEnable = True

这时,相机所采集的每一张图像将具备相应的时间戳,并借助图像缓冲区(通过块数据)传输至主机PC。这样,块数据及时间戳可通过任何视觉标准软件进行读取。

# image acquisition configuration for both cameras
LineSelector = Line2
LineMode = Output
LineSource = PPS
TriggerSelector = ExposureStart
TriggerMode = On
TriggerSource = Line2
 
# Limit bandwidth on both cameras
DeviceLinkThroughputLimit = 60000000
 
# Start acquisition on both cameras
Execute AcquisitionStart
同步PPS触发信号将触发相机在同一时间点进行图像采集
同步PPS触发信号将触发相机在同一时间点进行图像采集

读取时间戳

为在应用场合中处理时间戳和图像内容,您须读取当前图像缓冲区的块数据。块数据为制造商相关的有效负载缓冲区,其存储布局通常未知,因此我们将通过节点图来读取各个元数据。为此,所有现有的元数据及其标准的节点名称将从GenTL传输至节点图,以便通过标准的API进行访问。

4月初即将推出的IDS peak 1.1更新将帮助您通过IDS peak API,以便捷的方式检索和处理时间戳及所有其他块数据。以下的源代码片段为您演示如何从图像缓冲区中提取时间戳。IDS peak SDK(版本1.1及以上)的安装包也为您提供了有关块数据处理的完整源代码示例。

// Get buffer from device's datastream
const auto buffer = m_dataStream->WaitForFinishedBuffer(5000);
 
// check buffer for chunks
if (buffer->HasChunks())
{
    // update nodemap with current chunk data
    m_nodemapRemoteDevice->UpdateChunkNodes(buffer);
 
    // Get the value of the timestamp chunk
    const auto chunktimestamp = m_nodemapRemoteDevice->FindNode<peak::core::nodes::FloatNode>("ChunkTimestamp")->Value();
}