Ardumower Software "Sunray"

In Ardumower Sunray soll nach einer Karte gemäht werden. Hier eine Idee dafür - Könnte dies wohl so funktionieren?

1. Kartierung: Mit Kompass und Odometrie wird die Schleife abgefahren und so eine Karte erstellt. Die Längen der Karte werden nicht besonders genau sein und daher werden Start und Ende nicht genau aufeinanderliegen. Korrigiert wird diese Karte indem die Differenz Anfang zu Ende (für jede Achse getrennt) gleichmäßig bei allen gemessenen Längen abgezogen wird.
perimeter_mapping1.png


2. Eintragen gemähter Bahnen auf der Karte: Hierfür muss der Roboter wissen wo er gerade mäht (auch wenn er z.B. manuell vom Benutzer umgesetzt wurde). Idee: jedesmal wenn wir die Schleife überqueren messen wir mit 2 Spulen (A und B ) und Kompass und Odometrie den Schleifen-Winkel. Wenn der Roboter z.B. mit beiden Spule überquert hat, fährt er ein Stück zurück und misst die Längen-Differenz A zu B zur Schleife.
Beim Bahnen-Mähen erhalten wir so beispielsweise fortlaufend die Schleifenwinkel (Messwerte) C,D,E,F,G. Spätestens beim Messwert G können wir sagen wo wir uns gerade befinden, da diese Messwerte nur auf einen bestimmten Abschnitt der Schleife passen.
perimeter_localization1.png

Attachment: https://forum.ardumower.de/data/media/kunena/attachments/905/perimeter_mapping1.png/
 
Zuletzt bearbeitet von einem Moderator:
Hier noch ein Video zur STUCK-Erkennung (über Vergleich IMU und Odometrie und über IMU-Kurs-Regelfehler). Bei der kleinsten "Berührung" hält der Roboter inne und probiert etwas Neues aus. Nur ganz am Anfang des Videos sprach einmal die Schleife an - der Rest ist alles STUCK-Erkennung (feststecken/anheben/Gegenstand). Plot hatte ich leider deaktiviert. Die Sensibilität ist sehr hoch eingestellt - kann man nach seinem Geschmack und Umgebung einstellen.
https://www.youtube.com/watch?v=ka2oNM90DKg
 
Hallo nero76,

bezüglich der Kartierung stellt sich mir die Frage, wie man Odometriefehler behandelt, wenn beim Abfahren der Linie die Odometrie so einen großen Fehler anzeigt, dass man eine bereits gemessene Kante kreuzt:

Odometriefehler.JPG


Bezüglich des Winkel messen ist zu berücksichtigen, dass nicht immer alle Spulen außerhalb sind (zumindest bei mir). Ich fahre mit den Rädern ca. 20cm über das Kabel. Da kommt es sehr häufig vor, dass nur eine Spule draußen ist. So könnte ich nur Winkel bis ca. 45Grad messen.

Es wäre bereits ein großer Fortschritt, wenn man die Lokalisierung auf der Karte hin bekommt ohne viel elektronischem Beiwerk. Das kann man auch für das Chaosprinzip nutzen, um festzustellen wie häufig ich in einem Bereich bereits war.

Bezüglich der Processing Plot Funktion wird bei mir ein zweiter Graph idx=1 nicht angezeigt. Hintergrund ist, dass rect(px, posY, plotw, ploth, 10); die ganze Fläche überschreibt. Hast du dafür eine Erklärung? Ich habe das nun folgendermaßen gelöst:


Code:
if (idx==0) {
      rect(px, posY, plotw, ploth, 10);
    }


Ich versuche mich nun auch etwas in Processing. Damit das auf meine Software passt, habe ich noch eine Textlist Class und eine einfache Inputbox Class für Terminal Befehle hinzugefügt, sowie eine Button Class. Code habe ich angefügt falls du etwas davon benötigen kannst.

Processing.png


Bezüglich der isInside Funktion in Sunray habe ich gesehen, dass du auf if (abs(mag[idx]) > 600) abfragst.


Code:
boolean PerimeterClass::isInside(byte idx){
  if (abs(mag[idx]) > 600) {
    // Large signal, the in/out detection is reliable.
    // Using mag yields very fast in/out transition reporting.
    return (mag[idx]<0);
  } else {
    // Low signal, use filtered value for increased reliability
    return (signalCounter[idx] < 0);
  }
}


