Evaluierung der Tiefensensorik mit der ArduCAM ToF Camera auf dem Raspberry Pi CM5

Die Marke ArduCAM verkauft auch ein Kameramodul für den Raspberry Pi, das einige von Ihnen vielleicht schon verwendet haben.
Diesmal handelt es sich um das gleiche Kameramodul, aber mit einer etwas speziellen Kamera namens ToF, die, einfach gesagt, eine Kamera ist, die die Tiefe des fotografierten Objekts erkennen kann.

Das Foto zeigt das PL-R5 BASE BOARD für den industriellen Raspberry Pi (CM5). Handelsübliche Raspberry Pi können auch mit einem FPC-Kabel angeschlossen werden.
Der Unterschied zu einem normalen Kameramodul besteht darin, dass die Kamera selbst auch eine Stromversorgung benötigt. Schließen Sie sie also an den GPIO-Pin an, um Strom zu erhalten.

Unterschied zwischen ToF und LiDAR

Ähnlich wie die ToF-Kamera ist LiDAR.
Es ist schwierig, zwischen den beiden zu unterscheiden, da beide die Reflexion von Laserlicht nutzen.
In manchen Fällen machen sie keinen großen Unterschied, aber aufgrund ihrer unterschiedlichen Eigenschaften hat jedes seine eigene geeignete Umgebung.

Generell gilt, dass ToF eher für kleinere Standorte ausgewählt wird, während LiDAR eher für größere Standorte ausgewählt wird.

Je nachdem, wie es verwendet wird, kann es jedoch an beides angepasst werden.
Zum Beispiel gibt es je nach Leistung Zwischenkategorien von LiDAR. Je nach Produkt gibt es Fälle, in denen „LiDAR in kleinem Maßstab anpassbar ist“ oder „großer Maßstab mit ToF ausreichend ist“.
Die endgültige Entscheidung wird von verschiedenen Umgebungsbedingungen abhängen, z. B. von der Reichweite und der Genauigkeit, die Sie erreichen möchten, sowie von den Kosten für Installation und Betrieb.

VergleichsartikelKleine Standorte (ToFs sind gut geeignet)Großflächige Standorte (LiDAR ist gut geeignet)
Entfernung BereichInnerhalb von einigen Zentimetern bis zu mehreren zehn MeternMehrere Dutzend Meter bis mehr als mehrere hundert Meter
Erforderliche GenauigkeitMehrere Zentimeter bis zu mehreren zehn Zentimeterncm Bestellung mit hoher Präzision
DatenanfrageEin-Punkt-Entfernungsmessung, Tiefenkarte mit niedriger bis mittlerer AuflösungHochdichte 3D-Punktwolke, großflächige Kartierung
HaupteinschränkungenNiedrige Kosten, geringer Stromverbrauch, geringe Größe, einfache InstallationEinbauraum, Stromversorgungskapazität, Laserschutzmaßnahmen, Wartungsfreundlichkeit
InstallationskostenVergleichsweise niedrigVergleichsweise hoch
Ausrüstung GrößeLeicht zu miniaturisierenNeigen dazu, groß zu sein
bevorzugte UmgebungInnenbereich, kurze Reichweite, eingebettete AnwendungenIm Freien, große Fläche, große Höhe, großer Raum
Typische AnwendungenAnnäherungserkennung, Hindernisvermeidung im Nahbereich, Gestenerkennung, Regalverwaltung, eingebettete SensorenAutomatisiertes Fahren, topografische Vermessung, Außenüberwachung, Gesamtkartierung von Lagerhäusern
Kompatibilität mit Raspberry PigutGut je nach Anwendung (teuer und anfällig für hohe Belastung)
Die Achse der Entscheidungsfindung, die sich fürIch möchte einfach Abstand gewinnen.Ich möchte eine große Fläche mit einer hochpräzisen 3D-Messung messen.

ArduCAM ToF-Kamera“ Produktspezifikationen

Hier sind die Details der ArduCamToF Kamera.
Die Verbindung ist einfach mit dem Kameramodulanschluss des Raspberry Pi und sie ist kompatibel mit V4L2-basierten Videokernelgeräten, so dass Sie sie sofort ausprobieren können.

