Ardumower / Sunray

Ardumower Sunray
73 stars 59 forks source link

reset GPS receiver after undocking #47

Open greymfm opened 2 years ago

greymfm commented 2 years ago

problem:

Ich hatte gestern noch das Phänomen das der Mover mit einem um 30cm Versatz GPS FIX aus der LS kam. Da er damit auch FIX hatte und auch noch innerhalb des Perimeter war störte den Mover das nicht. Er ist dann natürlich überall gegengerammelt.

Ein manueller Reset des GPS Empfängers brachte dann den richtigen FIX.

Kann man vielleicht optinal über die config.h noch einen zeitgesteuerten Reset des GPS Empfängers nach dem undock auslösen? Also Startbefehl -> 20sek. (Einstellbar über config.h) später Reset des GPS Empfängers.

Da er ja nach 20sek aus der LS ist, ist dann ja auch immer freie Sicht und guter GPS Empfang. Da kommt dann auch immer der richtige FIX.

solution: reset GPS receiver after undocking

Svol0 commented 2 years ago

Das mit dem Versatz ist bei mir fast jedes mal so. Ich handhabe es zur Zeit immer so, dass ich ihn mit der Option DOCK_IGNORE_GPS immer bis zum ersten Dockingpunkt fahren lasse, dann stoppe, dann einen GPS-Reset durchführe. Wenn er anschließend einen GPS-FIX hat, kann ich ihn wieder starten und die Position stimmt.

Da ich bei mir neben der großen Hauptmähfläche eine kleinere Mähfläche weit entfernt von der Docking-Station habe, habe ich die Anfahrt zur Docking-Station etwas modifiziert. In der config.h habe ich folgendes ergänzt:

define DOCK_SLOW_ONLY_LAST_POINTS 2 // slow speed will only be used for the last number of points (0 = all docking points will be reached with slow speed)

Und in der mapp.cpp anstelle von Zeile 1129 (if (!sim) trackSlow = true;): // only the last dockingpoints (value from "DOCK_SLOW_ONLY_LAST_POINTS") should be done with low speed if ((dockPoints.numPoints > abs(DOCK_SLOW_ONLY_LAST_POINTS)) && (dockPointsIdx < (dockPoints.numPoints - abs(DOCK_SLOW_ONLY_LAST_POINTS))) && (DOCK_SLOW_ONLY_LAST_POINTS != 0) ){ if (!sim) trackSlow = false; } else { if (!sim) trackSlow = true; } Dadurch fährt er alle Dockingpunkte, bis auf die letzten 2 (oder die Anzahl, die man halt einstellt) mit normaler Geschwindigkeit an und reduziert nur für die exakte Positionierung vor der Ladestation. Dieses möchte ich später auch noch für das Undocking verwenden. Also die ersten 2 Positionen aus der Ladestation heraus nur mit langsamer Geschwindigkeit und ODO/IMU bei erreichen des 2ten Dockingpunkts (betrachtet aus Richtung Ladestation) soll er dann warten, GPS-Reseten und anschließend die letzten Dockingpunkte mit normaler Geschwindigkeit, vorwärts und GPS abfahren.

Den GPS-Reset von einem Dockingpunkt abhängig zu machen, hat den Vorteil, dass man diesen Punkt gezielt an einer Position setzen kann, wo man sicher weiß, dass der GPS-Empfang dort gut ist, damit er seinen FIX bekommt.

Gruß Sven

stephwe commented 2 years ago

Wäre auch eine gute Idee an einem bestimmten, in der config.h einstellbarem, Dockingpunkt den GPS reset ausführen zu lassen. So kann man mit dem Dockingpunkt bestimmen wo der beste GPS Empfang ist bzw. der reset ausgeführt wird und bekommt dann immer ein sauberes Signal. Ist optimal gerade für Ladestationen an Häuserwänden. Diese variante ist noch wesentlich sinnvoller anstatt den GPS reset über Zeit auszulösen.

define reset GPS receiver after undocking true

define reset_GPS_receiver_LAST_POINTS 2

Svol0 commented 2 years ago

Für den GPS-Reset beim undocking habe ich folgenden Vorschlag (alle Zeilennummernangabe beziehen sich auf den release Stand 1.0.219):

Funktionsbeschreibung:

HINWEIS: Dieses konnte leider nicht ausgiebig von mir getestet werden, da mein Mäher gestern einen defekt an einem Antriebsmotor erlitten hat. Ersatz ist bestellt und es wird weiter getestet, sobald das Ersatzteil da ist. Vielleicht kann dieses zwischenzeitlich jemand weiter testen.

