Académique Documents
Professionnel Documents
Culture Documents
Resumen:
Palabras clave: Brazo robot, simulador 3D, MATLAB, realidad virtual, Toolbox.
Introducción
En la figura 1 se presenta una fotografía de cómo será el brazo una vez construido en
su totalidad, para ello su control empleará una tarjeta electrónica de diseño propio, la
cual será controlada mediante un placa de arduinos. Arduinos es un software
programable que se encarga de sensar y controlar objetos en el mundo real basado en
electrónica y programación de arduinos. Para el funcionamiento de este tendrá que ser
conectada a una pc.
Imagen 1. Modelo de brazo robótico
Cinemática directa
Es necesario conocer el modelo cinemático del brazo robótico para poder desarrollar la
interfaz gráfica del simulador en 3D, para que este describa de manera fiel en todo
momento los movimientos y el posicionamiento espacial del extremo final del brazo
robot.
En esta sección se presenta el análisis cinemático directo del brazo robot mediante el
cual al introducir los valores de los ángulos de la base, brazo, antebrazo y muñeca se
logra obtener la posición espacial del extremo final del brazo robot.
Para esto se usó el conocimiento adquirido del curso Análisis dinámico de Mecanismo
y gracias al docente Emerson Arroyo se logró culminar todos los cálculos del brazo robot
de 6 grados de libertad.
HOJA DE CÁLCULOS
● Cálculo de posición:
Ө4
J4
Eslabón 4
Ө3
J3
Eslabón 3
J2
Eslabón 2
Ө2
J1
Bancada
Eslabón 1
T=”AN”
T=A6=0A1.1A2.2A3.3A4.4A5.5A6
i-1
Ai=R O T z(Өi)T(0,0,di)T(ai,0,0)R o Tx (αi)
𝐴𝑖 − 1𝐴𝑖 =
[𝐶Ө𝑖 𝑆Ө𝐼 0 0 𝑆Ө𝑖 0 𝐶Ө𝑖 0 0 1 0 0 1 0 0 1 ][0 0 00 00 10 0 1 0 𝑑𝑖 1 0 0 1 ][1 0 0 𝑑𝑖 0 0 1 0
…[1 0 0 0 0 0 𝐶𝛼𝑖 𝑆𝛼𝑖 −𝑆𝛼𝑖 𝐶𝛼𝑖 0 0 1 0 01]
𝑖 − 1𝐴𝑖
= [𝐶Ө𝑖 −𝑆Ө𝐼 𝐶𝛼𝑖 𝑆Ө𝐼 𝑆𝛼𝑖 𝐶Ө𝑖 𝑎𝑖 𝑆Ө𝑖 0 𝐶Ө𝑖 𝐶𝛼𝑖 𝑆𝛼𝑖 −𝐶Ө𝑖 𝑆𝛼𝑖 𝐶𝛼𝑖 0 𝑑𝑖 0 0 01]
Para “1”
0𝐴1 = [𝐶Ө1 0 −𝑆Ө1 0 𝑆Ө1 0 0 − 1 𝐶Ө1 0 0 𝑑1 0 0 01]
Para “2”
𝐴1 ∗ 𝐴2
= [𝑘11 𝐾12 𝐾13 𝐾14 𝐾21 𝐾31 𝐾22 𝐾32 𝐾23 𝐾33 𝐾24 𝐾34 𝐾41 𝐾42 𝐾43 𝐾44 ]
𝐾13 = 0 + 0 − 𝑠𝑒𝑛𝜃1 + 0
𝐾13 = −𝑠𝑒𝑛𝜃1
𝐾31 = −𝑐𝑜𝑠𝜃2
𝐾33 = 0
𝐾34 = −𝑠𝑒𝑛𝜃2 ∗ 𝑎2 + 𝑑1
𝐾41 = 0
𝐾42 = 0
𝐾43 = 0
𝐾44 = 1
0𝐴1 . 1𝐴2 . 2𝐴3 = (𝐿11 𝐿12 𝐿13 𝐿14 𝐿21 𝐿31 𝐿41 𝐿22 𝐿23 𝐿24 𝐿32 𝐿33 𝐿34 𝐿42 𝐿43 𝐿44 )
𝐿11 =𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃1 ×𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃2 ×𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃3 −𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃1 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃2 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃2 ×
𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃3
𝐿12 = − 𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃1 ×𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃2 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃3 −𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃1 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃2 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃3
𝐿14 =𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃1 ×𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃2 ×𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃3 × 𝑎3 −𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃1 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃2 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃3 × 𝑎3
+𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃1 ×𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃2 × 𝑎2
𝐿21 =𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃1 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃2 ×𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃3 −𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃1 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃2 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃3
𝐿22 = − 𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃1 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃2 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃3 −𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃1 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃2 ×𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃3
𝐿24 =𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃1 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃2 ×𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃3 × 𝑎3 −𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃1 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃2 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃3 × 𝑎3
+𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃1 ×𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃2 × 𝑎2
𝐿33 = 0
𝐿34 = − 𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃2 ×𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃3 × 𝑎3 −𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃2 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃3 × 𝑎3 −𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃2 × 𝑎2
+ 𝑑1
𝐿41 = 0
𝐿42 = 0
𝐿43 = 0
𝐿44 = 1
𝑀11 = (𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃1 ×𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃2 ×𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃3 − 𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃1 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃2 ×
𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃3 )(𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃4 ) + (𝜃1 ×𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃2 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃3 −𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃1 ×
𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃2 ×𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃3 )(𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃4 )
𝑀13 = 𝐿13
𝑀23 = 𝐿23
𝑀33 = 𝐿33
𝑀34 = (𝐿31 ) × (𝑐𝑜𝑠 𝑐𝑜𝑠 𝜃4 × 𝑎4 ) + (𝐿32 ) × (𝑠𝑖𝑛 𝑠𝑖𝑛 𝜃4 × 𝑎4 ) + 𝐿34
𝑀43 = 𝐿43
𝑁12 = 𝑀13
𝑁22 = 𝑀23
𝑁32 = 𝑀33
𝑀33 = (𝑀31 )(𝑆𝜃5 ) + (𝑀32 )(−𝐶𝜃5 )
𝑁42 = 𝑀45
0𝐴1 . 1𝐴2 . 2𝐴3 . 3𝐴4 . 4𝐴5 . 5𝐴6 = 𝑂11 𝑂12 𝑂13 𝑂14
𝑋𝑂 = 𝑂14
𝑂11 = (𝑁11 )(𝐶𝜃6 ) + (𝑁12 )(𝑆𝜃6 )
𝑌𝑂 = 𝑂24
𝑂12 = (𝑁11 )(−𝑆𝜃6 ) + (𝑁12 )(𝐶𝜃6 )
𝑍𝑂 = 𝑂34
𝑂13 = 𝑁13
𝑂23 = 𝑁23
𝑂24 = (𝑁21 )(𝐶𝜃6 . 𝑎6 ) + (𝑁22 )(𝑆𝜃6 . 𝑎6 ) + 𝑁24
𝑂33 = 𝑁33
𝑂43 = 𝑁43
Parte electrónica
//
#include <Servo.h>
Servo miServo1;
int valor1;
int angulo1;
Servo miServo2;
int angulo2;
Servo miServo3;
int valor3;
int angulo3;
Servo miServo4;
int valor4;
int angulo4;
Servo miServo5;
int valor5;
int angulo5;
Servo miServo6;
int valor6;
int angulo6;
void setup() {
void loop() {
valor1 = analogRead(pinPot1);
angulo1 = map(valor1, 0, 1023, 120, 0);
miServo1.write(angulo1);
delay(20);
valor2 = analogRead(pinPot2);
miServo2.write(angulo2);
delay(20);
valor3 = analogRead(pinPot3);
miServo3.write(angulo3);
delay(20);
valor4 = analogRead(pinPot4);
miServo4.write(angulo4);
delay(20);
valor5 = analogRead(pinPot5);
miServo5.write(angulo5);
delay(20);
valor6 = analogRead(pinPot6);
miServo6.write(angulo6);
delay(20);