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