- Boards
- Raspberry Pi 4 (Pi)
- GPIOs ansteuern unter Ubuntu 22.04
- Einrichten der Umgebung
- Beispiel: Eine LED blinken lassen mit dem Pi led.py
- Unterscheidung Board- und BCM-Modus
- GPIO Belegung:
- Raspberry Pi Pico (Pico)
- GPIO Belegung:
- Externe Sensoren
- HC-SR04
- TCRT5000
- HLK-LD2450
- Interne Sensoren des TurtleBot 4
- RPLIDAR A1M8
- OAK-D Pro
- Create 3 Sensoren
- 1. Bumper-Sensoren
- 2. Cliff-Sensoren
- 3. Odometrie
- 4. IMU (Inertial Measurement Unit)
- 5. Wand-Sensor
- 6. Batteriestatus
- Auslagerung externer Sensoren mit dem Pico
- Beispiel: zwei Liniensensoren auslesen und anzeigen
Boards
Raspberry Pi 4 (Pi)
Der Raspberry Pi 4 mit 4 GB RAM dient als zentrale Recheneinheit des TurtleBot 4 und übernimmt wesentliche Aufgaben wie die Verarbeitung von Sensordaten und die Steuerung der Roboterplattform. Ausgestattet mit einem Quad-Core ARM Cortex-A72 Prozessor, Gigabit-Ethernet, WLAN und Bluetooth bietet er eine vielseitige Grundlage für Anwendungen wie Navigation, Kartierung und Kommunikation. Die Integration von ROS 2 ermöglicht eine einfache Entwicklung und Ausführung von Robotiksoftware, während GPIO-Pins und USB-Anschlüsse die Anbindung zusätzlicher Hardware erleichtern. Der Raspberry Pi 4 bildet damit das Kernstück für die Funktionalität und Erweiterbarkeit des TurtleBot 4.
GPIOs ansteuern unter Ubuntu 22.04
Einrichten der Umgebung
- Python 3 und Pip (der Python Paketmananger) müsssen installiert sein:
sudo apt install python3 python3-pip
- Das Paket RPi.GPIO installieren:
pip3 install RPi.GPIO
led.py
Beispiel: Eine LED blinken lassen mit dem PiUnterscheidung Board- und BCM-Modus
- Im BOARD-Modus (auch "physischer Modus" genannt) werden die Pins anhand ihrer physischen Position auf der GPIO-Leiste des Raspberry Pi adressiert.
- Im BCM-Modus (Broadcom-Modus) werden die Pins anhand der GPIO-Nummerierung des Broadcom-Chips identifiziert.
GPIO Belegung:

Raspberry Pi Pico (Pico)
*Der Raspberry Pi Pico ist ein Mikrocontroller-Board, das auf dem speziell entwickelten RP2040-Chip basiert und ideal für Elektronik-, IoT- und Robotikprojekte ist. Es verfügt über einen Dual-Core ARM Cortex-M0+ Prozessor, 264 KB SRAM und 2 MB Flash-Speicher. Mit 26 GPIO-Pins, die Schnittstellen wie I2C, SPI, UART und PWM unterstützen, sowie einem ADC für analoge Eingaben, bietet der Pico vielseitige Anwendungsmöglichkeiten. Er wird über USB oder eine externe Stromquelle betrieben und kann mit MicroPython oder C/C++ programmiert werden.
Wir verwenden Micropython *
-
Micropython auf dem PICO installieren: Anleitung + Download
-
Micropython IDE für den PICO: Thonny
-
In Thonny unter
Werkzeuge
->Optionen
->Interpreter
'MicroPython (Raspberry Pi)' auswählenScreenshot aus Thonny
-
Damit Code automatisch ausgeführt wird muss dieser auf dem Pico als
main.py
gespeichert werden
Beispiele:
- Die interne LED des Picos blinken lassen interne_led.py
- Eine externe LED blinken lassen mit dem Pico externe_led.py + Visualisierung des Aufbaus
GPIO Belegung:
Externe Sensoren
HC-SR04
Ultraschall-Distanzsensor

