From bc542bcad6f500148e6b2f0097f3d4635f4ed2d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Tue, 19 May 2026 07:14:03 +0200 Subject: [PATCH] EIntragungen --- exomy-setup-status.md | 20 +++++++++++ test_single_steer_wheel.py | 68 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 test_single_steer_wheel.py diff --git a/exomy-setup-status.md b/exomy-setup-status.md index 04b3b84..f21d451 100644 --- a/exomy-setup-status.md +++ b/exomy-setup-status.md @@ -84,3 +84,23 @@ Stand: 2026-05-18 - Die originale alte Kameraanbindung aus ExoMy war mit dem aktuellen Raspberry-Pi-Kamerastack nicht mehr funktionsfaehig. - Deshalb wurde die Kameraanbindung auf einen direkten MJPEG-Stream vom Host umgestellt. - Wenn die Weboberflaeche offen war, kann nach Aenderungen ein hartes Neuladen im Browser noetig sein. + +## Crabbing-Teststand + +- Crabbing wird aktuell separat untersucht, weil dieser Modus auf dem neu aufgebauten Rover nicht sauber funktioniert, waehrend die anderen Fahrmodi brauchbar laufen. +- Das ESA-Original setzt im Crabbing-Modus grundsaetzlich denselben Lenkwinkel auf alle sechs Raeder. +- Daraus folgt: Das Problem liegt wahrscheinlich eher in der aktuellen mechanischen oder elektrischen Zuordnung des neu aufgebauten Rovers als in einer spaeteren Abweichung vom Originalcode. + +Bisher beobachtete Reaktionen im Crabbing-Modus: + +- `FL`: links richtig, rechts falsch +- `FR`: links kein Einschlag, rechts kein Einschlag +- `CL`: links kein Einschlag, rechts kein Einschlag +- `CR`: links falsch, rechts richtig +- `RL`: links richtig, rechts falsch +- `RR`: links richtig, rechts falsch + +Wichtige Betriebsregel: + +- `docker/run_exomy.sh --autostart` niemals per `sudo` starten +- nur als Benutzer `pi`, sonst wird wegen `~` das falsche Verzeichnis gemountet und ExoMy startet kaputt diff --git a/test_single_steer_wheel.py b/test_single_steer_wheel.py new file mode 100644 index 0000000..ea0e1df --- /dev/null +++ b/test_single_steer_wheel.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +import sys + +try: + import Adafruit_PCA9685 +except ImportError: + print("Adafruit_PCA9685 ist nicht installiert. Dieses Skript ist fuer den Raspberry/Container gedacht.") + sys.exit(1) + + +WHEEL_TO_PIN = { + "fl": "pin_steer_fl", + "fr": "pin_steer_fr", + "cl": "pin_steer_cl", + "cr": "pin_steer_cr", + "rl": "pin_steer_rl", + "rr": "pin_steer_rr", +} + +WHEEL_TO_NEUTRAL = { + "fl": "steer_pwm_neutral_fl", + "fr": "steer_pwm_neutral_fr", + "cl": "steer_pwm_neutral_cl", + "cr": "steer_pwm_neutral_cr", + "rl": "steer_pwm_neutral_rl", + "rr": "steer_pwm_neutral_rr", +} +def main() -> int: + if len(sys.argv) != 4: + print("Aufruf: python3 test_single_steer_wheel.py ") + return 1 + + config_path = sys.argv[1] + wheel = sys.argv[2].lower() + angle = float(sys.argv[3]) + + if wheel not in WHEEL_TO_PIN: + print("Unbekanntes Rad:", wheel) + return 1 + + config = {} + with open(config_path, "r", encoding="utf-8") as handle: + for raw_line in handle: + line = raw_line.strip() + if not line or line.startswith("#") or ":" not in line: + continue + key, value = line.split(":", 1) + config[key.strip()] = value.strip() + + pin = int(config[WHEEL_TO_PIN[wheel]]) + neutral = int(config[WHEEL_TO_NEUTRAL[wheel]]) + pwm_range = int(config["steer_pwm_range"]) + pwm_value = int(neutral + angle / 90.0 * pwm_range) + + print("wheel:", wheel) + print("pin:", pin) + print("neutral:", neutral) + print("angle:", angle) + print("pwm:", pwm_value) + + pwm = Adafruit_PCA9685.PCA9685(busnum=1) + pwm.set_pwm_freq(50) + pwm.set_pwm(pin, 0, pwm_value) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main())