Dies ein Artikel der Animatronic WorkBench Dokumentation
Bei der Einrichtung eines Projektes stehen folgende Einstellungen zur Verfügung:
- Metadaten: Name, Beschreibung und WLAN-Passwort des Projektes bearbeiten.
- Werte-Editor: Hier können einzelne Werte von Servos, Aktoren oder dem Projekt selbst bearbeitet werden.
- ESP32 Konfiguration: Hier können die Einstellungen des ESP32-Microcontrollers vorgenommen werden, der die Bewegungen der animatronischen Figuren steuert. Dazu gehören die Konfiguration der seriellen Schnittstelle für STS/SCS-Servos, die Konfiguration des PWM-Controllers für PWM-Servos und die Konfiguration des NeoPixel-Busses für RGB-LEDs.
- Hardware hinzufügen und konfigurieren: Hier können neue Hardware-Komponenten zum Projekt hinzugefügt und konfiguriert werden. Dazu gehören STS/SCS-Servos, PWM-Servos, NeoPixel und Inputs.
- Timeline States: Hier können neue Timeline States erstellt und bestehende bearbeitet werden. Timeline States sind Kategorien für Timelines, die Bewegungen der animatronischen Figuren gruppieren.
Servos
Animatronische Figuren bestehen in der Regel aus mehreren Servos, die die Bewegungen der Figur steuern. Diese Servos können entweder über eine serielle Schnittstelle (STS/SCS-Servos) oder über ein PWM-Signal (PWM-Servos) angesteuert werden.
Um dem Projekt einen Servo hinzuzufügen, kickt man auf den (+)-Button beim entsprechenden Servo-Typ (hier als Beispiel ein ST-Servo):
Bei jedem Servo muss angegeben werden, wie weit er sich im Rahmen der animatronischen Figur bewegen kann.
Dazu werden folgende Werte benötigt:
- höchste Position: Die höchste Position des Servos, die er erreichen kann.
- niedrigste Position: Die niedrigste Position des Servos, die er erreichen kann.
- Standard Position: Die Position, in der der Servo zu Beginn der Animation stehen soll. Dies ist in der Regel die Mitte des Bewegungsbereichs des Servos, kann aber auch eine andere Position sein, wenn der Servo nicht in der Mitte stehen soll.
Bei den niedrigsten und höchsten Positionen geht es nicht zwingend darum, die kleinsten und höchsten Zahlenwerte zu verwenden. Hoch und Tief bezieht sich hierbei eher auf die Darstellung in der Timeline und idealerweise auch auf die physische Position des Servos. Bei einem Servo, der den Unterkiefer einer Figur bewegt, wäre die höchste Position zum Beispiel die Position, in der der Unterkiefer ganz oben ist und die niedrigste Position die Position, in der der Unterkiefer ganz unten ist. Die reinen Zahlenwerte könnten dabei ganz entgegengesetzt z.B. 800 für ganz unten und 150 für ganz oben sein.
Sofern der Servo das unterstützt, kann über den Button (4) auch die aktuelle Position des Servos abgefragt werden. Diese wird dann automatisch in den Feldern (1) bis (3) eingetragen.
ST / SC Servos
Servos vom Typ STS und SCS sind spezielle Servos, die über eine serielle Schnittstelle angesteuert werden. Solche seriellen Bus-Servos haben den Vorteil, dass man sie nicht sternförmig verkabeln muss, sondern einfach hintereinander an den Bus hängen kann. Gleichzeitig können sie auch ihren Zustand (aktuelle Position, Temperatur, Drehmoment) melden, statt nur die Zielposition zu empfangen. Sie sind nicht kompatibel zu klassischen Modellbau-Servos, die über PWM angesteuert werden. Bekannte Anbieter von ST/SC-Servos sind zum Beispiel WaveShare oder Feetech. Bei ST-Servos kann (im Gegensatz zu SCS) neben de Geschwindigkeit auch die Beschleunigung eingestellt werden.
Serielle Servos können in der Konfiguration des Projektes hinzugefügt werden. Gleichzeitig muss dazu in den Einstellungen des ESP32-Microcontrollers der serielle Bus durch Angabe der GPIO Pins für RX und TX konfiguriert werden.
PWM Servos
PWM-Servos sind klassische Modellbau-Servos, wie sie bereits seit den 1970er Jahren eingesetzt werden. Sie werden über einen PWM-Signal angesteuert, das die Zielposition des Servos angibt. Die Position wird dann durch die Pulsweite des Signals bestimmt und jeder Servo muss mit einem eigenen Kabel direkt mit dem Controller verbunden werden.
Um PWM-Servos zu verwenden, muss ein PWM-Controller angeschlossen und dieser in den Einstellungen des ESP32-Microcontrollers aktiviert werden.
NeoPixel
Um eine animatronische Figur auch mit Lichteffekten zu versehen, können RGB-LEDs verwendet werden. Diese LEDs können einzeln angesteuert werden und so zum Beispiel eine Lauflicht oder eine Farbwechselanimation erzeugen. Die Ansteuerung erfolgt über einen digitalen Bus, der von einem Controller (zum Beispiel einem ESP32) angesteuert wird.
Um NeoPixel zu verwenden, muss in den Einstellungen des ESP32-Microcontrollers der GPIO-Pin angegeben werden, an den der Data-In-Pin der ersten LED angeschlossen ist.
Inputs
Einzelne PIns des ESP32 können als Inputs konfiguriert werden, um zum Beispiel Schalter oder Sensoren anzuschließen. Inputs können in den Timelines als Bedingungen verwendet werden, um zum Beispiel eine Bewegung nur dann auszuführen, wenn ein Schalter betätigt wird oder eine Person vor der Figur steht und den Bewegungsmelder auslöst.
Praktisch funktioniert dies so, man pro Timeline-State angeben kann, welche Inputs aktiv sein müssen, damit die Timelines dieses States abgespielt werden. Gleichzeitig kann man pro Timeline angeben, bei welchen aktiven Inputs ein Timeline-State nicht aktiviert wird.
Klingt kompliziert? Nehmen wir mal ein praktisches Beispiel:
Mein animatronischer Grogu kann entweder am dem Tisch stehen oder in der Umhängetasche stecken. In der Tasche soll er nur Bewegungen machen, bei denen die Arme hoch gehoben sind, da sie sonst beschädigt würden. Auf dem Tisch soll er die Arme runter hängen lassen.
Dazu habe ich eine Anzahl Timelines erstellt, bei denen die Arme oben sind und andere mit den Armen unten. Gleichzeitig hat das Projekt zwei Timeline-States bekommen, nämlich "InTasche" und "Stehen", denen die Timelines entsprechend zugewiesen wurden.
Nun kommt der Input ins Spiel: Dazu hat Grogu einen geheimen Schalter, den man ein- und ausschalten kann. Der Timeline-State "InTasche" hat diesen Schalter als positiven Input eingestellt bekommen und der Timeline-State "Stehen" als negativen Input. Das bedeutet, dass bei aktiviertem Schalter nur die Timelines mit den Armen oben abgespielt werden und bei deaktiviertem Schalter nur die Timelines mit den Armen unten.
Timeline States
Bewegungen der animatronischen Figuren werden in Timeline gespeichert. Eine Timeline kann einem Timeline State zugeordnet werden, den man als so etwas wie ein Thema oder eine Rubrik ansehen kann.
Beispiele für Timeline States könnten "Sitzen", "Schlafen" oder "Stehen" sein. Über den Timeline State "Schlafen" kann man somit alle Timelines finden, die eine Schlafbewegung enthalten.
Bei einem neuen Projekt sind folgende Timeline States bereits vorausgefüllt:
- "Default" - Standard-Timelines
- "DontExport" - Timelines, die nicht exportiert werden sollen. Das können Timelines sein, die noch nicht ganz fertig sind oder die als "Nested Timelines" in andere Timelines hinein gestempelt werden.
Die vorausgefüllten Timeline States sind aber nur Vorschläge und beliebig umbenannt oder gelöscht werden.