RoπLawnMow

Heute gibt es ein neues Video. Follow the Wire habe ich meiner Meinung nach abgeschlossen. Die Perimeter Erkennung funktionierte ja schon so weit ganz zuverlässing ich hatte dazu bereits ein Video in diesem Post geteilt. Jetzt stand noch eine zuverlässige Follow the Wre Funktion aus, damit er bei geringem Akkuladestand entlang des Drahtes zu seinem Häuschen findet. Ein wenig muss ich noch mit den PID Werten experimentieren, aber das ist hier jetzt eine sehr gute Basis. Das Perimeter Script läuft auf dem Teensy Board. Die mag Values werden als Json String via serielle Schnittstelle zum Pi übertragen. Im Pi findet dann die weitere Auswertung für die Motorsteuerung statt.
An dem Konzept wie ich es hier kurz beschrieben habe ich festgehalten. Die drive.py Datei kann mit einer weiteren Option gestartet werden
python drive.py 23 23 1100 p . Die Parameter werden wie folgt interpretiert. Links und rechts ist die Soll RPM 23. 1100 sind die cm die er fahren soll, p steht für Perimeter. Für den PID Regler habe die Sollgröße 0 als mag Value vorgegeben, Also im Best Case sind innen und außen liegende Spulen im gleichen Abstand vom Perimeter Draht. weicht er davon ab, reguliert der Y Wert des PID Reglers die Antriebsmotore entgegengesetzt.
Ist die Linke Spule für 10 Messungen auch außerhalb der Schleife wird die fahrt gestoppt. Mit python drive.py -18 18 800 pl kann eine Linksdrehung ausgelöst werden, bis die Linke Spule für 3 Messungen wieder innerhalb der Schleife liegt.
Das ganze hatte ich für das Video in ein bash script gepackt und laufen lassen. Meiner Meinung nach funktioniert das schon ganz ordentlich.
Sicher, besser geht immer. Aber dafür dass er die Fahrt nur dann absolvieren soll, wenn er geringen Ladezustand hat, wollte ich den Aufwand auch nicht übertreiben. Viel Spaß beim schauen, Your Feedback and suggesntions are welcome
View attachment PerimeterWire.mp4
 
Gestern habe ich eine eigene Rasenerkennungs routine in meinem RoπLawnMow getestet:
Hintergrund, ich habe bisher die Grünerkennung vom PiMowBot eingesetzt. auf dieses habe ich aber keinen Einfluss, ich kann lediglich die empfindlichkeit einstellen, aber nicht den grünfilter. Also habe ich mit openCV ein python script erstellt und lasse vom Pi mit dem tool
raspistill alle 200ms eine jpg Datei erstellen. diese jpg Datei analysiere ich mit dem opencv script. Das Bild ist in 6 Frames eingeteilt, Nur diese Frames werden analysiert und die Werte lösen Aktionen aus. Im Moment nutze ich nur die Werte der drei unteren Frames.
Den Schwellwert habe ich auf <=50% eingestellt.
frame_10144.jpg
Bei diesem Beispiel sieht man sehr gut, dass das Frame unten Links nur 9.9% Grünanteil hat. Damit würde jetzt ein Ausweichmannöver mit einer kleinen drehung nach rechts ausgelöst. Bei einem Grünanteil von weniger 50% im rechten unteren Frame würde eine Ausweichaktion nach links ausgelost. Bei der Mitte würde ein Wendemanöver eingeleitet. Es wirkt immer das Frame mit dem kleinsten Wert. In einem nächsten Schritt könnten man noch die Werte der oberen Frames einbeziehen. Im Moment klappt das schon ganz gut. Wie ihr in dem Video seht, ist er auch ohne Perimeter Draht gestern ordentlich zurecht gekommen.
@Bernard: You are right the ToFs are tricky. In the Video you can see that sometimes the Mower stops without a obstical. In many of this cases this was a mismeasurement of the ToFs, But i have an idea how to fix it.
This is a typical result of a ToF if the Mower detect an obstical.

819 54 54 42 38 38 37 28 28 25 21 22 25 25 24 26 26 30 31 31 29 33 33
i defined a threshhold of 25 cm and every 200ms i strore the result. You can see that the mower stops and goes back the distance becomes larger.
And here is a result of mismeasurement
819 819 819 819 819 819 7 26 24 24 819 819 819 819 819 819 819 819 50 819 819 819
first: If the measurement is valid, the actual value shoud be smaller than before but the difference should be not larger than 100
If there is a value of < threshhold. I have to look at the last 10 Values (stored in a list) The avarage of the last 10 values should be smaller than i guess 400. This is a value I will try for next tests. Or do you have a simpler idea?

Hier nun ein Teil meiner Testfahrt von gestern auf engem Raum. Ich finde wenn das jetzt noch mit den ToFs richtig funktioniert. Dann ist das schon eine sehr gute Basis. Wer wissen möchte wie ich das mit opencv gemacht habe schaut auf github Ich starte zuvor die PiCAM.sh damit immer die Bilder erzeut werden (habe ich mir beim PiMowBot abgeschaut) und danach überprüfe ich jedesmal ob es ein neues image.jpg zum analysieren gibt.
ist das image, älter als eine Sekunde, dann muss das bash script neu gestartet werden.

Soviel ersteinmal hierzu.

Yor Feedback is welcome!


View attachment openCVdetect.mp4
 
Update von meinem RoπLawnMow:
Nachdem ich bisher immer mit Laptop in der Hand und login über ssh meinen Mäher zum Einsatz gebracht habe, habe ich heute einen Microtaster zum starten benutzt. Einschalten, Pi fährt hoch und mit dem Taster werden alle notwendigen Scripte gestartet, damit der roπLawnMow sich in Bewegung setzt. Hat er genug gemäht, so kann ich ihn mit dem selben Taster aus dem Automow Betrieb wieder "befreien".

View attachment Sartbutton.mp4

In den letzten Tagen habe ich noch einen Handicap gefunden. Er kann sich mit den Antriebsrädern z.B. an einem dünnen Baum oder an einem Strauch festfahren, da die Antriebsräder abstehen. Das will ich im Winter dann mit zwei Bumpern die ich an de Seite anbringe verhindern. Werden kommt er z.B. einer Kante zu nahe schrubbt er mit den Rädern dort entlang, da es weder von der Kamera noch von den ToFs erkannt wird. Eine mögliche Konstruktion habe ich hier mal aufgescribbelt

Bumper.png
 
Update von meinem RoπLawnMow:
Hallo, lange Zeit nichts mehr gepostet. Hatte viele andere Dinge um die Ohren.
Aber ich habe auch ein neues Projekt für meinen RoπLawnMow aufgesetzt
Vor einigen Jahren habe ich mich mal mit der Android App Entwicklung auseinandergesetzt. Damals habe ich für mein E-Bike eine Art Dashboard auf Basis ESP32 mit Anbindung an mein Handy gebaut. https://ullistechnikecke.blogspot.com/2021/05/
Nun hat es mich wieder gepackt und ich will die Fernbedienung die ich mit dem Pico und dem Joystick realisiert habe nun auch in eine App bringen. Mittlerweile habe ich schon einige Fernbedienungen um den RoπLawnMow zu bedienen. Am besten gefällt mir die Steuerung mit dem Joystick. Ich bin gespannt ob das über das Handy dann auch den Spaßeffekt hat. In der Mitte vom Foto schon mal ein erster Screenshot, Die Verbindung wird mittels BT aufgebaut und die Daten die der FB Decoder in der RoπLawnMow-SW benötigt werden auch schon übertragen. In den nächsten Tagen hoffe ich dass ich das mal mit meinen Modellen aus testen kann.
Ich hatte in den letzten Tagen da auch wirklich eine gute Hilfe. ChatGPT hat mir viel Recherche abgenommen. Aber alles schafft sie nun auch noch nicht. MIt dem Ergebnis bin ich aber ganz zufrieden. Bin gespannt wie lange das noch kostenlos ist.

BTRCs.jpg
 
Meine Android App zur Bedienung meines RoπLawnMow ist nun fast fertig
Heute bin ich schon mal draußen Probe gefahren und es klappt sehr gut. Der Vorteil dieser App ggü. der Fernbedienung mit Joystick ist, dass man das Handy eigentlich immer dabei hat und die App hat jetzt schon mehr Funktionen, als der rote Fernebdienung mit Joystick. Mir persönlich gefällt bei der Fernbedienung mit Joystick, dass man besser steuern kann. In der App fehlt die Z Achse des Joysticks, Ich hatte noch keine Idee wie man die noch gut implementieren könnte. Aber wo ich gerade schreibe fällt mir ein, ein zusätzlicher Slider unter oder neben dem Joystick wäre noch ein Option. Platz wäre genug. Im Video seht ihr die kurze Probefahrt
1728144015167.png

View attachment AndroidAppHB1.mp4

Gruß
Ulli
 
Meine Android App zur Bedienung meines RoπLawnMow ist nun fast fertig
Heute bin ich schon mal draußen Probe gefahren und es klappt sehr gut. Der Vorteil dieser App ggü. der Fernbedienung mit Joystick ist, dass man das Handy eigentlich immer dabei hat und die App hat jetzt schon mehr Funktionen, als der rote Fernebdienung mit Joystick. Mir persönlich gefällt bei der Fernbedienung mit Joystick, dass man besser steuern kann. In der App fehlt die Z Achse des Joysticks, Ich hatte noch keine Idee wie man die noch gut implementieren könnte. Aber wo ich gerade schreibe fällt mir ein, ein zusätzlicher Slider unter oder neben dem Joystick wäre noch ein Option. Platz wäre genug. Im Video seht ihr die kurze Probefahrt
View attachment 1735

