EIntragungen
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 <config.yaml> <fl|fr|cl|cr|rl|rr> <winkel>")
|
||||
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())
|
||||
Reference in New Issue
Block a user