IDS GigE Vision Kameras mittels PTP synchronisieren

Uhrenvergleich

Geht es in Anwendungen um die Verarbeitung von Bildmaterial mehrerer Kameras, ist oft der Zeitpunkt bzw. die korrekte zeitliche Abfolge der Bildaufnahmen für die nachträgliche Verarbeitung entscheidend. Wird ein Zeitstempel übertragen, kann ein zeitlicher Bezug zu den anderen Bilddaten hergestellt werden. Wichtig ist dabei aber, dass die Zeitbasis der Kameras genau übereinstimmt. Durch das "Precision Time Protocol" (PTP) können IDS GigE Vision Kameras ab Firmware 2.2 einfach synchronisiert werden.

IDS GigE Vision Kameras mittels PTP synchronisieren

Precision Time Protocol (PTP) ist ein Zeitsynchronisationsstandard ( IEEE1588) mit dem per Netzwerk verbundene Geräte zeitlich aufeinander abgestimmt werden können. Kameras, die diesen Standard unterstützen tauschen dazu in definierten Zyklen Synchronisationsmeldungen mit einem Zeit-Master aus. Mit den Zeitstempelinformation zum jeweiligen Sende- und Empfangszeitpunkt können die internen Zähler der Kameras sehr genau kalibriert und in Abstimmung gehalten werden. Mit der Kamerafirmware Version 2.2 werden alle IDS GigE Vision Kameras PTP-fähig!

PTP ist nicht für USB-Verbindungen definiert, daher bezieht sich dieser Anwendungshinweis nur auf IDS GigE Vision Kameras.

Der IEEE1588-Zeitstempel ist ein Epochen-Zeitzähler, bei dem der 1. Januar 1970, 00:00 Uhr, als Nullzeit gesetzt ist, und bietet eine Auflösung von 1 ns (1 GHz). Wobei die Genauigkeit der Zeitsynchronisierung zwischen Netzwerkgeräten bedingt durch Ungenauigkeiten bei Latenzen und Signallaufzeiten eher im Mikrosekundenbereich angesiedelt ist!

PTP-Anwendungsfälle

PTP ist eine Basistechnologie, die Grundlage für verschiedene Anwendungsfälle mit zeitlichem Bezug der Bildinhalte darstellt. Dieser kann je nach Anforderung einer Anwendung und Komplexität der Netzwerkinfrastruktur unterschiedlich hergestellt werden:

1. Relative Zeitstempel-Synchronisierung

In diesem Fall befinden sich alle Kameras in einem Netzwerk. Eine Kamera ist der Master, die anderen sind Slaves. Die Zeitstempel aller Slave-Kameras werden mit der Master-Kamera synchronisiert. Die Kameras zeigen keine absoluten Zeitstempel (reale Zeit), auch können sie nicht ohne zusätzlichen Aufwand synchron ausgelöst werden.

Vorteile

  • Relative Zeitstempel schaffen eine zeitliche Zuordnung der Bildaufnahmen aller Kameras der Anwendung. Welches Bild war das erste, und wie groß ist der Zeitunterschied zwischen den Bildern verschiedener Kameras.
  • relative Zeitstempel können ohne zusätzlichen Aufwand und Kosten für spezielle Netzwerkinfrastruktur erzeugt werden.

2. Zeitstempel-Synchronisation mit absoluter Zeit

In diesem Fall werden die Netzwerkkameras mit einem externen Master synchronisiert. Dieser PTP-Master kann eine Netzwerkkarte sein, die das sogenannte "Hardware-Timestamping" unterstützt - ohne Hardware-Unterstützung leidet die Genauigkeit der Synchronisation erheblich. Neben der erforderlichen Hardware wird auch eine Software benötigt, die PTP unterstützt (nicht Teil von IDS peak!).

Vorteile

  • Bildinhalte mit globalen (realen) Zeitstempeln können über die Grenzen der Anwendung hinaus mit jeder anderen Information mit realem Zeitbezug in Verbindung gebracht werden.
  • Bildinhalte sind für andere Anwendungen oder Auswertungen mit globalem Zeitbezug wiederverwendbar.

PTP verwenden: "Relative Synchronisierung"

der folgende Abschnitt beschreibt beispielhaft das Vorgehen zur Herstellung einer "relativen Synchronisierung" von Zeitstempeln zwischen zwei PTP-fähigen Kameras in einem Netzwerk.

Hardware-Setup

Zwei unterschiedliche IDS GigE Vision Kameras (GV-526xFA-C, GV-504xCP-M) mit Firmware 2.2 ("PTP-fähig") werden am selben Netzwerk-Switch angeschlossen. Ein zusätzlicher Host-PC dient lediglich zur Steuerung und Konfiguration der Kameras. An der PTP-Synchronisierung der Kameras ist er nicht beteiligt.

