Firmware, Bluetooth-Brücke und Agent-Skill für den KOSMOS-Proxi: einmal flashen, danach hört der Roboter über Bluetooth LE auf Textbefehle. Was die Befehle schickt, ist ihm egal — ein Skript, ein curl, oder ein KI-Agent, der aus "mach mal was Lustiges" eine Choreografie baut. firmware/ MakeCode-Projekt (TypeScript) und fertige .hex für V1 und V2 bridge/ BLE-Brücke und HTTP-API, einzige Abhängigkeit ist bleak agent/ Skill-Definition: Alltagssprache -> Befehle tools/ Quelltext aus .hex extrahieren, Musik-Tabellen prüfen docs/ Protokoll, Einrichtung, Hardware, Lizenzen Zwei Dinge, die sonst nirgends stehen und in docs/HARDWARE.md dokumentiert sind: die Pin-Belegung des Roboters ist nicht öffentlich, sie wurde aus den mitgelieferten .hex-Dateien rekonstruiert (tools/hex_source.py holt sie heraus). Und der Ton braucht zwingend eine ganzzahlige Frequenz sowie Pin P0 — sonst kracht der Lautsprecher, der Aufruf hängt und die Bluetooth- Verbindung stirbt. Am echten Roboter durchgetestet: Verbindung, Sensoren, Display, 41 Sekunden Musik am Stück, alle Bewegungsrichtungen, Musik und Fahren gleichzeitig, Tanzfiguren, Not-Stopp mitten in der Bewegung, Autostart nach Neustart. MIT-Lizenz. Die Hardware-Extension stammt von kaku111 (TobbieII) und die Notendaten aus pxt-microbit, beide ebenfalls MIT — siehe THIRD-PARTY-NOTICES.
84 lines
1.3 KiB
Plaintext
84 lines
1.3 KiB
Plaintext
# nyan-dance.txt — Choreografie zu MELODY:NYAN (16 s)
|
|
#
|
|
# python3 proxi_bridge.py --script nyan-dance.txt
|
|
#
|
|
# Getanzt wird ausschließlich mit MOVE und TURN, nicht mit DANCE/STAMP/SHAKE:
|
|
# die teilen sich mit MELODY denselben Worker und würden erst NACH der Melodie
|
|
# loslaufen. MOVE und TURN laufen dagegen parallel zur Musik.
|
|
#
|
|
# Die WAIT-Zeiten sind um 150 ms kürzer als der Schritt davor — so lange
|
|
# braucht die Brücke selbst zwischen zwei Befehlen.
|
|
|
|
FACE:FABULOUS
|
|
MELODY:NYAN
|
|
WAIT:300
|
|
|
|
# 1. Groove von einer Seite zur anderen
|
|
TURN:LEFT:400
|
|
WAIT:300
|
|
TURN:RIGHT:400
|
|
WAIT:300
|
|
TURN:LEFT:400
|
|
WAIT:300
|
|
TURN:RIGHT:400
|
|
WAIT:300
|
|
|
|
# 2. Vor und zurück im Takt
|
|
FACE:SURPRISED
|
|
MOVE:FWD:550
|
|
WAIT:470
|
|
MOVE:BWD:550
|
|
WAIT:470
|
|
MOVE:FWD:550
|
|
WAIT:470
|
|
MOVE:BWD:550
|
|
WAIT:470
|
|
|
|
# 3. Kurve — laufen und drehen gleichzeitig
|
|
FACE:HAPPY
|
|
MOVE:FWD:0
|
|
TURN:LEFT:800
|
|
WAIT:750
|
|
TURN:RIGHT:800
|
|
WAIT:750
|
|
MOVE:STOP
|
|
|
|
# 4. Schnelles Wackeln
|
|
FACE:SILLY
|
|
TURN:LEFT:220
|
|
WAIT:130
|
|
TURN:RIGHT:220
|
|
WAIT:130
|
|
TURN:LEFT:220
|
|
WAIT:130
|
|
TURN:RIGHT:220
|
|
WAIT:130
|
|
TURN:LEFT:220
|
|
WAIT:130
|
|
TURN:RIGHT:220
|
|
WAIT:130
|
|
|
|
# 5. Stampfen
|
|
FACE:FABULOUS
|
|
MOVE:FWD:200
|
|
WAIT:110
|
|
MOVE:BWD:200
|
|
WAIT:110
|
|
MOVE:FWD:200
|
|
WAIT:110
|
|
MOVE:BWD:200
|
|
WAIT:110
|
|
MOVE:FWD:200
|
|
WAIT:110
|
|
MOVE:BWD:200
|
|
WAIT:110
|
|
|
|
# 6. Große Schlussdrehung
|
|
FACE:HEART
|
|
TURN:LEFT:1300
|
|
WAIT:1250
|
|
TURN:RIGHT:1300
|
|
WAIT:1250
|
|
STOP
|
|
FACE:HEART
|