RoπLawnMow

Hallo zusammen,
schon wieder Mai und ich habe noch so viele andere Projekte im Garten zu erledigen gehabt. Am Samstag habe ich meine erste reproduzierbare Fahrt auf einen Geopunkt aus unterschiedlichen Positionen realisieren können.
Mein LC29h-DA macht ja nur 1Hz Updates, so ist der Abstand bei normaler Mähfahrt ca 24cm zwischen zwei Punkten. Bin aber sehr zufrieden mit dem Teilergebnis. Im Moment lasse ich ihn Heading und Entfernung zum Ziel berechnen, er fährt dann los und berechnet die Daten alle 3 Sekunden neu. Die aktualisierten Werte lasse ich in die Motorsteuerung einfließen. Weicht der Winkel-Fehler zu stark ab, dann lasse ich ihn auf der Stelle drehen / korrigieren. Der Korrekturwinkel berechnet mir die Tics, die zur Drehung notwendig sind, das geht besser als nach Gyro-Werten drehen. Der nächste Schritt ist dann eine aneinander Reihung von GeoPunkten die sequentiell abgefahren werden sollen.
Hier das Protokoll der Fahrt von Samstag. Zuerst bin ich mit der Fernbedienung einmal um einen Teil der Rasenfläche gefahren, dann auf den definierten LatLon Punkt zu . Danach habe ich ihn zurück getragen und bin in anerer Richtung gestartet um zu testen ob er sich richtig ausrichtet.
Damnächst geht es dann dann weiter. Viel Spaß beim schauen.
View attachment RTK_session.mp4
 
Hallo Ulli,
bei mir ist gerade der Wurm drin. Mein alter Mäher mit Ardumower-Technik ist am Wochenende stehen geblieben und will einfach nicht mehr fahren. Mähwerk läuft. Dann ist auch der Webserver nicht mehr gelaufen. Ein Grund, den ich erst später erkannt habe, war ein Hänger in meinem Netzwerk. Die wlan-Verwaltung war nicht mehr zu erreichen, daher der Ausfall. Das ist wohl aber nicht der alleinige Grund für den Ausfall - ich werde wohl weiter suchen müssen.
Mit Widerwillen habe ich bei meinem Roten Mäher nun alle Antennen aufs Dach gesetzt - super vorteilhaft wenn man unter Büschen durchfährt -
grrrrrrr. Jetzt suche ich nach Fehlern/Optimierungen bei der Bahnberechnung.
In diesem Zusammenhang verstehe ich nicht genau was du meinst mit:
„Weicht der Winkel-Fehler zu stark ab, dann lasse ich ihn auf der Stelle drehen / korrigieren. Der Korrekturwinkel berechnet mir die Tics, die zur Drehung notwendig sind, das geht besser als nach Gyro-Werten drehen.“
Kannst Du das bitte noch mal etwas ausführlicher erklären.
Ich habe hier einen erweiterten Kalman-Filter im Einsatz und jede Menge Korrekturmaßnahmen / Entscheidungen bei der Kursbestimmung. Weil es so komplizieret ist, funktioniert es wohl auch nicht - hahaha.
Heute habe ich zufällig gesehen, daß die Preise für „Dual-Antenna RTK“ stark gefallen sind, man könnte sagen, fast erschwinglich.
siehe hier: H-RTK Unicore UM982 (Dual Antenna Heading)
Gruß Fürst Ruprecht
 
