Está en la página 1de 13

Cochabamba - 07/09/2021

CINEMATICA DEL ROBOT

1. COMPETENCIAS A DESARROLLAR

Aplica cinemática y dinámica de robots; empleando los modelos cinemáticos directo e


inverso y el algoritmo de Denavit - Hartenberg, determinando la orientación y la posición
del elemento terminal; resolviendo las ecuaciones cinemáticas.

2. OBJETIVO DE LA PRACTICA

 Determinar la cinemática directa de sistemas robóticos mediante el método


geométrico.

3. CONTENIDO TEMATICO

 Cinemática directa: consiste en determinar cuál es la posición y orientación del


extremo final del robot, con respecto a un sistema de coordenadas que se toma
como referencia, conocidos los valores de las articulaciones y los parámetros
geométricos de los elementos del robot.
 Cinemática inversa: resuelve la configuración que debe adoptar el robot para
una posición y orientación del extremo conocidas.
 Denavit – Hartenberg: propusieron un método sistemático para describir y
representar la geometría espacial de los elementos de una cadena cinemática, y en
particular de un robot, con respecto a un sistema de referencia fijo. Este método
utiliza una matriz de transformación homogénea para describir la relación espacial
entre dos elementos rígidos adyacentes reduciéndose el problema cinemático
directo a encontrar una matriz de transformación homogénea de 4x4 que relacione
la localización espacial del extremo del robot con respecto al sistema de
coordenadas de su base.

4. MATERIALES

 Una computadora personal programa ARDUINO IDE


 Arduino Uno o Mega
 Fuente de voltaje de 5 Vdc y I ≥ 1.5 A
 Varios cables de conexión

5. METODOLOGIA

 Modelamiento
 Implementación
6. ACTIVIDADES

a) Determinación de la Cinemática Directa aplicando método geométrico.


b) Implementar las ecuaciones obtenidas en la estructura de robot de 3GDL

7. DESARROLLO EXPERIMENTAL
a) Determinación de la Cinemática Directa aplicando método geométrico

Paso 1: Determinar la cinemática directa aplicando el método geométrico para la


siguiente estructura.

Paso 2: Determine las ecuaciones correspondientes que en función de q1, q2 y q3 se puedan


determinar X, Y y Z. dentro de un área de trabajo determinado.
Paso 3: Mida las distancias de los eslabones que separan a cada articulación y reemplace en las
ecuaciones obtenidas.
L1=7.5cm; L2=13cm; L3=14cm

𝑥 = (13𝑐𝑜𝑠(𝑞2) + 14𝑐𝑜𝑠(𝑞2 + 𝑞3)) ∗ 𝑐𝑜𝑠(𝑞1)


𝑦 = (13𝑐𝑜𝑠(𝑞2) + 14𝑐𝑜𝑠(𝑞2 + 𝑞3)) ∗ 𝑠𝑒𝑛(𝑞1)
𝑧 = 7.5 + 13𝑐𝑜𝑠(𝑞2) + 14𝑠𝑒𝑛(𝑞2 + 𝑞3)

Paso 4: Escriba el siguiente programa para el control de los servomotores:

// Incluímos la librería para poder controlar el servo


#include <Servo.h>
// Declaramos la variable para controlar el servo
Servo servo1;
Servo servo2;
Servo servo3;

