Sunray-Firmware - Ideensammlung / ideas for improvement

Naja... In Cassandra habe ich nun mit dem vielen Tasks rund 40 "Karten" die unterschiedlich aussehen und es ändert sich ständig. Man kann hier nicht von den mickrigen 10 Slots ausgehen. Da ist eine UUID nicht verkehrt.
 
....reicht nicht "1" bis "100" .. oder "1000"? Naja meinetwegen auch eine UUID, aber die kann sich eben niemand merken.
Die UUID soll den Anwender nicht interessieren. Diese technische ID soll nur für den Austausch zwischen Rover-Software und App dienen.
Eine sprechende Bezeichnung die der Anwender vergiebt, hat damit nichts zu tun.

Theoretisch könnte eine Karte durch den Anwender beliebige Bezeichnungen bekommen, solange sie unverändert ist, bleibt die UUID identisch. Von daher könnte auch ein Hashcode taugen.

Wenn eine App diese technische ID vergiebt, sollte es sie am Ende mit diese ID etwas anfangen können, wenn sie den Rover fragt, welche ID die Map hat, die gerade auf dem Rover gespeichert ist.
 
Jetzt komme ich langsam dahinter, wofür das dienen soll: Damit App und Rover wissen, ob sie von der gleichen Karte reden?
D.h. jedesmal, wenn auch nur die kleinste Änderung an einer Karte oder deren Einstellungen geschieht, gibt's eine NEUE UUID?!
Und wenn es in beiden Systemen die gleiche UUID gibt, dann kann durch Abgleich der UUID die richtige Karte geladen werden. (z.B. beim Wechsel des Bediengeräts).

Okay, gecheckt, ja so ergibt das sehr viel Sinn!
 
Änderungen müssen und sollen keine neue UUID bewirken. Es sei denn es handelt sich um eine Änderung, die parallel zum Original bestehen soll.
 
Änderungen müssen und sollen keine neue UUID bewirken. Es sei denn es handelt sich um eine Änderung, die parallel zum Original bestehen soll.
Das kann doch nicht sein?!
Wenn aif dem Rover eine Karte mit UUID ist. Und in der App eine Karte mit der gleichen UUID, diese Karte aber gerade geändert wurde, dann sind die Karten nicht gleich. Die UUID muss sich also immer ändern wenn sich an der Karte oder deren Parametern auch nur das kleinste Detsil ändert. Sonst braucht man keine UUID, dann tut auch ne einfache Nummer. Der Sinn einer UUID ist ja das es quasi unmöglich ist zufällig die gleiche UUID zu erzeugen.
Ich habe UUIDs in meiner volkszähler Datenbank für jeden Kanal
 
Jetzt komme ich langsam dahinter, wofür das dienen soll: Damit App und Rover wissen, ob sie von der gleichen Karte reden?
D.h. jedesmal, wenn auch nur die kleinste Änderung an einer Karte oder deren Einstellungen geschieht, gibt's eine NEUE UUID?!
Und wenn es in beiden Systemen die gleiche UUID gibt, dann kann durch Abgleich der UUID die richtige Karte geladen werden. (z.B. beim Wechsel des Bediengeräts).

Okay, gecheckt, ja so ergibt das sehr viel Sinn!
Genau so.

Änderungen müssen und sollen keine neue UUID bewirken. Es sei denn es handelt sich um eine Änderung, die parallel zum Original bestehen soll.
Na ja, folgendes Szenario:

  1. Karte A mit der ID 123 ist auf dem Rover geladen
  2. Karte A mit der ID 123 wird auf Gerät 1 geändert und im Fall von sunray auf dem Server gespeichert.
  3. Karte A wird auf einem Gerät 2 vom Server in die sunray App geladen
  4. daraus folgt: Karte A auf Gerät 2 ist ungleich der Karte A mit der ID 123 auf dem Rover
... das heißt eine Änderung der Karte (egal was; außer dem sprechenden Namen) muss mit einer neuen technischen ID gespeichert werden.

Anderes Szenario:

Im Falle von Cassandra werden temporäre Karten mittels Auswahl erzeugt. Cassandra könnte diese temporär mit einer technischen ID speichern und auf den Rover laden. Sollte irgendwas mit dem Server sein, so könnte das Backend die temporäre Karte wiederherstellen und mit dem Rover abgleichen.

Auch beim Mischbetrieb sunray - Cassandra wäre immer gleich klar, dass eine geladene Karte auf dem Rover eventuell nix mit der Karte der App zu tun hat.
 
Jetzt komme ich langsam dahinter, wofür das dienen soll: Damit App und Rover wissen, ob sie von der gleichen Karte reden?
D.h. jedesmal, wenn auch nur die kleinste Änderung an einer Karte oder deren Einstellungen geschieht, gibt's eine NEUE UUID?!
Und wenn es in beiden Systemen die gleiche UUID gibt, dann kann durch Abgleich der UUID die richtige Karte geladen werden. (z.B. beim Wechsel des Bediengeräts).

Okay, gecheckt, ja so ergibt das sehr viel Sinn!
You need to check with @EinEinfach and and @AlexanderG .
In the actual sunray firmware a rounding in map.h generate a false point (1cm offset) by rounding from float to short.

The result is different mapCRC between Cassandra and sunray .

Adjust the map.h file solve the issue , so cassandra can compute the CRC in the PI and compare to the one locate in the mower to check the perfect map upload.

Also if you load a map using SUNRAY App Cassandra can read the mapCRC in the AT+S command and automatically swap to correct map. ;)

Take a look at this thread :
 
When Bumper is trig a new Obstacle is generate in front of mower in the AXE.
But maybe it's better to put the obstacle on the right of mower if bumper right is trig and on the left if bumper left is trig ? :unsure:
 
Concerning the AT+S command .
Into config.h adding
Code:
#define USE_RASPBERRY_PI  true
and by this way sunray firmware can send the AT+S automatically each one second without waiting a request from pi.
a 1 seconde timer is the led states into robot.cpp, so you can add the cmdsummary here or create a new timer

Code:
// LED states
  if (millis() > nextLedTime) {
    nextLedTime = millis() + 1000;
    cmdSummary()
    robotDriver.ledStateGpsFloat = (gps.solution == SOL_FLOAT);
    robotDriver.ledStateGpsFix = (gps.solution == SOL_FIXED);
    robotDriver.ledStateError = (stateOp == OP_ERROR);
  }
 
So schön auch das mit IDs funktionieren kann, ist das programmiertechnisch ein hoher Aufwand, denn man setzt hier ein Szenario voraus, wo unterschiedliche Apps zum Einsatz kommen könnten, das heißt viele Sachen sind nicht testbar. Cassandra geht aktuell mit der Situation relativ aggressiv um, fast jede Aktion zieht ein Mapupload nach sich, so dass ein Abgleich der Karten in den meisten Fällen überflüssig wird.
 
Oben