Sommario:

Robot da disegno aptico: 5 passaggi (con immagini)
Robot da disegno aptico: 5 passaggi (con immagini)

Video: Robot da disegno aptico: 5 passaggi (con immagini)

Video: Robot da disegno aptico: 5 passaggi (con immagini)
Video: 🧖🏾‍♂️ 3 modi per stimolare il PENE 🧖🏾‍♂️ 2024, Dicembre
Anonim

Nell'ambito della mia laurea magistrale presso il dep. Industrial Design all'Università di Eindhoven, ho creato un dispositivo di disegno tattile che può essere utilizzato per guidare un'auto semi-autonoma nel traffico. L'interfaccia si chiama scribble e consente all'utente di sperimentare dispositivi tattili in uno spazio 2D attraverso una forza e una posizione variabili. Sebbene il concetto non sia ciò di cui tratta questo istruibile, puoi leggere di più su Scribble qui:

Scribble utilizza una configurazione di collegamento a 5 barre che gli consente di spostare due gradi di libertà laterali (DoF). Questa configurazione è abbastanza popolare tra i prototipi per creare robot di disegno, ecco alcuni esempi:

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

Meccanicamente questi robot sono facili da realizzare. Hanno solo bisogno di giunti di base e hanno due attuatori che possono creare alcuni movimenti fluidi. Questa struttura è ideale per i progettisti interessati a realizzare strutture mobili. Tuttavia, non essendo un ingegnere meccanico, ho trovato la cinematica piuttosto difficile da tradurre in codice. Quindi fornirò il codice Arduino di base che calcola la cinematica diretta e inversa in modo da poterlo utilizzare facilmente nei tuoi progetti futuri!;-)

Si prega di scaricare il codice qui sotto!

* EDIT: per un progetto simile, dai un'occhiata a https://haply.co *

Passaggio 1: costruire la struttura

Costruire la struttura
Costruire la struttura

A seconda dello scopo che hai in mente, dovresti prima progettare una struttura a 5 collegamenti. Pensa alle misurazioni, agli attuatori che desideri utilizzare e a come collegare i giunti per movimenti fluidi.

Per il mio prototipo, eseguo il mio codice su un Arduino DUE controllato via seriale da un programma sul mio Mac realizzato in Open Frameworks. Il programma utilizza una connessione UDP per comunicare con un simulatore di guida basato su Unity 3D.

Il prototipo Scribble utilizza cuscinetti da 5 mm ed è realizzato in acrilico tagliato al laser da 5 mm. Gli attuatori sono i motori aptici di Frank van Valeknhoef che consentono l'attuazione, la lettura della posizione e l'emissione di una forza variabile. Questo li ha resi ideali per le proprietà tattili desiderate da Scribble. Maggiori informazioni sui suoi attuatori possono essere trovate qui:

Passaggio 2: conoscere i valori dell'hardware

Conosci i tuoi valori hardware
Conosci i tuoi valori hardware

La cinematica in avanti si basa sulla stazione meteo Plot clock di SAP:

Come mostrato nella loro configurazione è esteso per il braccio per tenere un pennarello da disegnare. Questo è stato rimosso poiché non serviva a nulla per il prototipo dello scarabocchio. Controlla il loro codice se desideri aggiungere di nuovo questo componente. I nomi nella foto sono mantenuti gli stessi nella mia configurazione.

A seconda dell'hardware, l'algoritmo deve conoscere le proprietà dell'hardware:

int attuatore sinistro, attuatore destro; //angolo per scrivere sull'attuatore in gradi, cambia in float se desideri maggiore precisione

int posX, posY; //le coordinate della posizione del puntatore

Imposta la risoluzione dei tuoi valori di input

int postStepsX = 2000;

int postStepsY = 1000;

Le dimensioni del tuo setup, i valori sono in mm (vedi immagine SAP)

#define L1 73 // lunghezza braccio motore, vedere immagine SAP (sinistra e destra sono uguali)

#define L2 95 // braccio di estensione della lunghezza, vedere l'immagine SAP (sinistra e destra sono uguali)

#define rangeX 250 // intervallo massimo in direzione X per il punto da spostare (da sinistra a destra, 0 - maxVal)

#define rangeY 165 // range massimo in direzione Y per il punto da spostare (da 0 alla portata massima rimanendo centrato)

#define originL 90 //distanza di offset dal valore X più minimo alla posizione centrale dell'attuatore

#define originR 145 //distanza di offset dal valore X più minimo alla posizione centrale dell'attuatore, la distanza tra i due motori è in questo caso

Passaggio 3: cinematica in avanti

Cinematica in avanti
Cinematica in avanti

Come accennato nel passaggio precedente, la cinematica diretta si basa sull'algoritmo SAP.

Il vuoto aggiorna i valori dell'angolo desiderati dell'attuatore sinistro e destro definiti in precedenza. Sulla base dei valori X e Y che sono collegati, calcolerà gli angoli retti per portare il puntatore in questa posizione.

void set_XY(double Tx, double Ty) //inserisci il tuo valore X e Y{ // alcuni valori di cui abbiamo bisogno ma non vogliamo salvare per lunghi double dx, dy, c, a1, a2, Hx, Hy; //mappa la risoluzione inpit sull'intervallo della tua configurazione nel mondo reale int realX = map(Tx, 0, posStepsX, 0, rangeX); //scambia se mappatura se invertita int realY = map(Ty, posStepsX, 0, 0, rangeY); //scambia se mappatura se invertita // calcola angolo per attuatore sinistro // cartesiano dx/dy dx = realX - originL; //include offset dy = realY; // lunghezza polare (c) e angolo (a1) c = sqrt(dx * dx + dy * dy); a1 = atan2(dy, dx); a2 = angolo_ritorno(L1, L2, c); attuatore sinistro = floor(((M_PI - (a2 + a1)) * 4068) / 71); //angolo finale e conversione da rad a deg //calc angolo per attuatore destro dx = realX - originR; //include offset dy = realY; c = sqrt(dx * dx + dy * dy); a1 = atan2(dy, dx); a2 = angolo_ritorno(L1, L2, c); attuatore destro = floor(((a1 - a2) * 4068) / 71); //angolo finale e converti da rad a deg }

Vuoto aggiuntivo per il calcolo dell'angolo:

double return_angle(double a, double b, double c) { // regola del coseno per l'angolo tra c e un return acos((a * a + c * c - b * b) / (2 * a * c)); }

Passaggio 4: cinematica inversa

Cinematica inversa
Cinematica inversa

La cinematica inversa funziona al contrario. Inserisci la rotazione dei tuoi attuatori in gradi e il vuoto aggiornerà la posizione definita in precedenza.

Tieni presente che avrai bisogno di attuatori o di un sensore separato in grado di leggere l'angolo del braccio. Nel mio caso, ho utilizzato attuatori in grado di leggere e scrivere la loro posizione contemporaneamente. Sentiti libero di sperimentare questo e considera l'aggiunta di una sorta di calibrazione in modo da essere sicuro che il tuo angolo venga letto correttamente.

Consigliato: