Pointillistisk målning robotarm (13 / 15 steg)
Steg 13: Programvara: Motion planering
Med vårt bord av kantiga värden och våra pixeldata från kameran är det nu dags att måla! Hur ska armen flytta ändå? Även om servona är relativt snabb, skulle helt enkelt ställa dem till nästa önskad form leda till alltför abrupt av en rörelse. Lösa detta kräver interpolering mellan två mål pekar på en inställda hastigheten. Jag ordnade förslag sekvens i en rad former och åtgärder sparas i en matris som jag hänvisar till som motion kön. Här är hur kön ställs in:
efter att bilden har behandlats, läsa en sekvens av former (uppsättning 4 vinklar) för att flytta armen i upprätt läge
läsa in sökvägen för att nå paletten färg
Ladda sökvägar till återgå till upprätt läge
Bläddra genom arrayen bild
Kontrollera om en pixel är mörk eller ljus
om en pixel är mörkt sedan ladda matchande formen (matrisen utdata från bearbetning skissen) i kön
läsa in en form som motsvarar de vinklarna, men tilt armbåge vinkeln tillbaka lite (så att armen kommer inte att dra mellan pixlar när interpolera)
om trettio former har lästs in i kön (15 pressar av borsten till duk och 15 gånger lutar sig tillbaka)
Ladda sökvägen sekvensen för att hämta mer färg och återgå till en mycket lutade ryggen kroppshållning (interpolera från upprätt position också drar dock poäng)
När cykeln har komplett, ladda sökvägen sekvensen för "ska sova" i vatten cup
Avrättning
När våra kön är full, måste vi du köra den. Detta steg består av löper genom vår lista tills vi når ett tomt värde och sedan gå tillbaka till kontroll knapptryckningar. Varje steg medan kör via kön interpolerar mellan former, så det är har mer flytande rörelse.
Interpolation
För att utjämna rörelse mellan former, kommer vi interpolera mellan två vinklar på 1.0 stammen, utom variabel gånger per gemensamt, så att alla lederna kommer fram till önskad form på samma gång. För att göra detta, kommer vi först beräkna förändringen mellan två vinklar för varje gemensamt (deltaTheta per gemensamma). Efter att hitta alla deltaTheta värden ska vi sortera dem för att hitta den största. Sedan ska vi multiplicerar den största deltaTheta av den minsta tid motorn kan resa en grad (detta är det lägsta steget som vi ska ställa). Detta anger den totala tiden så att den motor som har att flytta mest, inte röra något snabbare än det kan resa en grad per grad, medan de motorer som har lägre deltaTheta värden, uppdateras av en grad mycket långsammare, eftersom deras totala reseavståndet är så liten. Beräkning av tiden baserat på den största kantiga förändringen innebär också att armen rör sig inte långsammare än om en fast tid hade ställts in, eftersom ändringen mellan former kan vara ganska små. Det fullständiga genomförandet av funktionen interpolation är starkt kommenterade i min Galileo skiss.