Forum: Mikrocontroller und Digitale Elektronik Eigene Stereokamera bauen || OV9281 Stereo


von Geka (geka_akeg)


Lesenswert?

Hey Leute!

*Ausgangssituation*: Ich möchte einen Tennisball tracken und die Pose 
als Input für meine Software nutzen. Ich habe Softwareerfahrung aber 
überhaupt keine Erfahrung mit µ-controllern und hardware.

*Mein Ziel*: Eine günstige Stereokamera, mit global Shutter und hoher 
fps.

Deshalb habe ich als besten Sensor für mein Problem den OV9281 
ausgewählt, das Problem ist dass ich in Deutschland keine in absehbarer 
Zeit erschwingliche Lösung finden konnte um daraus ein Stereo Setup zu 
machen. Hier mal die Optionen die ich sehe:


1) Nutze ein fertiges Stereomodul, dass leider mit 60mm nur eine gerine 
Baseline hat und damit auf meine Entfernungen keine gute Tiefenschätzung 
ermöglicht. Ich finde in Deutschland auch leider keine Variante mit 
flexibler Baseline. Hier ein Beispiel: https://amzn.eu/d/07wDwy99

Kennt jemand irgendwo einen Shop in dem es eine Variante gibt bei der 
die Distanz zwischen den Kameras vergrößert werden kann?

2) Nutze eine USB Version der OV9281, trigger die beiden Kameras mittels 
Arduino und verbinde sie separat mit dem PC. Das Problem ist, ich finde 
einfach keine USB Variante die auch Trigger Kontakte hat.

Weiß jemand ob es irgendwo eine USB Variante der Kamera mit 
Triggermöglichkeit gibt?


3) Nutze die MIPI Version der Kamera. Verbinde sie mit einem rasberry pi 
5 und trigger die kameras auch über den rasberry pi. Hier weiß ich aber 
nicht was für eine latenz ich reinbekomme, wenn ich die beiden mipi 
kameras über den rasberry and meinen rechner schicke. Hier eine Kamera 
mit mipi und trigger kontakten auf der rückseite:
 https://amzn.eu/d/09fOhOtK

Was für eine Latenz bekomme ich über den Rasberry? Schafft er es 
überhaupt die zwei streams über einen usb port and den rechner zu 
schicken?


Was würdet ihr sagen ist die beste Option? Könnt ihr mir irgendwelche 
Shops empfehlen, auf denen solche Hardware in Deutschland verfügbar ist? 
Ich lande immer wieder auf den gleichen shops wie antratek und roboshop 
wo das zeug einfach nicht verfügbar ist.

von Fabian S. (fsasm)


Lesenswert?

Eine flexible Baseline kannst vergessen. Die muss starr und stabil gegen 
Umwelteinflüssen sein (Temperatur, Feuchtigkeit, Vibration) sonst ist 
die Kalibrierung der Kameras kaputt. Eine leichte Verbiegung führt schon 
dazu, dass keine Tiefenwerte berechnet werden. Meistens nimmt man 
Aluminium oder Karbonfasern als Sensorträger. Es gibt Algorithmen, die 
eine kleine Veränderung korrigieren können, aber da kenne ich mich zu 
wenig aus.

Bei Sensoren musst du genau ins Datenblatt schauen. Manche liefern nur 
mehr die halbe FPS, sobald du sie über ein externes Signal 
synchronisierst. Es gibt dedizierte Sensoren, die über eine 
Master-Slave-Kommunikation sich selber synchronisieren und da verliert 
man keine FPS und Exposure wird auch synchronisiert.

Hast du dir auch Gedanken über die Laufzeit der Algorithmen gemacht? Ein 
Tiefenbild mit SGBM braucht viel Rechenleistung. Wenn man hohe FPS, 
niedrige Latenz und eine gute Auflösung haben wollte, hat man früher 
FPGAs genommen. Vermutlich können das die heutigen NV Jetson auch so 
schnell. Pose Detection und Object tracking willst du auch machen. Auch 
das braucht Rechenleistung.

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Bei meinem Arbytegeber wird für so etwas meist auf Jetson AGX ORIN 
Boards und PCIe-Kameras vom Ximea (ximea.com) zurückgegriffen. Diese 
Kameras schreiben ihre Daten direkt per DMA in den Hauptspeicher des 
NVidia Boards, wo die GPU mit ihren 2048 CUDA Cores direkt darauf 
zugreifen kann.

ok, das wirst Du Dir nicht leisten können. Definitiv. Also:
1. Nimm einen Pi5 mit mindestens 4GB RAM
2. Nimm zwei Raspberry Global Shutter Kameras. Jede Kamera an ihrem 
eigenen CSI/DSI Port
3. Die Global Shutter Kameras können für den Betrieb mit externem 
Triggereingang modifiziert werden. Lies hier:
https://www.raspberrypi.com/documentation/accessories/camera.html#external-trigger
4. Die Triggereingänge haben 1.8V Pegel. Du brauchst einen Pegelwandler 
wie 74LVC1T45.
5. Für die Erzeugung der Triggersignal würde ich irgendwas in Richtung 
STM32L0 oder so nehmen. Der läuft auch mit 1.8V. Bedenke, dass die 
fallende Flanke des Triggersignals die Aufnahme startet und den 
elektronischen Shutter öffnet, und die steigende Flanke den 
elektronischen Shutter wieder schließt und die Digitalisierung des 
Bildes startet. Du musst also sehr präzise Frequenz und Pulsbreite 
steuern.

Bei meinem Arbytegeber benutzen wir teilweise gepulste Infrarot-Laser 
zur Beleuchtung des Objektes und lassen dafür den Shutter länger offen. 
Da definiert also die Pulsbreite des Lasers die Belichtungszeit.

fchk
PS: Randbedingung: Da die CSI-Folienleiter nicht länger als 20...30cm 
lang sein dürfen, können die beiden Kameras maximal 50..55cm voneinander 
entfernt sein.

: Bearbeitet durch User
von Geka (geka_akeg)


Lesenswert?

@fsasm
Vielen Dank! Ich möchte natürlich die Baseline nicht flexibel halten, 
mir ging es mehr darum, dass es Systeme gibt die flexibler sind, so dass 
man seine Baseline zu Beginn festlegen kann. Bzgl. Algorithmus werde ich 
lediglich die Position des Balls tracken, nicht die Tiefe des gesamten 
Bildes schätzen, das sollte dann mit hoher fps gehen.

@fchk
Wow danke! Ja die Alternative über teuren Jetson macht für mich keinen 
Sinn, weil ich trotzdem einen weiteren Computer brauche für die Software 
die ich steuern möchte. Du empfiehlst mir also meine zweite Alternative. 
Kannst du abschätzen, ob der rasberry pi 5 es denn schafft 2x720p mit 
120fps an den Pc zu schicken?

Warum brauch ich den Pegelwandler und Signalerzeuger? Kann das der 
Rasberry nicht schon selber? In dem Tutorial siehts zumindest für mich 
so aus: 
https://docs.arducam.com/UVC-Camera/Appilcation-Note/External-Trigger-Mode/OV9281-Global-Shutter/#14-adjust-exposure-manually

Ich würde dann einfach den raspy direkt nutzen und mit einem Steckboard 
das Signal auf beide Kameras spiegeln wollen. Denkst du das klappt?

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.