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
 
Back
Top