Homepage
Die Liesmich Datei zum Projekt - enthalten im Paket
11 Sep 2017 18:40
Das Projekt



Verwandte Themen:
Related topics:


FAQ Häufige Fragen
Hardware von Bechele 2
LIESMICH Datei
Software von Bechele 2
Wie fuktionierts - die Übersicht

Das ist die Dokumentation zum Projekt bechele.de
Weitere Infos unter www.bechele.de
Autor Rolf Jethon

bechele.de ist ein Raspberry Pi Projekt, das es ermoeglicht Bewegungsmodelle wie
Handpuppen, Tanzpuppen, oder Tierroboter mit gleichzeitiger Ausgabe von 
Audiodaten zu erstellen und ohne Programmierarbeit mit Leben zu befuellen. 

Anstatt des RasperryPi kann auch ein OrangePi PC verwendet werden - hierzu gibt
es ein separates Image.

Alle dazu notwendigen Scripte liegen im Verzeichnis /usr/local/bin

Grundlagen:
Um einen Bewegungsroboter synchron zu Musik oder Sprache zu bewegen, ist es 
notwendig, die Bewegungen nach Fertigstellung der Sprach oder Musikdateien auf 
irgend eine Art dem Ton anzupassen. Im Projekt geschieht dies durch einen 
Kreuzknueppel der von Hand synchron zum Ton bewegt wird. Gleichzeitig werden 
die soeben aufgenommenen Bewegungen auf Servos uebertragen, die eine Kontrolle 
der Bewegungseingabe waehrend der Aufnahme ermoeglichen. Die Zahl der Aufnahme 
und Abspielkanaele ist projektbedingt auf maximal 16 beschraenkt. Im Falle der 
Puppe Herrn Bechele wurden lediglich vier Servos verwendet. Diese Beschraenkung 
ist hier aber rein zufaellig und natuerlich nicht zwingend: Ein Servo fuer die 
Augenbewegung links-rechts, ein Servo fuer die Augenbewegung auf-ab ein Servo 
In einem fast fertigen Folgeprojekt verwende ich 8 Servos. Fuer die
Augenlidbewegung und ein Servo fuer die Mundbewegung. Da mit einem 
Kreuzknueppel jeweils nur zwei Kanaele augenommen werden koennen, muss die 
Aufnahme der Bewegungen nacheinander erfolgen. Im Fall von Herrn Bechele begann 
ich zunaechst mit der Mundbewegung entsprechend der Sprach-Audiodatei (MP3). 
Weil Mundbewegungen sehr schnell ablaufen und volle Konzentration erfordern um 
es einigermassen synchron zu schaffen, wurde bei der Aufnahme zunaechst nur ein 
Kanal verwendet, obwohl eigentlich zwei zur Verfuegung gestanden haetten. Danach
nahm ich die Augenlidbewegung auf, ebenfalls mit nur einem Kanal und danach die 
Augenbewegung mit zwei Kanaelen gleichzeitig. Die Audiodaten waren in einzelne 
kurze Abschnitte unterteilt, um dem dem Puppenspieler in den Sprechpausen zu 
ermoeglichen zu Antworten. Nach Beendigung der Aufnahmen, koennen dann 
Audiodaten und Bewegungen schrittweise (MP3 Datei fuer MP3 Datei) per 
Tastendruck abgespielt werden, so dass im Fall der Handpuppe der Eindruck 
entsteht, die Puppe redet wirklich mit dem Puppenspieler.

Arbeitsweise: Ein Bewegunssatz besteht immer aus einer MP3 Tondatei und einer
svo Datei, die die Bewegungspositionen fuer die Servos enthaelt. 
Optional kann noch eine Textdatei gleichen Namens existieren, die Texthinweise
fuer den Puppenspieler enthaelt - fuer den Fall dass Dialoge gewuenscht sind
und der Text nicht vollstaendig auswendig gelernt werden soll. Der Text wird 
dann waehrend dem Ablauf auf dem Terminalbildschirm angezeigt, von dem das 
Abspielprogramm gestartet wurde.

