Bauteil · Sensor

Raspberry-Pi-Kamera

Die Kamera für das CSI-Flachband eines Raspberry Pi statt USB – eigene Datenspur, Autofokus und der Sensor, den der meiste Roboter-Visionscode voraussetzt.

Was es ist

Ein kleines Sensorboard an einem Flachbandkabel, das an den CSI-Port des Raspberry Pi gehört – eine eigene Kameraschnittstelle, kein USB. Diese Unterscheidung ist der ganze Grund seiner Existenz. Das Pi eines Roboters trägt meist bereits WLAN, eine serielle Verbindung zum Motorcontroller und eventuell Speicher auf seinem USB-Bus; eine Kamera, die 1080p durch denselben Bus drückt, ist der Punkt, wo das aufhört zu funktionieren.

Für einen Roboter ist die Kamera der Sensor, der ändert, was möglich ist. Jeder andere Sensor dieser Seite meldet eine Zahl – eine Entfernung, einen Winkel, eine Reflexion. Eine Kamera meldet eine Szene – und das lässt einen Roboter erkennen, was etwas ist, statt nur dass etwas da ist.

Beschriftetes Diagramm eines Raspberry-Pi-Kameramoduls: eine kleine quadratische Leiterplatte mit zentral montiertem schwarzem Objektivtubus über dem Bildsensor, einem flachen Flexband, das die Unterkante zum CSI-Stecker des Pi verlässt, Befestigungslöchern an den Ecken und Hinweisen auf Objektiv, CSI-2-Band und rückseitige Sensorkontakte.
Das Kameraboard ist größtenteils Objektiv und Sensor: Bilddaten verlassen es über das CSI-2-Band auf eigener Spur und berühren nie den USB-Bus, den der restliche Roboter nutzt. SVG herunterladen

Wie es funktioniert

Licht trifft den Sensor, und der Sensor streamt Rohzeilen über MIPI CSI-2 hinaus – eine schnelle Nahbereichs-Seriellverbindung – in die Bildpipeline des Pi. Das Pi macht aus den Rohzeilen ein brauchbares Bild: Debayering, Weißabgleich, Belichtung, Objektivschattierungskorrektur. Auf aktuellem Raspberry Pi OS erledigt das libcamera, mit rpicam-apps auf der Kommandozeile und Picamera2 in Python.

Zwei Folgen zählen für Roboter:

Die Pipeline kostet Zeit. Ein Bild liegt nicht im belichteten Augenblick vor. Bis dein Code es sieht, sind Dutzende Millisekunden vergangen – und ein fahrender Roboter ist gefahren. Jede auf Vision geschlossene Regelschleife muss um diese Verzögerung herum entworfen sein.

Belichtung ist automatisch, wenn man sie nicht stoppt. Autobelichtung ändert fröhlich die Helligkeit deiner Szene zwischen Bildern – in Ordnung für Fotografien und feindlich für einen Visionsalgorithmus, der auf Helligkeit schwellwertet. Belichtung und Verstärkung einfrieren, sobald das Licht steht.

Wann man sie verwendet

Zur Kamera greifen, wenn der Roboter eine Frage beantworten muss, die kein skalarer Sensor kann:

  • Referenzmarker – ArUco-Tags liefern aus einem einzigen Bild eine volle 3D-Pose: der billigste Weg, einem Roboter eine echte Positionsbestimmung zu geben.
  • Linienfolge in der echten Welt – eine Kamera sieht die Linie Meter voraus, wo ein Reflexionsarray nur sieht, was direkt darunter ist.
  • Objekterkennung – einen Stuhl von einer Wand unterscheiden statt von beiden dieselben 40 cm zu lesen.
  • Visuelles SLAM – eine Karte allein aus Bildern aufbauen.

Keine für Hindernisvermeidung hinzufügen. Ein VL53L0X beantwortet „wie weit?“ in 20 ms mit drei Codezeilen; eine Kamera beantwortet es schlechter, langsamer und mit hundertfachem Aufwand.