(Daten) ElementInhalt
ProduktübersichtToF-Methode Tiefenkamera-Modul
HauptmerkmaleAusgabe von Punktwolken (Point Cloud) und Tiefenkarten in Echtzeit
Anzahl der effektiven Pixel240 × 180
Sensorgröße1/6 Zoll.
Auflösung / FPS auf Raspberry Pi240 × 180 @ 30fps
Maximale Bildrate des Sensors120fps
Maximale Tiefenbildrate (Raspberry Pi)30fps (4-Phasen)
Maximale Tiefenbildrate (NVIDIA Jetson)30fps (4-Phasen)
Entfernung messenFern-Modus: 4m / Nah-Modus: 2m
Modulationsfrequenz75MHz / 37,5MHz
BetrachtungswinkelDiagonaler Winkel 70°.
LichtquelleEingebauter 940nm VCSEL-Laser
Für drinnen und draußenJa (keine externe Beleuchtung erforderlich)
SchnittstelleMIPI (2-Spur)
Ausgabeformat4-Phasen-RAW / Tiefenbild / Graustufen-Amplitudenbild
Linux-UnterstützungV4L2-basiertes Video-Kernelgerät
SDKC / C++ / Python
ROS-Unterstützungbereits unterstützt
Unterstützte OSRaspberry Pi OS Bookworm / Bullseye (32bit / 64bit) ab 2022/01/28
Unterstützte HardwareRaspberry Pi 5 / 4 / 2 / 3 / CM3 / CM4 / Zero W / Zero 2 W / NVIDIA Jetson
Stromverbrauch (TDP)3.5W
Empfohlene Stromversorgung5V / 4A oder mehr
Substrat Größe38mm x 38mm

Die Umwelt dieser Zeit

  • Industrieller Raspberry Pi (CM5) PL-R5 BASE BOARD
  • ArduCAM ToF-Kamera (Stromversorgung erforderlich)
  • Raspberry Pi OS Trixie
    – Modell: Raspberry Pi Compute Module 5 Rev 1.0
    – Betriebssystem: Debian GNU/Linux 13 (trixie)
    – Kernel: 6.12.54-v8-16k+
    – Python3.13

Hinweis: Wir haben es mit der neuesten Version von Trixie versucht, aber derzeit funktionieren die früheren Versionen von Bookworm oder Bullseye stabiler.

Zu Config.txt hinzufügen

Sie müssen eine Beschreibung des Kameramoduls in config.txt hinzufügen. Sie ist bei einem Neustart gültig.

sudo nano /boot/firmfare/config.txt
dtoverlay=arducam-pivariety,cam0

Ausprobierte Beispielprogramme (C/C++)

./Install_dependencies.sherfordert Treiber, Abhängigkeiten, SDK und OpenCV.
Die Beispielanwendung kann durch Git-Klonen und Ausführen der Shell-Skripte für Installation und Build gestartet werden.

Die C/C++-Beispielprogramme werden so funktionieren, wie sie sind, weil wir die gemeinsamen Bibliotheken libArducamDepthCamera.so und libArducamDepthCamera4C.so gefunden haben, die die C/C++-Beispielprogramme verwenden.

In dieser Trixie-Umgebung erforderten das Python-Beispielprogramm und die C++-Punktwolke zusätzliche Unterstützung und Codeänderungen.

github: https://github.com/ArduCAM/Arducam_tof_camera/
SDK: https://docs.arducam.com/Raspberry-Pi-Camera/Tof-camera/Arducam-ToF- Kamera-SDK/

git clone https://github.com/ArduCAM/Arducam_tof_camera.git
cd Arducam_tof_camera
./Install_dependencies.sh
./compile.sh

Die Beispielprogramme (C/C++) können einzeln ausgeführt werden, aber der Befehl zur Ausführung aller drei Programme erschien im Terminal nach ./compile.sh.

/home/$USER/Arducam_tof_camera/build/example/cpp/example

Einzelne Fälle:

  cd build/example/cpp
  ./preview_depth
  # or
  ./capture_raw

Ausgeführter Bildschirm

