Reinforcement Learning

Im Rahmen meiner Ingenieurspraxis wird dem Roboter FOBO das Laufen mittels Reinforcement Learning (RL) beigebracht.

Ziel ist, dass der Roboter selbständig läuft und eventuell Stufen oder Hindernisse bewältigen kann.

 

Elektronik

Um RL zu implementieren, ist es nötig die Elektronik zu erweitern. Da der Speicher des Arduino Microcontrollers zu klein ist und die hauptsächliche Rechenarbeit somit am PC ausgeführt werden muss, benötigt FOBO ein Funkmodul, welches als Schittstelle zwischen PC und Roboter dient. Des weiteren benötigt FOBO einen Beschleunigungssensor um zu erkennen wann er umgefallen ist, bzw in welche Richtung er geneigt ist, sowie einen Akku zur kabellosen Stromversorgung.

 

Funkmodul (Datenblatt nRF24l01+ )

Achtung: Nur an 3.3V anschliesen!

Als Funkmodul wird das, im Vergleich zu Xbee-Modulen kostengünstige, Nordic nRF24l01+ verwendet, welches auf einer Frequenz von 2,4 GHz sendet. Es gibt zwei verschiedene Modelle des Funkmoduls, eines ohne Antenne (Reichweite ca. 80m auf freie Sicht) und eines mit Antenne (Reicheite ca. 1km auf freie Sicht und unanfälliger für Störungen). Für Arduino gibt es zwei verschiedene Libraries, die Mirf.h und die RF24.h, wobei ich letztere benutzt habe. Da das Funkmodul auf dem gleichen Band wie das Wlan sendet ist es sehr anfällig für Störungen. Daher muss ein Kanal gewählt werden der nicht so Störanfällig ist, wie z.B. Kanal 97, jedoch muss darauf geachtet werden, dass man im erlaubten Frequenzbereich bleibt(2,40 - 2,50 GHz).


 

Beschleunigungssensor (Datenblatt mma8452q)

Achtung: Nur an 3.3V anschliesen!

Der Beschleunigungssensor dient FOBO dazu zu erkennen wann er umgefallen ist, bzw ob er gerade steht.


 

Akkumessung

Um ein Tiefentladen des Akkus zu vermeiden wird die Akkuspannung über den Analog Pin 0 gemessen und bei einer Spannung von unter 3,1V pro Zelle blinkt eine Warn-LED auf. da die zu messende Akkuspanung (7,4V) die maximale Spannung der Analogpins (5V) überschreitet muss ein Spannungsteiler eingebaut werden, der die Spannung auf das Niveau der Analogpins bringt. Hier wurde ein Teilungsverhältnis von 1:1 gewählt, da so die mittlere Spannung pro Zelle gemessen wird.

 

Adaptershield (Eagle-File)

Um die Elektronik fest zu verkabeln und somit Fehlerquellen auszuschließen wurde ein shield gefräst, welches Steckplätze für die Sensoren beinhaltet. Zusätzlich wurde die Arduinoplatine höher gesetzt um Platz für den Spannungswandler und den Akku zu schaffen.


 

 

GUI

Der Roboter wird über ein User Interface gesteuert, welches mit dem Programm "Processing" erstellt wurde. In diesem kann man sowohl die Servopositionen manuell einstellen, als auch fertige Schrittfolgen ansteuern, oder auch Reinforcement Learning auswählen kann. Zusätzlich besteht die Möglichkeit Servostellungen in eine Detei zu Speichern, um so Abfolgen zu erstellen und Schritte per Hand einzuprogrammieren. Mit dem Regler oben links kann die Gewschwindigkeit eingestellt werden mit der Schrittfolgen ausgeführt werden sollen. Sie gibt die Pause zwischen Servostellungen in Millisekunden an.

 

Um FOBO mit dem PC steuern zu können werden folgende drei Programme benötigt:

FOBOwalk.ino muss auf dem Arduino von FOBO hochgeladen werden

sendServoPosFromGUI.ino muss auf dem Arduino des Senders hochgeladen werden

FoboGUI.pde muss am PC gestartet werden

 

 

Anhänge:
Diese Datei herunterladen (AdapterBoard.brd)AdapterBoard.brd[ ]%2014-%04-%04 %1:%Apr%+02:00
Diese Datei herunterladen (FoboGUI.pde)FoboGUI.pde[ ]%2014-%04-%04 %1:%Apr%+02:00
Diese Datei herunterladen (FOBOwalk.ino)FOBOwalk.ino[ ]%2014-%04-%04 %1:%Apr%+02:00
Diese Datei herunterladen (MMA8452Q.pdf)MMA8452Q.pdf[ ]%2014-%04-%04 %1:%Apr%+02:00
Diese Datei herunterladen (nRF24L01_Product_Specification_v2_0.pdf)nRF24L01_Product_Specification_v2_0.pdf[ ]%2014-%04-%04 %1:%Apr%+02:00
Diese Datei herunterladen (sendServoPosFromGUI.ino)sendServoPosFromGUI.ino[ ]%2014-%04-%04 %1:%Apr%+02:00