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
 
Hallo, bin wieder zu Hause angekommen und gleich mal ein paar Tests absolveren lassen.
Während meiner Freizeit auf der Insel Föhr habe ich mit der Hilfe von ChatGPT einen Mähbahn edtor erstellt.
Mit ihm kann ich einfach Bahnen ziehen, denen dann mein Mäher folgen soll
Die daraus entstandene Mowtrack.json lade ich auf meinen Mäher und starte dann das script welches die Mähpunkte anfährt / annavigiert. Immer von dem einem zum nächsten. So lang wie die Liste ist. Mit dem Slider oben rechts kann ich die Mähbahnen im Entwurfsmodus noch einmal nachverfolgen. Da ich "nur ein" LC29H-DA nutze bekomme ich auch nur jede Sekunde einen validen RTK Punkt. Ich habe nun einige Tests durchgeführt und festgestellt, dass ich ungefähr einen seitlichen Fehler von 30 - 40 cm habe und einen Fehler nach vorn von maximal 25cm.
Für mich reicht das im Moment, denn es gibt noch viele Herausforderungen bevor ich mir ein LC29H-EA einbaue.
Die größte Herausfordeung ist wie bei @Fürst Ruprecht der Kompass / Gyro. Hier werde ich in den nächsten Tagen noch ein paar Tests durchführen. Mein Eindruck ist, dass er beim wenden ab und zu die Richtung verliert / oder einen zu großen Versatz hat. Bisher habe ich eine Routine implementiert, dass wenn der Gyro zu stark vom RTK Heading abweicht der Gyro auf das RTK-Heading gesetzt wird. Das scheint aber noch Fehler behaftet zu sein. Wenn ihr euch das Video anschaut, so könnt ihr zum Ende (ab Timestamp 26) die gelben Punkte sehen die er abgefahren ist, Ich habe das Muster sicher 5 - 7 mal abgefahren. Mich würde die Einschätzung von @Bernard interessieren ob das eine gute Basis ist um weiter zu entwickeln. Ich frage derzeit keinen anderen Sensor ab, Er fährt allein nach RTK und nach Gyroscope.
Heute bin ich dann auch damit gestartet, dass ich die NoGo Zones bei der Fahrt auswerte. Er erkennt sie schon zuverlässig, ich muss die Ausweichroutinen noch implementieren. Vielleicht klappt es ja dieses Jahr noch mit "vollautomatischem" Mähen. Im Moment bin ich zuversichtlich
View attachment RTK_first_Editortest.mp4
 