- Messbereich von 2 bis 400 cm
- verwendet Ultraschallwellen um die Entfernung zu einem Objekt zu messen
- Der Sensor sendet über den Trigger-Pin ein Ultraschallsignal (40 kHz) aus.
- Das Signal trifft auf ein Objekt und wird reflektiert.
- Der Echo-Pin misst die Zeit, die das Signal benötigt, um zurückzukehren.
- Die Entfernung wird über die Schallgeschwindigkeit berechnet:
- mit dem Raspberry Pi 4 auslesen: hc_sr04.py
- mit dem Raspberry Pi Pico auslesen: hc_sr04.py + Visualisierung des Aufbaus
TCRT5000
Infrarot-Reflexionssensor

- sendet Infrarotlicht aus und erkennt das reflektierende Licht mit einem Fototransistor
- liefert über den OUT-Pin ein digitales Signal: LOW (0) bei Hindernis (also reflektiertem Licht, zB. weißer Untergrund), HIGH (1) bei keinem Hindernis (kein reflektiertes Licht, zB. schwarzer Untergrund)
- so kann man den Turtlebot beispielsweise einer Linie folgen lassen, daher auch Liniensensor
- mit dem Raspberry Pi 4 auslesen: TCRT5000.py
- mit dem Raspberry Pi Pico auslesen: TCRT5000.py
HLK-LD2450
24-GHz-Radarsensor

- kompakter 24-GHz-Millimeterwellen-Radarsensor zur Bewegungserkennung und Zielverfolgung
- misst Entfernung, Winkel und Geschwindigkeit von bis zu drei Zielen
- UART Schnittstelle mit einer Datenrate von 256.000 Baud
- Erkennungswinkel: Azimut ±60° (horizontal), Elevation ±35° (vertikal)
- Offizielle des Dokumentation des Herstellers auf Google Drive
Interne Sensoren des TurtleBot 4
RPLIDAR A1M8
2D-LiDAR Sensor

- 360° Abdeckung & Reichweite von 0,15m bis 12m
- Abtastrate bis zu 8000 Samples pro Sekunde mit einer einstellbaren Drehgeschwindigkeit zwischen 5 Hz und 10 Hz
- Messdaten lassen sich auf dem Turtlebot mit RViz2 visualieren und mit SLAM in eine Karte übersetzen
OAK-D Pro
Stereo Tiefenkamera mit Nachtsicht

- Seite des Herstellers
- speziell für neuronale Netzwerke und Echtzeitanwendungen optimiert und eignet sich so für Computer-Vision-Anwendungen
- hat einen Intel Movidius Myriad X VPU integriert, der neuronale Netze direkt auf der Kamera ausführen kann
- Der Hersteller stellt mit Depth AI eine Plattform zur KI-gestützten Computer Vision für die Kamera bereit
Create 3 Sensoren
Der Create 3 ist die Basis der Turtlebot4-Roboterplattform und beinhaltet die Antriebseinheit sowie einige Sensoren. Die Sensoren lassen sich in ROS auslesen.