In der ersten Version des Projekts wurden Positionen des Steuerknueppels direkt
an die Servos weitergegeben. Dabei musste der Wertebereich des Steuerknueppes
genau mit dem der Servos uebereinstimmen. Dies hatte folgende Nachteile:
- Es musste der gesamte Bewegungsbereich des Servos mechanisch moeglich sein.
- Unterschiedliche Servotypen liessen sich nicht kombinieren, wenn die Servo-
  parameter abwichen. 
- Bei Veraenderungen der mechanischen Parameter des Servos oder des Steuer-
  knueppels war eine mechanisch neukalibration notwendig.
- Mechanische Veraenderungen erforderten ein neues Aufnehmen der betroffenen
  Bewegung.
Aus diesem Grund werden aktuell sowohl Steuerknueppelbewegungen als auch Servo-
bewegungen entsprechend ihrer mechanischen Grenzen auf einen Wertebereich von
0-4096 durch die Konfigurationsdatei ConfigL.pm parametrisiert und normalisiert. 
War Beispielsweise die Mundbewegung einer Puppe so realisiert dass nur 2/3 des
moeglichen Winkelbereichs des Servos ausgenutzt wurden und wird nach einem 
mechanischen Umbau nur noch die Haelfte genutzt, so koennen durch eine neue 
Parametriesierung des betroffenen Servoparameters die bestehenden 
Bewegungsdateien ohne Aenderung weiter genutzt werden. Das selbe gilt, wenn sich
der Steuerknueppel veraendert. 
Die Positionen von 0-4096 in einer Bewegungsdatei umfassen also den gesamten
tatsaechlichen mechanisch moeglichen Bewegungsbereich des Servos im Modell. 
Der Servo - vorausgesetzt korrekt parametrisiert - versucht also nie seine 
mechanischen Grenzen zu ueberfahren.  
------------------------------------------------------------------------------
Installation:
Am einfachsten ist, die Software samt dem dazugehoerigen Image auf die SD
Karte zu schreiben. Wer selbst installieren moechte, soll sich am besten auf
einen laengeren Installationsmarathon gefasst machen. 

Den Tarball im Verzeichnis / (root) der Distribution entpacken.
Leider muessen je nach Linux Distribution noch einige Programme nachinstalliert 
werden. Wie diese installiert werden verraet die Doku der jeweiligen Distrbution

zu installieren ist:   
   cpanminus (erforderlich)
   WiringPi (erforderlich fuer Rasperry Pi)
   git (erforderlich fuer OrangePi)
   make (erforderlich fuer OrangePi)
   gcc (erforderlich fuer OrangePi)
   WiringOP (erforderlich fuer Orange Pi -zu installieren mit:
      git clone https://github.com/zhaolei/WiringOP.git -b h3
      danach > cd WiringOP < und anschließend > ./build <)
      nun > echo '/usr/local/lib' >> /etc/ld.so.conf.d/randomLibs.conf <
      und > ldconfig <
      testen mit > gpio readall < alle gpios sollten angezeigt werden
      )
   alsa-utils (erforderlich)
   mpg123 (erforderlich)
   i2c-tools (erforderlich)
   perl 5 (vermutlich vorinstalliert - erforderlich)
   perl-device-serialport (erforderlich)

Weiterhin sind einige Perl Module zu installieren - Am einfachsten geht das mit 
cpanminus 
Viele Module benoetigen wiederum andere Module, so dass die Installation einige
Zeit dauern kann. 

 PERL MODULE:
   strict
   Curses::UI
   WiringPi::API (Version 1.05 - fuer Orange Pi PC laeuft die aktuelle Version 
   nicht); installieren mit: 
cpanm https://cpan.metacpan.org/authors/id/S/ST/STEVEB/WiringPi-API-1.05.tar.gz
   File::Find::Rule
   Device::PWMGenerator::PCA9685
   Audio::Play::MPG123
   Time::HR
   ConfigL        ( Ist Bestandteil vom Tar Ball und muss nicht installiert werden )