Gruß Sven

stephwe commented 2 years ago

Konnte heute erste Tests machen. GPS Reset klappt super. Alle Daumen hoch!! Dann hatte ich mal einen langen Dockingweg mit 8 Dockingpunkten angelegt. Da blieb der Mäher bei Punkt 3 (gesehen von der Dockingstation) mit FLOAT stehen. Ich habe ein FLOAT - Timeout von ca. 20sek eingestellt. Eigentlich müsste er in der 219 doch den gesamten Dockingpfad mit ODO fahren (wenn eingestellt) falls er keinen FIX hat. Ich muss das morgen noch mal genau nachstellen, ist nicht so einfach da auch des Öfteren gleich nach der Ausfahrt ein FIX kommt.

Svol0 commented 2 years ago

Danke für den Test und das Feedback. Wenn Du die kompletten Änderungen an der 219 durchgeführt hast, dann müsstest Du bei "DOCK_SLOW_ONLY_LAST_POINTS" eine 0 (NULL) einstellen, damit er den kompletten Weg nur mit ODO fährt, wenn "DOCK_IGNORE_GPS" auf true gesetzt ist. Allerdings fährt er dann auch alles nur mit langsamer Geschwindigkeit. Sonst versucht er ab dem bei "DOCK_SLOW_ONLY_LAST_POINTS" eingestelltem Punkt mit GPS-Unterstützung weiter zu fahren. Ich habe dieses mit reingenommen, da ich bei mir eine kleine Teilfläche habe, die weit von der Dockingstation entfernt liegt und der Mäher fast einmal komplett um das Haus und durch einen schmalen Weg fahren muss. Für die Strecke (ca. 60m) mit vielen Wendungen wäre nur ODO zu ungenau. Ist der Mäher, wenn er wieder ein Fix bekommt automatisch weiter gefahren?

stephwe commented 2 years ago

Ja, Mäher ist nach FIX weiter gefahren auf dem Dockingpfad. Und ja, das macht natürlich so Sinn. Anderrum, wenn DOCK_SLOW_ONLY_LAST_POINTS größer 0 dann hebelt es ja DOCK_IGNORE_GPS aus. Vielleicht wäre es sinnvoll die Anzahl der Dockingpunkte, die bei DOCK_SLOW_ONLY_LAST_POINTS eingestellt ist bei DOCK_IGNORE_GPS = true dann mit ODO anzufahren und bei DOCK_IGNORE_GPS = false so, wie es jetzt ist

Svol0 commented 2 years ago

Der Parameter "DOCK_IGNORE_GPS" ist normal nur beim Ausfahren aus der Station aktiv. Nicht für das Einfahren in die Station. Dieser Parameter ist von Alexander hinzugefügt worden, da es vorkommen konnte, wenn der Mäher einen falschen GPS-Fix in der Station bekommen hat und Rausfahren soll, der Mäher nicht Rückwärts rausfährt, sondern versucht in der Station zu drehen, was dann nicht gut ausging. Von daher ist es eigentlich nur wichtig, dass er bis zum ersten Dockingpunkt nach der Station ohne GPS fährt. (Vorausgesetzt, der Dockingpunkt liegt weit genug vor der Station, dass der Mäher gefahrlos wenden kann)

Wahrscheinlich ist es besser, den Parameter "DOCK_SLOW_ONLY_LAST_POINTS" nur für die Fahrt zur Docking-Station zu verwenden und der Parameter "DOCK_POINT_GPS_REBOOT" wäre dann automatisch der Wegpunkt, an dem auf das GPS-FIX beim Ausfahren gewartet wird und von wo aus der Mäher seine Reise Vorwärts, mit normaler Geschwindigkeit und GPS-Unterstützung fortsetzt kann. Bei einem Wert von 1 für "DOCK_POINT_GPS_REBOOT" würde der Mäher auf jeden Fall bis zum ersten Punkt nach der Station nur mit ODO fahren, wenn "DOCK_IGNORE_GPS = true" ist. Was hälst Du davon?

stephwe commented 2 years ago

ja, das hört sich gut an und beide Funktionen arbeiten dann schön zusammen - falls ausgewählt. Heute noch rund 10 Mal die GPS Reset Funktion getestet, hat jedes mal einwandfrei gearbeitet, egal welches Signal (FIX, FLOAT, INVALID) der Mover vor dem reset hatte. Eine kurze Wartezeit von vielleicht 10sek. nachdem der Mover FIX bekommen hat wäre noch gut, ist aber nicht zwingend erforderlich. Bei mir hat alles 100% geklappt.

