Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Universiteit van Amsterdam
Zoeken, Sturen en Bewegen
Guitar Assist: Robotische assistentie voorgitaristen
Technisch Rapport
Zoeken, Sturen en Bewegen
Dries Fransen, Ko Schoemaker,
Martine Toering en Ninande Vermeer
30 juni 2017
Dries Fransen, Ko Schoemaker, Martine Toering en Ninande Vermeer 30 juni 2017
Abstract
Het bespelen van een instrument is een menselijke activiteit. In het bereiken van het doel om
uiteindelijk een menselijke robot te creeren is het van belang onderzoek te doen naar robotische
assistentie bij dit soort menselijke activiteiten. Daarnaast is het mogelijk om zo meer inzicht te
vergaren in menselijke interactie met robots. Het doel is om te onderzoeken in hoeverre het mogelijk
is om gebruik makend van LEGO Mindstorm EV3 een muzikant te assisteren bij het bespelen van de
gitaar. Mede door de beperkingen die de LEGO Mindstorms met zich mee brengen en de omvang en
instabiliteit van de ontwikkelde Guitar Assist is het assisteren van een gitarist met deze constructie
beperkt gebleken. De Guitar Assist heeft echter een functionele werking.
Inleiding
Robotische musici bestaan in allerlei vormen.
In het vakgebied van robotica en muziek is er
grofweg een onderscheid te maken tussen machi-
nes die algoritmes ontwikkelen voor de perceptie
en compositie van muziek en fysieke systemen
die instrumenten kunnen bespelen. (Bretan en
Weinberg 2016, Kapur 2005). Een categorie bin-
nen deze laatste toepassing wordt gevormd door
robots die geschikt zijn voor het assisteren van
mensen bij het maken van muziek. De gitaar
is een zeer populair instrument, waarvoor deze
laatste categorie van robots erg nuttig kan zijn.
Assistentie bij het bespelen van de gitaar kan
noodzakelijk zijn voor mensen met een lichame-
lijke beperking om de gitaar te kunnen bespelen.
Daarnaast kunnen het ontwerp en de functiona-
liteit van de robotassistent dienen als leermiddel
voor beginnende gitaristen.
Er bestaan verschillende robotische hulpmidde-
len voor gitaristen. Zo is er een apparaat ont-
wikkeld, FINGER (Finger INdividuating Grasp
Exercise Robot), dat vingertherapie kan geven
aan patienten die een beroerte hebben gehad.
Het apparaat helpt bij het maken van natuur-
lijke grijpbewegingen van de individuele vingers
en is vooral handig bij taken waarbij timing
erg belangrijk is, zoals een instrument bespelen.
FINGER is getest op het videospel Guitar Hero,
een spel waarbij men een versimpelde versie van
een fysieke gitaar bespeelt (Taheri e.a. 2012).
De RoboTar is een soort robothand die op een
bepaalde plek vastzit aan de hals van de gitaar.
RoboTar kan op die manier assisteren bij de vin-
gerzetting die onderdeel is van gitaar spelen. Het
maakt gebruik van software om met een voetpe-
daal een bepaald akkoord te spelen (Mack g.d.).
In de robotica en de kunstmatige intelligentie
is ontwikkeling van robotische assistentie bij
puur menselijke activiteiten als musiceren ge-
wenst. Onderzoek binnen dit vakgebied levert
meer inzicht in de interactie tussen mens en ro-
bot en geeft aan hoe de programmatuur van
robots aangepast kan worden om de mens met
een meer natuurlijk gevoel te laten werken met
robots.
Het doel van dit onderzoek is om antwoord te
geven op de vraag: in hoeverre is het moge-
lijk een muzikant bij het gitaar spelen te as-
sisteren, gebruikmakend van LEGO Mindstorm
EV3 Set? De Guitar Assist (GA) zal hiervoor
worden ontwikkeld om de vingerzettingen op de
hals van de gitaar uit te voeren. De GA zal
zich hiervoor op de hals van de gitaar bevin-
den. De gitarist die wordt geassisteerd zal zelf
1
Dries Fransen, Ko Schoemaker, Martine Toering en Ninande Vermeer 30 juni 2017
de snaren moeten aanslaan. Op grond van de
waarneming dat er reeds een gitaarspelende ro-
bot is gemaakt van LEGO Mindstorm (https:
//www.youtube.com/watch?v=cXgB3lIvPHI), is
het vermoeden ontstaan dat het mogelijk is een
gitaarassistent te creeren bestaande uit LEGO
Mindstorm onderdelen. De GA zal werken via
het inlezen van tabs (een manier van gitaarnota-
tie vergelijkbaar met notenschrift) en het spelen
van losse noten door middel van een draaimecha-
nisme. De toepassing van robots bij het bespelen
van de gitaar wordt zo benaderd op een nieuwe
wijze. De combinatie van zowel robotische als
menselijke bijdragen om tot muziek als eindre-
sultaat te komen is eveneens vernieuwend. Uit
het onderzoek zal blijken of alleen het aanslaan
van noten of ook het inlezen van tabs mogelijk
is bij het assisteren van gitaristen. Dit zal men
nieuwe inzichten geven in het robotisch assisteren
bij muziek.
Methode
Fretten zijn langwerpige stukken metaal op een
gitaar die over de breedte van de hals zijn ge-
plaatst. Door een snaar in te drukken op een fret
wordt de snaar ingekort. De GA beperkt zich tot
het voortbewegen over de hals van fret 1 tot en
met fret 9. De reden hiervoor is dat de hals van
de gitaar dikker wordt richting de body van de
gitaar en dat de GA niet verder kan rijden door
de behuizing van de body.
Algoritme
Het hoofdonderdeel van de code is het schrijven
van de instructies voor de EV3. Hieronder volgt
de pseudocode. Bij het lezen van deze code is het
belangrijk om te beseffen dat ’string’ hier dient
te worden geınterpreteerd als ’snaar’, en niet als
een serie letters.
Function write_instructions(tab, bpm)
For measure in range(total_measures):
For count in range(counts_in_measure):
For string in range(number_of_strings):
If selected_tab_element != ’-’:
to_fret(selected_tab_element)
press_string(string)
sleep(60\BPM)
EndIf
EndFor
EndFor
EndFor
move_to_original_position()
EndFunction
Functies
De code die is gebruikt bevat zes functies.
1. distance between frets:
Deze functie neemt als argumenten het
nummer van de huidige fret, het nummer
van de volgende fret en de lengte van de
eerste fret. De functie rekent de afstand
tussen de huidige en de volgende fret uit
door de afstand van beide fretten tot de
eerste fret uit te rekenen en die afstanden
vervolgens van elkaar af te trekken. De af-
stand van een fret naar de volgende fret kan
worden uitgerekend door de lengte van de
huidige fret te delen door√
2. Als de lengte
van de eerste fret bekend is kan met een for-
loop alle daaropvolgende lengtes van fret-
ten worden berekend.
2
Dries Fransen, Ko Schoemaker, Martine Toering en Ninande Vermeer 30 juni 2017
2. move to fret:
Deze functie neemt dezelfde argumenten
als distance between frets en gebruikt die
functie om de te bewegen afstand uit te
rekenen. Vervolgens wordt, rekening hou-
dend met de omtrek van de wielen van de
GA, de rotatie die de motoren moeten ma-
ken uitgerekend en uitgevoerd. De moto-
ren kunnen op drie verschillende manieren
stoppen met draaien: brake (de motor remt
en stopt dus meteen met draaien), coast
(de motor draait uit tot hij op natuurlijke
wijze tot stilstand komt) en hold (de mo-
tor remt en houdt de rem ingedrukt tot er
nieuwe instructies komen). Bij de GA is er-
voor gekozen om overal ’hold’ te gebruiken,
aangezien alle posities vastgehouden moe-
ten worden totdat er een snaar aangeslagen
is.
3. get turn rotation:
Deze functie neemt als argumen-
ten de naam van de huidige snaar
(”E”bijvoorbeeld) en de naam van de vol-
gende snaar en rekent vervolgens met ge-
geven parameters uit hoeveel de GA moet
draaien om de volgende snaar te selecteren.
4. press string:
Deze functie neemt als argumenten de
naam van de huidige snaar, de naam van de
volgende snaar en de snelheid van het num-
mer in Beats Per Minute (BPM). Vervol-
gens roept deze functie get turn rotation
aan met de huidige en de volgende snaar,
waarna de functie de motoren aanstuurt.
Eerst draait de motor naar de volgende
snaar, dan draait de motor een stuk terug
om de snaar in te drukken, en als laatste
draait de motor weer om de snaar los te la-
ten. Bij al deze rotaties wordt als manier
om te stoppen ’hold’ gebruikt, omdat elke
positie vastgehouden moet worden. Tussen
elke draaiing van de motor zit een pauze
die afhankelijk is van de BPM. Deze pauze
is om de motor tijd te geven om de draaiing
uit te voeren.
5. read tab:
De GA met tabs. Een tab wordt geschre-
ven en verwerkt in een tekstdocument. In
figuur 1 is een voorbeeld van een tab te zien
die gebruikt is voor de GA.
|--------|--------|
|--------|--------|
|--------|--------|
|-35--365|-35-3---|
|5---5---|5----5--|
|--------|--------|
Figuur 1 Voorbeeld van een tab van het
nummer ”Smoke on the Water”van Deep
Purple
Het programma verkrijgt een tekstbestand
door de gebruiker te vragen om de naam
van een tekstdocument waar de tab in
staat. Het tekstbestand wordt geopend in
Python en het wordt regel voor regel uit-
gelezen. Elke regel in de tab symboliseert
een snaar op de gitaar. De bovenste regel
staat voor de hoogste snaar en de onderste
voor de laagste snaar. Alle regels worden
in een lijst gezet. Vervolgens worden alle
regels binnen die lijst opnieuw afzonderlijk
in een lijst gezet, waarna alle regels op de
’|’ gesplitst worden. Het resultaat ziet er
vervolgens zo uit als in figuur 2. Dit wordt
door het programma omgezet in instructies
voor de GA.
3
Dries Fransen, Ko Schoemaker, Martine Toering en Ninande Vermeer 30 juni 2017
[ [’--------’, ’--------’],
[’--------’, ’--------’],
[’--------’, ’--------’],
[’-35--365’, ’-35-3---’],
[’5---5---’, ’5----5--’],
[’--------’, ’--------’] ]
Figuur 2 De tab zoals die in de GA is op-
geslagen
6. write instructions:
Deze functie wordt aangeroepen om de GA
te laten werken. Hij neemt als argumen-
ten een tab en een snelheid in BPM. De
functie gaat ervan uit dat de GA nu op de
eerste fret en op de E-snaar staat. Ver-
volgens leest hij de tab uit. Als de func-
tie een getal in de tab vindt rekent hij dat
om naar instructies voor de GA die ver-
volgens naar de corresponderende fret en
snaar gaat. Daarna wacht de functie een
tijd die afhankelijk is van de BPM. Dit
herhaalt zich totdat de tab uitgelezen is,
waarna de GA weer terugkeert naar de eer-
ste fret en de E-snaar. Als dit gebeurd is
krijgt de gebruiker de optie om een nieuwe
tab in te voeren of om het programma te
sluiten.
Software en hardware
De LEGO Mindstorm werkt op EV3dev, een
op linux gebaseerd besturingssysteem. Het pro-
gramma is in python geschreven omdat deze taal
geschikt is om te werken met LEGO Mindstorm
EV3. Python heeft daarnaast onze voorkeur
boven andere programmeertalen onder andere
vanwege de eenvoudige syntax.
Uiteraard is gebruik gemaakt van de LEGO
Mindstorm EV3 set. Het apparaat bestaat ruw-
weg uit twee mechanismen:
1. Het rijmechanisme (figuur 5). Dit me-
chanisme, bestaande uit twee grote moto-
ren verbonden met de EV3-steen, regelt de
voortbeweging van de GA over de hals van
de gitaar. Het mechanisme heeft aan de bo-
venzijde van de hals drie kleine wielen die
tussen de snaren door kunnen rijden. Aan
de onderzijde zit een groot wiel voor stabi-
liteit en om de GA in de verticale richting
strak tegen de hals te klemmen.
Hiernaast zit aan beide zijkanten van de
hals een paar wielen die afzonderlijk te-
gen de hals drukken met elastiek. Twee
van deze zijwielen, namelijk de wielen het
dichtste bij de body van de gitaar, zijn (in-
direct met raderen) aangedreven door elk
een grote motor.
2. Het indrukmechanisme (figuur 6). Dit me-
chanisme drukt, wanneer de GA op de
goede plaats op de hals staat, een snaar
in. Op een as, aangedreven door een grote
motor, zitten LEGO onderdelen met ver-
schillende lengtes op verschillende afstan-
den van een andere constructie dat boven
de snaren zweeft. Met het mechanisme
is het mogelijk om afzonderlijke snaren in
te drukken, gebruik makend van enkel een
grote motor.
Beide mechanismen zijn samengevoegd in een
ontwerp waarin ook de EV3-steen geplaatst kan
worden.
4
Dries Fransen, Ko Schoemaker, Martine Toering en Ninande Vermeer 30 juni 2017
Procedure
Allereerst is het rijmechanisme ontwikkeld. Voor
deze constructie is gekozen omdat dit voor de
meest compacte structuur kan zorgen. Dit is niet
het geval wanneer er een rails gebruikt wordt
voor de verplaatsing van de GA. Vervolgens is
de mogelijkheid tot indrukken van de snaren ge-
realiseerd. Een draaiende molen is gebouwd om
afzonderlijk elke snaar te kunnen indrukken. Een
positieve draaiingshoek zorgt voor het indrukken
van een snaar. Een negatieve draaiing heeft geen
gevolg voor de snaren. Op deze wijze kan elke
snaar naar keuze ingedrukt worden.
Data-analyse
Snaren
De parameters voor het draaien van het draai-
mechanisme om de snaren in te drukken (tabel
1) zijn berekend en via trial-and-error handma-
tig aangepast. De ”snaarrotatieıs de rotatie in
graden die het draaimechanisme moet draaien
vanaf de E-snaar om in de juiste positie te ko-
men om de snaar vervolgens aan te slaan. De
ındrukrotatie”, de enige positieve draaiing, zorgt
er vervolgens voor dat de snaar wordt ingedrukt.
De ”loslaatrotatie”zorgt er vervolgens voor dat
het draaimechanisme naar de standaardpositie
draait voor de desbetreffende snaar. Dit is de
positie vlak voor het onderdeel van het indruk-
mechanisme.
Snaar Snaarrotatie Indrukrotatie Loslaatrotatie
E 0 150 -45
A -240 145 -40
D -120 131 -26
G -300 131 -26
B -180 138 -33
e -80 155 -50
Tabel 1 Rotaties bij verschillende snaren in gra-
den
Fretbord
Voor het rijmechanisme zijn twee onderdelen van
belang: de afstand tussen de fretten en de om-
trek van de zijwaartse wielen. Voor de omtrek
wordt de formule omtrek = π × diameter ge-
bruikt. De diameter van de zijwaartse wielen be-
draagt 4 centimeter.
Vanuit de gegeven afstand tot de eerste fret, kan
de afstand tot elke andere fret berekend worden.
De afstand tot de eerste fret bedraagt 3.7 centi-
meter. Verder wordt de formule lengte vorige fret√2
gebruikt.
Resultaten
In figuur 3 is de Guitar Assist te zien. Het
apparaat geeft de mogelijkheid om verschillende
liederen te spelen door de tabs in te voeren. De
GA geeft de gitarist de kans om in een bepaalde
tijd de snaren aan te slaan. Deze tijd wordt
bepaald door een variabele die BPM, ’Beats Per
Minute’ heet. Deze variabele wordt vervolgens
verwerkt door de GA na het uitvoeren van
bepaalde acties te laten wachten. Er is voor
gezorgd dat de totale lengte van iedere actie
ongeveer 60/BPM seconden duurt.
5
Dries Fransen, Ko Schoemaker, Martine Toering en Ninande Vermeer 30 juni 2017
Figuur 3 De voltooide Guitar Assist waarbij de
verschillende componenten inclusief de motoren
zijn samengevoegd
Discussie
De GA assisteert een muzikant door middel van
het uitvoeren van tabs. De GA heeft een functi-
onaliteit in lijn met onze verwachting. Ondanks
dat de GA werkt is er niet gehele tevredenheid
over bepaalde aspecten. Ten eerste heeft de GA
tijdens het verplaatsen over de hals geen hoge
snelheid. Om een hogere snelheid te bereiken
moet de GA meer stabiliteit hebben. Dit kan
bijvoorbeeld gedaan worden door de grote moto-
ren aan de onderzijde van de GA te monteren in
plaats van de bovenzijde.
Ten tweede is de GA een grote en zware construc-
tie wat ervoor zorgt dat de mobiliteit afneemt.
Dit zorgt er ook voor dat de GA niet normaal om-
gedaan kan worden om de gitaar maar altijd plat
op een oppervlak moet liggen om te functioneren.
Dit probleem met stabiliteit is iets lastiger op te
lossen, aangezien er een zeer goede gewichtsver-
deling moet zijn om de gitaar normaal te kun-
nen dragen. Waarschijnlijk zou deze verdeling al
beter zijn als de zware werkende onderdelen (de
motoren en de EV3-steen) dichter bij de hals ge-
plaatst worden. De wielen aan weerszijden van
de hals moeten daarnaast ook strakker afgesteld
worden voor meer stabiliteit. Dit leidt er echter
toe dat de motoren meer kracht moeten leveren
voor de voortbeweging over de hals.
Een ander probleem was een bijgeluid bij het be-
wegen over de hals. De snaren werden lichtelijk
aangeraakt door het indrukmechanisme en dit re-
sulteerde in een ongewenst geluid. Dit kan ver-
holpen worden door het indrukmechanisme hoger
te plaatsen. Dit heeft als gevolg dat er grotere
kracht moet worden uitgeoefend op de construc-
tie die boven de snaren hangt. Daarnaast laat
de huidige constructie van de GA het niet toe
om de hoogte van het indrukmechanisme te ver-
hogen (wel verder verlagen overigens). Met een
iets ander ontwerp van de robot is dit echter wel
mogelijk en kan een bijgeluid worden voorkomen.
Design
De overgang van de conceptafbeeldingen uit het
onderzoeksvoorstel gemaakt in LEGO Digital
Designer (figuur 4) naar het uiteindelijke proto-
type van de GA (figuur 3) is vooral gebaseerd
op trial-and-error. Het onderzoek heeft vanaf
hier twee verschillende uitwerkingen. Het oor-
spronkelijke idee was om met de GA enkel po-
werakkoorden in te drukken met onderdelen die
zich op een vaste plek in de constructie bevonden
(figuur 6). Dit concept is vrij snel gerealiseerd.
Voor deze uitwerking is niet gekozen vanwege
het verschil in de afstanden tussen de fretten op
gitaren. De tweede invulling van het onderzoek
6
Dries Fransen, Ko Schoemaker, Martine Toering en Ninande Vermeer 30 juni 2017
is om met een extra motor individuele snaren
in te drukken op een variabele hoogte op de
hals. Dit idee is een geavanceerde versie van
de eerste uitwerking en maakt gebruik van het
reeds ontwikkelde rijmechanisme. Toegevoegd
zijn hier het indrukmechanisme aan de achter-
zijde en het bovenste plateau om de motoren
en de EV3 steen te huizen. Om het oorspron-
kelijke idee te laten varen is een goede beslis-
sing geweest. Op deze manier is er meer tech-
niek aan te pas gekomen en meer programmeren
waardoor de GA van hoger niveau is geworden.
Figuur 4 Conceptafbeeldingen van het ontwerp
van de GA
Figuur 5 Het draaimechanisme geeft keuze in
welke snaar wordt ingedrukt doordat een
negatieve draaiing geen enkel onderdeel laat
kantelen
Figuur 6 Een beginversie van het rijmechanisme
waarbij met de zwarte LEGO onderdelen een
powerakkoord kan worden ingedrukt
7
Dries Fransen, Ko Schoemaker, Martine Toering en Ninande Vermeer 30 juni 2017
Conclusie
De Guitar Assist blijkt een werkende assistent
voor een gitarist. De GA loopt tijdens het assis-
teren wel tegen enige problemen aan. De vraag
in hoeverre de GA een significant verschil kan
maken voor een gitarist is niet simpel te beant-
woorden. De GA is in staat om mensen te as-
sisteren door middel van langzame verplaatsin-
gen en het indrukken van de snaren. Helaas is
de GA niet in staat om het standaardtempo van
veel muziek uit te voeren, omdat dat tempo vaak
te hoog ligt voor de GA. De GA is daarnaast
te instabiel en niet snel en compact genoeg voor
de meeste toepassingen. Wanneer alle beperkin-
gen van het huidige prototype van de GA in acht
worden genomen blijkt dat de GA functioneert
maar te beperkt is in het assisteren van gitaris-
ten. De vraag in hoeverre het mogelijk is om een
muzikant bij het gitaar spelen te assisteren al-
leen gebruik makend van LEGO Mindstorms is
daarmee beantwoord.
Referenties
Bretan, Mason en Gil Weinberg (2016). “A survey of robotic musicianship”. In: Communications
of the ACM 59.5, p. 100–109.
Kapur, Ajay (2005). “A History of robotic Musical Instruments.” In: ICMC.
Mack, Eric (g.d.). url: http://newatlas.com/robotic-chord-hand-guitar-robotar/32429/.
Taheri, Hossein e.a. (2012). “Robot-assisted guitar hero for finger rehabilitation after stroke”. In:
Engineering in medicine and biology society (EMBC), 2012 annual international conference of
the IEEE. IEEE, p. 3911–3917.
8
Dries Fransen, Ko Schoemaker, Martine Toering en Ninande Vermeer 30 juni 2017
Appendices
A Voortgangsrapportage
Wo 21 juni:
• Er zal geen rails gebruikt worden voor het
voortbewegen van de GA over de hals. De
reden hiervoor is dat er vrij waarschijnlijk
een grote stellage nodig is naast de gitaar.
In plaats daarvan gaan we een rijmecha-
nisme ontwikkelen. (ontwerpbeslissing)
• Bij de eerste pogingen bleek dat het rij-
mechanisme van de zijkant van de hals af
kon bewegen tijdens het rijden. Het rijme-
chanisme zat daarnaast te los om de hals.
Als oplossing worden er drie wielen toege-
voegd. Hiervan zal er een onder de hals be-
vinden en twee steunwielen aan de zijkant
geplaatst worden.
Do 22 juni
• Python werkend gekregen op de computer
• Er wordt gewerkt aan een uitbreiding waar-
bij de verschillende snaren apart aangesla-
gen kunnen worden. Met de vaste power-
akkoorden zien we problemen vanwege de
variabele afstand tussen de fretten van de
gitaar. (ontwerpbeslissing)
Vr 23 juni
• Met tabs wordt onthouden in welke positie
de GA zich zal bevinden. Vanuit die positie
wordt de hoek die hij normaal moet draaien
gebruikt om de juiste hoek te berekenen.
Za 24 juni
• Het rijden over de hals is werkend, maar
het indrukmechanisme is nog niet beves-
tigd aan de het rijmechanisme.
Zo 25 juni
• Het eerste prototype voor de robot is afge-
rond. Het rijmechanisme en het indrukme-
chanisme zijn samengevoegd. De motoren
en de Mindstorm EV3 steen zijn ook in de
constructie verwerkt.
Ma 26 juni
• Deze dag staat in het teken van het pro-
grammeren en testen van de GA. Begin ge-
maakt met het uitzoeken van de juiste pa-
rameters voor het gebruik van het proto-
type op de gitaar. De Mindstorm werkt nu
met Python bestanden.
Di 27 juni
• De tabs in een tekstbestand worden omge-
zet naar instructies.
Wo 28 juni
• De GA kan de instructies van het verplaat-
sen uitvoeren.
Do 29 juni
• Werken aan technisch rapport
• Parameters die nodig zijn voor het indruk-
mechanisme meten en berekenen
• Het indrukmechanisme werkend gekregen.
Indrukmechanisme en rijmechanisme ver-
bonden, opdat beide mechanismen samen
kunnen werken.
Vr 30 juni
• De GA een lied laten spelen
• Laatste verbeteringen aan parameters aan-
brengen
• Technisch rapport afmaken
9