View attachment 1736

Gruß
What software did you use to create the mobile APP ?
 
What software did you use to create the mobile APP ?
Android Studio i will share the actual Code during the next days. Should run above of Android 7.
But unfortunately I am not really familiar with Android Studio it is very complex to setup a new project and share a existing project.
But ChatGPT is patient and the code is Java, so this is not really a challenge.
 
Here You find the Code of the App, Created in Android Studio Koala Feature Drop | 2024.1.2:
Normally you only should unzip the file and load the project in Android Studio. I didn't tried it before, so give me a feedback if it works.
 

Attachments

Habe es geschafft und die Z-Achse des HW-Joysticks in meine App implementiert.
Bei Github habe ich eine CircularSeekbar gefunden, die ich auf meinen Bedarf anpassen konnte.
Bei der Gelegenheit habe ich gleich das Outfit der App noch ein wenig angepasst.
Mit dem dunklen Knopf in dem Halbkreis kann ich nun den Mäher wieder exact um die eigene Achse drehen lassen.
Dann kann ich morgen wieder auf den Rasen gehen, nachdem ich heute in meinem Arbeitszimmer gecruised habe.

1728313906777.png
 
Hallo,
gestern bin ich mal wieder länger mit meiner SW gefahren und habe ein Video aufgenommen. Das original in besserer Qualität findet ihr hier.
https://photos.app.goo.gl/GY7ELmA8KuHfDnwG9
Hier ist er ohne Perimeter Unterstützung gefahren, was man am Ende deutlich sieht, da wäre er sonst vor der Blumenkiste stehen geblieben. Die Bilderkennung will ich noch erweitern. Es sollen noch zusätzliche Ausweich-Varianten implementiert werden. Wenn überall grün ist, und nur in einem Frame nicht, dann soll er so ausweichen bis er wieder überall grün sieht, also nicht wenden wie bei Szene, wo er im Rasen eine braune Stelle findet. Im Moment speicher ich bei Auslösung der ToFs nur die gemessenen ToF -Werte im Dateinamen ab. Das ich ich noch so erweitern, dass ich zukünftig die Werte auch im Bild einblende wie bei der Videoanalyse mit den Grünanteilen in den Frames. Auch wenn ein Perimeter Sensor angesprochen hat Soll ein Bild abgespeichert werden mit den eingeblendeten Daten. Dann wäre eine Analyse einer Fahrt perfekt. Diese Bilder sollen aber nicht an ein WebUI o.ä. übertragen werden, sie dienen nur zur Analyse und zur Optimierung der Automow Funktion und werden bei mir in einem Automow Ordner mit Tagesdatum auf dem Pi abgespeichert.
Gruß
Ulli
View attachment AutoMow.mp4
 
Am Wochenende habe ich in die Bilder die beim Auftreten eines Hindernisses abgespeichert werden, den Abstand und den Status der Perimeter Erkennung noch eingefügt.
Die Bildanalyse und das Einblenden der Daten erledige ich mit opencv. So sieht nun exemplarisch ein Analyse Bild aus.
1729530776425.png
Und hier ein Beispiel von meinem Fake Rasen, den ich immer in meinem Arbeitszimmer nutze, wenn ich den Automow teste. Dabei stoppe ich meinen raspistill -tl 500 -t 3000000 -n -ex sports -e jpg -th 80:45:15 -o /run/shm/image.jpg -w 640.0 -h 360.0
Befehl, und kopiere alle 200ms ein Bild von meinem Rasen in die RAM-Disk. Somit habe ich die Grün-Analyse im Zimmer überlistet und er reagiert nur auf Entfernungen und auf den Perimeter-Draht.

1729531209986.png

Dann habe ich heute noch das Teensy Board mit dem ich die Perimeter-Spulen auswerte auf I2C Kommunitation umgebaut.
Bisher habe ich die Daten vom Teensy an den Pi im RoπLawnMow per Serieller Schnittstelle übertragen, das habe ich nun auf
I2C umgestellt. Damit habe ich die serielle Schnittstelle am Pi wieder frei und kann für die draußen das GPS Modul wieder anschließen.
Als nächstes steht bei mir auf dem Plan, den Automow zu optimieren. Im Moment fährt er sich manchmal fest, wenn er auf eine Ecke vom Perimeterdraht trifft. Problem ist, dass er rechts ausweichen will, dann trifft er mit der rechten Spule auf den Draht, und weicht nach links aus.
So pendelt er immer von Links nach Rechts. Irgendwann kriegt er es dann hin, aber ich will das so lösen, dass wenn er 2x Links / Rechts gependelt ist, eine andere Ausweich Bewegung genutzt wird.

