Raindancer Firmware (Deutsch): Unterschied zwischen den Versionen

Aus www.wiki.ardumower.de
Wechseln zu: Navigation, Suche
(Offene Punkte)
(Weitere Wünsche)
Zeile 93: Zeile 93:
  
 
==Weitere Wünsche==
 
==Weitere Wünsche==
# Regensensor einbinden
+
* Regensensor einbinden
# Die Ladestation wird aktuell nur counter clockwise angefahren.
+
* Die Ladestation wird aktuell nur counter clockwise angefahren.
# Verstärken des Signals der Ladestation auf +-20V Spannung Hub
+
* Verstärken des Signals der Ladestation auf +-20V Spannung Hub
# SRF08 einbinden  
+
* SRF08 einbinden  
# I2C Temperatursensoren einbinden
+
* I2C Temperatursensoren einbinden
# Anfahren der Ladestation mit GPS. 15m vor der Ladestation auf den Perimeter fahren und dann in die Ladestation einfahren.
+
* Anfahren der Ladestation mit GPS. 15m vor der Ladestation auf den Perimeter fahren und dann in die Ladestation einfahren.
# GPS Karte - es kann sein, dass der Mower das Signal in der Mitte des Rasens nicht erkennt, da das Signal zu schwach ist. Man kann dann mit GPS dann sehen, ob man auf der Fläche ist.  Wenn man nun sagt, dass das Signal mindesten in 15m Abstand vom Perimeter erkannt werden muss, kann man es innerhalb der Fläche vernachlässigen wenn das GPS Signal anzeigt, das man auf der Fläche ist.
+
* GPS Karte - es kann sein, dass der Mower das Signal in der Mitte des Rasens nicht erkennt, da das Signal zu schwach ist. Man kann dann mit GPS dann sehen, ob man auf der Fläche ist.  Wenn man nun sagt, dass das Signal mindesten in 15m Abstand vom Perimeter erkannt werden muss, kann man es innerhalb der Fläche vernachlässigen wenn das GPS Signal anzeigt, das man auf der Fläche ist.
# GPS Karte - Vermerken wo der Robbi schon gemäht hat. Dann ggf. in weniger gemähten Bereichen mähen.
+
* GPS Karte - Vermerken wo der Robbi schon gemäht hat. Dann ggf. in weniger gemähten Bereichen mähen.
 
Die GPS Karte wird vermutlich auf einen externen Prozessor ausgelagert weden müssen.
 
Die GPS Karte wird vermutlich auf einen externen Prozessor ausgelagert weden müssen.

Version vom 29. April 2018, 13:25 Uhr

Achtung! Die Software ist noch im Wandel und kann jederzeit geändert/erweitert werden.

Download

Github Download

Überblick

Die Raindancer Firmware mäht nach dem Chaos Prinzip. Der Roboter fährt von der Ladestation eine angegebenen Strecke am Perimeter lang und fängt dann an zu mähen. Die Mähzeit beträgt mit den original Ardumowerkomponenten bei dem Raindancer Chassis ca. 2.3h. Nachdem die Batteriespannung auf 23,7V heruntergegangen ist, sucht der Roboter das Perimeterkabel und fährt dieses bis zur Ladestation entlang. In der Ladestation angekommen, wird die Batterie geladen. Der nächste Mähvorgang wird aktuell über das Mobile Phone gestartet.


Die Firmware wurde entwickelt für Roboter mit dem Antriebsmotoren hinten, kann aber auch für das original Chassis verwendet werden. Optimierungen für das original Chassis erfolgen zu einem späteren Zeitpunkt. Der Mower dreht sich auf dem Perimeter. Wenn eine Spule über das Perimeterkabel gefahren ist, fährt der Roboter noch ca. 20cm weiter. Dann werden beide Spulen, in die Schleife gedreht und ab da an wird dann mit einem Zufallswinkel weitergedreht. Da das original Chassis einen kurzen Abstand zwischen Spulen und Rädern hat, gibt es hier folgenden Workaround: In der config.h kann eingestellt werden, dass der Mower weiter zurückfährt, dann einen festen Winkel dreht (Drehung auf dem Perimeter simuliert) und nach dem Drehen des festen Winkels wird der Zufallswinkel gedreht.