Verdrahtung und Fallstricke

  • Das Band hat eine Orientierung. Die Silberkontakte zeigen zu den Steckerkontakten der Platine – am Pi heißt das: Die blaue Verstärkungslasche zeigt zur USB-/Ethernetseite. Falschherum eingesetzt wird die Kamera schlicht nicht erkannt, und nichts geht kaputt.
  • Erst die Steckerverriegelung heben. Den Kunststoffkragen sanft hochziehen, das Band vollflächig gerade einsetzen, dann den Kragen zurückdrücken. Ein leicht schräg sitzendes Band meldet sich intermittierend – was wie eine defekte Kamera aussieht.
  • Pi 5 und Zero brauchen das 22-polige Kabel. Dieselbe Kamera, schmalerer Stecker. Vor der Bestellung prüfen.
  • Das Band von Motorverdrahtung fernhalten. Es ist eine ungeschirmte Hochgeschwindigkeitsverbindung neben allem anderen, das man ins Chassis gestopft hat; eingekoppeltes Motorrauschen zeigt sich als korrumpierte Bilder.
  • Die Leistung budgetieren. Grob 250 mA zusätzlich zum Eigenbedarf des Pi – aus derselben Versorgung, die bei Knausern einbricht und die SD-Karte korrumpiert.
  • Fokus ist eine Einstellung, nicht nur ein Ring. Bei Modul 3 jagt der Autofokus bei kontrastarmer Szene. Für einen Roboter, der immer auf etwa dieselbe Entfernung schaut, eine feste Fokusposition setzen und das Jagen mitten im Manöver stoppen.

Ein Modul wählen

Modul Sensor Auflösung Fokus Bemerkenswert für einen Roboter
Modul 2 IMX219 8 MP Fest (manuell einstellbar) Billig, vorhersehbar, kein Autofokus-Jagen
Modul 3 IMX708 11,9 MP Autofokus Beste allgemeine Wahl; den Fokus für Robotik feststellen
Modul 3 Weit IMX708 11,9 MP Autofokus 102° Sichtfeld – deutlich besser zur Navigation
HQ-Kamera IMX477 12,3 MP C-/CS-Objektive Wenn man ein bestimmtes Objektiv oder Reichweite braucht
Global Shutter IMX296 1,6 MP C-/CS-Montierung Die, die für einen fahrenden Roboter am meisten zählt

Das Global-Shutter-Modul verdient eine ordentliche Erklärung – denn Rolling Shutter ist das am meisten unterschätzte Einzelproblem in Robotervision.

Ein Rolling-Shutter-Sensor belichtet Zeilen nacheinander statt alle zugleich – die Bildoberkante wird also wenige Millisekunden vor der Unterkante erfasst. An einer stationären Kamera ist das unsichtbar. An einem Roboter, der mit 90°/s dreht, wurden Ober- und Unterkante aus verschiedenen Winkeln aufgenommen – und gerade Vertikallinien kommen verzerrt heraus.

Für eine Markerposen-Pipeline ist das nicht kosmetisch. Die Ecken eines ArUco-Tags dienen dazu, seine Pose zu lösen – und wurden die Ecken bei vier leicht verschiedenen Roboterorientierungen erfasst, ist die berechnete Pose auf eine Art falsch, die keine Kalibrierung korrigiert. Macht dein Roboter Vision während der Fahrt, ist ein Global-Shutter-Sensor die Lösung – und die niedrigere Auflösung wert.

Einrichten, damit die Bilder brauchbar sind

Autobelichtung, Verstärkung und Weißabgleich sind hervorragend für Fotografie und aktiv schädlich für einen Visionsalgorithmus. Sie ändern die Zahlen, von denen deine Schwellen abhängen, zwischen Bildern – aus Gründen ohne Bezug zur Szene.

from picamera2 import Picamera2
import time

picam = Picamera2()

# Small frames. 640x480 is plenty for markers and lines, and the pipeline
# cost scales with pixel count.
config = picam.create_video_configuration(
    main={"size": (640, 480), "format": "RGB888"},
    controls={"FrameDurationLimits": (33333, 33333)},   # lock to 30 fps
)
picam.configure(config)
picam.start()

# Let auto-exposure settle on the real scene, then freeze it.
time.sleep(2)
metadata = picam.capture_metadata()
picam.set_controls({
    "AeEnable": False,
    "AwbEnable": False,
    "ExposureTime": metadata["ExposureTime"],
    "AnalogueGain": metadata["AnalogueGain"],
    "AfMode": 0,                 # manual focus
    "LensPosition": 2.0,         # dioptres: 1/distance_in_metres
})

while True:
    frame = picam.capture_array()
    # ... your processing here

Der LensPosition-Wert steht in Dioptrien – dem Kehrwert der Fokusentfernung in Metern. Ein Roboter, der Dinge etwa 50 cm entfernt anschaut, will 2.0; ein Meter will 1.0; Unendlich ist 0.0. Explizit zu setzen stoppt das Autofokus-Jagen mitten im Manöver – das an einem fahrenden Roboter eine, zwei Sekunden verschwommene Bilder genau im falschen Moment erzeugt.

Auflösung, Bildrate und Latenz