Nach der Installation sind die Parameter einzurichten - siehe Sektion 
Einrichtung.

------------------------------------------------------------------------------
Programme und ihre Fuktionen:

trackui.pl:
  Dieses Programm verarbeitet auf Anforderung alle MP3 Dateien aus dem 
  Verzeichnis, das beim Programmstart als Parameter angegeben wurde.  
  Zur vereinfachten Bedienung wurde eine quasi grafische Benutzeroberflaeche 
  verwendet (curses), die auch ueber ein Terminalprogramm (z.B. putty) 
  funktioniert.
  
  Je nach Komplexitaet eines Modells oder einer Puppe werden Bewegungen 
  grundsaetzlich nacheinander erfasst. Kaum einer wird alle Servos auf einmal
  so steuern koennen dass ein stimmiger Bewegungsablauf entsteht.
  Durch die Benutzeroberflaeche ist es moeglich die Bewegungsablaeufe zu 
  kombinieren. Beispielsweise koennen mehrere Servos gleichzeitig genau die
  selbe Bewegung ausfuehren. Die Bewegungstteuerung einer Servogruppe kann 
  einer Steuerknueppelrichtung zugeordnet werden. Dies ist beispielsweise 
  notwendig, wenn eine Puppe separate Servos fuer jedes Auge hat. Man moechte
  nun sicher nicht jedes Augenlid extra aufnehmen, weil sich normalerweise 
  Lider simultan bewegen.    
  Durch Kopplung der beiden Servos kann der Grossteil der Aufnahme vorgenommen
  werden. Soll nun kurzfristig nur ein Lid bewegt werden, so kann man in einen 
  nachfolgenden Aufnahmezyklus die abweichende Bewegung erfassen, indem nur ein
  Teilbereich der Gesamtaufnahmeschritte definiert wird. Je nach dem, wie viele
  Servos zum Einsatz kommen, koennen beliebig viele Aufnahmedurchgaenge gemacht
  und eventuell widerholt werden, bis das Bewegungszusammenspiel zum Ton passt.

  Bedienelemente am Joystick:
  Taste rechts - startet Aufzeichnung oder Abspielvorgang (Trigger) 
  Taste links - beendet Aufzeichnung oder Abspielvorgang und kehrt zum Menue
  zurueck.
   
  Bedienelemente trackui.pl:
  Sektion File:
  hier wird die Datei festgelegt, die bearbeitet wird. Normalerweise wird man 
  die beim Programmstart durch das Verzeichnis vorgegebenen Dateien 
  nacheinander abarbeiten. Durch << Prev Next >> kann man sich im Verzeichnis 
  bewegen. Voraussetzung ist immer eine MP3 Datei, fuer die eine zugehoerige
  .svo (servo) Datei erzeugt oder bearbeitet wird. Existiert bereits eine .svo
  Datei kann diese ausgegeben oder auch ueberarbeitet werden. Mit dem 
  Pfeiltasten wird in Schritten von 10 Dateien gesprungen. Das ist dann 
  hilfreich, wenn man gezielt eine Datei ansteuern will, denn Loesungsbedingt 
  lassen sich Einzeldateien nicht oder nur umstaendlich bearbeiten.
  Save speichert die Servodatei schliesslich ab.

  Sektion Channel X:
  Hier werden die Servos aktivert, die beim folgenden Aufnahmedurchgang durch
  die X-Richtung des Steuerknueppels erfasst werden sollen. (Dies ist meist 
  nur ein Servo, es koennen aber auch mehrere selektiert werden, die dann 
  simultan bewegt und erfasst werden).

  Sektion Channel Y:
  Wie Channel X, nur wird hier die Y-Richtung des Steuerknueppels zur 
  Steuerung verwendet.

  Track Sets:
  Ein Track umfasst all Bewegungstufen die einer MP3 Abspieldauer entsprechen.
  In der Standardeinstellung werden Bewegungen in Abstaenden von 50 ms 
  erfasst. Eine 20 Sekunden lange MP3 Datei beinhaltet also 400 Bewegungs-
  eckpunkte. 
  Start at set: Ist der Startzeitpunkt der Aufnahme in 50 ms Schritten.
  Stop at set: ist der Stopzeitpunkt in 50 ms Schritten.
  Die Checkbox Update aktiviert bewirkt dass nach dem Laden oder nach der 
  allerersten Aufnahme die Zeitpunkte automatisch ermittelt werden. 
  Die Checkbox Full range erlaubt unabhaengig von den Feldwerten in Start und
  Stop die gesamte Bewegungsdauer aufzunehmen oder abzuspielen. 

  Status:
  Hier werden nuetzliche Programmeldungen angezeigt.

  Process:
  Record startet eine Aufnahme entsprechend der Servoaktivierung. Nicht 
  aktivierte Servos werden nur abgespielt. Sind alle Servos deaktiviert 
  enspricht dies "View".   
  View gibt eine MP3 mit Bewegungsablaeufen nur aus.
  
  Beenden kann man das Programm mit Ctrl-Q

