Posted on

Lattice VIP MJPEG Inbetriebnahme

Das von Lattice Semiconductor zu einem Spezialpreis von 199 USD angebotene Entwicklungs-Kit (Embedded Vision Development Kit) oder auch VIP ist eine vollwertige Stereokamera für die Entwicklung von Standard-Vision-Anwendungen auf Basis der FPGA-Familie ECP5 und CrossLink von Lattice. Es bietet als optionale Erweiterung ein Zusatzboard mit GigE-fähigem Netzwerkstecker und USB 3.0 kompatiblen Cypress FX3 Chipsatz an.

Der Bild-Erfassungs-Teil des VIP ist mit zwei Rolling-Shutter Sensoren IMX214 von Sony ausgestattet, deren Bilddaten über einen ebenfalls von Lattice stammenden CrossLink-Baustein vom schwierig zu handhabenden MIPI-Interface in einen parallelen Video-Strom umgewandelt werden. Dabei gibt es unterschiedliche Firmware für den Crosslink:

  1. Stereo-Modus: Beide Sensorenbilder werden on-chip zusammengefügt, die Fenstergrösse halbiert
  2. Monokel-Modus: Nur die Bilddaten eines Sensors (CN2) werden weitergeleitet

Die entsprechenden Bit-Files sind bei Lattice nach Registrierung zum Download verfügbar [ Link ]

JPEG-Streaming

Genau wie beim älteren Entwicklerkit HDR60 von Lattice ist auch hier eine Motion-JPEG-Demo-Firmware verfügbar, welche auf der bewährten gstreamer-Referenzumgebung für den Empfang von Video mit niedriger Latenz basiert.

Dazu wird zunächst ein Script für den Empfang erstellt:

caps="application/x-rtp, media=\(string\)video,"
caps="$caps clock-rate=\(int\)90000,"
caps="$caps encoding-name=\(string\)JPEG"

gst-launch-1.0 -v udpsrc \
caps="$caps" \
port=2020 \
! rtpjpegdepay \
! jpegdec \
! autovideosink

Beim Aufruf dieses Scripts unter Linux wie unter Windows startet gstreamer eine RTP-Empfängerpipeline und zeigt den Videostrom an, sobald dieser eintrifft. Dieser muss zunächst am VIP konfiguriert werden

Anleitung

  1. USB-Programmier-Kabel  verbinden, Terminal-Programm konfigurieren: 115200 bps, 8N1
  2. Unter Linux mit /dev/ttyUSB1 verbinden
  3. Bit-File per Diamond-Programmer auf den Target laden
  4. Im Terminal die IP-Adresse des Empfängers konfigurieren:
    r 192.168.0.2
  5. ARP-Antwort abwarten:
    # Got ARP reply: 44 ac de ad be ef
  6. JPEG-Video starten, z.b. in 1920×1080 bei 12fps:
    j 4

Falls der JPEG-Strom abreisst, ist dafür meistens ein Engpass im Encoding dafür verantwortlich. Da JPEG über keine eingebaute Rate-Control verfügt, kann in der Demo das System u.U. zum Stillstand gebracht werden, z.B. indem ein buntes Tuch vor die Kamera gehalten wird. Das detaillierte Muster ist in der Regel schlechter zu komprimieren und kann so eine Verstopfung im Datenfluss verursachen.

Der JPEG-Encoder meldet diese Fehler unmittelbar und bricht in dieser Demo ab. Zu den detaillierten Fehlermeldungen konsultieren Sie bitte die Dokumentation zum MJPEG Encoder.

Konfiguration der Sensor-Parameter

Per i2c-Bus können die angeschlossenen Sensoren konfiguriert werden. Dies geschieht über das ‚i‘-Kommando. Dessen Funktion ist von der Anzahl der Parameter abhängig:

# i2c-Bus scannen:

i

# i2c-Register abfragen (Registerwerte hexadezimal):

i 100

# i2c-Register setzen

i 100 1

Einige vereinfachte Kommandos zur Sensorenkonfiguration (auch hier alle Werte in Hexadezimalform):

Funktion

Kommando
se [Wert] Belichtungszeit
sh [HDR_modus] Belichtungszeit
sr [Gain] Verstärkung (Gain) rot
sg [Gain] Verstärkung grün
sb [Gain] Verstärkung blau

Probleme und Lösungen

  • Video startet nicht:
    1. Fehlermeldungen an Konsole überprüfen
    2. Überprüfen, ob orange LED am GigE-Board Aktivität anzeigt
    3. Wireshark zur Aufzeichnung der Aktivität am Netzwerk benutzen
  • Video startet, aber reisst ab:
    1. Fehlerbits an Konsole überprüfen: [DEMUX], [FIFO], …
    2. Qualitätswert vergrössern:
      q 30
    3. Netzwerkverkehr mit Wireshark und RTP-Parser überprüfen. Gehen Pakete verloren?
    4. Direktverbindung zwischen VIP und PC nutzen (kein zwischengeschalteter Router)
  • Video fehlerhaft:
    1. Fehlerbits an Konsole überprüfen. DEMUX-Fehler dürfen sporadisch (bis zu fünf mal) auftreten, bevor der Video-Strom terminiert wird.