Ich glaube, dass es hier zu "Schwingungsproblemen" kommen könnte. return (mag[idx]
 
@roland: Vielen Dank Dir die Tipps. Ich habe noch eine Tabsheet-Klasse hinzugefügt (GUI-Elemente auf mehrere "Seiten" verteilen): https://github.com/Ardumower/Sunray/tree/master/processing_sunray
tabsheet.png


"bereits gemessene Karte kreuzt": Irgendwo muss der Roboter wieder auf den Start zurück, dadurch ergibt sich der Gesamtfehler. Wenn man diesen Gesamtfehler gleichmäßig auf alle Teilstücke verteilt sollte die Kreuzung wieder verschwinden. Falls nicht, muss man es intelligenter machen und auf Kreuzung prüfen und z.B. die Gewichtung der Fehlerkorrektur ändern, so dass z.B. ein Mindestabstand zwischen alle Messungen gewahrt bleibt.

"Schwingungsproblem": da könntest Du Recht haben - ändern wir auf "smag" (Tiefpaßfilter von "mag")

"Lokalisierung auf Karte hinbekommen": das ist auch mein Ziel :) - ich werde noch die Roboter-Nachrichten bei seinen Fahrten mitloggen und dann am PC verschiedene Ideen durchprobieren um die Fahrt auf der Karte zu rekonstruieren. Für den Particle Filter ist mir noch eingefallen was man mitnutzen könnte:
-Änderung der Feldstärke von Zeitpunkt t zu t+1
-Feldstärke links zu rechts
Attachment: https://forum.ardumower.de/data/media/kunena/attachments/905/tabsheet.png/
 
Zuletzt bearbeitet von einem Moderator:
Hallo,
hier der aktuelle Zwischenstand der Lokalisierung mit Particle Filter innerhalb (1. Video) und auf (2. Video) der kompletten 120m Schleife (verwendet werden derzeit Odometrie, Gyro/Kompass und Schleife innen/außen für den Filter). Immer dann wenn der Roboter auf die Schleife trifft habe ich mit Hand die reale Position eingetragen (als blaue Punkte). Mit diesen Daten lässt sich dann die Lokalisierung "tunen".
Gruss,
Alexander
Lokalisierung bei Chaos-Mähen: https://www.youtube.com/watch?v=tZMAjvR4nxU Lokalisierung bei Schleife abfahren (mittendrin resette ich den Filter einmal zur Demonstration):
https://www.youtube.com/watch?v=rNuw9vNcYpM
 
Das sieht doch schon gut aus. Wenn mann die Karte speichern könnte und die Position der Ladestation angeben könnte, wüsste man von Anfang an, wo sich der Robbi befindet. Letzendlich kann man so bereits schon ohne GPS Areas festlegen.
Wenn man dann in Linien mähen möchte, kann man ja einen bestimmten Bereich mähen z.B. 5x5m. Danach sucht man sich einen anderen Bereich. Irgendwann hat man dann alle Bereiche gemäht. Beim Nächsten mal fängt man dann zwischen den Bereichen an die Felder zu mähen. Nach paar Mähzyklen hat man dann vermutlich alles vollständig abgedeckt.
 
Habe heute eine neue Routine für den Drehwinkel geschrieben, in der ich die Drehung mit dem Kreisbogen durchführe, welcher den Radabstand/2 benötigt.
Ich habe ca. 1,5h Fehlersuche betrieben, bis mir aufgefallen ist, dass ich immer oben den Radabstand gemessen habe. Unten ist dieser 37cm und oben 35,5 cm. In Sunray steht 36cm. Würde ich nochmal nachmessen.
Meine Spirale hat sich dadurch auch verbessert. Ich würde sagen, die kann man schon als Eichung für einen Kreis nehmen. ;)
 
Ja, der Wert würde für Winkelmessung über Odometrie gebraucht - in Sunray möchten wir exakte Winkel auch noch bei hoher Steigung ermitteln und das geht m.E. nur vernünftig über Gyro und Kompass (http://wiki.ardumower.de/images/1/17/Slope1.png). Den Radabstand nehme ich nur noch um die kurzfristige (
 
Hallo zusammen

Ich habe eine kurze Frage zu Sunray: Unterstützt die aktuellste Version auch Inseln im Rasen? Werden die auch in der Karte eingetragen?

Gruß,
Rene
 
Inseln müssten theoretisch gehen (nicht getestet) - die Kartenerstellung ist aber noch ein reines Entwicklungsprojekt, man sollte Entwicklungsarbeit mögen wenn man sich an Sunray herantraut ;-)
 