1. Bumper-Sensoren
- Funktion: Erfassen Kollisionen mit der Vorderseite des Roboters und melden potenzielle Hindernisse. Diese Sensoren ermöglichen es dem Roboter, Zusammenstöße zu erkennen und seine Bewegung entsprechend anzupassen.
-
Beispielnutzung:
ros2 topic echo /hazard_detection
- Beispielausgabe:
detections:
- header:
stamp:
sec: 1672531200
nanosec: 500000000
frame_id: "base_link"
type: 1 # HAZARD_BUMP
- Beschreibung der Ausgabe: Der Roboter meldet einen Zusammenstoß mit einem Hindernis.
2. Cliff-Sensoren
- Funktion: Erkennen Absturzkanten oder Abgründe, um zu verhindern, dass der Roboter von einer erhöhten Fläche, wie einem Tisch oder einer Treppe, herunterfällt.
-
Beispielnutzung:
ros2 topic echo /hazard_detection
- Beispielausgabe:
detections:
- header:
stamp:
sec: 1672531201
nanosec: 200000000
frame_id: "base_link"
type: 2 # HAZARD_CLIFF
- Beschreibung der Ausgabe: Der Roboter meldet eine Absturzkante und kann entsprechend reagieren.
3. Odometrie
- Funktion: Liefert Informationen über die Position und Bewegung des Roboters. Die Odometrie-Daten helfen bei der Verfolgung der gefahrenen Strecke und Orientierung, um Navigation und Lokalisierung zu ermöglichen.
-
Beispielnutzung:
ros2 topic echo /odom
- Beispielausgabe:
header:
stamp:
sec: 1672531202
nanosec: 300000000
frame_id: "odom"
pose:
pose:
position:
x: 1.23
y: 0.45
z: 0.0
orientation:
x: 0.0
y: 0.0
z: 0.707
w: 0.707
- Beschreibung der Ausgabe: Der Roboter befindet sich an Position (1.23, 0.45) mit einer Orientierung von 45 Grad.
4. IMU (Inertial Measurement Unit)
- Funktion: Misst die Orientierung, Winkelgeschwindigkeit und lineare Beschleunigung des Roboters. Diese Daten werden genutzt, um Bewegungen und Neigungen zu analysieren sowie Stabilität und Richtung zu überwachen.
-
Beispielnutzung:
ros2 topic echo /imu
- Beispielausgabe:
header:
stamp:
sec: 1672531203
nanosec: 400000000
frame_id: "imu_link"
orientation:
x: 0.0
y: 0.0
z: 0.707
w: 0.707
angular_velocity:
x: 0.0
y: 0.0
z: 0.1
linear_acceleration:
x: 0.0
y: -9.8
z: 0.0
- Beschreibung der Ausgabe: Der Roboter ist stabil, mit einer minimalen Winkelgeschwindigkeit und normaler Gravitation.
5. Wand-Sensor
- Funktion: Misst die Entfernung zu einer Wand oder einem Hindernis in der Nähe. Dies ermöglicht es dem Roboter, entlang von Wänden zu navigieren oder Abstände zu Hindernissen zu halten.
-
Beispielnutzung:
ros2 topic echo /proximity
- Beispielausgabe:
header:
stamp:
sec: 1672531204
nanosec: 500000000
frame_id: "proximity_sensor"
range: 0.25
- Beschreibung der Ausgabe: Der Roboter erkennt eine Wand oder ein Hindernis in einer Entfernung von 25 cm.
6. Batteriestatus
- Funktion: Überwacht den aktuellen Ladezustand der Batterie sowie andere Parameter wie Spannung und Strom. Diese Informationen helfen, den Energieverbrauch zu analysieren und die Betriebszeit zu optimieren.
-
Beispielnutzung:
ros2 topic echo /battery_state
- Beispielausgabe:
header:
stamp:
sec: 1672531205
nanosec: 600000000
frame_id: "battery"
voltage: 12.6
current: -1.2
percentage: 0.85
- Beschreibung der Ausgabe: Die Batterie hat eine Spannung von 12,6 V, eine negative Stromaufnahme (Entladung) von 1,2 A und ist zu 85 % geladen.
Auslagerung externer Sensoren mit dem Pico
Um nicht die GPIO Pins des verbauten Pi belegen zu müssen bietet es sich an die externen Sensoren an einen Pico anzuschließen und diesen über USB mit dem Pi kommunizieren zu lassen.
Beispiel: zwei Liniensensoren auslesen und anzeigen
Mit sensor_bridge_1.py werden zwei Liniensensoren auf dem Pico ausgelesen und über die serielle USB Schnittstelle an den Pi weitergegeben. Damit dieser Code automatisch ausgeführt wird muss er allerdings als main.py auf dem Pico gespeichert werden. Mit read_pico.py lässt sich auf Seite des Pis das Signal dann auslesen.
Dieses Prinzip der Auslagerung der Sensoren wird im nächsten Kapitel, der Navigation, wichtig sein.