====== Roboter mit Android steuern ====== ---- {{:inf:msr:google-play.png?100 |}} // Mit Android (Wireless) Roboter steuern macht Spaß und ist ausgesprochen lehrreich. Tatsächlich ist dieses Projekt eher etwas für den "angehenden Profi", denn es werden viele Gebiete gestreift, in denen man sich ein wenig auskennen muss.// {{ :inf:msr:arm.jpg? |}} Dennoch, wer lediglich die Android App //"Mr.Robot"// ausprobieren möchte oder, ohne einen Roboterarm zu besitzen, einen einfachen Servomotor mit Android ansteuern will, kann hier lernen wie man es macht. ==== Worum geht es ? ==== {{ :inf:msr:android_mr_robot_1.png? |}} **Prinzip** * Ein mit Servomotoren gesteuerter Roboterarm wird an einen Adafruit Servo Controller angeschlossen. * Über einen IO-Warrior wird der Servo Controller angesteuert.Der IO-Warrior ist mit einem Linux Computer verbunden. Auf diesem läuft ein Java-Programm, mit dem das Android Gerät eine Verbindung aufnimmt. * Anschließend kann mit einem Android Gerät (via WLAN) der Roboterarm gesteuert werden. ==== Themenbereiche==== Einige der Themenbereiche sind bereits kleine Projekte für sich, z.B. wurde der Roboterarm fotografiert und in der 3D-Modellierungssoftware Blender modelliert. Anschließend wurden die Daten exportiert und mit einem kleinen "Java-Programm" in ein für Android lesbares Format gewandelt. Unter Android wurde dann OpenGL ES2.0 für die 3D-Darstellung verwendet. Wem das zu kompliziert ist, kann aber die 3D-Programmierung komplett auslassen. Das Ansteuern des Servo-Controllers mit dem IO-Warrior24 unter Java wird im Band III (IIC-Projekte) ausführlich gezeigt. Anschließend noch eine Liste mit Themenbereichen die in diesem Projekt behandelt werden: * Android Programmierung * OpenGL Programmierung unter Android * 3D Modellierung mit Blender * Die von Blender erzeugten 3D-Daten werden mit einem kleinen Java Programm in ein für Android lesbares Format exportiert. * Netzwerkprogrammierung * Client ↔ Server, Socket Programmierung * IO-Warrior * Verwenden der IIC-Schnittstelle zum Ansteuern eines 16 Kanal Adafruit-Servo-Controller ==== Benötigte Hardware ==== * Standard Servomotor (1 bis 6 Stück ) * Netzgerät zur Stromversorgung der Servomotoren (5-6 Volt, 1-2 Ampere) * PCA9685 Adafruit Servo Controller * IO-Warrior24 (einfach geht es mit dem Gandalf-Board ) * Linux PC um den IO-Warrior24 mit der Serversoftware zu betreiben (es geht auch ein Raspberry-Pi). * Android Gerät (ab 4.2) um die Motoren zu steuern. FIXME Aufbau der Hardware ==== Inbetriebnahme des Servers==== * getestet wurde ein 32Bit-System Der Server ''RobotArmServer.jar'' benötigt die Native-Bibliothek ''libiowkit.so'', damit der IO-Warrior angesteuert werden kann. Deshalb wird ein Aufruf mit : java -jar RobotArmServer.jar nicht funktionieren, wenn nicht zuvor der Pfad zur Datei: ''libiowkit.so'' angegeben wird. Unter Linux kann man z.B. die Umgebungsvariable (Envirenmentvariable) ''LD_LIBRARY_PATH'' auf das Verzeichnis setzen, dass die ''libiowkit.so'' enthält. Das macht man mit ''"export LD_LIBRARY_PATH=/VERZEICHNIS/"'' (s. Abb. 1). |{{ :inf:msr:shell1.png? |}}| | Abb. 1 | In diesem Beispiel liegt sowohl das Programm "RobotArmServer.jar", als auch die Native-Bibliothek "libiokit.so" im Homeverzeichnis: /home/torsten/ Der Server muss zuerst gestartet werden, anschließend kann eine Verbindung zum Client (AndroidApp) hergestellt werden. Dabei müssen sich der Server und der Client im gleichen Netzwerk befinden. ==== Inbetriebnahme des Clients (Mr. Robot) ==== {{ :inf:msr:mr_robot2.png? |}} Der Client ist unter Android (ab 4.2) schnell installiert. Auch ohne Hardware (bzw. Server) lässt sich die //App// bedienen. Allerdings macht es erst mit angeschlossener Hardware richtig Spaß! Die zu installierende Anwendung lautet: ''de.androidtools.mr.robot.apk'' (einfacher geht es im Playstore //"Mr.Robot"//) === Konfiguration=== |{{ :inf:msr:server23.png?350 |}}| |Um "Mr. Robot" mit einen angeschlossenen Roboterarm zu verbinden muss der Menüpunkt "Settings" aufgerufen werden.| {{ :inf:msr:servername.png?350 |}} |Die Adresse des Servers und ein freier Port (z.B. 4444 oder 5555 ) muss eingegeben werden. Die Server-IP gibt die Linux-Rechner, an denen der Roboterarm angeschlossen ist, auf der Kommandozeile aus.| === Quellcode === FIXME Quellcode zur Verfügung stellen