Steuerungssoftware (kompatibel mit allen ToyCollect Robotern)
06.02.2020
Installation TCserver
TCserver steuert Roboter, LEDs und die Kameras und nimmt Kommandos über Bluetooth oder WLAN entgegen. Für V1.21 (R2X) unterscheiden wir den MASTER Raspberry Pi mit angeschlossenem Motor Controller und den SLAVE. Für die Robotermodelle mit nur einem RPi definieren wir der Einfachheit halber diesen auch als MASTER.
Die folgenden drei Schritte müssen für den V1.21 (R2X) Roboter auf MASTER und SLAVE ausgeführt werden, sonst nur auf dem einen.
- Der RPi sollte bereits per SSH erreichbar sein. Bitte loggen Sie sich ein. Wir gehen bei dieser Anleitung davon aus, daß Raspbian Lite installiert wurde und WLAN konfiguriert wurde. Ein Internetzugang direkt am RPi ist für die Installation notwendig.
- Führen Sie den Befehl sudo raspi-configaus und ändern dort die folgenden Einträge in den Interfacing Options: P1 Kamera aktivieren; P5 I2C aktivieren; P6 Login-Shell über Seriell deaktivieren, aber serielle Port-Hardware aktivieren.  Anschließend ist ein Reboot notwendig. Loggen Sie sich danach wieder ein.
- Um die benötigten Bibliotheken zu installieren, führen Sie die folgenden Befehle aus:
sudo bash
apt-get update
apt-get install git wiringpi pigpio libncurses-dev netcat-openbsd joystick 
Die folgenden Schritte sind nur am MASTER notwendig.
- Loggen Sie sich ein und führen Sie die folgenden Kommandos aus:
cd /home/pi
git clone https://git.seewald.at/TCserver
cd TCserver 
- Die Konfiguration des konkreten Roboter erfolgt über C++ Include-Dateien. Kopieren Sie eine passende Beispiel-Include-Datei auf config.h- für V1.21 (R2X) wäre dasconfig_PINK_RPI2X_192.168.42.90_91.h, für V1.3 (K3D) oder V1.1 wäre dasconfig_KULA3D.h. Öffnen Sie die Datei mit einem Textmodus-Editor wienanoodervi.
- Die vorgegebenen Beispieldateien sind für die Anwendung von vortrainierten Deep-Learning Modellen ausgelegt. Wenn Sie stattdessen den Roboter über andere Fernsteuerungen steuern wollen, müssen Sie die Beispieldateien wie folgt abändern:
- bei V1.21 (R2X) #define DL_STREAMmittels//auskommentieren
- bei V1.3 (K3D) #define RPI_3BPLUSauskommentieren und#define USE_WLAN_SOCKETsowie#define OUTPUT_3Dhinzufügen.
 Dies deaktiviert jeweils auch den Override des Bluetooth-Controllers.
- Die Einstellungen für den Motor Controller (MC_SERIALPORT, MC_BAUDRATE, MC_BAUDRATE_AUTO) sollten so stimmen. Wenn Sie beim Motor Controller die Baudrate fix auf 38.400 Baud eingestellt haben, kommentieren SieMC_BAUDRATE_AUTOmittels//aus.
- Es kann sein, das die Motoren anders angeschlossen wurden wie im ursprünglichen Roboter. Dafür sind die Einstellungen MC_M0_*, MC_M1_*da.
 Führen Siemake clean && make tests/motor_controller_testundtests/motor_controller_testaus. Mit den Tasten a,y,k,l können Sie die Motoren testen.
 M0sollte der linke Motor in Fahrtrichtung sein (LEDs = vorne, Logo = hinten), positive Werte sollten ihn vorwärts bewegen und negative Werte rückwärts.M1sollte der rechte Motor sein und sich ebenso verhalten.
 Wenn etwas anders ist als erwartet, korrigieren Sie die entsprechenden Werte inconfig.hund starten den Test neu beim ersten Kommando. Zum Beispiel wenn die Motoren links/rechts vertauscht sind, tauschen SieM0undM1in den#define-Zeilen aus. Wenn ein Motor verkehrt ist, tauschen Sie die Kommandos für vorwärts und rückwärts aus.
- Die Kalibrierung mc_motor_calibrationsollte auf{ 1.0f, 1.0f, 1.0f, 1.0f }gesetzt werden. Mit dieser Einstellung kann korrigiert werden wenn die Motoren unterschiedlich schnell laufen und somit eine Geradeausfahrt systematisch nach links oder rechts abdriftet - dann kann der schnellere Motor hier gebremst werden. Da die Motoren sich teilweise bei Vorwärts- und Rückwärtsfahrt unterschiedlich verhalten, kann die Korrektur für beide Richtungen unterschiedlich sein.
- Wenn Sie für die direkte Kontrolle des Roboter einen Bluetooth-Controller verwenden wollen - was dann auch ohne WLAN funktioniert - kann unter BT_CONTROLLER_IDdessen Bluetooth-ID und unterBT_TYPEdessen Typ eingetragen werden. Derzeit werden StratusXL und DualShock4 Controller unterstützt. Jeder mit Linux kompatible Bluetooth Gaming-Controller müßte funktionieren. Neue Typen können inTCserver.cergänzt werden.
 Zur Konfiguration des Bluetooth-Controllers muß dieser mit dem MASTER gekoppelt werden. Dies geschieht über die folgenden Kommandos. Zunächst den Bluetooth-Controller in einen Modus versetzen wo er neu gekoppelt werden kann!bluetoothctl (in der bluetoothctl Kommandozeile)agent on
default agent
trust [bluetooth id]
pair [bluetooth id]
connect [bluetooth id]
exit (wieder in der normalen Kommandozeile)modprobe xpad Danach sollte/dev/input/js0existieren und mittelsjstest --event /dev/input/js0testbar sein.
 Wenn Sie keinen Bluetooth-Controller verwenden wollen, kommentieren Sie die Zeile#define BT_CONTROLLERaus.
 ACHTUNG: Derzeit ist der Bluetooth Controller die einzige Möglichkeit, den Roboter zu übersteuern, wenn er ein vortrainiertes Deep-Learning Modell ausführt.
- Mit make tests/led_test && tests/led_testkönnen Sie die angeschlossenen LEDs testen. Hier kann die Helligkeit mit + und - erhöht bzw. verringert werden. Dieser Test sollte auch am SLAVE durchgeführt werden. Das Programmled_testkann viascp tests/led_test pi@[SLAVE IP-Adresse]:.auf den SLAVE kopiert werden.
- Beim V1.21 (R2X) Roboter können Sie zusätzlich via make tests/sync_testdie Synchronisation zwischen MASTER und SLAVE testen. Dazu muß das Programm allerdings auf beiden RPis parallel gestartet werden. Es ist nur für Troubleshooting notwendig, wenn zum Beispiel die MASTER/SLAVE Erkennung nicht stabil funktioniert.sync_testhat als ersten ParameterMASTERoderSLAVE- auf einem Rechner muß es mitMASTER, am anderen mitSLAVEgestartet werden - und als zweiten eine Zeitverzögerung in Millisekunden, die bestimmt wie oft der Wert wechselt. Sinnvolle Testwerte für den zweiten Parameter sind 10, 100 und 1000.
- Wenn alles eingerichtet ist, führen Sie make TCserveraus und kopieren Sie die ausführbare DateiTCserver- nach /usr/local/bin
- Nur für V1.21 (R2X): auf den SLAVE, ebenfalls in /usr/local/binviascp tests/led_test pi@[SLAVE IP-Adresse]:., dann auf dem SLAVE einloggen undsudo cp TCserver /usr/local/bin
 Anschließend fügen Sie in/etc/rc.localvor der letzten Zeile (enthältexit 0)/usr/local/bin/TCserver >>&! /home/pi/LOG.TCserver &hinzu. Bei V1.21 (R2X) muß dies auf MASTER und SLAVE passieren. Damit wird TCserver beim Booten automatisch gestartet und ein Logfile erstellt.
- Wenn Sie jetzt den Roboter neu starten, sollten nach 1-2min die LED(s) kurz aufleuchten. Das zeigt an das TCserver jetzt läuft und bereit ist, Kommandos entgegenzunehmen. Ab diesem Zeitpunkt kann der Roboter via Bluetooth Controller (unter Berücksichtigung des Override) oder einer anderen Fernsteuerungssoftware gesteuert werden. Dies ist auch die Voraussetzung für die Ausführung vortrainierten Deep-Learning Modelle mit TCcontrol, was als nächstes beschrieben wird.
Installation TCcontrol
TCcontrol nimmt Echtzeit-Stereobilder entweder vom lokalen Roboter oder via WLAN entgegen, und berechnet über ein vortrainiertes Tensorflow-Lite Modell die zugehörigen Steuerbefehle, die via lokalem Socket oder WLAN wieder zum Roboter zurückgeschickt werden.
Die vortrainierten Deep-Learning Modell erfordern aus Effizienzgründen die Videoausgabe in unkomprimiertem Format und niedriger Auflösung, viele andere Fernsteuerungen erfordern allerdings aus Qualitätsgründen die Videoausgabe in komprimiertem Format (H2.64) und hoher Auflösung. Deshalb kann derzeit die Anwendung von vortrainierten Deep-Learning Modellen nur mit der Bluetooth-Controller Fernsteuerung kombiniert werden.
- Wenn Sie einen V1.3 (K3D) Roboter zusammenbauen, führen Sie die folgenden Schritte direkt auf dem RPi 3B+ am Roboter durch.
- Wenn Sie einen V1.21 (R2X) Roboter zusammenbauen, benötigen Sie einen weiteren RPi als Server (mindestens 3B+, besser 4). Wir empfehlen, diesen direkt an den WLAN-Router per Ethernet-Kabel anzuschließen damit die verfügbare WLAN-Brandbreite vollständig für die Übertragung der Robotervideos zur Verfügung gestellt werden kann.
- Der RPi sollte bereits per SSH erreichbar sein. Bitte loggen Sie sich ein. Wir gehen bei dieser Anleitung davon aus, daß Raspbian Lite installiert und WLAN konfiguriert wurde. Ein Internetzugang direkt am RPi ist für die Installation notwendig.
- Zunächst installieren wir Tensorflow Lite. Da die Installation relativ aufwendig ist und viel Zeit und Speicherplatz erfordert, verwenden wir hier eine bereits kompilierte Version.
sudo bash
cd /usr/local/src
wget https://seewald.at/files/tf1.7_rpi_lite.tar.gz
tar -xvzf tf1.7_rpi_lite.tar.gz
rm -f tf1.7_rpi_lite.tar.gz Wenn Sie eine andere Tensorflow-Light Version als 1.7 verwenden, bitte prüfen Sie ob float *probsintc_eval.ccZeile #156 geändert werden muß. Unser Einschätzung nach handelt es sich hier um einen Bug von Tensorflow Lite 1.7, der möglicherweise auch bei neuen Versionen besteht.
 