Software-Setup

Alle Funktionen zur PTP-Konfiguration finden Sie in der Feature-Nodemap der Kameras unter der Kategorie "PtpControl". Diese Funktionen sind seit der Firmware-Version 2.2 verfügbar. Zur Einrichtung der PTP-Synchronisierung verwenden wir das Vision Cockpit der IDS peak Installation auf dem Host PC.

Konfigurieren Sie eine Kamera als PTP-Master

Die Kamera GV-526xFA-C soll als PTP-Master-Gerät konfiguriert werden. Dazu öffnen Sie die Kamera im Vision Cockpit und aktivieren PTP, indem Sie " PtpEnable " auf " True " setzen. Zusätzlich erhält die Kamera die Erlaubnis, die Master-Rolle zu übernehmen, indem " PtpSlaveOnly " auf " False " gesetzt wird.

# Configure master camera
PtpEnable = True
PtpSlaveOnly = False

Konfigurieren Sie die andere Kamera als PTP-Slave

Die GV-504xCP-M soll als PTP-Slave-Gerät konfiguriert werden. Auch hier wird PTP aktiviert, indem "PtpEnable" auf "True" gesetzt wird. Aber dieses Mal ist die Kamera nur auf die Arbeit als Slave-Gerät beschränkt. Zu diesem Zweck bleibt "PtpSlaveOnly" weiterhin auf "True" eingestellt.

# Configure slave camera
PtpEnable = True
PtpSlaveOnly = True

Entstehung der Master-Slave-Hierarchie

Sobald ein Master- und ein Slave-Gerät konfiguriert sind, wird die Master-Slave-Hierarchie automatisch aufgebaut. Für die Master-Kamera kann dies festgestellt werden, indem "PtpStatus" von "Listening" auf "Master" wechselt. Bei der Slave-Kamera erkennen Sie dies daran, dass "PtpStatus" von "Listening" zuerst auf "Uncalibrated" und nachdem die Synchronisierung mit der Master-Kamera abgeschlossen ist, auf "Slave" wechselt.

Nachdem die Master-Slave-Hierarchie der Kameras über ihre neuen PTP-Fähigkeiten aufgebaut wurde, ist die "relative Synchronisierung" abgeschlossen.

Zeitstempel aktivieren

Wenn Sie die Zeitstempel der nun synchronisierten Kameras mit den Bilddaten in Ihrer Anwendung nutzen möchten, müssen Sie die Übertragung der Zeitstempel als Metadaten (mit den Chunk-Daten) aktivieren.
Aktiveren Sie dafür zuerst die Übertragung von Chunk-Daten mit dem Bildspeicher, indem Sie "ChunkModeActive" auf "True" setzen. Anschließend wählen Sie über den "ChunkSelector" die Info "Timestamp" aus und aktivieren sie über den Schalter "ChunkEnable".

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

Die Kamera erzeugt ab jetzt mit jeder Bildaufnahme einen Zeitstempel und überträgt ihn mit dem Bildspeicher (in den Chunk-Daten) zum Host-PC. Die Chunk-Daten und damit die Zeitstempel können Sie mit jeder Vision Standard Software auslesen.

# 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
Durch die synchronisierten PPS-Triggersignale erfolgt die Bildaufnahme der Kameras zum selben Zeitpunkt
Durch die synchronisierten PPS-Triggersignale erfolgt die Bildaufnahme der Kameras zum selben Zeitpunkt

Zeitstempel auslesen

Um die Zeitstempel in Ihrer Anwendung zusammen mit den Bildinhalten zu verarbeiten, müssen Sie die Chunk-Daten des jeweils aktuellen Bildspeichers auslesen. Da es sich bei den Chunk-Daten um einen herstellerspezifischen Payload-Speicher mit meist unbekanntem Speicher-Layout handelt, werden die einzelnen Metadaten über die Nodemap ausgelesen. Dazu werden alle vorhandenen Metadaten vom GenTL mit ihrem standardisierten Node-Namen in die Nodemap übertragen, so dass sie über die Standard API erreichbar sind.

Mit dem kommenden IDS peak 1.1 Update Anfang April können Sie Timestamps sowie alle anderen Chunk-Daten sehr komfortable über die IDS peak API abrufen und weiterverarbeiten. Der folgende Sourcecode Auszug zeigt beispielhaft, wie Sie Timestamps eines Bildspeichers extrahieren. Ein vollständiges Sourcecode-Beispiel, das den Umgang mit Chunk-Daten demonstriert, finden Sie ebenfalls im Installationspaket Ihres IDS peak SDK (ab Version 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();
}