Hallo Ulli,
Du beschreibst bereits die Gründe warum bei mir alles so kompliziert geworden ist. 25 cm ist bei mir NO-GO !!! ChatGPT behauptet, daß für unsere langsamen Rover das RTK-Heading nicht ausreichend funktioniert. Ich hatte überlegt, das Heading (RTK) aus den GPS-Koordinaten zu berechnen, wobei man dann die Frage stellen muß, was dann noch der Unterschied zum RTK-Heading ist. Ich hatte die diversen Heading-Signale alle einmal auf dem esp32-Webserver visualisiert, RTK-Original-, Odometrie-Heading-, zwei Kompass-Headings, und gemixte Headings. Dabei rausgekommen ist im Grunde nichts verwertbares, na ja, etwas zusätzlicher Frust vielleicht. Ich hatte vor mehr als einem Jahr bereits den Rover am laufen, genau wie Du, mit einfacher Logik, ein Punkt nach dem anderen. Dabei war zu beobachten, daß Positionsabhängig es zu wiederkehrenden Positionsfehlern gekommen ist - der Rover hat immer die gleichen Ausweicher gezeigt, wohl zurückzuführen auf GPS-Signalreflexionen z.B. durch ein überstehendes Dach. Deshalb ist mein Anspruch, daß ich auf ca. 5cm Genauigkeit komme. Mein Problem dabei ist zu Erkennen, wann ich dem GPS-Signal vertrauen kann und wann nicht. Beim Kompass hoffe ich noch immer, daß die Störungen im Rover nicht entscheidend sind, sondern der richtige Abgleich. Der steht bei mir immer noch aus. Ich halte es aber als unabdingbar, daß man sich die Punktewolke ansehen muß und den Abgleich „von Hand“ im CAD oder vergleichbar macht.
Selbstkritisch würde ich sagen, ich bekomme es halt nicht besser hin. In meinem kleinen Rover-Projekt Eve hatte ich einen Pixhawk-Controller mit Ardupilot im Einsatz. Manchmal hat er sehr gut gemäht, meistens ist er aber voll in die Büsche gefahren. Da hat es also in meinen Rahmenbedingungen auch nicht funktioniert.
Inzwischen gibt es die Dual-Antenna-RTK-Lösungen. Die sollen ein störfreies Heading auch im Stand liefern (bei einem Antennenabstand >70cm). Damit wäre ein Problem gelöst. Meine Rover sind gerade mal +/- 70cm lang, würde funktionieren. Bleibt die Zuverlässigkeit des RTK. Erreiche ich keine 5cm, brauche ich auch kein RTK, dann ist Perimeter für mich besser geeignet.
Ich war auch 2 Wochen außerhalb des Fürstentums unterwegs. Jetzt ist der Rasen 25cm hoch -> da muß der alte Honda-Verbrenner ran.
Es bleibt spannend.
Weiterhin viel Erfolg.
Gruß Fürst Ruprecht
 
Hallo Ulli,
Du beschreibst ....
Gruß Fürst Ruprecht
Hallo mein Fürst, Ja das Heading bei langsamen Geschwindigkeiten - meine Erfahrung alles was kleiner 0.18m/s ist ist von meinem LC29H-DA Modul nicht verläßlich. Das mit den Streckenfahrten habe ich bisher so gut wie keine Probleme. Ich Fahre i.d.R. mit 0.2 - 0.22m/s da ist es schon für mich genau genug. Am Ende der Bahn zieht er sich immer auf den ZielPunkt zu. Das er zwichendurch geringfügig von der Bahn abweicht liegt noch ein meinem PID Regler. Das ist aber später Finetuning. Auf jeden Fall habe ich einen Fehler in meiner Berechnung im Gyro gefunden. Das klappt inDoor jetzt sehr sehr gut, ob draußen wird sich zeigen. Meine Visualisierung habe ich erweitert, ich zeige neben der aktuellen Position auch das Ziel an, das er an navigiert. Das ist von sehr großem Vorteil, weil ich bei vielen Wegpunkten den Überblick verliere wo er gerade hinwill, und einen Fehler habe ich gestern noch durch die neue Visualisierung gefunden, er Berechnet falsche Ausweichziele wenn er in eine NoGoZone hineingerät. Das muss ich noch herausfinden was ihn da durcheinander bringt. Eine System mit Dual Antennen kommt für mich aus Kostengründen nicht in Frage, da nehme ich lieber mehr Toleranz in Kauf. Die Mammotion Mäher mit RTK kommen ja auch ohne Dual Systeme aus. Soweit mir meine Bekannten berichten, bleiben die aber auch sofort stehen wenn die kein gutes RTK Signal haben und machen erst dann weiter, wenn das signal gut genug ist. Ich bin aber davon überzeugt, dass ich diese Mähsaison noch erfolgreich mit RTK ohne Perimeter Sicherheit mähen werde. Es ist nur noch ein kleiner Schritt. Und ich bin mir sicher, dass ich die Genauigkeit mit dem 1Hz RTK Modul auf 15cm steigern kann, in dem ich ihn in Nähe des Ziels langsamer fahren lasse.
Soweit mein Zwischenstand.
Nicht den Mutverlieren mein Fürst, Dein Volk ist mit Dir.
Gruß
Ulli
 
Back
Top