- Um die benötigten Bibliotheken zu installieren, führen Sie die folgenden Befehle aus:
sudo bash
apt-get update
apt-get install git wiringpi pigpio libncurses-dev netcat-openbsd
apt-get install libopencv-core-dev libopencv-highgui-dev libopencv-imgcodecs-dev libopencv-imgproc-dev
exit
cd /home/pi
git clone https://git.seewald.at/TCcontrol
cd TCcontrol In /home/pi/TCcontrolbefinden sich jetzt die notwendigen Programme für die Ausführung der Deep-Learning Modelle sowie die Modelle selbst.
 
- Zur Konfiguration müssen je nach Roboter die #defineEinträge im Quelltext unterschiedlich gesetzt werden.
- Für V1.21 (R2X): Öffnen Sie merge.ccund tragen Sie auf Zeile #48 und #49 die entsprechenden statischen IP-AdressenTC_SERVER_IP_LEFT, TC_SERVER_IP_RIGHTdes linken und rechten RPi Zero Ws ein. Links und rechts sind hierbei in Fahrtrichtung des Roboter zu verstehen.TEST_LOCALdarf nicht definiert sein, falls doch bitte auskommentieren. Speichern Sie die Änderungen und öffnen Sie anschließendtc_test.cc. Dort setzen Sie in Zeile #92TC_SERVER_IPauf die IP-Adresse des MASTER (d.h. dort wo der Motor Controller angeschlossen ist).TC_TEST_LOCALdarf nicht definiert sein, falls doch bitte auskommentieren. Wiederum die Änderungen speichern.
- Für V1.3 (K3D): Öffnen Sie tc_test.cc.TC_TEST_LOCALundTC_TEST_LOCAL__KULA3Dmüssen definiert sein.TC_TEST_LOCAL__CM3darf nicht definiert sein. Bitte entsprechend abändern. Die Änderungen speichern.
 
- Anschließend wird TCcontrol fertig kompiliert:
 - cd /home/pi/TCcontrol
make 
- Die Installation unterscheidet sich zwischen den zwei Robotertypen.
- V1.3 (K3D): Automatischer Start kurz nach TCserver. Bitte die folgenden Zeilen in /etc/rc.local(vorexit 0und nach/usr/local/bin/TCserver ...) ergänzen:sleep 5
cd /home/pi/TCcontrol
./runTcTest.sh K3D.tflite & 
- V1.21 (R2X): Manuelles Starten am Server, nach dem Aufblinken beider LEDs am Roboter:
cd /home/pi/TCcontrol
./runTcTest.sh R2X.tflite & Der Roboter sollte sich dann in ca. 30-60s bewegen und parallel die Statusmeldungen angezeigt werden. Alternativ kann am Server auch wie oben ./runTcTest.sh R2X.tflite &in/etc/rc.localvorexit 0ergänzt werden. Diese Methode ist allerdings nicht ausreichend getestet.
 
 Zur Steuerung via Bluetooth Controller: Per Default steuert das Deep-Learning Modell den Roboter. Nur wenn eine der Override-Tasten (definiert in TCserver.c mittels BT_BUTTON_LED_MINUSoderBT_BUTTON_LED_PLUS- bei den beiden unterstützten Controllern jeweils die L1 und R1 Tasten vorne am Controller) gedrückt gehalten wird, werden Kommandos übertragen. wenn keine Deep-Learning Modelle verwendet werden, ist diese Override-Funktion deaktiviert und Kommandos werden immer übertragen (wird in TCserver hier eingestellt). Der linke Joystick ist für die Geschwindigkeit, der rechte für die Richtung. Mittels der Tasten X bzw. □ und B bzw. ○ kann der Roboter am Stand nach links bzw. rechts drehen.
 Viel Spaß! Wenn etwas nicht so funktioniert wie es sollte,
kontaktieren Sie uns.