int angulo_actual = 0, anga, angb, angc, angd, angaf = 5, angbf = 70, angcf =
25, angdf = 20;
String angulos = "";
void setup() {
// Iniciamos el monitor serie para mostrar el resultado
Serial.begin(9600);
Serial.println("Ingrese el Grado a girar: ");
// Iniciamos el servo para que empiece a trabajar con el pin 9
servo1.attach(3); // 5-120 grados
servo2.attach(5); //70-175 grados
servo3.attach(6); //25-120 grados
//<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>
// Desplazamos a la posición 0º
servo1.write(50);
delay(500);
servo2.write(45);
delay(500);
servo3.write(45);
delay(500);
}
void loop() {

while (Serial.available() > 0)


{
char grados = Serial.read();
if (grados != '\n')
{
angulos = angulos + grados;
}
}
Serial.println(angulos);
int numdat = angulos.length();

for (int x = 0; x <= numdat; x += 4)


{
switch (angulos[x])
{
case 'a':
{
anga = (angulos[x + 1] - 48) * 100 + (angulos[x + 2] - 48) * 10 +
(angulos[x + 3] - 48);
break;
}
case 'b':
{
angb = (angulos[x + 1] - 48) * 100 + (angulos[x + 2] - 48) * 10 +
(angulos[x + 3] - 48);
break;
}
case 'c':
{
angc = (angulos[x + 1] - 48) * 100 + (angulos[x + 2] - 48) * 10 +
(angulos[x + 3] - 48);
break;
}
case 'd':
{
angd = (angulos[x + 1] - 48) * 100 + (angulos[x + 2] - 48) * 10 +
(angulos[x + 3] - 48);
break;
}
}
}

Serial.println(anga);
// Desplazamos a la posición deseada
if (anga != angaf) {
servito1(anga);
angaf = anga;
}
if (angb != angbf) {
servito2(angb);
angbf = angb;
}
if (angc != angcf) {
servito3(angc);
angcf = angc;
}

// servito5(ange);
// servito6(angf);

//servito3();

}
//<<<<<<<< SERVO1>>>>>>>>>>>>>>>
void servito1(int grad1)
{
if (angulo_actual < grad1)

{
for (int i = angulo_actual; i <= grad1; i += 5 )
{
servo1.write(i);
delay(10);
if (i == grad1)
{
angulo_actual = grad1;
}
}
}
else
{
for (int i = angulo_actual; i >= grad1; i -= 5 )
{
servo1.write(i);
delay(10);
if (i == grad1)
{
angulo_actual = grad1;
}
}
}
}
//<<<<<<<< ---------- >>>>>>>>>>>>>>>
//<<<<<<<< SERVO2>>>>>>>>>>>>>>>
void servito2(int grad2)
{
if (angulo_actual < grad2)
{
for (int i = angulo_actual; i <= grad2; i += 5 )
{
servo2.write(i);
delay(10);
if (i == grad2)
{
angulo_actual = grad2;
}
}
}
else
{
for (int i = angulo_actual; i >= grad2; i -= 5 )
{
servo2.write(i);
delay(10);
if (i == grad2)
{
angulo_actual = grad2;
}
}
}
}
//<<<<<<<< ---------- >>>>>>>>>>>>>>>
//<<<<<<<< SERVO3>>>>>>>>>>>>>>>
void servito3(int grad3)

{
if (angulo_actual < grad3)
{
for (int i = angulo_actual; i <= grad3; i += 5 )
{
servo3.write(i);
delay(10);
if (i == grad3)
{
angulo_actual = grad3;
}
}
}
else
{
for (int i = angulo_actual; i >= grad3; i -= 5 )
{
servo3.write(i);
delay(10);
if (i == grad3)
{
angulo_actual = grad3;
}
}
}
}
//<<<<<<<< ---------- >>>>>>>>>>>>>>>

//<<<<<<<< ---------- >>>>>>>>>>>>>>>


//servo1.write((int)grados);
//delay(4000);
//servo2.write((int)grados);
//delay(4000);
//servo3.write((int)grados);
//delay(4000);
//servo4.write((int)grados);
//delay(4000);
//servo5.write((int)grados);
//delay(4000);
//servo6.write((int)grados);
//delay(4000);
8. RESULTADOS OBTENIDOS
En esta sección elaborar las ecuaciones, cálculos, tablas, gráficos de la fase experimental

P1
P2
P3
9. CONCLUSIONES

 La práctica se desarrolló con mucha complejidad en la resolución de los ejercicios


de cinemática directa e inversa, en el que tuve que recordar nociones básicas de
trigonometría.
 Una gran satisfacción al desarrollar de forma real como funciona un brazo
robótico de 3GDL por el método geométrico.

También podría gustarte