Bei der Ausführung erscheinen drei Fenster auf dem Bildschirm.

Wenn Sie Ihre Hand vor die Kamera halten, können Sie den Unterschied in der Tiefe anhand der Farbe erkennen.

Python-Beispielprogramme müssen unterstützt werden

Das Python-Beispielprogramm (preview_depth.py) funktionierte in dieser Umgebung nicht wie vorgesehen.

Fehler:

ModuleNotFoundError: No module named 'ArducamDepthCamera'
# or
ModuleNotFoundError: No module named 'cv2'

Das Python-Beispiel import ArducamDepthCamera erfordert ein Erweiterungsmodul, das für Python erstellt wurde.
Das Raspberry Pi OS Trixie mit Python 3.13 stellt dieses Modul für Python nicht zur Verfügung bzw. installiert es nicht. ModuleNotFoundError Das liegt daran, dass das Modul für dieses Python nicht zur Verfügung gestellt bzw. nicht installiert wird.

Ich habe das Python-Paket arducamdepthcamera in der PyPI überprüft und gefunden. Die neueste Version (Stand März 2026) ist 0.1.24 (https://pypi.org/project/arducamdepthcamera/).

Selbst mit Python 3.13 konnte ich Python-Bindungen zusammen mit der apt-Version von OpenCV und der pip-Version von ArduCAM verwenden, indem ich mit --system-site-packages eine virtuelle Umgebung erstellte.
Da die pip-Version von opencv-python auf dem Raspberry Pi schwerfällig und instabil sein kann, habe ich die apt-Version des Systems in einer virtuellen Umgebung verwendet.

pip install --upgrade pip
python3 -m venv --system-site-packages ~/venv-arducam # Create only once (initial setup)
source ~/venv-arducam/bin/activate # Run every time, or add an alias to .bashrc
pip install arducamdepthcamera # Install only once

Ich werde das überprüfen.

python3 -c "import numpy; print(numpy.__version__, numpy.__file__)"
python3 -c "import cv2; print(cv2.__version__)"
python3 -c "import ArducamDepthCamera as ac; print(ac)"

Daher verwendet numpy innerhalb von venv, cv2 verwendet 4.10.0 und systemseitig, und die letzte ArducamDepthCamera verwendet ebenfalls innerhalb von venv.

1.26.4 /home/pi/venv-arducam/lib/python3.13/site-packages/numpy/__init__.py
4.10.0
<module 'ArducamDepthCamera' from '/home/pi/venv-arducam/lib/python3.13/site-packages/ArducamDepthCamera/__init__.py'>

Starten Sie ein Python-Beispielprogramm

Nach dem Neuaufbau habe ich das Python-Beispielprogramm ausgeführt und es wurde erfolgreich gestartet.

python3 ~/Arducam_tof_camera/example/python/preview_depth.py

arducamdepthcamera wurde in einer virtuellen Umgebung installiert und muss aktiviert werden, bevor das Python-Beispiel ausgeführt werden kann.

source ~/venv-arducam/bin/activate

Wenn Sie es nicht in diesem Zustand ausführen, wird Python auf der Systemseite nicht gefunden ArducamDepthCamera und es wird wieder ModuleNotFoundError.

Punktwolke

Der Punktwolken-Beispielcode für ArduCAM konnte nicht so gebaut werden, wie er ist, ebenso wenig wie Python.
Bei der Untersuchung stellten wir fest, dass sich die Open3D-API-Spezifikation im Raspberry Pi OS Trixie geändert hatte, und das Problem wurde gelöst, indem die Beschreibung auf der Beispielcodeseite an das aktuelle Open3D angepasst wurde.

Punkt(e), die korrigiert werden müssen

In der case-Anweisung in Zeile 159~ von ~/Arducam_tof_camera/open3d_preview/preview_pointcloud.cpp, wo der Fehler auftrat, mussten die sechs Zeilen ab Zeile 160 ersetzt werden.

        case 's': {
            open3d::io::WritePointCloudToPCD( //
                "pointcloud.pcd", pcd,
                {
                    open3d::io::WritePointCloudOption::IsAscii::Ascii,
                    open3d::io::WritePointCloudOption::Compressed::Uncompressed,
                });
        } break;
        case 's': {
            open3d::io::WritePointCloudOption option(
                "pcd",
                true,   // write_ascii
                false,  // compressed
                false   // print_progress
            );

            open3d::io::WritePointCloudToPCD(
                "pointcloud.pcd",
                pcd,
                option);
        } break;

Bauen Sie neu.

./compile_pointcloud.sh

Dieses Mal war der Build erfolgreich.
/home/$USER/Arducam_tof_camera/build/open3d_preview/preview_pointcloudIm Folgenden finden Sie ein Beispiel für ein Programm, das mit dem

[ 50%] Building CXX object open3d_preview/CMakeFiles/preview_pointcloud.dir/preview_pointcloud.cpp.o
[100%] Linking CXX executable preview_pointcloud
[100%] Built target preview_pointcloud
== Build success
== Run /home/pi/Arducam_tof_camera/build/open3d_preview/preview_pointcloud

Bild mit Tiefe

Im Bild „Tiefe“ wird die Entfernung zum Objekt durch eine Farbe dargestellt.

Die Schieberegler für den Mindest- und den Maximalbereich erlauben eine Anpassung.
Der Standardwert für den Maximalbereich ist 4.000/6.000.

Wenn wir die drei nebeneinander liegenden Bilder (1.378, 2.082 bzw. 4.000) vergleichen, sehen wir, dass der höhere Maximalwert mehr rötliche Töne aufweist, während der niedrigere Wert mehr schwarze und blaue Töne enthält.
Wenn Sie die Hand vor das Auge halten, ist die Entfernungsperspektive bei einer maximalen Reichweite von 4.000 nicht mehr so deutlich, aber bei einer maximalen Reichweite von etwa 1.378 ist der Farbunterschied zwischen Vorder- und Rückseite deutlich sichtbar. So einfach ist es, die Perspektive zu erkennen.

Passen Sie die Einstellungen an, je nachdem, was Sie erreichen möchten.
Sehen Sie sich das Video des Schiebereglers in Aktion an.

Können Sie auch den Farbwechsel in dem Video sehen, wenn sich die Hand näher und weiter entfernt?

Industrielle Anwendungen von ToF-Kameras

ToF-Kameras ermöglichen Tiefenmessungen mit geringem Stromverbrauch und in Echtzeit im nahen bis mittleren Bereich.

In der Industrie eignet es sich für „Standorte, an denen Sie auf einfache Weise 3D-Informationen erhalten möchten“.

Zum Beispiel können die folgenden Fälle angenommen werden

  • Bestimmung von Objekten (Anwesenheit oder Abwesenheit und Position) in Förderlinien (Förderbänder)
  • Einfache Objekt-zu-Objekt-Ausrichtung
  • Einfache Bestandskontrolle (z.B. Erkennung leerer Regale)
  • AGV und Roboter-Hindernisvermeidung
  • Überwachung des Abstands zwischen den Menschen, um zu erkennen, wann sie überfüllt sind

Er eignet sich für Einrichtungen und Geräte, die platzsparend, kostengünstig und einfach zu integrieren sind.

Im Gegensatz zu herkömmlichen Kameras (RGB) basiert die Erkennung von Menschen auf Entfernungsinformationen (Farbe) und nicht auf dem Gesicht oder der Kleidung. So können Sie die Anzahl der Personen und ihre Standorte leicht bestimmen und gleichzeitig die Privatsphäre wahren.

Während LiDAR für die großflächige, hochpräzise Vermessung von Vorteil ist, ist eine einfache ToF-Kamera als praktischer Sensor, der in die Feldausrüstung integriert werden kann, eine brauchbare Option.


Artikel beigetragen von Raspida

Raspberry Pi-Informationsseite, die auch von Nicht-Ingenieuren genutzt werden kann raspida.com eine Raspberry Pi-Informationsseite, die auch für Nicht-Ingenieure interessant ist und mit der sie umgehen können. Er schreibt auch technische Blogartikel auf der PiLink-Website über den Raspberry Pi für den industriellen Einsatz.