Pointillistisk målning robotarm (11 / 15 steg)
Steg 11: Att skapa en simulering
Jag är en ganska visuell person, så när jag behövde till diagram i tre dimensioner, vände jag mig till för att hjälpa mig se armen och köra Pre-processing matematik för att räkna ut formerna armen behövs för att anta för att måla på duk. Simulatorn gör två saker: beräkna koordinaterna för vårt mål canvas poäng och avgöra vilka vinklar är giltiga för armen att nå dessa punkter (som är bestämda värden kan vi skicka till motorerna att anta den önskade formen).
Definiera duken
Duken är i själva verket en fast gräns inom ett plan. Vi måste definiera fasta punkter inom det gränsen, så att vi kan komma till ändliga totalt poäng att måla. Eftersom bilden vi begär från kameran är 80 x 60 bildpunkter, låt oss tvang våra målområdet till 60 av 60 poäng fördelade 3 millimeter isär för totalt 3600 möjliga mål för tipset av borsten. Även om det finns många punkter, behöver vi bara beräkna 60 koordinater för varje område. Varför? "Raderna" i vår canvas området dela samma X och Y-värden, har men olika Z-värden. "Kolumner" i våra målarduken som alla har samma Z-värde, men olika XY värden. Med allt detta i åtanke, kan vi bestämma alla möjligt mål poäng med bara 60 värden per koordinat. De exakta detaljerna av denna är mer tydligt förklarade min bearbetning skiss.
Lära sig att flytta
Nu när vi har en definierad mängd canvas poäng, hur kan vi flytta armen så att den når dessa punkter? Det är där kompromissen att välja framåt kinematik lämnar oss med mer arbete än IK skulle ha. Eftersom vi vet platsen för punkten, vi behöver verkligen bara korrekt flytta armen till punkten, inte exakt. Detta handlar om att acceptera en liten mängd fel där penselspetsen är och där det verkliga mål är. Cykling genom alla möjliga konfigurationer av armen ges ett set vinkelformig upplösning kan vi kontrollera att se avstånd mellan vår borste punkt och målpunkt är under ett visst tröskelvärde, om så är fallet, då vi är nära nog att säga att roboten faktiskt når sitt mål. Men i slutändan får vi gå arm i onedegree mätningar, detta är alltför fina en resolution att testa armen eftersom antalet flytande punkt ekvationer skulle vara i miljoner dvs för mycket arbete för din dator. För att påskynda jag ställa simuleringen starta vid en mycket sloppier grad av upplösning (10 grader ökar till exempel), och sedan sprang dock alla möjliga konfigurationer, testning distanserar vid varje steg. Cykling om alla punkter, om en matchning hittas på den aktuella resolutionen, då lagras värdena för motor vinklarna för att samordna point (0 till 3599). Varje motor vinkel tvings utifrån fysiska begränsningar och stilistiska skäl (jag in det så att armen gör alltid en konkav form med avseende på duken). Om inga matchningar hittas med viss vinkelformig upplösning ökar vi vår resolution (minska de kantiga steg) och sedan gå igenom punkterna igen, men bara provande former för punkter som inte har redan markerats som har hittats vid lägre upplösningar. Även på en blygsam upplösning och ett godtagbart avstånd till målet av 1.4 millimetrar, 3600 poäng visade sig ta för lång tid, så jag bosatte sig på en ny resolution 24 av 24 punkter centrerad inom våra tidigare canvas rutnät, för totalt 576 önskad arm former. Efter att låta simuleringen körs för en och en halv timme, det är klar och utgångar en .txt-fil som innehåller flyttal formaterade värden för alla vinklar som en Arduino stil två dimensionell array. Denna .txt kan nu formateras som en header-fil som kan inkluderas i den Galileos skiss.