Svol0 commented 2 years ago

Für den GPS-Reset beim undocking habe ich folgenden aktualisierten Vorschlag (alle Zeilennummernangaben beziehen sich auf den release Stand 1.0.219):

Funktionsbeschreibung:

Detailierter Ablauf bei Verwendung von "DOCK_POINT_GPS_REBOOT" in Kombination mit "DOCK_IGNORE_GPS" = true:

Wer kein akustisches Feedback möchte, kann alle Zeilen die mit "if (!buzzer.isPlaying())" beginnen einfach auskommentieren. Zur Zeit sind auch noch Consolen-Ausgaben vorhanden, um eine bessere Kontrolle der Funktion beim testen zu haben.

HINWEIS: Dieses wurde bereits mehrfach erfolgreich getestet, trotzdem erfolgt die Verwendung auf eigene Gefahr. Die fertig geänderten robot.h, robot.cpp und map.cpp habe ich als ZIP angehängt. Die Dateien entsprachen vor der Anpassung dem Softwarereleasestand von 1.0.219. GPS-Reboot beim undocking.zip

Gruß Sven

stephwe commented 2 years ago

Nachtrag: GPS reboot.txt

nach mehrmaligen Testen hat dann doch der Undockvorgang nicht mehr geklappt. Laut Monitor ist scheint das warten von 20 sek. auf ein stabiles Signal zu sensibel eingestellt. Siehe angehängte TXT. Nach ca. 130sek hatte der Mover FIX, was auch registriert wurde. Danach fing der Timer für die 20 sek. stabiles GPS Signal an aber anscheinend wurden minimalste Veränderungen des GPS Signals registriert und dementsprechend gab es max. 1sek lang ein stabiles GPS Signal. Auch nach 10 min. hing der Mover noch in der Warteschleife auf ein stabiles GPS Signal.

Svol0 commented 2 years ago

Hi @stephwe, Ok. Dann ändere bitte mal den Wert in der Robot.cpp bei if (distGPS > 0.02) dockGpsRebootDistGpsTrg = true; // reset timer for solid gps-fix check (please see "dockGpsRebootState") //SOew von 0.02 auf 0.2. bzw. 0.1 (vielleicht erst einmal zum Testen). 0.02 ist wahrscheinlich wirklich zu sensibel. Als ich es getestet habe, hab ich mir den Wert von distGPS mit rausschreiben lassen und dieser lag meistens bei 0.01. Danke fürs Testen. Gruß Sven

stephwe commented 2 years ago

Hallo Sven,

ja, jetzt klappt es. GPS reboot.txt distGPS > habe ich jetzt auf 0.05 gesetzt und es funktioniert. Mehrmaligen Undock-Vorgang mit Reset des Movers versucht - jedes Mal geklappt. Auch wirklich genial das man die Empfindlichkeit von distGPS einstellen kann. Wird ja bestimmt bei einigen anders sein wie bei mir oder dir. Super Sache. Diese Woche komme ich leider zu nichts mehr aber am Sonntag werde ich weiter testen - sieht auf alle Fälle super aus. distGPS werde ich noch versuchen weiter runter zu setzen, vielleicht klappt auch 0.04 oder 0.03 Gruß Stephan

stephwe commented 2 years ago

Heute mehrere Test mit verschiedenen Dockingpoints gemacht. distGPS habe ich auf 0,4 gesetzt. Hat alles 100% geklappt. Bei schräger Ausfahrt aus der LS mit ODO wurde auch die Position nach GPS Reset immer sauber korrigiert. Wartezeit nach dem Undocking war unterschiedlich aber nie eine falschen FIX bekommen. Super ! Alle Daumen hoch.

Svol0 commented 2 years ago

Hallo @stephwe, danke für die Rückmeldung. Hast Du 0,4 oder 0,04 als Wert eingestellt? Bei mir läuft das zur Zeit mit 0,05 Zuverlässig.

stephwe commented 2 years ago

Ich habe jetzt auch if (distGPS > 0.05) dockGpsRebootDistGpsTrg = true - also 0.05 eingestellt. Gestern hatte ich noch 0.04, allerdings hatte ich abneds noch mal getestet und da wollte er nach dem Reset des GPS nicht mehr.