Tabla de contenido:

Robot de dibujo háptico: 5 pasos (con imágenes)
Robot de dibujo háptico: 5 pasos (con imágenes)

Video: Robot de dibujo háptico: 5 pasos (con imágenes)

Video: Robot de dibujo háptico: 5 pasos (con imágenes)
Video: Siente TODO en VR con un CHALECO HÁPTICO😮 #quest2 #haptic #tactsuitx40 #vr #tecnologia 2024, Mes de julio
Anonim

Como parte de mi graduación de maestría en la dep. Diseño industrial en la Universidad de Eindhoven, creé un dispositivo de dibujo háptico que se puede usar para navegar en un automóvil semiautónomo a través del tráfico. La interfaz se llama garabato y permite al usuario experimentar dispositivos hápticos en un espacio 2D a través de una fuerza y ubicación variables. Aunque el concepto no es de lo que trata este instructivo, puede leer más sobre Scribble aquí:

Scribble utiliza una configuración de varillaje de 5 barras que le permite moverse dos grados laterales de libertad (DoF). Esta configuración es bastante popular entre los prototipos para crear robots de dibujo, aquí hay algunos ejemplos:

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

Mecánicamente, estos robots son fáciles de hacer. Solo necesitan uniones básicas y tienen dos actuadores que pueden crear movimientos bastante fluidos. Esta estructura es ideal para diseñadores que estén interesados en hacer estructuras móviles. Sin embargo, no siendo ingeniero mecánico, encontré la cinemática bastante difícil de traducir a código. Por lo tanto, proporcionaré un código Arduino básico que determina la cinemática directa e inversa para que pueda usarlo fácilmente en sus diseños futuros.;-)

¡Descargue el código a continuación!

* EDITAR: para un proyecto similar, eche un vistazo a https://haply.co *

Paso 1: construcción de la estructura

Construyendo la Estructura
Construyendo la Estructura

Dependiendo del propósito que tenga en mente, primero debe diseñar una estructura de 5 enlaces. Piense en las medidas, los actuadores que desea usar y cómo unir las articulaciones para movimientos suaves.

Para mi prototipo, ejecuto mi código en un Arduino DUE que está controlado en serie por un programa en mi Mac que se hizo en Open Frameworks. El programa utiliza una conexión UDP para comunicarse con un simulador de conducción basado en Unity 3D.

El prototipo Scribble utiliza cojinetes de 5 mm y está hecho de acrílico cortado con láser de 5 mm. Los actuadores son motores hápticos de Frank van Valeknhoef que permiten la actuación, la lectura de la posición y la salida de una fuerza variable. Esto los hizo ideales para las propiedades hápticas deseadas de Scribble. Puede encontrar más información sobre sus actuadores aquí:

Paso 2: conozca los valores de su hardware

Conozca sus valores de hardware
Conozca sus valores de hardware

La cinemática de avance se basa en la estación meteorológica Plot clock de SAP:

Como se muestra en su configuración se extiende el brazo para sostener un marcador para dibujar. Esto se ha eliminado ya que no servía para el prototipo de garabatos. Verifique su código si desea volver a agregar este componente. Los nombres de la imagen se mantienen iguales en mi configuración.

Dependiendo de su hardware, el algoritmo necesita conocer las propiedades de su hardware:

int leftActuator, rightActuator; // ángulo para escribir al actuador en grados, cambie a flotadores si desea más precisión

int posX, posY; // las coordenadas de la ubicación del puntero

Establezca la resolución de sus valores de entrada

int posStepsX = 2000;

int posStepsY = 1000;

Dimensiones de su configuración, los valores están en mm (consulte la imagen de SAP)

#define L1 73 // longitud del brazo del motor, consulte la imagen de SAP (la izquierda y la derecha son iguales)

#define L2 95 // brazo de extensión de longitud, consulte la imagen de SAP (la izquierda y la derecha son iguales)

#define rangeX 250 // rango máximo en la dirección X para que el punto se mueva (de izquierda a derecha, 0 - maxVal)

#define rangeY 165 // rango máximo en la dirección Y para que el punto se mueva (de 0 al alcance máximo mientras permanece centrado)

#define originL 90 // distancia de desplazamiento desde la mayoría del valor mínimo de X hasta la posición central del actuador

#define originR 145 // distancia de desplazamiento desde la mayoría del valor mínimo de X a la posición central del actuador, la distancia entre los dos motores es en este caso

Paso 3: cinemática de avance

Cinemática de avance
Cinemática de avance

Como se mencionó en el paso anterior, la cinemática directa se basa en el algoritmo de SAP.

El vacío actualiza los valores de ángulo deseados del actuador izquierdo y derecho definidos anteriormente. Basado en los valores de X e Y que están conectados, calculará los ángulos rectos para llevar el puntero a esta posición.

void set_XY (double Tx, double Ty) // ingrese su valor X e Y {// algunos valores que necesitamos pero no queremos guardar para long double dx, dy, c, a1, a2, Hx, Hy; // mapea la resolución de entrada al rango de tu configuración en el mundo real int realX = map (Tx, 0, posStepsX, 0, rangeX); // intercambiar si el mapeo si se invierte int realY = map (Ty, posStepsX, 0, 0, rangeY); // intercambiar si el mapeo si se invierte // ángulo calculado para el actuador izquierdo // cartesiano dx / dy dx = realX - originL; // incluye el desplazamiento dy = realY; // longitud polar (c) y ángulo (a1) c = sqrt (dx * dx + dy * dy); a1 = atan2 (dy, dx); a2 = ángulo_de_retorno (L1, L2, c); leftActuator = piso (((M_PI - (a2 + a1)) * 4068) / 71); // ángulo final y convertir de rad a grados // ángulo calculado para el actuador derecho dx = realX - originR; // incluye el desplazamiento dy = realY; c = raíz cuadrada (dx * dx + dy * dy); a1 = atan2 (dy, dx); a2 = ángulo_de_retorno (L1, L2, c); rightActuator = piso (((a1 - a2) * 4068) / 71); // ángulo final y convertir de rad a grados}

Vacío adicional para el cálculo de ángulos:

double return_angle (doble a, doble b, doble c) {// regla del coseno para el ángulo entre c y un retorno acos ((a * a + c * c - b * b) / (2 * a * c)); }

Paso 4: Cinemática inversa

Cinemática inversa
Cinemática inversa

La cinemática inversa funciona al revés. Conecta la rotación de sus actuadores en grados y el vacío actualizará la posición definida anteriormente.

Tenga en cuenta que necesitará actuadores o un sensor separado que pueda leer el ángulo del brazo. En mi caso, utilicé actuadores que pueden leer y escribir su posición simultáneamente. Siéntase libre de experimentar con esto y considere agregar algún tipo de calibración para estar seguro de que su ángulo se lee correctamente.

Recomendado: