Turinys:

„Haptic“piešimo robotas: 5 žingsniai (su nuotraukomis)
„Haptic“piešimo robotas: 5 žingsniai (su nuotraukomis)

Video: „Haptic“piešimo robotas: 5 žingsniai (su nuotraukomis)

Video: „Haptic“piešimo robotas: 5 žingsniai (su nuotraukomis)
Video: Top 5 Fidget Toys For Social Anxiety 🥰 2024, Lapkritis
Anonim

Baigdamas magistro studijas dep. Pramoninis dizainas Eindhoveno universitete, sukūriau haptinį piešimo įrenginį, kuriuo galima važiuoti pusiau autonominiu automobiliu. Sąsaja vadinama raštu ir leidžia vartotojui patirti haptinius įrenginius 2D erdvėje per kintamą jėgą ir vietą. Nors ši pamoka nėra tokia, kokia yra instrukcija, daugiau apie „Scribble“galite perskaityti čia:

„Scribble“naudojama 5 barų jungčių konfigūracija, leidžianti perkelti du šoninius laisvės laipsnius (DoF). Ši sąranka yra gana populiari tarp prototipų kuriant piešimo robotus, čia yra keletas pavyzdžių:

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

Mechaniškai šiuos robotus lengva pagaminti. Jiems reikalingi tik pagrindiniai sujungimai ir dvi pavaros, galinčios sukelti šiek tiek skysčio judesių. Ši struktūra idealiai tinka dizaineriams, norintiems sukurti judančią konstrukciją. Tačiau nesu mechanikos inžinierius, todėl man buvo gana sunku kinematiką išversti į kodą. Todėl aš pateiksiu pagrindinį „Arduino“kodą, kuris nustato priekinę ir atvirkštinę kinematiką, kad galėtumėte lengvai tai naudoti savo būsimuose projektuose!;-)

Atsisiųskite žemiau esantį kodą!

* REDAGUOTI: panašaus projekto atveju pažiūrėkite į https://haply.co *

1 žingsnis: statykite konstrukciją

Struktūros kūrimas
Struktūros kūrimas

Priklausomai nuo tikslo, kurį turite omenyje, pirmiausia turėtumėte suprojektuoti 5 jungčių konstrukciją. Pagalvokite apie matavimus, pavaras, kurias norite naudoti, ir kaip pritvirtinti sąnarius, kad judesiai būtų sklandūs.

Savo prototipui aš paleidžiu savo kodą „Arduino DUE“, kurį nuosekliai valdo „Mac“programa, sukurta naudojant „Open Frameworks“. Programa naudoja UDP ryšį, kad galėtų bendrauti su „Unity 3D“vairavimo simuliatoriumi.

„Scribble“prototipas naudoja 5 mm guolius ir yra pagamintas iš 5 mm lazeriu pjausto akrilo. Pavaros yra Franko van Valeknhoefo „Haptic“varikliai, leidžiantys įjungti, nuskaityti padėtį ir išvesti kintamą jėgą. Dėl to jie idealiai tinka norimoms „Scribble“savybėms. Daugiau apie jo pavaras rasite čia:

2 žingsnis: žinokite savo aparatinės įrangos vertes

Žinokite savo aparatūros vertybes
Žinokite savo aparatūros vertybes

Į priekį nukreipta kinematika yra pagrįsta SAP „Plot clock“orų stotimi:

Kaip parodyta jų konfigūracijoje, ranka yra ištiesta, kad laikytų žymeklį piešti. Tai buvo pašalinta, nes jis neturėjo jokio tikslo rašymo prototipui. Patikrinkite jų kodą, jei norite vėl įtraukti šį komponentą. Mano konfigūracijoje paveikslėlyje esantys pavadinimai išlieka tie patys.

Priklausomai nuo jūsų aparatūros, algoritmas turi žinoti jūsų aparatinės įrangos savybes:

int leftActuator, rightActuator; // kampas, skirtas rašyti į pavarą laipsniais, pakeiskite į plūdes, jei norite daugiau tikslumo

int posX, posY; // rodyklės vietos koordinatės

Nustatykite įvesties verčių skiriamąją gebą

int posStepsX = 2000;

int posStepsY = 1000;

Jūsų sąrankos matmenys, vertės yra mm (žr. SAP paveikslėlį)

#define L1 73 // ilgio variklio svirtis, žr. SAP paveikslėlį (kairė ir dešinė yra vienodi)

#define L2 95 // ilgio ištraukimo svirtis, žr. SAP paveikslėlį (kairė ir dešinė yra vienodi)

#define rangeX 250 // didžiausias taškas X judėjimo kryptimi (iš kairės į dešinę, 0 - maxVal)

#define rangeY 165 // didžiausias taškas Y kryptimi, kad taškas judėtų (nuo 0 iki maksimalaus pasiekiamumo, išlaikant centrą)

#define originL 90 // poslinkio atstumas nuo daugumos mažiausių X reikšmių iki pavaros centro padėties

#define originR 145 // atstumas nuo daugumos mažiausių X reikšmių iki pavaros centrinės padėties, atstumas tarp dviejų variklių šiuo atveju yra

3 žingsnis: Kinematikos persiuntimas

Pirmyn kinematika
Pirmyn kinematika

Kaip minėta ankstesniame žingsnyje, priekinė kinematika yra pagrįsta SAP algoritmu.

Tuštuma atnaujina anksčiau apibrėžtas kairės ir dešinės pavaros norimas kampo reikšmes. Remdamasis prijungtomis X ir Y reikšmėmis, jis apskaičiuos reikiamus kampus, kad žymeklis atsidurtų šioje padėtyje.

void set_XY (dvigubas Tx, dvigubas Ty) // įveskite savo X ir Y reikšmes {// kai kurios vertybės, kurių mums reikia, bet nenorime išsaugoti ilgam dvigubam dx, dy, c, a1, a2, Hx, Hy; // žemėlapio įvesties raiška pagal jūsų konfigūracijos diapazoną realiame pasaulyje int realX = map (Tx, 0, posStepsX, 0, rangeX); // apsikeisti, jei kartografavimas, jei apverstas int realY = map (Ty, posStepsX, 0, 0, rangeY); // apsikeisti, jei kartografavimas apverstas // kairiojo pavaros skaičiavimo kampas // stačiakampis dx/dy dx = realX - originL; // įtraukti poslinkį dy = realY; // poliarinis ilgis (c) ir kampas (a1) c = sqrt (dx * dx + dy * dy); a1 = atan2 (dy, dx); a2 = grįžtamasis_kampis (L1, L2, c); leftActuator = grindys ((((M_PI - (a2 + a1)) * 4068) / 71); // galutinis kampas ir konvertuoti iš rad į deg // dešiniojo pavaros skaičiavimo kampas dx = realX - originR; // įtraukti poslinkį dy = realY; c = sqrt (dx * dx + dy * dy); a1 = atan2 (dy, dx); a2 = grįžtamasis_kampis (L1, L2, c); rightActuator = grindys ((((a1 - a2) * 4068) / 71); // galutinis kampas ir konvertuoti iš rad į degį}

Papildoma tuštuma kampui apskaičiuoti:

double return_angle (double a, double b, double c) {// kosinuso taisyklė kampui tarp c ir grįžtamojo acos ((a * a + c * c - b * b) / (2 * a * c)); }

4 žingsnis: atvirkštinė kinematika

Atvirkštinė kinematika
Atvirkštinė kinematika

Atvirkštinė kinematika veikia atvirkščiai. Įjungiate pavaros sukimąsi laipsniais ir tuštuma atnaujins anksčiau apibrėžtą padėtį.

Atminkite, kad jums reikės pavarų arba atskiro jutiklio, galinčio nuskaityti rankos kampą. Mano atveju naudojau pavaras, kurios gali vienu metu skaityti ir rašyti savo poziciją. Nesivaržykite eksperimentuoti ir apsvarstykite galimybę pridėti tam tikrą kalibravimą, kad būtumėte tikri, jog jūsų kampas yra teisingai nuskaitytas.

Rekomenduojamas: