Stap 11: Het creëren van een simulatie
Ik ben een mooie visuele persoon, dus zodra ik nodig had om de grafiek in drie dimensies, ik draaide me om de verwerking te helpen me zie van de arm en het uitvoeren van de voorbewerkend wiskunde om erachter te komen de shapes de arm moest nemen om het canvas schilderen. De simulator doet twee dingen: Bereken de coördinaten van ons doel doek punten en bepalen welke hoeken zijn geldig voor de arm die punten (die duidelijke waarden die we naar de motoren sturen kunnen op zich te nemen van de gewenste vorm) te bereiken.
Definiëren van het Canvas
In werkelijkheid is het canvas een vaste begrenzing binnen een vliegtuig. We moeten definiëren van vaste punten binnen die grenzen, zodat we kunnen komen tot een eindig aantal punten om te schilderen. Omdat het beeld dat wij van de camera verzoeken is 80 bij 60 pixels, laten we beperking de onze doelgebied tot 60 door 60 verdeelde 3 millimeter uit elkaar voor punten totaal 3600 mogelijke doelwitten voor naar de wenk van het penseel. Ook al zijn er vele punten, moet we slechts 60 coördinaten voor elke as berekenen. Waarom? De "rijen" in onze canvas gebied share de dezelfde X- en Y-waarden, hebben maar verschillende Z-waarden. De "kolommen" in onze canvas gebied alle hebben dezelfde Z waarde, maar verschillende XY-waarden. Met dit alles in gedachten, kunnen we alle potentiële richtwaarde punten met slechts 60 waarden per coördinaat bepalen. De precieze details van deze zijn meer duidelijk uitgelegd mijn Processing schets.
Leren hoe om te gaan
Nu dat we een gedefinieerde matrix van punten van het doek hebben, hoe kunnen we gaan de arm op een zodanige wijze dat het die punten bereikt? Dit is waar het compromis van het kiezen van voorwaartse kinematica verlaat ons met meer werk dan IK zou hebben. Omdat we weten dat de locatie van het punt, we eigenlijk alleen nodig om nauwkeurig naar de arm het punt, niet juist. Dit komt neer op het accepteren van een kleine hoeveelheid fout in termen van waar het penseeluiteinde is en waarbij de doelpunt van het werkelijke is. Fietsen door alle mogelijke configuraties van de arm gegeven een set hoekige resolutie, kunnen we controleren om te zien van de afstand tussen onze borstel punt en doelpunt is beneden een bepaalde drempel, zo ja, dan zijn we dicht genoeg om te zeggen dat de robot is eigenlijk het bereiken van zijn doel. Hoewel we uiteindelijk de arm in onedegree metingen bewegen zullen, dit is ook prima een resolutie om te testen van de arm, omdat het aantal vergelijkingen met zwevende punt in de miljoenen d.w.z. worden zou teveel werk voor uw computer. Ik stel in om snelheid dingen de simulatie te starten op een veel sloppier mate van resolutie (10 mate verhoogt bijvoorbeeld), en vervolgens ran wel alle mogelijke configuraties, testen de afstanden bij elke stap. Fietsen al alle punten, als een overeenkomst wordt gevonden met de huidige resolutie, zijn vervolgens de waarden voor de motor hoeken opgeslagen voor dat coördinaat punt (0 tot 3599). Elke motor hoek wordt beperkt op basis van fysieke beperkingen en stilistische redenen (ik ingesteld zodat de arm altijd een concave vorm ten opzichte van het canvas maakt). Als er geen resultaten zijn gevonden bij de gegeven hoekige resolutie, wij onze resolutie zal verhogen (verlagen de hoekige stappen) en vervolgens doorlopen de punten weer, maar alleen het testen van shapes voor punten die nog niet al zijn gemarkeerd als bij de lagere resoluties is opgelegd. Zelfs bij een bescheiden resolutie en een aanvaardbare afstand tot doelstelling van 1,4 millimeter, 3600 punten bleek duurt te lang, dus ik afgerekend op een nieuwe resolutie van 24 door 24 punten binnen onze eerdere doek raster, voor een totaal van 576 gewenste arm vormen wordt gecentreerd. Na het laten van de simulatie draaien voor een uur en een half, is voltooid en uitgangen een txt-bestand met drijvende komma zijn waarden voor de hoeken alle opgemaakt als een Arduino gestyled twee dimensionale array. Deze .txt kan nu opnieuw worden geformatteerd als een headerbestand dat kan worden opgenomen in de Galileo schets.