Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektesose19:roboclownpublic:start

Dokumentation RoGotMoves

ehem. RoboClown

Einleitung

*Lights. Camera. Action!*
Ladies and Gentlemen, we are very proud to present to you today, our dearest robot:
RoGotMoves!
Er fühlt sich auf der Bühne zuhause und zieht mit Leichtigkeit die Aufmerksamkeit auf sich. Unser Roboter schwingt im Rhythmus der Musik sein Tanzbein und protzt gern mit seinen „Moves“. Er ist in der Lage, jeden Tanzwettbewerb zu gewinnen. Er kann jedoch viel mehr als nur den üblichen Roboter-Tanz.

Sicherlich kennt ihr noch die kleinen Haustierroboter, die ihre eigene Musik spielen und dazu ihre wiederholend gleichbleibenden Tänze ausführen. Wir wollten das Ganze auf ein nächstes Level heben und einen Roboter bauen, der auf das hört, was um ihn herum passiert und individuell dazu Bewegungen vollführt. Man kann ihn letztendlich auch dazu benutzen, um zu gucken, aus welchen Tönen sich die Lieder zusammen setzen.

Mithilfe seines Ohres nimmt er die Musik wahr. Diese wird anschließend mit seinem Gehirn auf einzelne Töne heruntergebrochen. So spürt er quasi den Beat und kann sich dazu bewegen. Das macht er mit seinem außerordentlichen Hüftschwung und Armen. Außerdem wird er durch die angebrachten LEDs gleichzeitig zur Diskokugel, welche die Nacht zum Tag macht. Sie sollen seine Augen darstellen und blinken ebenfalls im Takt der Musik.

Unser Roboter ist eher zur Belustigung gedacht und hat keinen richtigen Nutzen. Trotzdem hoffen wir, dass unser Projekt für andere Gruppen interessant war und auch in Zukunft noch Laborteilnehmer anziehen wird.

Ähnliche vergangene Projekte:


Umsetzung

Unsere Projektgruppe bestand aus einem 2-Personen Team, in welchem wir die Aufgaben sehr flexibel zugewiesen haben, wobei jeder Mal an der Hardware, Software und Vermarktung gearbeitet hat.

Aufgaben

  1. Komponenten des Roboters wählen
  2. Gerüst entwickeln und bauen
  3. Schaltung entwickeln, löten und zusammenstecken
  4. Programmieren
    1. Musikverarbeitung
    2. Tanzschritte
    3. Optimierung

Ausgeklammerte Aufgaben

  • Nur aktivieren bei Lichtwahrnehmung
  • Roboter interagiert mit Nutzer oder reagiert auf Musik (Summen, Sprechen/Sprechen)
  • Halsgelenk verbauen
  • Konfettikanone
  • Mit Beinen/Rädern tanzen
  • Musik selbst spielen mit eigenen Lautsprechern

Überblick des Gesamtsystems

Abbildung 1: Der fritzing-Schaltplan vom Roboter zum Selbermachen. (Nicht blind übernehmen!)

Hauptkomponenten

Neben all den Kabeln und Widerständen gibt es noch folgende Komponenten:


Abbildung 2: Breadboard

Das Breadboard befindet sich auf dem Stepper und dient als Verbindungsstück der ganzen Elektronik. Es lassen sich sehr leicht Bauteile aneinanderstecken, ohne dass man sie zusammenlöten muss. Damit konnten wir auch mehrere Stromkreise bauen. Im oberen Teil befindet sich zwei lange Leiterbahnen, welche wir für ein 5Volt Kreis gebaut haben. Auf der gegenüberliegenden Seite das Gleiche mit einer 3V-Spannung, die man von dem Teensy selbst bekommt. Zum Schluss blieben uns 7V, die wir direkt von der Batterie bekamen.


Abbildung 3: Abwärtswandler (engl. Step-Down Converter)

Mithilfe dieses Wandlers ist es möglich, eine hohe Eingangsspannung in eine niedrigere Ausgangsspannung zu konvertieren. Das Ganze gibt es auch umgekehrt und heißt dann Aufwärtswandler, falls man eine höhere Spannung als die vorliegende braucht. Die 7V-Spannung von der Batterie war für den Teensy zu viel und deswegen mussten wir in auf 5V runterwandeln.


Abbildung 4: Teensy 3.2

Der Teensy ist genauso wie die Arduino-Reihe ein Mikrocontroller-Entwicklungssystem. Er ist auch mit der Arduino IDE programmierbar. Wir haben ihn für unser Projekt gewählt, da man mit ihm etwas mehr Rechenleistung hat und das unserem Projekt sehr zugute kam.


