seKwaI
Absolut! Hier ist eine umfassende Projektdokumentation, die alle bisher gesammelten Informationen zusammenfasst und versucht, eine detaillierte Anleitung für Ihr DIY-Segway-Projekt zu geben.
—
Links
Projektdokumentation: DIY Segway mit RP2350 und MessKi-Integration
Version: 0.1 (Entwurf) Datum: 26. Mai 2025
1. Projektübersicht und Ziele
1.1. Projektidee Entwicklung eines selbstbalancierenden, zweirädrigen Fahrzeugs (Segway-ähnlich) unter Verwendung eines Raspberry Pi RP2350 Mikrocontrollers für die Echtzeit-Regelung und der bestehenden “MessKi”-Software für übergeordnete Steuerung, Parametrierung, Datenerfassung und Visualisierung.
1.2. Kernziele * Realisierung eines funktionierenden, selbstbalancierenden Fahrzeugs. * Nutzung von MicroPython auf dem RP2350 für die Regelung. * Nahtlose Integration mit der MessKi-Software über eine serielle/USB-Schnittstelle. * Implementierung einer sicheren und intuitiven Steuerungsmethode. * Modularer Aufbau für einfache Wartung und Erweiterung.
1.3. Angestrebte Funktionen * Automatische Balance im Stand und während der Fahrt. * Steuerung von Geschwindigkeit und Richtung durch den Fahrer. * Fahrererkennung als Sicherheitsmerkmal (Dead Man's Switch). * Übertragung von Telemetriedaten (Neigungswinkel, Geschwindigkeit, Batteriestatus etc.) an MessKi. * Empfang von Steuerparametern (z.B. PID-Werte, Geschwindigkeitslimits) von MessKi. * Live-Visualisierung der Segway-Daten über das MessKi-Webinterface. * Logging von Fahr- und Sensordaten für Analyse und Optimierung. * Not-Aus-Funktion.
2. Systemarchitektur
2.1. Komponentenübersicht * Fahrzeugbasis: Rahmen, Räder (Hoverboard), Standplattform. * Antriebseinheit: 2x Hoverboard-Motoren mit integrierten Encodern, 2x Hoverboard-Motorcontroller. * Sensorik: IMU (BNO085), Fahrererkennungssensoren. * Steuereinheit (Low-Level): Raspberry Pi RP2350. * Steuereinheit (High-Level & UI): PC/Server mit laufender MessKi-Software. * Kommunikationslink: USB-Kabel (RP2350 als CDC-Device ↔ MessKi-Host). * Stromversorgung: Hoverboard-Batterie, Step-Down-Konverter für RP2350 & Sensorik.
2.2. Aufgabenverteilung
* RP2350 (Echtzeit-Controller, MicroPython):
- Auslesen des BNO085 IMU-Sensors (Neigung, Winkelgeschwindigkeit).
- Implementierung des Balance-Algorithmus (PID-Regler) mit hoher Frequenz (Ziel: >100 Hz).
- Auslesen der Fahrererkennungssensoren.
- Auslesen der Lenk-Input-Sensoren (Drucksensoren oder Potentiometer).
- Berechnung der Motorsteuerbefehle basierend auf Balance, Fahrer-Input und MessKi-Befehlen.
- Ansteuerung der Hoverboard-Motorcontroller über UART.
- Implementierung von Sicherheitslimits (max. Neigung, max. Geschwindigkeit).
- Serielle Kommunikation mit MessKi:
- Senden von Telemetriedaten (Winkel, Geschwindigkeit, Batteriestatus, Motorströme, etc.).
- Empfangen und Verarbeiten von Steuerbefehlen (Soll-Geschwindigkeit) und Parametern (PID-Werte, Limits) von MessKi.
- Durchführen von Kalibrierungsroutinen.
* MessKi (High-Level Steuerung, Monitoring, UI, Konfiguration):
- Benutzerschnittstelle (Web-Frontend) für:
- Anzeige von Live-Telemetriedaten (Winkel, Geschwindigkeit, etc.).
- Einstellen von Parametern (PID-Gains, Max-Speed, Max-Tilt).
- Auslösen von Kalibrierungsroutinen auf dem RP2350.
- Gamepad-Interface zur optionalen, indirekten Steuerung (z.B. Setzen einer Soll-Geschwindigkeit, *nicht* direkte Balance-Lenkung).
- Neues MessKi-Gerät “SegwayInterface”:
- Nutzt `SerialInput` oder `SCPIUsbInput` für die Kommunikation mit dem RP2350.
- Definiert Channels und Measures für alle relevanten Segway-Daten.
- Implementiert `@device_action`-Methoden zum Senden von Befehlen/Parametern an den RP2350.
- Datenausgabe über `WebSocketOutputHandler` an das Frontend.
- Datenspeicherung über `CsvOutputHandler` für Analysen.
- Logging von Systemereignissen und Fehlern.
3. Hardwarekomponenten
3.1. Mikrocontroller: Raspberry Pi RP2350 * Board: Raspberry Pi Pico W (oder ein anderes RP2350-Board). * Vorteile: Ausreichend Rechenleistung (Dual Cortex-M0+ mit FPU), genug GPIOs, ADC-Eingänge, I2C- und UART-Schnittstellen, gute MicroPython-Unterstützung. * Anschluss: Über USB an den MessKi-Host-PC.
3.2. Inertial Measurement Unit (IMU): Bosch BNO085 * Modul: Breakout-Board mit BNO085. * Vorteile: Hochintegrierte Sensor-Fusion-Algorithmen (Hillcrest/CEVA SH-2), liefert stabile Orientierungsdaten (Quaternionen, Eulerwinkel), entlastet den RP2350. Höhere Update-Raten und oft bessere Kalibrierung als BNO055. * Anschluss: Über I2C an den RP2350. * Bibliothek: [dobodu/BOSCH-BNO085-I2C-micropython-library](https://github.com/dobodu/BOSCH-BNO085-I2C-micropython-library)
3.3. Motorisierung: Hoverboard-Motoren und -Controller * Komponenten: 2x Standard Hoverboard-Radnabenmotoren (meist BLDC mit Hallsensoren) und die zugehörigen Hoverboard-Motorcontroller-Platinen (oft zwei separate oder eine kombinierte). * Ansteuerung: Die Motorcontroller werden typischerweise über UART mit einem spezifischen seriellen Protokoll angesteuert. Das Protokoll beinhaltet oft Befehle für Geschwindigkeit/Drehmoment für jedes Rad.
- Ihr `HopfNRoll`-Projekt ist hier eine wertvolle Referenz für das Protokoll.
* Verbindung zum RP2350: Über eine UART-Schnittstelle des RP2350.
- Level Shifter: Unbedingt erforderlich, wenn die Hoverboard-Controller mit 5V Logikpegel arbeiten und der RP2350 mit 3.3V. Ein bidirektionaler Level-Shifter für TX/RX ist notwendig.
3.4. Fahrererkennung: Fußschalter / Drucksensoren * Variante A (einfach): Fußschalter
- 2x robuste Mikroschalter oder Endschalter.
- Montage unter den Fußpads, sodass sie bei Belastung schließen.
- Anschluss an digitale GPIO-Pins des RP2350 (mit internem oder externem Pull-up/-down Widerstand).
* Variante B (fortgeschritten): Drucksensoren (FSRs)
- 2x oder 4x Force Sensitive Resistors (FSRs).
- Montage unter den Fußpads.
- Anschluss an ADC-Eingänge des RP2350 (oft über einen Spannungsteiler).
- Ermöglicht eine feinere Erkennung und potenziell eine gewichtsbasierte Steuerung.
* Ziel: Motoren nur aktivieren, wenn beide Fußpads belastet sind.
3.5. Lenkmechanismus (Optionen) * Option A: Drucksensoren (wie 3.4B, erweitert für Lenkung)
- Mindestens ein FSR pro Fußpad, besser zwei (vorne/hinten) pro Pad.
- Software interpretiert differentielle Druckverteilung zwischen linkem/rechtem Fuß und vorderem/hinterem Bereich der Pads als Lenkimpuls.
* Option B: Lenkstange mit Potentiometer
- Mechanische Konstruktion einer neigbaren Lenkstange.
- Ein Dreh-Potentiometer (z.B. 10kΩ linear) erfasst den Neigungswinkel der Stange.
- Potentiometer an einen ADC-Eingang des RP2350.
* Option C: Joystick direkt am RP2350 (weniger empfohlen für die Hauptlenkung)
- Ein kleiner analoger Thumbstick, montiert an einer Festhalte-Struktur.
- X-Achse des Joysticks an einen ADC-Eingang.
3.6. Stromversorgung * Hauptbatterie: Standard Hoverboard Li-Ion Akku (typ. 36V, 10S). * RP2350-Versorgung: Step-Down (Buck) Konverter-Modul, das die 36V der Hauptbatterie auf stabile 5V (für USB-Power-Input des Pico) oder direkt 3.3V (für VSYS-Pin des Pico) reduziert.
- Der Konverter muss den Strombedarf des RP2350, der IMU und ggf. anderer 3.3V-Komponenten decken können.
* Verkabelung: Geeignete Kabelquerschnitte, Sicherungen für den Hauptstromkreis und den Step-Down-Konverter.
3.7. Optionale Komponenten * Status-LEDs (für Betriebszustand, Fehler, Kalibrierung) direkt am RP2350. * Ein kleiner Summer für akustische Signale. * Not-Aus-Schalter (Hardware), der die Stromzufuhr zu den Motoren unterbricht.
3.8. Materialliste (geschätzt, ohne Hoverboard-Basis) * Raspberry Pi RP2350 (Pico W oder ähnliches) * BNO085 Breakout-Board * 2-4x Fußschalter oder FSRs * Step-Down Konverter (36V → 5V/3.3V) * Bidirektionaler Level Shifter (3.3V ↔ 5V, falls nötig für Hoverboard UART) * Potentiometer (für Option 3.5B) oder Joystick-Modul (Option 3.5C) * Kabel, Steckverbinder (JST, Dupont etc.), Schrumpfschlauch * Lochrasterplatine oder kleine Prototyping-Platine * Gehäuse für Elektronik * Material für Rahmen/Plattform (Holz, Aluminiumprofile)
4. Software-Implementierung: RP2350 (MicroPython)
4.1. Entwicklungsumgebung * Thonny IDE oder VS Code mit MicroPython-Erweiterung (z.B. Pico-W-Go). * REPL-Zugriff über USB-Serial für direktes Testen und Debugging.
4.2. Softwarestruktur (RP2350) * `main.py`: Hauptprogramm, Initialisierung, Start der asynchronen Tasks. * `bno085_handler.py` (oder ähnlich): Kapselt die Logik für die BNO085-Bibliothek, liefert aufbereitete Winkeldaten. * `hoverboard_protocol.py`: Implementiert das Senden von Befehlen an die Hoverboard-Controller (inkl. Checksumme). * `pid_controller.py`: Klasse oder Funktionen für den PID-Regler. * `config.py`: Speichert Kalibrierwerte, PID-Konstanten (ggf. aus Flash geladen). * `utils.py`: Hilfsfunktionen (z.B. Quaternion-zu-Euler-Umrechnung, Mapping-Funktionen). * Asynchrone Tasks (`uasyncio`):
- `balance_loop()`: Hauptregelkreis (IMU lesen, PID, Motoren ansteuern).
- `messki_communication_loop()`: Kommunikation mit MessKi.
- Optional: `sensor_read_loop()`: Wenn IMU-Auslesung oder andere Sensorik komplexer ist und separat laufen soll.
4.3. IMU-Integration (BNO085) * Einbindung der `BOSCH-BNO085-I2C-micropython-library`. * Konfiguration der I2C-Schnittstelle auf dem RP2350. * Initialisierung des BNO085. * Aktivierung des benötigten Sensor-Reports (z.B. `BNO_REPORT_GAME_ROTATION_VECTOR` für Neigung ohne Magnetfeldeinfluss oder `BNO_REPORT_ROTATION_VECTOR` für 9-Achsen-Fusion). * Implementierung einer Funktion `get_raw_bno_pitch_from_sensor()`, die den rohen Pitch-Winkel (oder den relevanten Neigungswinkel) vom Sensor liefert. Dies erfordert das Parsen der Daten aus dem Report der Bibliothek. * Implementierung der Kalibrierungsroutine (siehe 4.10).
4.4. Balance-Algorithmus (PID-Regler) * Implementierung einer PID-Reglerfunktion oder -klasse.
- Eingang: `current_calibrated_tilt_angle`, `target_angle` (sollte 0.0 nach Kalibrierung sein).
- Ausgang: Korrekturwert für die Motorgeschwindigkeit.
* Parameter `KP`, `KI`, `KD` (Proportional, Integral, Derivative Anteile). * Berechnung des Fehlers: `error = target_angle - current_calibrated_tilt_angle`. * Berechnung des Integral-Terms (Summe der Fehler über Zeit), inkl. Anti-Windup. * Berechnung des Differential-Terms (Änderungsrate des Fehlers). * Loop-Zeit (`dt`) muss berücksichtigt werden. * `pid_output = (KP * error) + (KI * integral_error) + (KD * derivative_error)`. * Tuning: Die PID-Werte müssen experimentell ermittelt werden. Starten Sie mit kleinem P, dann D, dann I.
4.5. Motoransteuerung (Hoverboard-Controller) * Konfiguration der UART-Schnittstelle des RP2350. * Implementierung der Funktion `send_hoverboard_command(left_speed, right_speed)`:
- Nimmt Soll-Geschwindigkeitswerte für linken und rechten Motor (z.B. -1000 bis +1000).
- Erzeugt das korrekte serielle Datenpaket gemäß Hoverboard-Protokoll.
- Berechnet und fügt die erforderliche Checksumme hinzu.
- Sendet das Paket über UART an die Motorcontroller.
4.6. Fahrererkennung * Funktion `is_rider_present()`:
- Liest die Zustände der Fußschalter-GPIOs oder die Werte der FSR-ADCs.
- Gibt `True` zurück, wenn ein Fahrer erkannt wird (z.B. beide Schalter gedrückt / ausreichender Druck auf FSRs).
- Wichtig: Der `balance_loop` darf die Motoren nur aktivieren, wenn ein Fahrer präsent UND das System kalibriert ist.
4.7. Lenkungslogik * Funktion `read_steering_input_locally()`:
- Liest die Werte der Lenksensoren (Drucksensoren oder Potentiometer).
- Wandelt die Rohwerte in einen normalisierten Lenkbefehl um (z.B. -1.0 für voll links, 0.0 für geradeaus, +1.0 für voll rechts).
* Integration in `balance_loop()`:
- `steer_effect = normalized_steer_input * STEER_SENSITIVITY`.
- `left_motor_cmd = base_speed_command - steer_effect`.
- `right_motor_cmd = base_speed_command + steer_effect`.
- `base_speed_command` kommt vom PID-Regler und dem Geschwindigkeits-Sollwert von MessKi.
- `STEER_SENSITIVITY` muss experimentell abgestimmt werden.
4.8. Kommunikation mit MessKi (Protokoll) * RP2350 agiert als serielles Gerät (USB CDC). * RP2350 → MessKi (Telemetrie):
- Regelmäßiges Senden von Datenpaketen, z.B. als ASCII-Zeilen oder JSON-Strings.
- Format: `KEY1=VALUE1,KEY2=VALUE2\n` oder `{“tilt”: 1.23, “vbat”: 35.8}\n`
- Beispiele für Daten: `calibrated_tilt_angle`, `raw_pitch`, `motor_left_cmd`, `motor_right_cmd`, `battery_voltage` (falls messbar), `rider_present_status`, `current_steer_input`, `pid_error`, `pid_integral`, `pid_derivative`, `pid_output`.
* MessKi → RP2350 (Befehle/Parameter):
- Format: `CMD:ACTION=VALUE\n` oder `SET:PARAM=VALUE\n`
- Beispiele:
- `CMD:SPEED=200` (Soll-Geschwindigkeit für Vorwärts/Rückwärts)
- `SET:KP=12.5`
- `SET:MAX_TILT=20.0`
- `CMD:CALIBRATE_NOW`
- `CMD:EMERGENCY_STOP`
- Funktion `process_messki_command(command_str)` auf dem RP2350 zum Parsen und Anwenden.
4.9. Sicherheitsfunktionen und Fehlerbehandlung * Maximale Neigung: Wenn `calibrated_tilt_angle` einen kritischen Wert überschreitet (z.B. > 25-30 Grad), Motoren sofort abschalten oder sanft herunterregeln. * IMU-Fehlererkennung: Wenn `get_tilt_angle()` `None` zurückgibt oder Fehler signalisiert, Motoren stoppen. * Fahrer nicht präsent: Motoren sofort stoppen. * Kommunikationsverlust zu MessKi: Nach einer bestimmten Zeit ohne “Heartbeat” oder Befehl von MessKi in einen sicheren Zustand gehen (z.B. Stopp). * Batterie-Unterspannung: Motoren abschalten, um Tiefentladung zu verhindern (falls Batteriespannung gemessen wird).
4.10. Kalibrierungsroutinen * Winkel-Offset-Kalibrierung:
- Funktion `calibrate_level_procedure()` wie zuvor besprochen.
- Auslösbar über Taster am Segway oder Befehl von MessKi.
- Speichern des `ANGLE_OFFSET` im Flash (`config.py` oder separate Datei).
- Laden des Offsets beim RP2350-Start.
* Lenkungs-Kalibrierung (falls nötig):
- Für Potentiometer: Mittelstellung und Maximalausschläge erfassen.
- Für Drucksensoren: Ruhewerte und Werte bei maximaler Belastung/Neigung erfassen.
5. Software-Implementierung: MessKi-Integration
5.1. Neues MessKi-Gerät: “SegwayInterface” * Config (`SegwayConfig(DeviceConfigBase)`):
- `device_class: Literal[“SegwayInterface”] = “SegwayInterface”`
- `name: str = “RP2350 Segway Controller”`
- `input_configs`: Liste, die eine `SerialInputConfig` für den USB-Port des RP2350 enthält (Port muss vom Benutzer eingestellt werden).
- `active_input_uuid`: UUID der `SerialInputConfig`.
- Felder für Standard-PID-Werte, Max-Speed, Max-Tilt, die beim Start an den RP2350 gesendet werden können.
- `fetch_interval_sec`: Wie oft MessKi aktiv Daten vom RP2350 anfordert (falls Pull-Mechanismus) oder Verarbeitungsintervall für empfangene Daten. Eher gering halten, da RP2350 von sich aus senden sollte.
* Handler (`SegwayHandler(DeviceBase)`):
- `_activate()`: Stellt sicher, dass der serielle Port geöffnet ist. Sendet ggf. initiale Konfigurationsparameter an den RP2350.
- `_run_device_task()`:
- Liest kontinuierlich Daten vom seriellen Input (`await self._read_from_active_input()`).
- Parst die empfangenen Telemetrie-Strings/JSONs vom RP2350.
- Aktualisiert die entsprechenden Measures in den MessKi-Channels.
- Holt Gamepad-Daten vom `GamepadHandler`.
- Berechnet daraus eine Soll-Geschwindigkeit (z.B. Vorwärts/Rückwärts basierend auf einem Stick). Wichtig: Die feine Balance-Lenkung geschieht auf dem RP2350! MessKi liefert nur den “Wunsch” des Fahrers.
- Sendet die Soll-Geschwindigkeit (und ggf. grobe Lenkrichtung, falls gewünscht, aber eher nicht für Balance) an den RP2350.
- `@device_action` Methoden:
- `set_pid_gains(kp: float, ki: float, kd: float)`: Sendet `SET:KP=…` etc. an RP2350.
- `set_max_speed(speed: int)`
- `set_max_tilt_angle(angle: float)`
- `trigger_calibration()`: Sendet `CMD:CALIBRATE_NOW` an RP2350.
- `send_emergency_stop()`: Sendet `CMD:EMERGENCY_STOP`.
- `send_target_speed(speed: int)` (intern von `_run_device_task` genutzt oder als Action).
5.2. Input-Handler Konfiguration (Serial/USB) * In der `SegwayConfig` wird eine `SerialInputConfig` definiert. * Der `port` muss vom Benutzer in MessKi auf den korrekten virtuellen COM-Port / `/dev/ttyACMx` des RP2350 eingestellt werden. * Baudrate, etc. müssen mit den Einstellungen auf dem RP2350 übereinstimmen. * `read_mode` in MessKi sollte “readline” sein, wenn der RP2350 mit Newline terminiert. `terminator` entsprechend setzen (z.B. `\n`).
5.3. Channel- und Measure-Definitionen in MessKi (für `SegwayConfig`) * Channel “Segway Telemetry”:
- `TiltAngle` (NumericMeasure, Einheit: Grad)
- `AngularVelocity` (NumericMeasure, Einheit: Grad/s)
- `BatteryVoltage` (NumericMeasure, Einheit: V)
- `MotorLeftSpeed` (NumericMeasure, Einheit: RPM oder Einheit vom RP2350)
- `MotorRightSpeed` (NumericMeasure, Einheit: RPM oder Einheit vom RP2350)
- `RiderPresent` (StringMeasure oder NumericMeasure: “JA”/“NEIN” oder 1/0)
- `SteeringInputRaw` (NumericMeasure, Rohwert vom Lenksensor)
- `PIDError` (NumericMeasure)
- `PIDOutput` (NumericMeasure)
- `RP2350Status` (StringMeasure, z.B. “BALANCING”, “CALIBRATING”, “ERROR”)
* Channel “Control Outputs”:
- `TargetSpeedToRP` (NumericMeasure, von MessKi an RP2350 gesendet)
- `TargetSteerToRP` (NumericMeasure, falls MessKi auch Lenkimpulse sendet)
* Channel “PID Parameters”:
- `Param_KP` (NumericMeasure, spiegelt den Wert auf dem RP2350 wider, lesend)
- `Param_KI` (NumericMeasure)
- `Param_KD` (NumericMeasure)
* Outputs: `WebSocketOutputHandler` für alle relevanten Channels, `CsvOutputHandler` für Telemetrie.
5.4. Steuerung über MessKi (Gamepad, API) * Das Gamepad in MessKi wird *nicht* für die direkte Links/Rechts-Balance-Lenkung verwendet. * Es kann verwendet werden, um eine Soll-Geschwindigkeit (vorwärts/rückwärts) an den RP2350 zu senden. Der `_run_device_task` im `SegwayHandler` würde z.B. den Y-Achsenwert eines Sticks lesen und als `CMD:SPEED=…` an den RP2350 senden. * Die API-Endpunkte (`@device_action`) ermöglichen das Setzen von Parametern (PID, Limits) und das Auslösen von Aktionen (Kalibrierung, Not-Aus).
5.5. Datenvisualisierung und -logging * MessKi-Webfrontend zeigt Live-Werte aus den “Segway Telemetry”-Measures an. * Grafische Darstellung von Neigungswinkel, Geschwindigkeiten etc. * CSV-Logging für spätere Analyse der Fahrdynamik und PID-Abstimmung.
6. Mechanische Konstruktion
6.1. Rahmen und Plattform * Stabiler Rahmen, der die Hoverboard-Achsen/Motoren aufnimmt. * Eine Plattform für den Fahrer, die ausreichend Platz bietet und die Montage der Fußschalter/Drucksensoren ermöglicht. * Materialien: Aluminiumprofile, Multiplex-Holz, Stahl (je nach verfügbaren Mitteln und Fähigkeiten). * Schwerpunkt beachten: Der Gesamtschwerpunkt (Fahrer + Segway) sollte sich möglichst über der Radachse befinden.
6.2. Montage der Komponenten * RP2350, BNO085, Step-Down-Konverter, Level-Shifter in einem geschützten Gehäuse unterbringen. * BNO085 möglichst nahe am Drehzentrum (Radachse) und vibrationsarm montieren. Die genaue Ausrichtung (X, Y, Z Achsen) muss in der Software berücksichtigt werden. * Sichere Montage der Batterie.
6.3. Lenkmechanismus (falls zutreffend) * Drucksensoren: Sauber unter den Fußpads integrieren, sodass sie zuverlässig auf Gewichtsverlagerung reagieren. * Lenkstange: Stabile Lagerung der Drehachse, spielfreie Verbindung zum Potentiometer/Encoder. Endanschläge für die Lenkstange vorsehen.
6.4. Verkabelung und Stromverteilung * Sorgfältige Verkabelung mit ausreichenden Querschnitten, besonders für die Motorcontroller und die Hauptbatterie. * Zugentlastung für alle Kabel. * Übersichtliche Stromverteilung mit Sicherungen. * Gute Abschirmung für Signalleitungen (IMU, UART), um Störungen zu vermeiden.
7. Testplan und Inbetriebnahme
SEHR WICHTIG: Bei allen Tests mit Motorkraft äußerste Vorsicht walten lassen! Das Segway muss immer gesichert sein, um unkontrolliertes Wegfahren oder Umkippen zu verhindern! Beginnen Sie mit aufgebockten Rädern.
7.1. Modultests (RP2350) * BNO085: Daten auslesen, Winkelberechnung prüfen, Kalibrierung testen. Ausgabe über Serial an PC. * Hoverboard-Controller: Serielle Befehle senden, Motoren manuell drehen lassen (langsam!), Drehrichtung prüfen. * Fahrererkennung: Funktion der Schalter/FSRs prüfen. * Lenksensorik: Rohwerte der Drucksensoren/Potis auslesen und prüfen.
7.2. Statische Balance-Tests (gesichert) * Segway aufbocken, sodass die Räder frei drehen können, aber das Gestell nicht umkippen kann. * Fahrererkennung aktivieren (Gewichte auf Pads). * Balance-Regler (PID) aktivieren. * Ziel: Die Räder sollten versuchen, die Plattform horizontal zu halten, wenn sie manuell leicht geneigt wird. * PID-Tuning beginnen:
1. Nur P-Anteil (I und D auf 0): P erhöhen, bis leichte Oszillationen auftreten. Dann P etwas reduzieren. 2. D-Anteil hinzufügen: D erhöhen, um Oszillationen zu dämpfen. 3. I-Anteil hinzufügen (vorsichtig): I erhöhen, um statische Fehler auszugleichen. * Iterativ vorgehen!
7.3. Dynamische Balance-Tests (mit Fahrer, SEHR GUT GESICHERT!) * Personen zum Sichern bereitstellen! Langsam beginnen. * In einem Bereich mit viel Platz und ohne Hindernisse. * Schutzausrüstung tragen (Helm!). * Feintuning der PID-Werte. * Testen der Reaktion auf leichte Störungen.
7.4. Lenkungstests * Wenn Balance grundlegend funktioniert, Lenklogik aktivieren. * Zuerst bei sehr langsamer oder keiner Vorwärtsbewegung testen. * `STEER_SENSITIVITY` anpassen für ein angenehmes Lenkverhalten.
7.5. MessKi-Integrationstests * RP2350 mit MessKi verbinden. * Prüfen, ob Telemetriedaten korrekt in MessKi angezeigt werden. * Testen der Parameteränderung über MessKi (PID-Werte, Limits). * Testen der Soll-Geschwindigkeitsvorgabe von MessKi an RP2350.
7.6. Sicherheitsüberprüfungen * Funktion der Fahrererkennung unter allen Bedingungen. * Reaktion auf maximale Neigung. * Not-Aus-Funktion. * Verhalten bei niedrigem Batteriestand.
8. Mögliche Erweiterungen und Zukünftige Arbeiten * Verbesserte Sensor-Fusion-Algorithmen (falls nicht BNO085). * Adaptiver PID-Regler. * Energierückgewinnung beim Bremsen (Hoverboard-Controller unterstützen das oft). * Integration von GPS für Tracking. * Fortgeschrittenere Fahrmodi (z.B. Sport, Eco). * Hinderniserkennung.
9. Sicherheitshinweise (SEHR WICHTIG!)
* Dies ist ein potenziell gefährliches Projekt! Ein unkontrolliertes Segway kann schwere Verletzungen verursachen oder Sachschäden anrichten. * Arbeiten Sie immer mit größter Vorsicht! * Tragen Sie immer geeignete Schutzausrüstung (Helm, Knie-/Ellbogenschützer) bei Testfahrten. * Sichern Sie das Segway bei Tests immer, besonders in der Anfangsphase (z.B. aufbocken, Haltevorrichtungen, zweite Person). * Implementieren Sie mehrere Sicherheitsebenen (Fahrererkennung, Neigungslimits, Not-Aus). * Beginnen Sie mit niedrigen Geschwindigkeiten und geringer Leistung. * Testen Sie in einem sicheren, freien Bereich ohne Hindernisse oder andere Personen. * Seien Sie sich der Grenzen Ihrer Fähigkeiten und der Hardware bewusst. * Lithium-Ionen-Akkus erfordern sorgfältigen Umgang! Kurzschlüsse und Überladung vermeiden. Brandschutz beachten. * Übernehmen Sie die volle Verantwortung für Ihr Projekt und dessen Betrieb.
—
Diese Dokumentation ist ein umfangreicher Leitfaden. Beginnen Sie mit kleinen, überschaubaren Schritten und testen Sie jede Komponente gründlich, bevor Sie sie integrieren. Das Debugging und Tuning des Balance-Reglers wird die meiste Zeit in Anspruch nehmen.
Viel Erfolg bei diesem spannenden Vorhaben!