Für die Perimetererkennung wird ein 128Bit Signal verwendet. Daher muss die Raindancer Sendersoftware auf den Sender aufgespielt werden. Beim annähren an das Perimeterkabel wird der Roboter langsamer. Die Bedingungen dafür müssen ggf. im Code angepasst werden. Erkennt der Roboter das Signal für 2Sekunden nicht, bleibt er stehen und schaltet die Mootoren aus. Erkennt er es wieder, fährt er weiter.


Die Firmware unterstützt in der aktuellen Version eine durchfahrende Ladestation (einfügen einer einseitig befahrbaren Ladestation folgt zu einem späteren Zeitpunkt). Das Anfahren der Ladestation kann in der Software ausgeschaltet werden. Dann bleibt der Roboter am Perimeter stehen, wenn die Batteriespannung unter 23,7V fällt. Zum Laden kann der Roboter dann ausgeschaltet werden, an das Ladekabel angeschlossen werden und wieder eingeschaltet werden. Der Roboter geht dann in den Lademodus. Fällt die Spannung unter 21,7V löst die Unterspannungsabschaltung aus falls diese nicht überbrückt wird.


Mit dem original Motoren und Rädern fährt der Roboter mit einer Geschwindigkeit von ca. 1200m/h. Um ein vernünftiges Schnittbild zu erlangen, muss der Roboter bei einer 1000m² Fläche ca. 6-9h pro Tag mähen (meine Erfahrung). Hängt natürlich auch von der Art und Verwinkelung der Fläche ab.


Der Roboter unterstütz zusätzlich einen selbstgebauten Bumperduino mit zwei MaxSonar Sonarsenoren und einem MPX5010DP FREESCALE Drucksensor für einen Druckwellenschlauch. https://github.com/kwrtz/Raindancer/blob/master/DipTrace/DistanceBumperSensor/DistanceBumperSensor.pdf Die Auswertung übernimmt ein Arduino Nano, welcher an PinUserSwitch2/3 des PCB1.3 angeschlossen ist. Bei Erkennen eines Hindernisses mit den Sonarsenoren, wird der Roboter langsamer und bumped seicht gegen das Hindernis wo dann der Bumper oder Bumperduino auslöst. Die Platine ist relative einfach aufgebaut. Die MaxSonar Sensoren können weggelassen werden und es kann eine eigene Lösung an den Nano angeschlossen werden, oder die aktuelle Raindancer Software kann erweitert werden. Die original Ardumower Ultraschall Sensoren werden aktuell nicht unterstützt.


Falls ein original Bumperduino verwendet wird oder eigene Bumper, können diese wie bisher an die Bumper Pins angeschlossen werden.

Für die Bedienung wird das Serielle Interface verwendet. Auf dem Handy eignet sich die Software Arduino Central (kostenlos mit Wer bung oder ohne Werbung für wenige Euros). Die Bedienung erfolgt über Kommandozeilenbefehle. Die gesendete Zeile muss mit CR abgeschlossen werden. Die Ausgabe erfolgt automatisch auf der Console oder auf dem Mobile Phone, je nachdem von wo gerade der Befehl eingegeben wurde. Die meisten Befehle sind nach Services Gruppiert. Die Gruppe entspricht den angesprochenen Services in der Software. Der auf den Service folgende Befehl ist dann durch einen Punkt getrennt. Leerzeichen werden übersprungen und haben keine Bedeutung. Dies ist gerade bei Verwendung des Mobile Phones nützlich, wo ein Leerzeichen nach einem Punkt eingefügt wird.


Beipiel: clc.enc Der Service clc enthält den Befehl enc. Damit wird der closes loop control service angesprochen und ihm mittgeteilt, dass er die Encoderdaten anzeigen soll.


Parameter werden mit einem Komma getrennt. Beispiel: pc.cm,60,30 //drives 60 cm with speed 30 (//drives... gehört nich zum Befehl) Damit wird der Positioncontrol Service angesprochen. Fahre 60cm mit der Geschwindigkeit von 30%


Der Befehl H zeigt die Hilfe an.


Viele Befehle geben Ausgaben auf der Konsole aus. Um diese Ausgabe zu deaktivieren, kann man h eingeben oder den gleichen Befehl wieder (der die Ausgabe angestoßen hat). Falls ein Error oder Motorstall ausgegeben wird, kann dieser mit dem Befehl reset zurückgesetzt werden.


