Linux auf dem Raspberry Pi 5
Der Raspberry Pi 5 ist das „Gehirn“ von Strido: ein kleiner Linux-Computer, der ROS 2 in Docker ausführt und über USB mit dem Servocontroller kommuniziert. Diese Seite behandelt die Wahl des Betriebssystems, das Flashen, die Anmeldung ohne Bildschirm und die wenigen Linux-Kenntnisse, die Sie brauchen, um den Roboter am Laufen zu halten.
In Strido
- Hardware: Raspberry Pi 5 (4 GB) mit dem Raspberry Pi Active Cooler und einer 64-GB-A2-microSD-Karte (SanDisk Extreme), alle in
hardware/bom.yaml. Er wird mit 5 V über die GPIO-Stiftleiste versorgt, nicht über USB-C. - Betriebssystem: Ubuntu Server 24.04 (arm64) oder Raspberry Pi OS Bookworm 64-Bit, dazu Docker Engine (Software).
- Robotersoftware: läuft im Container
strido-ros:jazzy, gebaut ausdocker/ros2/Dockerfile; das Host-Betriebssystem braucht daher nur Docker, udev-Regeln und einige Firmware-Einstellungen. - Geräte: Der XIAO ESP32-S3 (USB CDC) und der RPLIDAR C1 (CP210x-USB-Adapter) erscheinen über
ros2/strido_bringup/config/99-strido.rulesals/dev/strido_mcuund/dev/rplidar.
Was der Pi macht und was nicht
Der Pi führt alles oberhalb der Servoschleife aus: den Gait- oder Policy-Node, die mcu_bridge, den LiDAR-Treiber und (optional) die Kamera. Er steuert keine Servos und liest die IMU nicht selbst. Das übernimmt der ESP32-S3, dem der I²C-Bus gehört (PCA9685, LSM6DSOX, INA260) und der eine harte 200-Hz-Schleife ausführt. Die Aufteilung existiert, weil Linux kein Echtzeitbetriebssystem ist: Ein ausgelasteter Pi kann einen Prozess für Dutzende Millisekunden anhalten, was für die Planung harmlos ist, Servos aber zucken ließe. Siehe Firmware.
Der Pi braucht also nur USB-Seriell-Zugriff, weder I²C noch SPI. Das hält die Linux-Einrichtung kurz.
Wahl des Betriebssystems
| Ubuntu Server 24.04 (arm64) | Raspberry Pi OS Bookworm 64-Bit | |
|---|---|---|
| Basis | Ubuntu „Noble“ | Debian 12 |
| ROS 2 Jazzy nativ | Ja: Ubuntu 24.04 ist Jazzys Tier-1-Plattform (apt-Pakete) | Keine offiziellen Binärpakete; Docker verwenden |
| Pi-5-Kamera (libcamera-Fork) | Muss selbst gebaut werden | Enthalten (rpicam-apps) |
Werkzeuge wie raspi-config, vcgencmd | Teilweise | Ja |
Beides funktioniert, weil das Repo ROS 2 in einen Container packt (FROM ros:jazzy-ros-base, selbst auf Ubuntu 24.04 aufgebaut). Der Container bringt sein eigenes Ubuntu-Userland mit; der Host stellt nur Kernel, USB-Geräte und Netzwerk bereit. Wählen Sie Raspberry Pi OS, wenn Sie die Kamera nutzen wollen (der Kamera-Stack des Pi 5 braucht den libcamera-Fork von Raspberry Pi, den das Docker-Image nicht enthält); wählen Sie Ubuntu Server, wenn Sie ROS 2 später nativ installieren möchten.
Verwenden Sie immer das 64-Bit-Image. Das ROS-Image, die NumPy-Wheels und Dockers arm64-Builds setzen alle aarch64 voraus.
Karte mit Raspberry Pi Imager flashen
- Installieren Sie Raspberry Pi Imager auf Ihrem Laptop und stecken Sie die microSD-Karte ein.
- Wählen Sie das Gerät Raspberry Pi 5, dann das Betriebssystem (unter „Other general-purpose OS → Ubuntu“ für Ubuntu Server 24.04 oder „Raspberry Pi OS (64-bit)“; die Lite-Variante hat keinen Desktop und genügt für einen Roboter ohne Bildschirm).
- Öffnen Sie auf Nachfrage die OS-Anpassung (Edit settings) und legen Sie fest:
- Hostname, zum Beispiel
strido; - einen Benutzernamen und ein Passwort (keinen Standardbenutzer beibehalten);
- WLAN-SSID, Passwort und Land;
- im Reiter Services: SSH aktivieren, idealerweise mit „public-key authentication only“ und eingefügtem öffentlichem Schlüssel.
- Hostname, zum Beispiel
- Schreiben, auswerfen, Karte in den Pi stecken.
Warum im Imager anpassen
Ein laufender Roboter hat weder Tastatur noch Monitor. Durch Vorbelegen von Benutzer, WLAN und SSH tritt der Pi beim ersten Start Ihrem Netzwerk bei, sodass Sie ihn vom Laptop erreichen: Das ist eine Headless-Einrichtung.
Erster Start und SSH
Versorgen Sie den Pi mit Strom (nur Logikversorgung, Loop-Key der Servoschleife gezogen). Nach einer Minute sollte er im Netzwerk sein:
ssh <user>@strido.local # mDNS name; if it does not resolve, use the IP from your routerVerwenden Sie schlüsselbasierte Anmeldung statt Passwörtern:
ssh-keygen -t ed25519 # on the laptop, once
ssh-copy-id <user>@strido.local # installs the public key on the PiBringen Sie dann das System auf den neuesten Stand, bevor Sie etwas installieren:
sudo apt update && sudo apt full-upgrade -y
sudo rebootHalten Sie unter Raspberry Pi OS auch das Bootloader-EEPROM aktuell (sudo rpi-eeprom-update); es enthält Stromeinstellungen, die Sie unten ändern.
Pi-spezifische Konfiguration für diesen Roboter
Zwei Einstellungen aus Elektronik sind wichtig, weil Strido den Pi über die GPIO-5-V-Pins versorgt. Dieser Weg umgeht die USB-C-Power-Delivery-Aushandlung, sodass der Pi sonst eine schwache Versorgung annehmen und den USB-Strom begrenzen würde:
sudo rpi-eeprom-config --edit # add: PSU_MAX_CURRENT=5000
echo "usb_max_current_enable=1" | sudo tee -a /boot/firmware/config.txtPSU_MAX_CURRENT=5000 teilt dem Bootloader mit, dass die Versorgung 5 A liefert; usb_max_current_enable=1 erlaubt den USB-Ports ihren vollen Strom (LiDAR und ESP32 werden über USB versorgt). config.txt liegt sowohl unter Bookworm als auch unter Ubuntu 24.04 in /boot/firmware/.
WARNING
Das optionale Overlay zur Selbstabschaltung (dtoverlay=gpio-poweroff,gpiopin=26) ist im Repo als [UNVERIFIED on Pi 5] markiert. Testen Sie es mit entschärften Servos, bevor Sie sich darauf verlassen.
Benutzer, Gruppen und Geräteberechtigungen
Linux steuert den Hardwarezugriff über Dateien in /dev und deren Eigentümergruppe:
| Gerät | Typischer Name | Standardgruppe | Von Strido verwendet? |
|---|---|---|---|
| USB-CDC-Seriell (XIAO ESP32-S3) | /dev/ttyACM0 | dialout | Ja: mcu_bridge, strido-cli |
| USB-UART-Brücke (CP210x, LiDAR) | /dev/ttyUSB0 | dialout | Ja: sllidar_ros2 |
| I²C an der GPIO-Stiftleiste | /dev/i2c-1 | i2c | Nein: I²C liegt am ESP32 |
| GPIO | /dev/gpiochip* | gpio | Nur das optionale Abschalt-Overlay |
| Docker-Daemon-Socket | /var/run/docker.sock | docker | Ja |
Zwei Dinge machen das hier einfach:
udev-Regeln.
99-strido.ruleserkennt die Geräte anhand der USB-Hersteller-/Produkt-ID (Espressif303a:1001, Silicon Labs10c4:ea60), legt stabile Symlinks an und setztMODE="0666". Ohne sie könnten ESP32 und LiDAR über Neustarts hinweg die NamenttyACM0/ttyUSB0tauschen, und nur Mitglieder vondialoutkönnten sie öffnen.bashsudo cp ros2/strido_bringup/config/99-strido.rules /etc/udev/rules.d/ sudo udevadm control --reload && sudo udevadm trigger ls -l /dev/strido_mcu /dev/rplidardocker-Gruppe. Wenn Sie sich hinzufügen, können Sie
dockerohnesudoausführen:bashsudo usermod -aG docker $USER # log out and back in afterwardsWARNING
Mitgliedschaft in
dockerist gleichbedeutend mit root: Jedes Mitglied kann einen privilegierten Container starten. Fügen Sie nur vertrauenswürdige Benutzer hinzu.
Wenn Sie strido-cli oder ROS 2 nativ (außerhalb von Docker) ohne die udev-Regel ausführen, fügen Sie sich stattdessen zu dialout hinzu: sudo usermod -aG dialout $USER.
Docker installieren und das Roboter-Image bauen
Installieren Sie Docker Engine aus Dockers eigenem Repository (die Debian- oder Ubuntu-Anleitung unter Weiterführende Literatur) und führen Sie dann in einem Klon des Repositorys aus:
docker compose -f docker/compose.yaml build ros # ROS 2 Jazzy, Gazebo libs, sllidar_ros2, this repo's packages
docker compose -f docker/compose.yaml run --rm robotDer zweite Befehl startet ros2 launch strido_bringup robot.launch.py. Halten Sie die Startreihenfolge aus Elektronik ein: Roboter liegt in der Ruhepose, Loop-Key eingesteckt, dann starten. Details stehen in Docker und ROS 2.
systemd: Dienste, die beim Booten starten
systemd ist der Prozess, der auf beiden Betriebssystemen Dienste startet und überwacht. Docker selbst ist ein systemd-Dienst:
systemctl status docker # running? enabled at boot?
sudo systemctl enable --now docker
journalctl -u docker -f # follow its log
journalctl -b -p warning # warnings and errors since this bootDas Repo liefert bewusst keine systemd-Unit für den Roboter: Der Gait-Node kommandiert die Ruhepose und steht innerhalb von 3 s nach dem Start auf, und die Sicherheitsregeln verlangen, dass Sie den Loop-Key vor dem Start einstecken. Ein automatischer Start beim Booten würde Servos ohne anwesende Person bewegen. Wenn Sie später eine eigene Unit hinzufügen (ein Type=simple-Dienst, der docker compose -f docker/compose.yaml run --rm robot ausführt, After=docker.service), behalten Sie den Loop-Key als Arming-Schritt bei und lassen Sie ihn nie unbeaufsichtigt eingesteckt.
Nützliche Befehle
| Befehl | Zeigt Ihnen |
|---|---|
hostname -I, ip a | IP-Adressen |
lsusb | USB-Geräte: nach 303a:1001 (XIAO) und 10c4:ea60 (CP210x) suchen |
ls -l /dev/strido_mcu /dev/rplidar | udev-Symlinks existieren und zeigen auf ein tty |
udevadm info -a -n /dev/ttyACM0 | Attribute für eine udev-Regel |
dmesg -w | Kernel-Meldungen live (Gerät einstecken und beobachten) |
vcgencmd get_throttled | 0x0 ist gut; Bit 0 (0x1) = Unterspannung jetzt, Bit 16 (0x10000) = Unterspannung seit dem Booten aufgetreten |
vcgencmd measure_temp | SoC-Temperatur (der Active Cooler hält sie unter ROS-Last im Rahmen) |
htop, free -h, df -h | CPU, Arbeitsspeicher, Datenträger |
docker ps, docker logs <id> | laufende Container und ihre Ausgabe |
vcgencmd ist Teil von Raspberry Pi OS; unter Ubuntu muss es eventuell installiert werden (libraspberrypi-bin) oder ist nicht verfügbar.
Wartbar halten
- Aktualisieren Sie den Host regelmäßig (
apt full-upgrade); ROS 2 lebt im Image, ein Host-Update kann ROS also nicht beschädigen. - Bauen Sie das Image nach dem Pullen von Repo-Änderungen neu: Das Dockerfile kopiert
packages/strido-coreund die drei ROS-Pakete zur Build-Zeit. - Fahren Sie sauber herunter (
sudo poweroff), bevor Sie den Strom trennen: Eine SD-Karte, auf die während eines Stromausfalls geschrieben wird, kann das Dateisystem beschädigen.
Selbsttest
- Warum braucht der Pi in Strido kein aktiviertes I²C?
- Was beheben
PSU_MAX_CURRENT=5000undusb_max_current_enable=1, und warum braucht dieser Roboter sie? - Welche Datei gibt dem ESP32-S3 einen stabilen Gerätenamen, und wie lautet dieser Name?
- Warum ist Raspberry Pi OS die bessere Wahl, wenn Sie die Kamera nutzen wollen?
- Warum startet das Repo den Roboter nicht automatisch beim Booten?
Antworten
- Alle I²C-Geräte (PCA9685, LSM6DSOX, INA260) hängen am ESP32-S3; der Pi kommuniziert mit dem ESP32 nur über USB-Seriell.
- Die Versorgung über die GPIO-5-V-Pins überspringt die USB-C-PD-Aushandlung, sodass der Pi eine schwache Versorgung annehmen und den USB-Strom begrenzen würde. Die Einstellungen deklarieren eine 5-A-Versorgung und erlauben vollen USB-Strom für LiDAR und ESP32.
ros2/strido_bringup/config/99-strido.rules, kopiert nach/etc/udev/rules.d/; sie legt/dev/strido_mcuan.- Der Kamera-Stack des Pi 5 braucht den libcamera-Fork von Raspberry Pi, den Raspberry Pi OS mitliefert und das Docker-Image nicht enthält.
- Der Start lässt den Roboter innerhalb von 3 s aufstehen; die Startreihenfolge verlangt, dass eine Person die Servos unmittelbar vor dem Start mit dem Loop-Key scharf schaltet.