Closed disaster123 closed 11 months ago
Beispiel Screenshot - er versucht direkt durch die Exclusion zum Punkt zu kommen - passiert mit gleicher Karte und sunray nicht:
Gefühlt habe ich gar keine Karte wo die Exclusions beachtet werden, wenn ich via Cassandra hochlade... Er mäht dort nur nicht, weil Cassandra keine Pfad hindurch generiert, aber wenn er frei in der MAP fahrne soll, scheinen die Exclusions dem Mäher nicht bekannt.
Wir müssen mal ins log von Cassandra reinschauen, wenn die Karte hochgeladen wird. Werden die Exclusions mit hochgeladen. Es sind die beiden Befehle AT+X und AT+N von Interesse, was steht drin
@EinEinfach AT+X und AT+N enthalten quasi keine Daten - Ausgabe: https://pastebin.com/raw/QYd5t10W
Doch, es steht was drin. Die erste null in dem AT+X verwirrt mich (Eine Exclusion ohne Punkte? Kann sowas sein?)
AT+N: 49 Perimeterpunkte, 28 Exclusionspunkte, 20 Dockpfadpunkte, 318 Mähpunkte... sieht gut aus
AT+X: 0 Punkte erste Exclusion????, 13 zweite, 9 dritte, 6 vierte... zusammen 28, also passt...
Ich muss mal schauen, ob die Null vorne weg normal ist... ich glaube nicht.
Wie startest du den Mäher? Aus dem Task oder von der Übersichtsseite?
AT+N,49,28,20,318,0 is send to the rover 2023-08-11 08:38:56 DEBUG Calced checksumme: 0xef 2023-08-11 08:38:56 DEBUG Encryption: true 2023-08-11 08:38:56 DEBUG Data to be send: gzQtRZ_RX^RXVRYW^RVRV?,- 2023-08-11 08:38:56 DEBUG Starting new HTTP connection (1): 192.168.178.138:80 2023-08-11 08:38:56 DEBUG http://192.168.178.138:80 "POST / HTTP/1.1" 200 8 2023-08-11 08:38:56 DEBUG Backend: AT+X,0,13,9,6 is send to the rover
OK dann war ich zu doof es zu sehen ;-)
Ich starte den Mäher aus der Übersichtsseite - also Mow All + Play
Zu der 0 Punkte Exclusion habe ich keine Idee ;-) Aber selbst das sollte doch nicht dazu führen, dass er die anderen Exclusions ignoriert oder?
Kannst du mal in den Alfred Log schauen, was kommt dort nach der Kartenübertragung an. Vielleicht kann man dort was erkennen
Ich habe es überprüft, die erste 0 in der AT+X Message ist auch bei mir vorhanden, also hat es seine Richtigkeit. Der Fehler liegt woanders.
Als nächstes müsste man die Übertragenen Daten überprüfen, ob die Exclusions auch an den Stellen sind, wo die sein müssten, ist etwas mühsam, aber hilft nicht. Ich kann dir anbieten, dass ich mit deiner Karte in deinen Einstellungen den Simulator anwerfe und prüfe, ob bei mir zum ähnlichen Verhalten kommt.
Aber ich verstehe es richtig, wenn du den Rover vor die Exclusion stellst und zB. mit Go to Button den Zielpoint hinter der Exclusion setzt, dann fährt der Rover über die Exclusion?
Kannst du mal in den Alfred Log schauen, was kommt dort nach der Kartenübertragung an. Vielleicht kann man dort was erkennen
Im Log steht nur:
Aug 11 12:18:34 bananapi start_sunray.sh[21633]: clearMap
Aug 11 12:18:34 bananapi start_sunray.sh[21633]: CRC ERRORCB,92
Aug 11 12:18:34 bananapi start_sunray.sh[21633]: Motor::setMowState ON
Aug 11 12:18:34 bananapi start_sunray.sh[21633]: setOperation op=1
Aug 11 12:18:34 bananapi start_sunray.sh[21633]: changeOperationType
Aug 11 12:18:34 bananapi start_sunray.sh[21633]: dumpState: X=-0.06 Y=0.35 delta=0.00 mapCRC=1359600 mowPointsIdx=0 dockPointsIdx=0 freePointsIdx=0 wayMode=2 op=1 sensor=0 sonar.enabled=1 fixTimeout=49 absolutePosSource=0 lon=0.00 lat=0.00 pwmMaxMow=255 finishAndRestart=0 motorMowForwardSet=0
Aug 11 12:18:34 bananapi start_sunray.sh[21633]: save state... ok
Ich habe es überprüft, die erste 0 in der AT+X Message ist auch bei mir vorhanden, also hat es seine Richtigkeit. Der Fehler liegt woanders.
Als nächstes müsste man die Übertragenen Daten überprüfen, ob die Exclusions auch an den Stellen sind, wo die sein müssten, ist etwas mühsam, aber hilft nicht. Ich kann dir anbieten, dass ich mit deiner Karte in deinen Einstellungen den Simulator anwerfe und prüfe, ob bei mir zum ähnlichen Verhalten kommt.
Aber ich verstehe es richtig, wenn du den Rover vor die Exclusion stellst und zB. mit Go to Button den Zielpoint hinter der Exclusion setzt, dann fährt der Rover über die Exclusion?
Ja das verstehst du richtig. Ich nutze nicht goto sondern starte einfach das Docking - damit ich das gleiche mit Sunray prüfen kann. Das kann ja kein goto.
@map / karte wie kann ich die "teilen"?
irgendwie sieht das Log jedes mal anders aus - bei einem weiteren Versuch sah es nun so aus:
Aug 11 12:22:12 bananapi start_sunray.sh[7838]: clearMap
Aug 11 12:22:12 bananapi start_sunray.sh[7838]: CRC ERROR0,DD
Aug 11 12:22:12 bananapi start_sunray.sh[7838]: CRC ERRORF,FD
Aug 11 12:22:12 bananapi start_sunray.sh[7838]: CRC ERROR8,8D
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: CRC ERROR0,D4
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: CRC ERROR0,DF
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: ptIdx=13 exclusionPointsCount=28
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: ptIdx=22 exclusionPointsCount=28
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: ptIdx=28 exclusionPointsCount=28
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: finishedUploadingMap
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: map dump - mapCRC=684078
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: points:
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: perimeter pts: 49
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: exclusion pts: 28
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: exclusions: 3
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: dock pts: 20
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: mow pts: 318
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: first mow point:15.80,1.46
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: free pts: 0
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: mowPointsIdx=0 dockPointsIdx=0 freePointsIdx=0 wayMode=4
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: map save... ok
Aug 11 12:22:13 bananapi start_sunray.sh[7838]: CRC ERROR5,5D
diesmal so:
Aug 11 12:32:02 bananapi start_sunray.sh[9626]: clearMap
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: ptIdx=13 exclusionPointsCount=28
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: ptIdx=22 exclusionPointsCount=28
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: ptIdx=28 exclusionPointsCount=28
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: finishedUploadingMap
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: map dump - mapCRC=1119338
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: points:
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: perimeter pts: 49
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: exclusion pts: 28
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: exclusions: 3
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: dock pts: 20
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: mow pts: 324
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: first mow point:15.97,0.40
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: free pts: 0
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: mowPointsIdx=0 dockPointsIdx=0 freePointsIdx=0 wayMode=4
Aug 11 12:32:03 bananapi start_sunray.sh[9626]: map save... ok
Also, die logs sehen gut aus. Aber auch hier kann ich keinen Fehler erkennen, bleibt eigentlich nur die übertragenen Exclusionkoordinaten zu prüfen, ob diese auch an der richtigen Stelle sind und nicht irgendwo außerhalb von Perimeter
In /src/data/map liegt perimeter.json. Den brauche ich, dann kann ich mit deiner Karte mal mit dem Simulator mähen, bzw. versuchen das gleiche nachzustellen
Was sind das für CRC Fehler im ersten Log?
Was sind das für CRC Fehler im ersten Log?
Das Frage ich mich auch... die kommen aus der processCMD Funktion beim verarbeiten von AT Kommandos - diese schlagen dann wohl fehl. Code dazu:
if ((expectedCrc != crc) && (checkCrc)) crcErr = true;
if (crcErr) {
CONSOLE.print("CRC ERROR");
CONSOLE.print(crc,HEX);
CONSOLE.print(",");
CONSOLE.print(expectedCrc,HEX);
CONSOLE.println();
return;
Dann muss das, das Problem sein. Keine Ahnung was Sunray damit macht, wenn die CRC fehlschlägt, verwirft die dann die übertragenen Punkte??? Wenn ja, dann passen die, AT+X und AT+N Informationen nicht mehr. Wenn du mal eine Übertragung ohne CRC Fehler hast, bügelt der Rover trotzdem über die Exclusion?
Ich habe mal das Logging ausgebaut im Sunray Code und teste mal ob das Problem auch auftritt, wenn kein CRC Fehler beim Upload passiert...
Ja, Sunray verwirft alle Punkte / das ganze Kommando bei einem CRC Fehler.
OK das Problem gibt es tatsächlich nur, wenn CRC Fehler auftreten - dann fehlen einfach Teile der Karte... man bekommt es aber gar nicht mit.
Ist die Übertragung ohne CRC Fehler läuft alles wie es soll.
Ok, das ist ein großes Problem. Ich muss mir überlegen, wie ich das abfangen kann
Es müsste eigentlich auf dem Befehl eine andere / keine Rückmelfung geben. Ich habe bei Alex von Sunray mal nachgefragt was er in dem Fall macht.
Ich lasse mir nun zusätzlich den gesamten Commando String ausgeben. Ungewöhnlich dass da CRC Fehler kommen…
Also der original sunray Client sendet die befehle immer wieder bis es eine Rückantwort gibt.
Ich kann mir schon vorstellen, wie das funktioniert. Sunray FW schickt auf jeden Request die berechnete Checksumme als Response. Sunray App prüft die erhaltene Checksumme mit der berechneten Checksumme, bei nicht Übereinstimmung wird der Request wiederholt. Ich habe damals auf diese Überprüfung verzichtet,
da ich mit MQTT gestartet bin, und dort gab es sowas nicht
Ich habe noch nie einen CRC Fehler gesehen
Macht im HTTP Mode alles langsammer
Als ich vermutet habe, dass es mit einzelnen Paketen Probleme geben kann, wollte ich nach der Übertragung auf den berechneten mapCRC im State String warten und im Falle einer Übereinstimmung Mähvorgang starten. Durch die Rundungsfehler in der Sunray FW kommt es allerdings nicht zu einer exakten Übereinstimmung. So dass es trotzdem nicht 100% sicher wäre. Allerdings gibt es einen Vorschlag von Bernard wie man diese Rundungsfehler vermeiden kann, dazu muss im Sunray FW was angepasst werden.
Vorteil ist, mapCRC gibt es überall: HTTP, MQTT und UART
Mich wundert der CRC Fehler auch - er tritt scheinbar nur manchmal auf. Ich habe das Gefühl es hat was mit der Encryption zu tun. Da ich recht viel am Sunray FW Code entwickle, starte ich die Sunray FW sehr oft neu - und der Encryption "Code" ändert sich.
Manchmal funktioniert danach die Cassandra Sunray Verbindung auch gar nicht.
Kann sein, die http Lösung hatte ich nie produktiv im Einsatz, geschweige der encrypt Lösung. Ich hatte das mal gebaut um diverse Tests durchzuführen, die die MQTT nicht out of the box hergibt.
Wahrscheinlich sparst du dir eine Menge Ärger, wenn du die Encryption ertstmal deaktivierst. Bei einigen Usern klappt die encrypted Verbindung gar nicht. Ich habe das im Rahmen meiner Möglichkeiten aus dem Sunray Code Reverse engineert, evtl. kann da Alexander drüber schauen. Vielleicht findet er sofort den Fehler.
Bzgl. der unvollständigen Karten baue ich nächste Woche mapCRC Überprüfung mit ein. Parallel sollte man klären ob es ein Problem wäre im Sunray Code im class Point die Datentypen von px und py auf float umstellen um Umrechnungsfehler im mapCRC auszumerzen.
Mega nervig - nun gerade wieder:
Aug 11 20:11:38 bananapi start_sunray.sh[10096]: CRC ERROR: got crc: 0 expected crc: D3
Aug 11 20:11:38 bananapi start_sunray.sh[10096]: CRC ERROR: got crc: 0 expected crc: D5
Aug 11 20:11:38 bananapi start_sunray.sh[10096]: CRC ERROR: got crc: 1 expected crc: 1D
Aug 11 20:11:38 bananapi start_sunray.sh[10096]: CRC ERROR: got crc: F expected crc: FD
Aug 11 20:11:38 bananapi start_sunray.sh[10096]: CRC ERROR: got crc: 5 expected crc: 5D
der Mäher fährt dann einfach mit der hälfte der Punkte los...
ich deaktivere mal die "Encryption"
Habe die Encryption nun aus - bisher keine Probleme mehr
Benutzt du Standardpasswort aus dem config_example.h?
Nein hatte "12346" gesetzt - also die 5 gelöscht ;-)
@disaster123 kannst du bitte mit deinem Problemsetup testen: https://github.com/EinEinfach/CaSSAndRA/commit/f5dab7a2728175557ab6cdbefc2bbec4e7419db8
Was aktuell die Sunray FW über alle Kanäle liefert (UART, HTTP, MQTT) geht es nicht besser. Ich rechne jetzt die mapCRC vor der Übertragung nach, dann wartet Cassandra ab. Wenn Sunray FW mapCRC im erlaubten Bereich von der Cassandra CRC ist (+-500cm), dann wird das Mähvorgang getriggert.
Das Problem sind die Datentypumrechnungen in der Sunray FW, je mehr Punkte zu Übertragen sind, desto größer ist die Abweichung. Dort muss nachgebessert werden. Ich habe es mit einer großen Karte probiert (11km Mähweg), dort kam es zu einer Abweichung von 347cm. Die Sunray APP wird bei dieser Karte immer not synchronized melden, da lautet AlexanderG die Sunray APP eine maximale Abweichung von 200cm erlaubt
Mache ich gerne aber mal ne kurze Frage dazu. Das passiert is nur mit encrypt 1 - bei 0 passiert das nicht. Crc und co gibt es doch aber auch bei encrypt 0?
Ja, crc gibt es immer. Warum Cassandra sich im encrypt modus verschlückt, habe ich noch nicht rausgefunden
Aber was soll ich dann testen? Bei mir geht es aktuell ohne encrypt immer fehlerfrei!
Ob im Fehlerfall der Robot losfährt, oder du eine entsprechende Fehlermeldung bekommst. Aber, wenn es jetzt funktioniert, dann schliesse ich den Issue.
Ok eventuell habe ich mich unklar ausgedrückt. Das ganze ist ein reines encryption Thema. Der crc ist nur falsch bei encrypt 1. bei 0 ist der crc immer korrekt.
Cool - danke scheint zu klappen.
I've at least two maps which i originally created using sunray and imported into cassandra. If i upload those maps - some exclusions or all seem to be missing. If the mower tries to drive from a to b using pathFinder code (not on mowlines) it tries to drive through the exclusions. This does not happen if i upload the "old" map with sunray to the mower. So this is not a bug in the mower FW.