diff --git a/README.md b/README.md index a4d3bbb..52be6e3 100644 --- a/README.md +++ b/README.md @@ -286,6 +286,60 @@ math.atan((self.wheel_rx + self.wheel_fx) / self.wheel_ry)) --- +## Auto-Rotate (automatisches Drehen zu einem Ziel-Heading) + +Die Admin-Seite (`http://:8000/admin.html`) enthält im IMU-Bereich eine Funktion, mit der der Rover automatisch zu einem eingegebenen Ziel-Heading dreht. + +### Bedienung + +1. Zielwinkel eingeben (0–359°, wobei 0 = Nord, 90 = Ost, 180 = Süd, 270 = West — **nach Nord-Kalibrierung**) +2. „Zu Heading drehen" drücken +3. Der Rover dreht auf der Stelle und stoppt automatisch bei ±1° Genauigkeit +4. „Drehung abbrechen" bricht den Vorgang vorzeitig ab + +### Technischer Ablauf + +``` +Admin-API + → startet auto_rotate_ros.py via docker exec im Container + → setzt rosparam /auto_rotate_active = True + → joystick_parser_node ignoriert ALLE Eingaben (Web-GUI, D-Pad, F710) + → auto_rotate_ros.py dreht mit Point-Turn-Modus bei fester Geschwindigkeit (~20 %) + → bei Ziel erreicht (oder Abbruch): + → rosparam /auto_rotate_active = False ← erst jetzt wird Steuerung freigegeben + → letzter Fahrmodus (vor der Drehung) wird wiederhergestellt +``` + +### Wichtige Hinweise + +- **Geschwindigkeit:** Fest auf ~20 % (entspricht `vel=4` durch die Expo-Kurve), unabhängig vom eingestellten Speed-Limit in der Admin-Seite. +- **Nord-Kalibrierung muss gesetzt sein:** Der Zielwinkel bezieht sich auf den kalibrierten Norden. Ohne Kalibrierung dreht der Rover zum magnetischen Roh-Heading. +- **Kein manuelles Eingreifen während der Drehung:** Joystick, D-Pad und F710 sind über `rosparam /auto_rotate_active` vollständig blockiert. Erst nach Abschluss oder Abbruch wird die Steuerung freigegeben. +- **Fahrmodus:** Der Rover wechselt intern in den Point-Turn-Modus und kehrt danach automatisch in den zuvor aktiven Modus zurück (Ackermann, Point Turn oder Crabbing). +- **Neigungskalibrierung:** Wenn die IMU-Neigung genullt wurde, gilt das nur für die Anzeige — die Rotation selbst nutzt nur den Yaw-Winkel. + +### Dateien + +| Datei | Beschreibung | +|---|---| +| `scripts/auto_rotate_ros.py` | Läuft im Docker-Container, nativer rospy-Node | +| `scripts/imu_rotate.py` | Steuerung des docker-exec-Prozesses, Status-Tracking | + +### Deploy nach Änderungen + +```bash +# auto_rotate_ros.py oder joystick_parser_node.py geändert: +scp scripts/auto_rotate_ros.py pi@192.168.1.9:/home/pi/ExoMy_Software/scripts/ +scp src/joystick_parser_node.py pi@192.168.1.9:/home/pi/ExoMy_Software/src/ +ssh pi@192.168.1.9 "sudo docker restart exomy_autostart" + +# imu_rotate.py oder exomy_admin_api.py geändert: +scp scripts/imu_rotate.py scripts/exomy_admin_api.py pi@192.168.1.9:/home/pi/ExoMy_Software/scripts/ +ssh pi@192.168.1.9 "sudo systemctl restart exomy-admin-api.service" +``` + +--- + ## Fahrmodi | Modus | Taste (Controller) | Taste (Web-GUI) |