Abbildung 5: Servomotor

Die zwei Servomotoren befinden sich an den Seiten der oberen Holzplatte. Zusammen mit den Holzstücken dran stellen sie die Arme mit Schultergelenken dar. Wenn sie angesteuert werden, bringen sie die Arme zu einer auf und ab Bewegung.

Abbildung 6: Steppermotor und Treiber

Der Stepper liegt auf der mittleren Holzplatte und ist an der Bodenplatte festgeklemmt. Durch ihn kann der RoGotMoves eine Drehung simulieren. Der Motor wird über einen Controller-Chip/Treiber mit dem Motor verbunden. Steps sind die Einheiten, die beschreiben, wie weit der Stepper sich drehen soll. Diese bekommt der Treiber zusammen mit der Drehrichtung übermittelt und um die Ausführung kümmert er sich dann. Die Drehrichtung wird entweder durch einen positiven oder negativen Wert angegeben. Damit er nicht davonlaufen kann und um es nicht unnötig komplizierter zu machen, haben wir uns bewusst dazu entschieden, ihm keine Beine zu geben, sondern es bei einer sehr beweglichen Hüfte zu belassen.

Abbildung 7: Mikrofon

Das Mikrofon nimmt die Töne der Musik auf und sitzt auf dem Kopf des Roboters – möglichst weit entfernt von all den Geräuschen der Motoren.


Abbildung 8: Light-Emitting Diode

Die LEDs auf dem Kopf erzeugen einen Diskokugeleffekt und blinken individuell im Takt der Musik. Sie sollen die Augen darstellen.

Gerüst

aufbau.jpg
Abbildung 9: Das Innenleben des Roboters.

Der Roboter besteht neben den elektronischen Bauteilen grundlegend aus Holz. Der Kopf wurde aus Pappmaché gefertigt – also Tapetenkleister und Zeitungspapier.

Er setzt sich zusammen aus 3 Holzplatten. Unten liegt die größte Platte, auf der sich der Roboter stützt und der Stepper eingehangen wird. An diesem ist eine weitere Platte angebracht, auf denen das Breadboard liegt sowie der Akku. Über zwei stützende Holzpfeiler geht es zur kleinsten und letzten Platte. In der Mitte von ihr befindet sich ein Loch, wodurch die Kabel für die LEDS, die Servomotoren und das Mikrofon verlegt wurden. Auf der obersten Platte wurden die Servomotoren und der Kopf angebracht.

Programm

FFT - Fast-Fourier-Transformation

Da wir mit Tönen allein, so wie sie das Mikrofon aufnimmt, nicht arbeiten können, muss der Teensy sie in die einzelnen Frequenzen zerlegen, aus denen sich der Ton zusammensetzt. Das bedeutet, dass bei hohen Tönen auch viele hohe Frequenzen herauskommen oder hohe Frequenzen mit hoher Intensität. Nur wenn es ein reiner sinusförmiger Ton wäre, dann würde das Geräusch aus nur einer Frequenz bestehen. Sehr hilfreich dabei sind Bibliotheken, die einem die FFT zur Verfügung stellen. Dank dieser Transformation, werden einem in einem Array alle Frequenzen mit ihrer Intensität ausgegeben. Die Indizes (Positionen der Felder) dieser Arrays stehen dabei für ein Bin (engl. „Behälter“). In diesem Bin werden alle Frequenzen aus einem Frequenzbereich gepackt. Der für den Menschen hörbare Frequenzbereiche begrenzt sich auf 20 Hz bis 20.000 Hz. Wie groß diese Frequenzbereiche der Bins sind, lässt sich mit Variablen anpassen.

Abbildung 10: Rot: Der eingehende Ton | Blau: Das resultierende Array aus der mathematischem Funktion/der Transformation

Speziell in unserem Programm kommt nach der FFT erst einmal eine for-Schleife, die das ganze Array durchläuft und dabei den Wert des aktuellen Bins mit unserem Grenzwert vergleicht. Dies tun wir, um zu gucken, ob es laut genug ist, damit es als Ton gilt. Danach kommt noch die Abfrage, ob der Wert in dem jeweiligen zugeteilten Frequenzbereich für das Körperteil liegt. Wenn beides mit ja beantwortet werden kann, dann führt das Körperteil einen Tanzschritt aus. Danach beginnt das ganze von vorne, bei dem Ausführen der Fast-Fourier-Transformation, welche wiederum ein neues Array zurückgibt.

