Anki OVERDRIVE SDK

Anki OVERDRIVE SDK

 05.01.2016 -  Sebastian Pech -  ~3 Minuten

Nachdem ich das Anki OVERDRIVE Starter Kit und die ganzen Autos und Erweiterungen ausprobiert hatte, packte mich natürlich die Neugier eines Entwicklers. Der Anki Support hat mich mit vielen Informationen versorgt. Wie ich das Ganze mit dem Raspberry Pi verbinde und was noch damit möglich ist erkläre ich in diesem Beitrag.

Die Technik von Anki OVERDRIVE

Ein YouTube Video von Anki erklärt grob „Wie funktioniert Anki OVERDRIVE?“ Weiterführende Informationen und eine tiefer-gehende Erklärung sind dort aber nicht zu entnehmen. Die folgenden Angaben habe ich im Wesentlichen durch ein paar Experimente und Dokumentationen ermitteln können. Alle Aussagen ohne Gewähr 😉

Infrarot

Werden die Streckenteile unter Infrarotlicht gehalten, lässt sich die tatsächliche Magie der Fahrzeuge entdecken. Im Infrarotlicht tauchen Linien und Barcodes auf. Diese lesen die Autos mit ihren Kameras aus (laut Video 500x/sek.). Dabei scannt die Kamera auf der Unterseite die Fahrbahn und analysiert die Codes. Hinter dem Bardcode liegen Identifikationen und Informationen darüber, wie die Autos sich verhalten sollen im Bezug auf die Geschwindigkeit.

Kommunikation

Die Kommunikation mit den Autos funktioniert mittels Bluetooth. Die Anki Macher haben dazu ein SDK erstellt. Die Anki OVERDRIVE App spricht mit anderen Teilnehmern über die W-LAN Verbindung des Smartphones. Die tatsächliche Intelligenz des Spiel ist vollständig in der App abgebildet. Das SDK erlaubt rudimentäre Befehle wie das Wechseln der Spur und Drehungen. Alle Waffen und Upgrades existieren nur virtuell in der Applikation.

SDK und Raspberry Pi

Auf GitHub stellt Anki das anki/drive-sdk Repository bereit. Der dort enthaltende Code lässt sich auf einem Raspberry Pi kompilieren. Eine kurze Anleitung ist vorhanden. Mit Hilfe der Testprogramme konnte ich die Fahrzeuge scannen. Die hinterlegten Fahrzeuge sind aus dem alten Anki Set, die neuen OVERDRIVE IDs sind noch nicht codiert.

$ sudo ~/anki/drive-sdk/build/dist/bin/hciconfig hci0 up
$ sudo ~/anki/drive-sdk/build/dist/bin/vehicle-scan
LE Scan ...
C1:4A:82:93:CE:38 Drive [v266e] (Unknown cb02)
E5:A2:3D:0C:DB:82 Drive [v266e] (Unknown d8e0)

Der Erste Code ist von „Skull“, der zweite Eintrag ist bei mir „Ground Shock“. Eine Verbindung ist leider noch nicht möglich (dies liegt aber vermutlich an meiner Bluetooth Konfigurationen).

$ sudo ~/anki/drive-sdk/build/dist/bin/vehicle-tool --adapter=hci0 --device=E5:A2:3D:0C:DB:82
[E5:A2:3D:0C:DB:82][LE]> connect
Attempting to connect to E5:A2:3D:0C:DB:82
Error: connect: Connection refused (111)

Für die Analyse habe ich mir BlueZ selber gebaut .

sudo apt-get --purge remove bluez
sudo apt-get update
sudo apt-get install libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev
sudo wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.37.tar.xz
sudo tar xvf bluez-5.37.tar
cd bluez-5.37
sudo ./configure --disable-systemd
sudo make
sudo make install
sudo cp attrib/gatttool /usr/local/bin/
sudo reboot
$ sudo /etc/init.d/bluetooth stop
$ sudo ./bluez-5.37/tools/hciconfig hci0 up
$ sudo ./bluez-5.37/tools/hciconfig hci0

$ sudo ~/bluez-5.37/tools/hcitool lescan
E5:A2:3D:0C:DB:82 (unknown)
E5:A2:3D:0C:DB:82 n&    Drive
$ sudo ~/bluez-5.37/tools/hcitool  lecc E5:A2:3D:0C:DB:82
Could not create connection: Input/output error
$ sudo ~/bluez-5.37/attrib/gatttool -i hci0 -b C1:4A:82:93:CE:38 -t random -I
[C1:4A:82:93:CE:38][LE]> connect
Attempting to connect to C1:4A:82:93:CE:38
Error: connect: Connection refused (111)

MORE: COMING SOON! In diesem Artikel 🙂

Update: Artikel aus dem Netz zu der Technologie hinter Anki. Leider gibt es die Original Blogeinträge nicht mehr.

Patente für Anki, Inc. (Skizzen)

TNW News: Anki Drive reveals ‘secret’ about the track technology which guides its AI-controlled cars

VB: Anki Overdrive will overhaul the robot battle-car racing game with customizable tracks

TEST: ToDo: Neubau mit

http://stackoverflow.com/questions/32947807/cannot-connect-to-ble-device-on-raspberry-pi
I had to disable the plugin pnat in /etc/bluetooth/main.conf -> DisablePugins=pnat. I read that it's unstable, but I don't know much about this plugin.