live.pl
  Dieses Programm spielt zur Vorstellungszeit die Tondateien nebst den 
  aufgenommenen Bewegungen ab. Die Sortierung der Dateiabfolge erfolgt nach ASCII 
  Folge. 
  
  Das Programm wird lediglich mit den vier Tasten des Steuerkopfes kontrolliert
  Der Kreuzknueppel wird zur Wiedergabe nicht benoetigt und ist normalerweise
  ausgesteckt.

  Taste 1 :
  Start der ersten Sequenz oder weiterschalten zur naechsten Sequenz.

  Taste 2 :
  Start der vorigen Sequenz.

  Taste 3: Wiederholden der Sequenz mit Ausgabe des Wiederholungsprefixsequenz
  aus Verzeichnis "repeat" des Ausgabeverzeichnisses. Sind mehrere Sequenzen
  dort gespeichert, wird bei jeder Wiederholung die nachfolgende Sequenz 
  ausgegeben. Nuetzlich wenn zum Beispiel im Publikum laut hergeht und eine
  Sequenz wiederholt werden muss. 

  Taste 4 :
  Beim Druecken dieser Taste wird die naechste Sequenz aus dem Verzeichnis
  "extra" ausgegeben. Sind mehrere Sequenzen dort gespeichert, wird bei jeder 
  Wiederholung die nachfolgende Sequenz ausgegeben. Nuetzlich wenn zum Beispiel
  auf Publikumsreaktionen geantwortet werden muss.

servokalib.pl (2-Kanal) und servocalib-single.pl (1-Kanal)
  Dieses Programm dient zum ersten test der Servos und zur Ermittlung der 
  Grenzwerte des Servos - es ist weitgehend selbst erklaerend.
  Hier wird der Kreuzknueppel benoetigt.

  Bedienelemente am Joystick:
  Taste rechts - verbindet den naechsten Servo mit dem Steuerknueppel. 
  Taste links - verbindet den vorigen Servo mit dem Steuerknueppel.

X-pos(0-4096)   |Y-Pos(0-4096)  |Joystick X |Joystick Y |Servo 0    |Servo 1
-----------------------------------------------------------------------------
2714            | 1602          | 460       | 317       | 438       | 307

  In der Datei Modules/ConfigL sind die Grenzwerte einzutragen - Sie Hinweise
  in der Datei selbst.

backup
  Shell script das die aktuelle Konfiguration im Verzeichnis 
  /usr/local/backup als Tarball archiviert. 

activate_autostart
  Nach einmaliger Ausfuehrung unter Archlinux wird hier das Programm live.pl 
  automatisch nach dem booten gestartet. Der Autostart ist hilfreich, wenn 
  kein Rechner via Terminalprogramm verbunden ist.
  Funktioniert nur auf Distributionen, die systemctl unterstuetzen.

