Innholdsfortegnelse:

Haptic Drawing Robot: 5 trinn (med bilder)
Haptic Drawing Robot: 5 trinn (med bilder)

Video: Haptic Drawing Robot: 5 trinn (med bilder)

Video: Haptic Drawing Robot: 5 trinn (med bilder)
Video: Playstation 5 | Astro's Playroom | Augmented reality controller 2024, November
Anonim

Som en del av min masterutdannelse ved avdelingen. Industrial Design ved Eindhoven University, laget jeg en haptisk tegneenhet som kan brukes til å navigere en semi-autonom bil gjennom trafikk. Grensesnittet kalles scribble og lar brukeren oppleve haptiske fixturer i et 2D -rom gjennom en variabel kraft og plassering. Selv om konseptet ikke er det dette instruerbare handler om, kan du lese mer om Scribble her:

Scribble bruker en 5 bar koblingskonfigurasjon som gjør at den kan flytte to laterale frihetsgrader (DoF). Dette oppsettet er ganske populært blant prototyper for å lage tegneroboter, her er noen eksempler:

www.projehocam.com/arduino-saati-yazan-kol-…

blogs.sap.com/2015/09/17/plot-clock-weathe…

www.heise.de/make/meldung/Sanduhr-2-0-als-Bausatz-im-heise-shop-erhaeltlich-3744205.html

Mekanisk er disse robotene enkle å lage. De trenger bare grunnleggende ledd og har to aktuatorer som kan skape ganske flytende bevegelser. Denne strukturen er ideell for designere som er interessert i å lage bevegelige strukturer. Men fordi jeg ikke var maskiningeniør, syntes jeg kinematikken var ganske vanskelig å oversette til kode. Derfor vil jeg gi grunnleggende Arduino -kode som finner ut fremover og invers kinematikk, slik at du enkelt kan bruke dette i dine fremtidige design!;-)

Last ned koden nedenfor!

* EDIT: for et lignende prosjekt, ta en titt på https://haply.co *

Trinn 1: Bygg strukturen

Bygge strukturen
Bygge strukturen

Avhengig av formålet du har i tankene, bør du først designe en 5-koblingsstruktur. Tenk på målingene, aktuatorene du vil bruke, og hvordan du fester leddene for jevne bevegelser.

For prototypen min kjører jeg koden min på en Arduino DUE som styres over seriell av et program på min Mac som ble laget i Open Frameworks. Programmet bruker en UDP -tilkobling for å kommunisere med en Unity 3D -basert kjøresimulator.

Scribble-prototypen bruker 5 mm lagre og er laget av 5 mm laserskåret acrilic. Aktuatorene er Frank van Valeknhoefs Haptic Engines som tillater aktivering, avlesning av posisjon og utmatning av en variabel kraft. Dette gjorde dem ideelle for Scribbles ønskede haptiske egenskaper. Mer om aktuatorene hans finner du her:

Trinn 2: Kjenn maskinvareverdiene dine

Kjenn maskinvareverdiene dine
Kjenn maskinvareverdiene dine

Forover kinematikk er basert på Plot-klokkestasjonen fra SAP:

Som vist i konfigurasjonen er forlenget for armen å holde en markør for å tegne. Dette har blitt fjernet siden det ikke tjente noen hensikt med prototypen for klatring. Sjekk koden deres hvis du vil legge til denne komponenten igjen. Navnene på bildet holdes de samme i min konfigurasjon.

Avhengig av maskinvaren trenger algoritmen å kjenne maskinvareegenskapene:

int leftActuator, rightActuator; // vinkel for å skrive til aktuatoren i grader, bytt til flyter hvis du ønsker mer nøyaktighet

int posX, posY; // koordinatene til plasseringen av pekeren

Angi oppløsningen for inndataverdiene

int posStepsX = 2000;

int posStepsY = 1000;

Dimensjoner på oppsettet ditt, verdiene er i mm (se SAP -bilde)

#define L1 73 // lengde motorarm, se SAP -bilde (venstre og høyre er det samme)

#define L2 95 // lengdeforlengelsesarm, se SAP -bilde (venstre og høyre er det samme)

#define rangeX 250 // maksimal rekkevidde i X -retning for punktet som skal beveges (fra venstre til høyre, 0 - maxVal)

#definere område Y 165 // maksimal rekkevidde i Y -retning for punktet å bevege seg (fra 0 til maksimal rekkevidde mens du holder deg sentrert)

#define originL 90 // offset distance from most minimum X value to actuator center position

#define originR 145 // offset distance from most minimum X value to actuator center position, distansen mellom de to motorene er i dette tilfellet

Trinn 3: Fremover kinematikk

Fremover Kinematikk
Fremover Kinematikk

Som nevnt i forrige trinn, er fremover kinematikk basert på SAPs algoritme.

Tomrommet oppdaterer venstre og høyre aktuator ønskede vinkelverdier definert tidligere. Basert på X- og Y -verdiene som er plugget inn, vil den beregne de rette vinklene for å få pekeren til denne posisjonen.

void set_XY (double Tx, double Ty) // input your X and Y value {// some vals we need but don't want to save for long double dx, dy, c, a1, a2, Hx, Hy; // kart inpit oppløsning til rekkevidde av konfigurasjonen din i den virkelige verden int realX = map (Tx, 0, posStepsX, 0, rangeX); // swap if mapping if inversed int realY = map (Ty, posStepsX, 0, 0, rangeY); // bytt hvis kartlegging omvendt // kalkvinkel for venstre aktuator // kartesisk dx/dy dx = realX - originL; // inkludere offset dy = realY; // polar lengde (c) og vinkel (a1) c = sqrt (dx * dx + dy * dy); a1 = atan2 (dy, dx); a2 = retur_vinkel (L1, L2, c); leftActuator = gulv (((M_PI - (a2 + a1)) * 4068) / 71); // sluttvinkel og konvertere fra rad til grader // kalkvinkel for høyre aktuator dx = realX - originR; // inkludere offset dy = realY; c = sqrt (dx * dx + dy * dy); a1 = atan2 (dy, dx); a2 = retur_vinkel (L1, L2, c); rightActuator = gulv (((a1 - a2) * 4068) / 71); // siste vinkel og konvertere fra rad til grader}

Ytterligere tomrom for vinkelberegning:

double return_angle (double a, double b, double c) {// cosinus rule for angle between c and a retur acos ((a * a + c * c - b * b) / (2 * a * c)); }

Trinn 4: Invers kinematikk

Invers kinematikk
Invers kinematikk

Den inverse kinematikken fungerer omvendt. Du kobler til rotasjonen til aktuatorene dine i grader, og tomrommet vil oppdatere posisjonen som er definert tidligere.

Vær oppmerksom på at du trenger aktuatorer eller en separat sensor som kan lese vinkelen på armen. I mitt tilfelle brukte jeg aktuatorer som både kan lese og skrive posisjonen deres samtidig. Eksperimenter gjerne med dette og vurder å legge til en slags kalibrering, slik at du er sikker på at vinkelen din blir lest riktig.

Anbefalt: