Sincronizați gura; un robot umanoid Quai Lab

Acest articol prezintă o soluție pentru sincronizați mișcarea gurii unui robot umanoid cu vocea lui. Sunetul va fi procesat în timp real pe o sursă neamplificată: ieșire PC, telefon, tabletă etc.
Obiectivul este controlul unui servomotor care acționează deschiderea/închiderea pe axa verticală a botului. Această mișcare este foarte simplificată în comparație cu mișcările buzelor/maxilarelor ... Pentru mai mult realism ar fi, de asemenea, necesar să recunoaștem fonemele pentru a imita modul în care sunt pronunțate, luând în considerare și limba vorbită (engleză, franceză etc. .).

sincronizați

Acest lucru este în afara subiectului nostru, vom fi mulțumiți aici cu un efect apropiat de cel produs de păpușari și ventriloci în animație cu mâinile lor.

Descărcați codul Arduino Sincro bucal InMoov

Multe jucării simulează mișcarea gurii, nu a trebuit să caut mult pentru a găsi în jucăriile copiilor o Barbie cu mufă jack pentru conexiune audio din care am avut pentru o clipă speranța de a recupera circuitul ... dar vai sincronizarea funcționează corect numai pe cele două sau trei propoziții preînregistrate.

Acest tip de jucărie are probabil mișcările care trebuie făcute în memorie, evitând astfel orice procesare a semnalului. Pacat ..., dar cel putin Barbie a fost salvata 🙂

Principiul reținut

Un semnal audio vocal oscilează între valori negativ și pozitiv cu o amplitudine mai mult sau mai puțin mare. Pentru a controla servomotorul vom calcula puterea efectivă (în wați) a semnalului numit și RMS (în engleză Root Mean Square) pentru a da mai multă sau mai mică amplitudine deschiderii maxilarului în funcție de forța vocii. Sistemul se autocalibrează cu poziția gură închisă și servomotorul deconectat atunci când nu se emite sunet.

Vă dau formula pentru calcularea RMS pentru o funcție pe un interval între T1 și T2.

Cu f (t) semnalul audio eșantionat și (T1-T2) durata eșantionării noastre.


Câteva memento-uri despre voce:

Vocea are o frecvență între 800 Hz și 3 kilograme Hz (urechea umană percepe frecvențe de până la 20 kHz).
Semnalul audio la ieșirea unui computer este destul de slab, în ​​general între -0,5 și + 0,5v, și trebuie amplificat la ieșirea la difuzoare externe.
Frecvența minimă pentru digitalizarea unui semnal trebuie să fie de două ori mai mare decât cea a semnalului pentru a nu avea nici o pierdere (teorema de eșantionare Nyquist - Shannon), pe un CD, de asemenea, sunetul este eșantionat la 44,1 kHz pe 16 biți.

Vizualizarea semnalului audio la intrare (roșu) și după un offset de 0,5V gata pentru digitalizare

Scopul nostru este de a construi acest sistem pe baza unui Arduino Uno, știm că intrările analogice (A0-A5) ale arduino măsoară o tensiune între 0 și 5v pe 10 biți, adică 1024 valori.