Hallo Ulli,
bei mir ist gerade der Wurm drin. Mein alter Mäher mit Ardumower-Technik ist am Wochenende stehen geblieben und will einfach nicht mehr fahren. Mähwerk läuft. ...........
Heute habe ich zufällig gesehen, daß die Preise für „Dual-Antenna RTK“ stark gefallen sind, man könnte sagen, fast erschwinglich.
siehe hier: H-RTK Unicore UM982 (Dual Antenna Heading)
Gruß Fürst Ruprecht
Hallo Mein Fürst!,
ich habe neulich mal an Deine mechanischen Konstruktionen denken müssen. Mir fiel ein Real in die Hände (wohl eher aufs Telefon-Display) das zeigte ein Fahrwerk mit 4 lenkbaren Rädern. Ich hatte ja auch mal die konstruktion gebaut die Du verbaut hast die ohne Spurstange auskammt.
Der Konstrukteur hatte einen Getriebe Motor für die Lenkbewegungen und dann an allen 4 Rädern über Bowdenzug und Umlenkrollen (ähnlich wie beim Flugzeug) die Bewegung übertragen. Das fand ich schon ziehmlich beeindruckend, denn das erschien mir besser als mit einem Gestänge.
...
Ja das mit den Antennen und der Signalübertragung ist schon blöd. Da ist aber eigentlich jedes Controller basierendes Projekt noch im Vorteil ggü. einer Architektur mit einem Pi oder ähnlichem (finde ich) denn wenn ich z.B. noch im Test-Modus fahre und über mein Notebook mit dem Pi im Mäher über ssh verbunden bin, und es reißt mir die WLAN Verbindung zum Notebook ab, dann funktionieren auch die Scripte nicht mehr die ich auf dem Pi über das Notebook gestartet habe. Dafür lassen es sich aber Scripte wesentlich besser debuggen und verbessern (finde ich) als wenn man compilieren muss hochladen und dann wieder schauen muss wie die Reaktion ist und ob es sich verbessert hat oder nicht.
Gut man kann nicht alles haben.
Ich versuche das mit dem winke-Fehler mal zu beschreiben, wenn es nicht deutlich wird, dann musst Du dich noch einmal melden.
Nehmen wir an der Mäher ist an einem Punkt egal ob er fährt oder steht, dann weiß er ja über das RTK Modul wo er ist. Und er weiß wo er als nächstes hin muß. Hier eine logzeile.
Code:
Dist=7.38m | Target=76.8° | Mode=GYRO° | RTK_Heading=149.3° | Gyro_Heading=149.3° | Err=-72.5° |RTK-FIX=RTK-Fixed |RTK-Quali=91 |RTK-State=RTK-VERY-GOOD |Links = 0 |Rechts= 0|Speed= 0
Sein neues Ziel liegt bei 76.8 Grad und ist 7.38m entfernt. Der Roboter selber steht in Richtung 149.3 Grad (ich plotte für mich im Moment noch immer RTK_Heading und Gyro_Heading wenn er steht ist Gyro Heading der Bezug, wenn er schneller als 20 cm/s ist, dann ist RTK_Heading meine führender Wert den ich dann auf den Gyro übertrage. Somit reduziere ich Fehler bei er Richtungs-Erkennung)
Wir sehen der Ausrichtungsfehler zum Ziel ist -72.5 Grad. Wenn er jetzt auf das Ziel zufahren würde, dann würde er eine schöne große kurve Fahren. Ich hatte mal ein paar Tests gemacht und festgestellt, dass meine Motore bei einer 90 Grad Drehung ca 420 Tics mit dem Hall generieren bei 180 Grad erzeugen sie ca 860 Tics. Das ganze natürlich bei kurzem Rasen und trockenem Boden. Bei Nässe und am Berg sieht das sicher anders aus. Also gehe ich wie folgt vor bei dem Winkel-Fehler hier von 72.5 Grad benötigt er ca 340 Tics. Der Befehl den nun mein RTK-navi.py erzeugt ist
Code:
Drive.Locked Datei wurde erstellt
Drive_cmd = -20,20,340,340
drehe Links mit -20rpm, rechts mit 20rpm bei beiden Motoren 340 Tics. Nach den 340 Tics höre auf. Das ist die Abbruch Bedingung.
Drive.Locked deswegen, weil bei einer Drehung kein erneuter Fahrbefehl kommen soll. Dazu muss man wissen, dass bei mir die Motorsteuerung eine seperate Datei ist und ich daher per Steuerdatei das dann blockiere. Auch der Fahrbefehl -20,20,340,340 wird in eine Datei geschrieben und dann von der drive.py eingelesen und umgesetzt.
Hier in diesem längerem Lock kann man auch gut erkennen wie er den ersten Befehl absetzt, reagiert der Fehler Winkel beim 2. Log ist schon geringer
Code:
Drive_cmd = -20,20,340,340
Dist=7.38m | Target=76.8° | Mode=GYRO° | RTK_Heading=149.3° | Gyro_Heading=149.3° | Err=-72.5° |RTK-FIX=RTK-Fixed |RTK-Quali=91 |RTK-State=RTK-VERY-GOOD |Links = 0 |Rechts= 0|Speed= 0
Dist=7.38m | Target=76.8° | Mode=GYRO° | RTK_Heading=148.6° | Gyro_Heading=118.9° | Err=-42.1° |RTK-FIX=RTK-Fixed |RTK-Quali=91 |RTK-State=RTK-VERY-GOOD |Links = 92 |Rechts= 88|Speed= 17
Divelocked wurde gerade gelöscht Timestamp gespeichert
Dist=7.16m | Target=76.8° | Mode=GYRO° | RTK_Heading=89.5° | Gyro_Heading=76.8° | Err=-0.0° |RTK-FIX=RTK-Fixed |RTK-Quali=89 |RTK-State=RTK-VERY-GOOD |Links = 0 |Rechts= 0|Speed= 0.21
Aktualilsiere den Fahrbefehl auf 20, 20, 716,s,76
Nun hat er sich auf das Ziel ausgerichtet und sein neuer Motorbefehl lautet: Drehe mit beiden Rädern mit der Sollgeschwindigkeit von 20rpm 716cm weit s steht für straight auf 76 Grad.
Meine Logzeilen werden derzeit sekündlich erzeugt. Alle drei Sekunden wird der Motorsteuerung ein neuer Fahrbefehl übermittelt
Code:
Dist=7.14m | Target=76.9° | Mode=GYRO° | RTK_Heading=79.2° | Gyro_Heading=80.8° | Err=-3.9° |RTK-FIX=RTK-Fixed |RTK-Quali=88 |RTK-State=RTK-VERY-GOOD |Links = 78 |Rechts= 92|Speed= 0.03
Dist=7.00m | Target=76.7° | Mode=GYRO° | RTK_Heading=75.5° | Gyro_Heading=74.4° | Err=2.3° |RTK-FIX=RTK-Fixed |RTK-Quali=87 |RTK-State=RTK-VERY-GOOD |Links = 80 |Rechts= 78|Speed= 0.14
Dist=6.75m | Target=76.2° | Mode=RTK° | RTK_Heading=76.4° | Gyro_Heading=76.8° | Err=-0.6° |RTK-FIX=RTK-Fixed |RTK-Quali=86 |RTK-State=RTK-VERY-GOOD |Links = 80 |Rechts= 88|Speed= 0.25
Aktualilsiere den Fahrbefehl auf 20, 20, 675,s,76
Bei den Werten "Links" und "Rechts" handelt es sich um den PWM Value für die Motore, da kann man auch gut sehen wie der eine ann mehr oder weniger bestromt wird, damit die Richtung gehalten wird.
In dem Video von meinem Post heute vormittag kann auch sehr gut sehen wie bei der letzten Fahrt die Regelung nach 3 Sekunden wieder eingreift und ihn auf kurs bringt. Er fährt da mit einem Rad über einen Hügel und bekommt dadurch einen Schub nach rechts. Die Regelung gleicht es ohne Kallmann Filter ;-) aus. Ich bin derzeit auf Föhr im Urlaub und habe vergessen gestern noch meinen Mäher an die Laestation anzuschließen. So kann ich ihn aus der Ferne jetzt nicht ein schalten, sonst hätte ich Dir noch den Code Teil er Regelung schicken können. Das ist alles überschaubar.
Wenn ich meinen Fürst damit helfen konnte dann hat es mich gefreut. Ich bin jetzt dabei und versuche eine Bahnplanung zu realisieren mit. Also von Punkt zu Punkt, möchte das aber nicht alles per Hand machen. Wie gehst Du vor?
Beste Grüße von Föhr
Ulli
 
Hallo Ulli,
na dann wünsche ich Dir erst einmal einen schönen Urlaub.
Ich habe jetzt irgendwo auch ein Bild gesehen, bei dem der Mäher vorn lenkende Räder hat und wie bei meinem blauen Prototyp 2 bis zu 90 Grad einschlägt.
Die Idee, mit Bowdenzug die Lenkung umzusetzen hatte ich auch, habe sie aber verworfen aufgrund meiner Erinnerungen an die Schaltung des Heinkel-Rollers Baujahr 1960. Die war recht feinfühlig und mußte öfters nachgestellt werden. Außerdem hatte ich Zweifel, ob ich das mechanisch vernünftig umgesetzt bekomme.
Bei den unterschiedlichen Lösungen die Vorderräder zu drehen, muß auch der Drehpunkt unterschiedlich gesetzt werden. Das hat dann wiederum Auswirkung auf die gesamte Geometrie des Rovers.
Bei der Fuhrman-Lenkung mit Gestänge ist leider der mögliche Einschlagwinkel beschränkt. Überschreitet man den maximalen Winkel, dann schwenken die Räder nicht mehr in die gleiche Richtung.
Bezüglich der Funkanbindung hatte ich letzte Woche auch überlegt, einen Rover nur mit Sensoren und Fernsteuerung auszustatten und die gesamte Steuerung dann über PC zu machen. Aber am Ende soll der Rover ja autark fahren und dann braucht man eigentlich keine Verbindungen mehr zum User.
Ich habe jetzt deine Strategie verstanden.
Wie schon gesagt ist bei mir alles etwas komplizierter.
Route: Die Wegpunkte kann der Rover selbst aufzeichnen oder man kann sie in Missionplanner eingeben. Die Missionpoints werden dann entweder hoch- oder runter-geladen - oder hoch, runter, hoch, runter um sich zu vergewissern, daß sie auch stimmen.
Der Rover kann die Punkte in festen Abständen aufzeichnen, oder man fährt ihn und zeichnet per Knopfdruck an der Fernsteuerung auf. Die Punkte liegen in einer Liste auf der sd-Karte des Teensy. Die Punkte sind gleichzeitig im Speicher des Teensy. Das Ablegen auf sd findet nur für alle Punkte gemeinsam statt, bzw. bei Änderungen. So kann man auch eine „feste“ Route speichern. Zu den Punkten können weitere Parameter abgelegt werden, genauso wie es das mavlink-Protokoll definiert. Grundsätzlich halte ich mich strickt an das Protokoll.
Grundsätzlich nimmt man eigentlich nur den begrenzenden Pfad auf und lädt ihn in Missionplanner hoch. Dort kann man dann Raster oder was auch immer berechnen oder von Hand editieren und als Mission wieder auf den Rover herunter laden. Man kann natürlich auch auf anderen Wegen eine Route erzeugen. Stimmt das Format, einfach runter laden oder auf die sd-karte schreiben.
Fährt der Rover, dann ist ein Wegpunkt erreicht. sobald der einstellbare Abstand von Rover zu Wegpunkt unterschritten wird. Es wird dann der Wegpunkt-zähler hochgezählt und der nächste Punkt und die Parameter, zB. Geschwindigkeit geladen. Ich habe eine Berechnung, ob der Rover den nächsten Punkt anfahren kann - „kriegIchDieKurve“ berechnet, ob der Abstand kleiner ist als der Radius bei vollem Lenkeinschlag. Kriegt er die Kurve nicht, fährt er ein Stück rückwärts. Dabei wirkt die gleiche Berechnung für den Lenkeinschlag.
Den Lenkeinschlag berechne ich mit 3 Methoden: Stanley-Verfahren, PPC-Verfahren und Proportionalregler für kurze Distanzen.
In der Zwischenzeit hat das alles schon mal mehr oder weniger funktioniert. Im Moment eher weniger.
GPS-Siganl: Ich unterscheide Fix und Qualität des Signals. Das GPS-Signal (5Hz) wird auf Sprünge überwacht. Ist der Fix schlecht oder die Qualität, dann wird das GPS-Signal in der Gewichtung herabgesetzt und die Positionsberechnung erfolgt im wesentlichen über Odometrie.
Hier liegt ein großer Knackpunkt. Bis jetzt liefern die beiden Kompasse keine guten Signale. Das liegt an der Kalibrierung und am Einbauort. Der Rover ist so schwer, daß ich ihn alleine nicht in alle Richtungen drehen kann. Die Meßpunkte lege ich auch auf sd-Karte ab und die Kalibrierung mache ich „auch“ offline im Cad-Programm. Hier muß ich nochmals ran.
Und dann kommt noch der Kalman-Filter. Der berechnet welche Parameter der Rover im nächsten Meßzyklus haben müßte und vergleicht sie dann mit den Sensorsignalen. Die Abweichung zwischen Soll und Ist wird dann zur Gewichtung der einzelnen Parameter genommen und daraus ein Ergebnis berechnet. Kompliziert, aufwendig, rechenintensiv, und eine super Fehlerquelle. Wenns funktioniert ergibt sich aber eine ruhige, zuverlässige Fahrt - bis jetzt funktioniert es aber nicht.
Letztlich: Die Parameter und Kalibrierungen kann man über Missionplanner einstellen oder über esp32-WebServer.
So siehts im Moment bei mir aus.
Gruß Fürst Ruprecht
 
Back
Top