Hi. Alexander.
I want to test the sunray version.
I download the last version in Github.
Compile and flash the DUE on the PCB 1.3
On my PC the Bluetooth is COM4 entrant and COM5 sortant
Line 8 i Put the comPort to COM4 in processing sunray (so the BT com between PC and mower is OK, the BT led on PCB1.3 is ON) and view only the mainscreen , the console is always empty nothing move or change, no special error , no beep .
In processing mag
The first start say that the file "data/magpoints_gy88_indoor.txt" don't exist
so i put true on the 2 useserial and false on usefile

Code:
// -------- configuration --------
boolean useFileInput = false;     // use file as compass data input
boolean useFileOutput = false;    // save received compass data to file
boolean useSerialInput = true;   // use serial port as compass data input
boolean useSerialOutput = true;   // use serial port for sending compass calibration data (true/false) 
String serialport = "COM4";
//String filename = "data/magpoints.txt";   // file for data input/output
String filename = "data/magpoints_gy88_indoor.txt";

Now i can see the shere but Nothing change when i move the IMU..

Have you a idea of the problem.

POSSIBLE PROBLEM IS I USE A GY87 IMU because can't find a GY88 ?? but normaly there are the same ?

Again Need your help.
Attachment: https://forum.ardumower.de/data/media/kunena/attachments/3545/2017-08-06.png/
 
Zuletzt bearbeitet von einem Moderator:
Hello Bernard,
The problem is that by default MPU6050 and DS1307 (RTC) use the same I2C address - On the GY-88, you can change the I2C address by connecting pin AD0 to pin 3V3.
If your GY-87 has an AD0 pin, you can do this too. Otherwise, please contact Markus (https://www.marotronics.de/Kontakt), so he can offer you the correct module (GY-88).
Regards,
Alexander
 
OK.
The i2cscanner return
With GY87
0x50
0x68
0x77
With GY801
0x50
0x68
0x1E
0x53
0x69
So big problem ?.
No pin AD0 on GY87 only FSYNC INTA DDRY so i try to see on the net or contact Markus.
Thanks.
 
I'm just in the process to make some modification to my chassis, so that it can contribute to the Sunray testing (e.g add 2 more perimeter receiver to the front).

However, I wonder how people managed to move the IMU 35cm away from any metal (as in the description). Even if I build one of those towers at the back as in the photo, due to my metal free wheel at the back, I would never get 35cm distance.

Are the 35cm just related to the powered motors?

Kind regards,
Rene
 
Yes, any ferromagnetic materials can have influcence on the compass:
-larger objects like motors, big screws etc. : big influence (keep 35 cm away)
-battery: small influence (keep 20cm away)
-thick wire: small influence (keep 20cm away)
-thin wire: small influence (keep 10cm away)
 
Hallo ist es möglich die Sunray firmware auch ohne perimeter Schleife zu nutzen? Also kann der Ardumower dann auch eine Karte erstellen wenn er nur Ultraschall und Bumper hat? Bzw. könnte man auch einen Rand abfahren und diesen dann für die Karte benutzen?
 
Hallo,
ich würde auch gerne meinen Mäher mit der Sunray-SW testen,
habe aber auch "nur" den GY-80.
ist es vllt möglich einen I2C Multiplexer zu benutzen? I2C Multiplexer 1-8 Adafruit
Es ist natürlich erforderlich, dass die I2C-Adressen vor der Abfrage der Sensordaten "umgeschaltet" werden.

Holzweg oder nicht? ;)

Grüße Thomas
 
Hi all
@Rajiva
YES but it come from china so one month.
AND someting strange from France your link did not appear in google or ebay search
I order one last week and add also something great.

It is an hmi tactile color screen on serial so 4 wires and can go in place of the wifi or BT module and all the screen creation use a Pc so why not
Here the youtube link https://youtu.be/D-zgtylBKUc
Maybe i try to use it on azurit


@Alexander
I try to contact Markus but no answer so maybe i make a mistake into the contact form or the module is not on the shop.
I Also have a simple mpu6050 with AD0 shunt and put it in my Pcb1.3 with rtc and Gy801
The i2cscanner find all the last adress (rtc and gy801) and add the 0x69 and 0x77 so the module work but the problem gy-88 not found persist.
It s why i order the original gy-88 from china.
So i come back to trouble you in one month when i received my order if i can t make it work.

Wait and see ...
 
Oben