Auflösung ist die Einstellung, die Leute zu hoch lassen – und sie kostet mehr als sie erwarten.

Auflösung Pixel Relative Verarbeitungskosten Geeignet für
320×240 77 k 1× Linienfolge, Blob-Tracking
640×480 307 k 4× ArUco-Marker, meiste Robotervision
1280×720 922 k 12× Kleine oder ferne Marker
1920×1080 2,07 M 27× Aufzeichnung, selten für Echtzeitregelung

Ein Pi 4 mit ArUco-Erkennung bei 640×480 schafft bequeme 30 fps. Bei 1920×1080 fällt dieselbe Pipeline auf einstellige Werte – und jedes Bild ist bei Verarbeitung bereits alt. Die kleinste Auflösung verwenden, die das interessierende Merkmal noch auflöst – und bedenken, dass Erkennungsdistanz mit Auflösung skaliert: Wird ein Marker nicht weit genug erkannt, hilft höhere Auflösung wirklich, zu diesem Preis.

Das Latenzbudget

Das macht visionsbasierte Regelung schwer – und lohnt Ausschreiben:

Stufe Typisch
Belichtung 10–30 ms
Sensorauslesung und CSI-Transfer 5–15 ms
ISP-Pipeline (Debayering, Weißabgleich) 5–10 ms
Eigene Verarbeitung 10–50 ms
Gesamt, Bild zu Entscheidung 30–105 ms

Ein Roboter bei 0,3 m/s fährt in diesem Fenster 1–3 cm; bei 90°/s Drehung rotiert er 3–9°. Jede auf Vision geschlossene Regelschleife handelt dort, wo der Roboter war – und wer sie abstimmt, als wäre die Messung aktuell, erntet Schwingen.

Die praktischen Antworten sind dieselben wie überall in dieser Lage: Die Visionsschleife langsamer als die Regelschleife fahren und damit eine schnellere Koppelschätzung korrigieren – oder um die bekannte Latenz vorhersagen, bevor man die Messung nutzt. Genau diese Struktur baut der Pfad Pfadfolge für GPS auf, aus demselben Grund.

An einem Roboter montieren

Steif. Kamerakalibrierung erzeugt intrinsische Parameter – Brennweite, Hauptpunkt, Verzeichnung –, Eigenschaften dieser Kamera in dieser Halterung. Eine Halterung, die sich beim Beschleunigen biegt, entwertet die Kalibrierung fortlaufend – und Poseschätzungen wandern ohne sichtbaren Grund.

Weg von der Motorverdrahtung. Das CSI-Band ist eine ungeschirmte Hochgeschwindigkeits-Differenzialverbindung. Es entlang Motorleitungen zu führen koppelt Schaltrauschen ein – was sich als korrumpierte Bilder oder Kamera zeigt, die intermittierend verschwindet.

Mit zugentlastetem Band. Der Flachkabelstecker ist nicht für wiederholtes Biegen gemacht – und ein Roboter vibriert ständig. Das Band nahe beiden Enden festkleben, damit Vibration den Stecker nicht losarbeitet.

Leicht nach unten geneigt für einen Bodenroboter. Eine Kamera zum Horizont vergeudet die meisten Pixel an die Decke. Zehn bis zwanzig Grad nach unten legen den nützlichen Bildteil – den Boden voraus und alles darauf – in die Bildmitte.

Fehlersuche

Symptom Wahrscheinliche Ursache Lösung
Kamera gar nicht erkannt Band verkehrt herum Silberkontakte zu den Platinenkontakten
Intermittierend erkannt Band nicht voll oder gerade eingesetzt Verriegelung heben, voll einsetzen, herunterdrücken
No cameras available am Pi 5 Falsche Kabelbreite Pi 5 und Zero brauchen das 22-polige Kabel
Bilder korrumpiert oder zerrissen Motorrauschen auf dem Band Weg von Motorleitungen führen; zugentlasten
Helligkeit ändert sich zwischen Bildern Autobelichtung noch an Belichtung und Verstärkung nach Einpendeln feststellen
Bild wird mitten im Manöver weich Autofokus jagt AfMode: 0 setzen und feste LensPosition
Vertikallinien verzerrt bei Drehung Rolling Shutter Drehung verlangsamen oder Global-Shutter-Modul
Bildrate kollabiert unter Last Auflösung zu hoch Auf 640×480 herunter; auf thermische Drosselung prüfen
Poseschätzungen driften ohne Ursache Kamerahalterung biegt sich Steif montieren; neu kalibrieren
Pi startet neu bei Kamerastart Versorgung schafft ~250 mA extra nicht Bessere Versorgung – das korrumpiert SD-Karten