Da diese sehr aufwendig ist, kann sie nur wenige Male in der Sekunde passieren. Bei uns schaffen wir ungefähr 5 Durchläufe in der Sekunde, was heißt, dass wir ungefähr 200ms brauchen, um wieder ein aktuelles Array von dem Lied zu bekommen.

Die Frequenzbereiche werden prozentual zu dem ganzen Frequenzbereich genommen. Beispielsweise ist die Bibliothek so eingerichtet, dass sie die Frequenzen von 0 bis 4000Hz wahrnimmt und sie in 256 Bins aufteilt. Das heißt, dass es ungefähr 4000/256≈16 Frequenzen pro Bin sind. Wenn nun ein Arm oder ein Auge aktiviert wird, sobald im ersten 5tel des Arrays ein lauter Ton vorkommt, dann sind ihm 0,2*256≈51 Bins zugeordnet. Also ist dieses Körperteil für die Frequenzen von 0 bis 51*16=816 verantwortlich.

Tanzschritte

Generell wird bei einem Tanzschritt zwischen 2 Modi gewechselt. Sobald der Roboter eine Frequenz wahrnimmt, die lauter ist als der festgelegte Grenzwert, der im höheren 100er bis 1000er Bereich liegt, wird geprüft, ob sie außerdem auch in dem, für das Körperteil zuständige Frequenzbereich liegt. Wenn diese 2 Bedingungen erfüllt sind, dass wechselt der Roboter den Modus. Bei der LED zum Beispiel von an zu aus und bei dem Servomotor von Winkel α zu Winkel β.

/* SAMPLES = Anzahl der Bins */
    boolean hear = val[i]>600;         //wie laut muss der Bin sein, um zu reagieren?
    if(i<SAMPLES*1/3 && hear) {        //wenn Frequenz im unteren Drittel und hear==true
      switch(led1[1]) {
        case 0:                        //wenn LED gerade aus
          digitalWrite(led1[0], HIGH); //LED geht an
          led1[1] = 1;                 //diese Variable gibt den LED-Zustand an (1=an)
          break;
        case 1:                        //wenn LED gerade an
          digitalWrite(led1[0], LOW);  //LED geht aus
          led1[1] = 0;                 //(0=aus)
          break;
       }
    }

Ergebnis

Wir haben in den 2 Monaten auf jeden Fall viel geschafft und haben äußerlich unser gesetztes Ziel erreicht, auch wenn er nicht ganz wie in der obersten Abbildung aussieht.

Auch im Inneren sind wir sehr weit gekommen und mit der Hardware sogar fast fertig geworden. Den Stepper haben wir leider nicht zum Laufen gebracht. Eventuelle Fehlerquellen sind eine falsche Spannung, ein defekter Motor oder falsche Einstellungen des Steppers im Code.

An dem Programmieren haben wir uns am längsten aufgehalten und dort befindet sich auch noch das größte Verbesserungspotential. Dadurch, dass die FFT nicht sehr schnell ist, kann der Roboter auch nur bedingt schnell auf die Musik reagieren. Man merkt in dem Video wahrscheinlich auch, dass er nicht ganz live tanzt, sondern etwas verzögert. Hier könnte man auf einen schnelleren Prozessor zurückgreifen, indem man einen Raspberry Pi nimmt.

Etwas Feintuning könnte der Code sicherlich noch gebrauchen, wie etwa der Grenzwert/die Lautstärke, ab der die Körperteile anfangen sich zu bewegen. Man könnte sich auch ein Konzept überlegen, bei dem Frequenzen, die durchgehend auftauchen, eliminiert werden und somit speziell auf Veränderungen geachtet wird. Darüber würde man dann sicherlich auch die Schläge pro Minute (BPM engl. beats per minute) herausfinden, welche ein wichtiger Bestandteil eines Tanzes sind. Doch unser Roboter konnte auch beweisen, dass selbst ohne BPM eine Art Tanz zustande kommen kann.

Video/Vorführung

Abbildung 11: Kleiner Einblick zu unserem Resultat.

Code-Download

Unseren Code zusammen mit der Bibliothek erhaltet ihr hier.

Quellen

Abbildung 1: Erstellt mit fritzing.
Abbildung 10: Kopiert aus Wikipedia/Frequency domain.
Abbildung 11: Getestet mit Song YouTube/"Next Level" - Freestyle Trap Beat Free Rap Hip Hop Instrumental 2018 | SeriouzBeats.
Abbildung 11: Verwendete App Google Playstore/Frequencygenerator
Code 12: FFT-lib von GitHub/arduinoFFT

projektesose19/roboclownpublic/start.txt · Zuletzt geändert: 2019/09/29 22:41 von d.golovko