I2C_PiandTeensy.jpg
 
Am Wochenende habe ich in die Bilder die beim Auftreten eines Hindernisses abgespeichert werden, den Abstand und den Status der Perimeter Erkennung noch eingefügt.
Die Bildanalyse und das Einblenden der Daten erledige ich mit opencv. So sieht nun exemplarisch ein Analyse Bild aus.
View attachment 1740
Und hier ein Beispiel von meinem Fake Rasen, den ich immer in meinem Arbeitszimmer nutze, wenn ich den Automow teste. Dabei stoppe ich meinen raspistill -tl 500 -t 3000000 -n -ex sports -e jpg -th 80:45:15 -o /run/shm/image.jpg -w 640.0 -h 360.0
Befehl, und kopiere alle 200ms ein Bild von meinem Rasen in die RAM-Disk. Somit habe ich die Grün-Analyse im Zimmer überlistet und er reagiert nur auf Entfernungen und auf den Perimeter-Draht.

View attachment 1741

Dann habe ich heute noch das Teensy Board mit dem ich die Perimeter-Spulen auswerte auf I2C Kommunitation umgebaut.
Bisher habe ich die Daten vom Teensy an den Pi im RoπLawnMow per Serieller Schnittstelle übertragen, das habe ich nun auf
I2C umgestellt. Damit habe ich die serielle Schnittstelle am Pi wieder frei und kann für die draußen das GPS Modul wieder anschließen.
Als nächstes steht bei mir auf dem Plan, den Automow zu optimieren. Im Moment fährt er sich manchmal fest, wenn er auf eine Ecke vom Perimeterdraht trifft. Problem ist, dass er rechts ausweichen will, dann trifft er mit der rechten Spule auf den Draht, und weicht nach links aus.
So pendelt er immer von Links nach Rechts. Irgendwann kriegt er es dann hin, aber ich will das so lösen, dass wenn er 2x Links / Rechts gependelt ist, eine andere Ausweich Bewegung genutzt wird.

View attachment 1742
How did you read distance using 1 camera ?
 
mit zwei Perimeterspulen hast Du mehr Möglichkeiten bzgl. Fahrstrategie.
Ja korrekt, deshalb fahre ich ja auch mit zwei Preimeterspulen auf dem Display kann man left und right vielleicht erkennen.
Auch auf den Analyse Bildern kann man zwei Kreise unten links und rechts erkennen, je nachdem welche Spule gerade Außerhalb ist,
wird der Kreis Rot einegefärbt. Ich werte aber nich die magnitude im Moment aus, ich übertrage die zwar auf den Pi, habe aber nur einen Threshhold definiert, sobald er gößer 1000 ist, wird außerhalb ausgelöst, Ich bremse also nicht vor dem Draht ab. Bei i.d.R. 21 RPM pro Rad,
war das für mich "Schmuck am Nachthemd"
Danke Für Dein Feedback mein Fürst :-)
 
Do you have experience in that?
Not at all ,but they are many post on this solution and opencv on the net.

I only have implement the tensorflow AI detection to see in front of mower.
I use the size of the detected square according size of screen to force the avoidance.
BUT it's only for fun because it's not something useful in real mowing condition and also not really reliable.

You say you use the ToF ,did they are really reliable or work only 80% on perfect reading value.
 
You say you use the ToF ,did they are really reliable or work only 80% on perfect reading value.
Yes so far I tested it, they ar reliable up to 120cm greater Distance there are to many errors, But I think 120cm is far enough. The advantage of them they have a I2c interface. During the cold wintertime i will prepare my other Mower, the first I had. Maybe i will test there ultrasonics. So far I know I need a send and a receive GPIO if i will Use 4 Senors 2 Front, one left one right, I need 8 signal lines.
I have to calculate the available GPIOs of the Pi. I am not a friend to have mixed sensors, so 2 ToFs and 2 utrasonics. But the other solution coud be, that i use the teensy board not only for Perimeter detection, there are enough GPIOs available and i can easy transfer the results via I2c to the pi. I have to think about that.
 
Have you ever tested the TOF sensors outside for a longer period of time, especially in direct sunlight? They usually fail in such conditions.
 
Have you ever tested the TOF sensors outside for a longer period of time, especially in direct sunlight? They usually fail in such conditions.
Yes, until now I had no problems when the mower drives direktly into the sunlight. I noticed some failuers at distances > 120cm, but they are there also without sunlight. However, my experience is that it depends heavily on the libraries used. I use this library
https://github.com/Gadgetoid/VL53L0X-python and the VL53L0X with filter like this


1729854426548.png
 
Back
Top