Kamera oder Entfernungssensor?

Kamera VL53L0X / HC-SR04
Beantwortet Was da ist, wo, und seine Orientierung Wie weit zum Nächsten
Latenz 30–100 ms 20–60 ms, ohne Verarbeitung
Benötigter Code Eine Visionspipeline Drei Zeilen
Rechenbedarf Ein Prozessor der Pi-Klasse Jeder Mikrocontroller
Versagt wenn Dunkel, Gegenlicht, bewegungsverschmiert Bestimmte Oberflächen (siehe jeweilige Seite)
Kosten 25–50 $ plus Pi 2–5 $

Die ehrliche Regel: Keine Kamera zur Hindernisvermeidung hinzufügen. Ein Entfernungssensor beantwortet diese Frage schneller, billiger und zuverlässiger – und jede Stunde, eine Kamera dazu zu bringen, ist eine Stunde weniger für das, was nur eine Kamera kann.

Eine Kamera hinzufügen, wenn man wissen muss, was etwas ist oder wo man ist – ein Objekt erkennen, einen Referenzmarker lesen für eine absolute Posenbestimmung, oder einer Linie folgen, die der Roboter Meter voraus sieht statt nur unter sich. Das ist mit skalarem Sensor wirklich unmöglich – und die ganze Pipeline wert.

Den Graphen erkunden

Verwendet in diesen Bauprojekten

Projekte, Lernpfade und Simulatoren, die Raspberry-Pi-Kamera verwenden.

Fragen

FAQ zu Raspberry-Pi-Kamera

Ist eine Pi-Kamera besser als eine USB-Webcam für Robotik?

Für einen Roboter meist ja – und der Grund ist der Stecker statt das Bild. Eine CSI-Kamera hat eine eigene Datenspur direkt in die Bildpipeline des Pi – konkurriert also nicht mit WLAN-Stick oder serieller Verbindung um USB-Bandbreite, und ihr Frametiming ist weit vorhersehbarer. Eine Webcam ist nur besser, wenn man ein langes Kabel braucht – CSI-Bänder sind kurz und fragil –, oder wenn die Kamera unverändert am Laptop funktionieren soll.

Welche Raspberry-Pi-Kamera soll ich für einen Roboter kaufen?

Kameramodul 3 für die meisten Roboter – Autofokus, Weitwinkeloption und aktuelle Softwareunterstützung. Die Weitwinkelvariante (102°) nehmen, wenn der Roboter Dinge nahe bei sich sehen muss – was zur Navigation fast immer gilt. Stattdessen die Global-Shutter-Kamera wählen, wenn der Roboter schnell fährt während er schaut, und die HQ-Kamera, wenn man ein bestimmtes Objektiv braucht. Kameramodul 2 ist weiter in Ordnung und billiger, wenn fester Fokus passt.

Warum verzerrt mein Kamerabild, wenn der Roboter dreht?

Rolling Shutter. Der Sensor liest Zeile für Zeile aus statt das ganze Bild auf einmal zu erfassen – was sich während des Auslesens bewegt, wird auf jeder Zeile an leicht anderer Stelle aufgezeichnet: Eine Drehung schert gerade Linien zu schrägen. Es zählt, weil Poseschätzung einen Zeitpunkt pro Bild annimmt. Belichtung verkürzen, den Roboter während der Messung langsamer fahren lassen oder die Global-Shutter-Kamera verwenden, die jede Zeile zugleich erfasst.

Nutzt der Pi 5 dasselbe Kamerakabel?

Nein – und das erwischt fast jeden. Pi 5 und die Zero-Modelle nutzen einen schmaleren 22-poligen Stecker, während Pi 4 und ältere den 15-poligen verwenden, der den meisten Kameras beiliegt. Die Kamera selbst ist dieselbe; man braucht das richtige Band oder einen Adapter. Der Pi 5 hat außerdem zwei Kamerastecker – kann also ein Stereopaar fahren.

Nutzt man noch die picamera-Bibliothek?

Nein – das ursprüngliche picamera-Modul wurde gegen einen Kamerastack geschrieben, der auf aktuellem Raspberry Pi OS nicht mehr existiert. Picamera2 verwenden, das auf libcamera sitzt, oder per OpenCV erfassen, sobald die Kamera als V4L2-Gerät erscheint. Die meisten Tutorials älter als wenige Jahre sind für die tote API geschrieben – der übliche Grund, warum ein kopiertes Snippet auf frischer Installation sofort scheitert.

Weiterführende Literatur

Quellen