Die Software ist Modular aufgebaut. Die einzelnen Module beeinflussen sich fast gar nicht. Damit ist es relative einfach etwas Abzuändern oder zu Erweitern. https://github.com/kwrtz/Raindancer/blob/master/Documentation/SoftwareStructure.pdf Zur Dartsellung wurde die Software UMLET verwendet.


Es gibt einen Hardware Abstraction Layer. Die gesamte Kommunikation mit der Hardware erfolgt über Objekte in hardware.h. Die meisten Objekte in hardware.h sind in InOutInterface.h definiert. In hardware.cpp findet die Initialisierung und Pinzuordnung der Hardware statt. Services sammeln Daten oder steuern die Motoren und stellen ihren Service der Steuerung zur Verfügung. Als Steuerung wird ein Behaviourtree verwendet. Der Behaviourtree greift auf die Services über das Blackboard zu. Nodes des Behaviourtree tauschen informationen über das Blackboard aus.


Für die grafische Erstellung des BHT wurde SPLAN verwednet. https://www.electronic-software-shop.com/elektronik-software/splan-70.html?language=de Um die Dateien des BHT betrachten kann folgende kostenlose Software verwendet werden: https://www.electronic-software-shop.com/support/kostenlose-datei-viewer/?xoid=oep38ca4ehqn37a7dn3rnrpie6 Die Dateien des BHT befinden sich hier https://github.com/kwrtz/Raindancer/tree/master/Documentation


Der Roboter kennt zwei Modi: Manuel und Auto. Im manuellen laufen alle Services, aber der Behaviourtree ist ausgeschaltet. Im Auto mode wird der BHT aktiviert.


Welcher Modi wird wann gestartet: MANUAL Roboter wird eingeschaltet und ist nicht in der Ladestation AUTO Der Roboter wird in der Ladestation eingeschaltet und erkennt eine Spannung an den Ladekontakten. Das Behaviour Charging wird aktiviert. Der Roboter wird geladen.


Ist der Roboter im MANUAL Mode, kann er mit dem Befehl A in den Automode geschaltet werden. Erkennt der Roboter das Perimetersignal, fängt er an zu mähen.


Offene Punkte

  • Stabilität der Software langfristig Prüfen. Stand 28.04.2018 Aktuell hat die aktuelle Softwareversion 63h gemäht, hat dabei 59km zurückgelegt und hat 8426 mal rotiert.
  • Der Linienverfolgungsalgorithmus wurde aktuell für das Chassis mit Antriebsrädern hinten optimiert. Aufgrund des kurzen Abstandes von Spule zu den Rädern des original Chassis kann es notwendig sein einen anderen Algorithmus zu programmieren.
  • Optimierung für das Original Chassis (Das mähen funktioniert mit dem Workaround schon sehr gut. Ggf. mit den Parametern CONF_PER_CORRECTION_ANGLE und CONF_PERIMETER_DRIVE_BACK_CM etwas spielen)
  • Ausweichen von Objekten, die nahe am Perimeter stehen optimieren (SecondReverse2 im BHT)
  • Einseitig befahrbare Ladestation umsetzen

Weitere Wünsche

  • Regensensor einbinden
  • Die Ladestation wird aktuell nur counter clockwise angefahren.
  • Verstärken des Signals der Ladestation auf +-20V Spannung Hub
  • SRF08 einbinden
  • I2C Temperatursensoren einbinden
  • Anfahren der Ladestation mit GPS. 15m vor der Ladestation auf den Perimeter fahren und dann in die Ladestation einfahren.
  • GPS Karte - es kann sein, dass der Mower das Signal in der Mitte des Rasens nicht erkennt, da das Signal zu schwach ist. Man kann dann mit GPS dann sehen, ob man auf der Fläche ist. Wenn man nun sagt, dass das Signal mindesten in 15m Abstand vom Perimeter erkannt werden muss, kann man es innerhalb der Fläche vernachlässigen wenn das GPS Signal anzeigt, das man auf der Fläche ist.
  • GPS Karte - Vermerken wo der Robbi schon gemäht hat. Dann ggf. in weniger gemähten Bereichen mähen.

Die GPS Karte wird vermutlich auf einen externen Prozessor ausgelagert weden müssen.