deactivate_atostart
  Schaelt das automatische starten von live.pl wieder aus.
  Funktioniert nur auf Distributionen, die systemctl unterstuetzen.
  
cksum
  Hilfsprogramm, das die Dateiintegritaet von .svo dateien prueft.

Aufnahmetipp:
  Die Audiodateien mit einer laengeren Stille am Ende versehen. So kann das 
  Modell sich weiterbewegen solange der Puppenspieler antwortet. Wird vorher
  schon zur naechsten Datei bei der Wiedergabe weitergeschaltet, so wird 
  die laufende Sequenz einfach abgebrochen und die neue Sequenz begonnen. 
  Lieber etwas laenger die Modellbewegungen aufnehmen, sonst wirkt das Modell
  in den Sprechpausen statisch.

------------------------------------------------------------------------------
Einrichtung:
Nach der Installation muessen gegebenenfalls Parameter angepasst werden, bevor
mit der Aufnahme oder Wiedergabe von Bewegungen begonnen werden kann.

Anpassung Programmparameter:
Serialport ($serialport) - entsprechend dem verwendeten Hardware 
i2c port ($i2cport) - entsprechend anpassen der verwendeten Hardware
i2c Adresse ($i2c_address) - entsprechend der verwendeten Adresse (tipp: mit
                             i2cdetect ermitteln)

Anpassung der Anzahl der verwendeten Servos:
Editiere die Datei: /usr/local/bin/Modules/ConfigL.pm
Aendere den Eintrag: 
$num_servos=4;                      # number of servos in use (max 16)
Hier einfach die Zahl auf die gewuenschte Anzahl Servos aendern.
Logischerweise sollten diese Servos dann auch angeschlossen sein.

Anpassung Steuerknueppel:
Angenommen ein Steuerknueppel liefert bei Vollausschlag Werte von 123 (minimum)
und 855 (maximum). Durch Eintragung dieser Werte in ConfigL.pm, werden diese
Werte intern in einen Wertebereich von 0 bis 4096 konvertiert. Wird also der
Hebel zum Minimum bewegt, entsteht ein interner Positionswert von 0. Wird zum
maximum bewegt, entsteht ein interner Wert von 4096.
Anzupassende Parameter in ConfigL.pm : 
   $joystick_x_start $joystick_y_start $joystick_x_end $joystick_y_end

Anpassung Servo:
Bei Servos gibt es folgende Parametersaetze:
1. Der gesamte moegliche Bewegungsbereich eines Servos (im ausgebauten Zustand).
   Dies dient dazu den Servotyp entsprechend zu parametrisieren damit beim
   Aufruf von servocalib.pl bereits der Servo vorangepasst auf Positionen
   reagieren kann. (servolimit start + servolinit end)
2. Der mogliche Bewegungsbereich innerhalb des Modells
   Dies dient dazu dass der Servo spaeter im Modell seine mechanischen Grenzen 
   nicht zu ueberfahren versucht. (servostart + servoend)
3. Die Bewegungsrichtung (1 oder 0)
   0 gibt Bewegungen parallel zur Knueppelbewegung.
   1 gibt die Bewegung umgekehrt aus.
4. Servolabel: hier kann ein Text eingetragen werden der die Funktion des
   Servos benennt. Dieser Text wird spaeter in trackui.pl angezeigt.

Einrichtungstipps:
- Unbedingt vermeiden, dass die Servos gegen einen mechanischen Anschlag laufen
  und versuchen, diesen zu ueberfahren. Insbesondere Billigservos wie SG90
  nehmen einem das schnell uebel indem sie "durchbrennen"; 
- Zunaechst die Einrichtung des Joysticks vornehmen und pruefen, ob die
  Maximalwerte 0-4096 erreicht werden.
- Erst dann !einen! Servo anschliessen und die Grenzwerte des Servotyps 
  ermitteln. Dann in die ConfigL.pm eintragen.


*