Obsah:

Haptický kresliaci robot: 5 krokov (s obrázkami)
Haptický kresliaci robot: 5 krokov (s obrázkami)

Video: Haptický kresliaci robot: 5 krokov (s obrázkami)

Video: Haptický kresliaci robot: 5 krokov (s obrázkami)
Video: 6 letý chlapec se ztratil. Když ho našli, byli v šoku z toho, co leželo vedle něj... 2024, November
Anonim

V rámci môjho magisterského štúdia na dep. Priemyselný dizajn na Eindhovenskej univerzite vytvoril haptické kresliace zariadenie, ktoré je možné použiť na navigáciu poloautonómneho auta v premávke. Rozhranie sa nazýva scribble a umožňuje užívateľovi zažiť haptické zariadenia v 2D priestore pomocou premennej sily a umiestnenia. Aj keď koncept nie je tým, o čom je tento návod, môžete si prečítať viac o Scribble tu:

Scribble používa konfiguráciu 5 -barového prepojenia, ktorá mu umožňuje pohybovať sa o dva bočné stupne voľnosti (DoF). Toto nastavenie je medzi prototypmi na vytváranie kresliacich robotov pomerne obľúbené, uvádzame niekoľko príkladov:

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

Mechanicky sa tieto roboty ľahko vyrábajú. Potrebujú iba základné kĺby a majú dva ovládače, ktoré môžu vytvárať celkom plynulé pohyby. Táto štruktúra je ideálna pre dizajnérov, ktorí sa zaujímajú o výrobu pohyblivej štruktúry. Napriek tomu, že nie som strojný inžinier, kinematiku som preložil do kódu pomerne ťažko. Preto poskytnem základný kód Arduino, ktorý zisťuje dopredu a opačne kinematiku, aby ste to mohli ľahko použiť vo svojich budúcich návrhoch!;-)

Stiahnite si nižšie uvedený kód!

* EDIT: podobný projekt nájdete na stránke https://haply.co *

Krok 1: Budovanie štruktúry

Budovanie štruktúry
Budovanie štruktúry

V závislosti od účelu, ktorý máte na mysli, by ste mali najskôr navrhnúť 5-väzbovú štruktúru. Zamyslite sa nad meraniami, pohonmi, ktoré chcete použiť, a nad tým, ako pripevniť kĺby pre plynulé pohyby.

Pre môj prototyp používam svoj kód na Arduino DUE, ktorý je sériovo riadený programom na mojom počítači Mac, ktorý bol vyrobený v Open Frameworks. Program používa pripojenie UDP na komunikáciu so simulátorom jazdy na báze Unity 3D.

Prototyp Scribble používa 5 mm ložiská a je vyrobený z 5 mm laserom rezaného akrylu. Pohony sú hmatové motory Franka van Valeknhoefa, ktoré umožňujú ovládanie, čítanie polohy a výstup premenlivej sily. Vďaka tomu boli ideálne pre požadované haptické vlastnosti Scribble. Viac o jeho pohonoch nájdete tu:

Krok 2: Spoznajte svoje hardvérové hodnoty

Spoznajte svoje hardvérové hodnoty
Spoznajte svoje hardvérové hodnoty

Dopredná kinematika je založená na meteorologickej stanici Plot s hodinami od spoločnosti SAP:

Ako ukazuje ich konfigurácia, je predĺžená tak, aby rameno držalo značku na kreslenie. Toto bolo odstránené, pretože prototyp čmáranice neslúžil. Ak chcete tento komponent znova pridať, skontrolujte ich kód. Mená na obrázku sú v mojej konfigurácii zachované.

V závislosti od vášho hardvéru musí algoritmus poznať vaše hardvérové vlastnosti:

int leftActuator, rightActuator; // uhol zápisu na pohon v stupňoch, zmeňte na plaváky, ak požadujete väčšiu presnosť

int posX, posY; // súradnice umiestnenia ukazovateľa

Nastavte rozlíšenie vstupných hodnôt

int posStepsX = 2000;

int posStepsY = 1000;

Rozmery vášho nastavenia, hodnoty sú v mm (pozri obrázok SAP)

#define L1 73 // rameno motora s dĺžkou, pozri obrázok SAP (ľavé a pravé sú rovnaké)

#define L2 95 // predĺžené rameno dĺžky, pozri obrázok SAP (ľavé a pravé sú rovnaké)

#definovať rozsahX 250 // maximálny rozsah v smere X pre bod, ktorý sa má pohybovať (zľava doprava, 0 - maxVal)

#define rangeY 165 // maximálny rozsah v smere Y pre bod, ktorý sa má pohybovať (od 0 do maximálneho dosahu, keď zostanete v strede)

#define originL 90 // vzdialenosť posunu od väčšiny minimálnych hodnôt X do strednej polohy akčného člena

#define originR 145 // vzdialenosť posunu od väčšiny minimálnych hodnôt X do strednej polohy akčného člena, vzdialenosť medzi týmito dvoma motormi je v tomto prípade

Krok 3: Kinematika dopredu

Kinematika dopredu
Kinematika dopredu

Ako bolo uvedené v predchádzajúcom kroku, forwardová kinematika je založená na algoritme SAP.

Prázdnota aktualizuje predtým definované požadované hodnoty uhla ľavého a pravého pohonu. Na základe hodnôt X a Y, ktoré sú zapojené, vypočíta správne uhly, aby sa ukazovateľ dostal do tejto polohy.

void set_XY (double Tx, double Ty) // zadajte svoju hodnotu X a Y {// niektoré hodnoty, ktoré potrebujeme, ale nechceme šetriť na dlhé dvojité dx, dy, c, a1, a2, Hx, Hy; // mapovanie rozlíšenia inpit na rozsah vašej konfigurácie v reálnom svete int realX = mapa (Tx, 0, posStepsX, 0, rangeX); // swap if mapping if inversed int realY = map (Ty, posStepsX, 0, 0, rangeY); // swap ak je mapovanie obrátené // výpočet uhla pre ľavý pohon // kartézsky dx/dy dx = realX - originL; // zahrnúť ofset dy = realY; // polárna dĺžka (c) a uhol (a1) c = sqrt (dx * dx + dy * dy); a1 = atan2 (dy, dx); a2 = uhol návratu (L1, L2, c); leftActuator = floor ((((M_PI - (a2 + a1)) * 4068) / 71); // konečný uhol a prevod z rad na deg // výpočet uhla pre pravý pohon dx = realX - originR; // zahrnúť ofset dy = realY; c = sqrt (dx * dx + dy * dy); a1 = atan2 (dy, dx); a2 = uhol návratu (L1, L2, c); rightActuator = floor (((a1 - a2) * 4068) / 71); // konečný uhol a konverzia z rad na deg}

Dodatočná prázdnota pre výpočet uhla:

double return_angle (double a, double b, double c) {// kosínusové pravidlo pre uhol medzi c a návratovým acos ((a * a + c * c - b * b) / (2 * a * c)); }

Krok 4: Inverzná kinematika

Inverzná kinematika
Inverzná kinematika

Inverzná kinematika funguje naopak. Pripojíte otáčanie vašich pohonov v stupňoch a prázdnota aktualizuje pozíciu definovanú skôr.

Upozorňujeme, že budete potrebovať akčné členy alebo samostatný snímač, ktorý dokáže odčítať uhol ramena. V mojom prípade som použil aktuátory, ktoré môžu súčasne čítať a zapisovať svoju polohu. Neváhajte s tým experimentovať a zvážte pridanie nejakej kalibrácie, aby ste si boli istí, že váš uhol je správne odčítaný.

Odporúča: