Professional Documents
Culture Documents
2. Datos generales
Equipo de Trabajo
3. Problema
El uso de manipuladores cada vez es más común en las industrias sin embargo con el constante
desarrollo de la tecnología se requiere que los procesos a realizar sean automatizados (Guanín,
2015). La fusión entre un robot móvil y un brazo robótico es algo muy interesante debido a que
este podría llevar a cabo funciones de desplazarse tomando un objeto del punto A y llevándolo
hacia el punto B sin necesidad de la intervención de un humano.
4. Justificación
Los robots móviles pueden efectuar tareas de gran complejidad en ambientes de trabajo poco
estructurados y que representen un peligro para la vida humana (Casper & Murphy, 2003). El
impacto de los robots móviles en la vida cotidiana y en entornos profesionales es innegable, lo
que subraya la necesidad de abordar cuestiones éticas cruciales. Por ejemplo, en el ámbito
médico, la autonomía de los robots para tomar decisiones durante procedimientos quirúrgicos
plantea interrogantes éticos sobre la responsabilidad y la toma de decisiones. La utilización de
brazos acoplados a estos robots permite ampliar el rango de operaciones que se pueda realizar,
entre ellas pueden ser la desactivación de bombas, traslado de cargas, remoción de escombros
y exploración de terrenos difíciles (García, y otros, 2017). El objetivo de los robots no es sustituir
Página 1 de 18
REPUBLICA DEL ECUADOR
5. Objetivos
Objetivo General:
• Construir un robot móvil que contenga un brazo robótico encima.
Objetivos Específicos:
• Rediseñar y remplazar piezas que no sean funcionales tanto del robot móvil como del
brazo robótico.
• Programar el robot móvil para que cumpla una trayectoria asignada en Python.
• Programar y controlar el brazo robótico cumpliendo el criterio de Denavit Hartenberg.
• Validar funcionalidad.
6. Metodología
Investigación Documental: Esta investigación se realizó con el propósito de profundizar y
comparar las conceptualizaciones a detalle de los robots móviles, se tomó como base diferentes
fuentes de información tales como libros, revistas y páginas web, las mismas que ayudaron a
comprender sobre un robot móvil y un brazo robótico esto fue aplicado en su rediseño y su
programación.
Simulación: La etapa de simulación del sistema se lo realizó en tinkercad ya que esta
herramienta nos ayuda a crear circuitos antes de su implementación con los cuales pudimos
simular los movimientos de los motores, articulaciones y servomotores.
Ensamblaje: Una vez obtenidas las piezas y los componentes a utilizar se llevó a cabo la
implementación de estos, la programación del microcontrolador permite el movimiento del carro
y el brazo.
7. Cronograma y Recursos
8. Resultados
Página 3 de 18
REPUBLICA DEL ECUADOR
Tomando en cuenta el objetivo principal del proyecto el cual es la integración del brazo
robótico al robot móvil, se realiza modificaciones al diseño del robot móvil inicial, ya que
no contaba con una base ni diseño adecuado para la integración del brazo robótico, por lo
cual en la figura 2 se observa el diseño seleccionado por el grupo de trabajo.
Rueda derecha
Rueda izquierda
Con esta fórmula se transforma los valores obtenidos a grados. En la figura 4 se observa
la incorporación de los valores de la resolución de cada uno de los encoder anteriormente
obtenidos. Además, se utiliza la función void computePosicionInDegrees, la cual se
encarga de transformar los valores a grados.
Figura 4. Código para imprimir grados rotados por los encoder derecha e izquierda.
Una vez ejecutado el programa, se comprueba que el valor mostrado en el monitor serial
al momento de dar un giro completo de la rueda sea de +-360° según su sentido de giro.
Velocidad en RPM
Dentro de la programación del robot móvil se puede imprimir los valores que arroja cada
uno de los encoder, como en este caso las RPM. Los enconder permiten controlar la
velocidad angular en base a la detección de la posición y dirección de giro, con estas
variables es posible controlar el movimiento del robot móvil.
para el uso de los encoder se hace el uso de los pines que permitan PWM, que mediante
la modificación del ciclo de trabajo se consigue controlar cantidad de la energía que se
envía todo esto en un motor DC, la alimentación variara de manera proporcional con
respecto a la parte alta y baja.
Página 5 de 18
REPUBLICA DEL ECUADOR
2𝜋∗1000
Por lo cual la constante a determinar es la siguiente: 𝑅
(constValue), de cada uno de
los encoder, valores reflejados en la figura 6.
Una vez obtenidos los valores necesarios para determinar la velocidad angular tanto en la
Página 6 de 18
REPUBLICA DEL ECUADOR
rueda derecha como en la izquierda, se colocan estos datos en el archivo de Arduino lazo
abierto, con el cual se procede a realizar las determinadas pruebas de funcionamiento.
Controlador PID
Control de lazo abierto
En la representación del sistema y seguimiento de referencia que se presenta en el plano,
es posible identificar las señales apreciadas en la figura 7.
Como se observa en la figura 7 las señales tienen un cierto ruido de interferencia, esto se
debe a que el sistema aún no se encuentra optimizado, pero la reacción de estas
corresponde al desplazamiento original.
Se procede a importar el documento PSO, donde se regulan los datos con la finalidad de
corregir los ruidos presentados anteriormente. Una vez finalizada las correcciones se
ejecuta el programa firstOrderSystem donde se procede a llamar a RSO, dando asi la
siguiente gráfica (Figura 9).
Página 8 de 18
REPUBLICA DEL ECUADOR
Brazo Robótico
Cinemática directa
En el problema cinemático directo se conocen los valores de sus coordenadas
articulares y busca determinar la posición del efector final, esto se refiere que la
solución encontrada será única. En generar, un robot de n grados de libertad está
formado por n eslabones unidos a n articulaciones, a cada eslabón se le puede asociar
un sistema de referencia y utilizando las transformaciones homogéneas es posible
representar las rotaciones y traslaciones relativas entre los distintos eslabones que
componen el brazo robot (García, y otros, 2017).
Página 9 de 18
REPUBLICA DEL ECUADOR
Se debe tener en cuenta que el producto de las matrices no es conmutativo, por lo tanto,
se deben ejecutar en el siguiente orden:
i-1Ai =𝑅𝑜𝑡𝑧(𝜃𝑖) ∗ 𝑇(0,0, 𝑑𝑖) ∗ 𝑇(𝑎𝑖, 0,0) ∗ 𝑅𝑜𝑡𝑥(𝖺𝑖)
Debido a que un robot es considerado como una cadena cinemática que se encuentra
conformado por eslabones unidos entre si mediante articulaciones, se puede establecer
un sistema de referencia fijo en la base del robot y de esta manera poder describir de
una mejor manera la localización de cada uno de los eslabones, tomando como
referencia dicho sistema de origen (R. Kryscia, 2021).
Cinemática inversa
Según R. Maria En el caso de la cinemática inversa se conoce la posición y orientación
del efector final, pero se desconocen las variables articulares. Por lo tanto, es necesario
resolver un conjunto de ecuaciones no lineales, de manera que se implementan
diferentes métodos numéricos para obtener el resultado correcto.
Página 10 de 18
REPUBLICA DEL ECUADOR
Página 11 de 18
REPUBLICA DEL ECUADOR
Materiales:
• Impresora 3D
• Computadora
• Filamento PETG • Placa Arduino UNO
• Protoboard.
• Jumpers (Macho – Macho, Macho - Hembra)
• Pulsador
• 3 servomotores Sg90
• 3 servomotores Mg7
• 7 pasadores 2/16
• 4 pernos M4 x 1
• Corte laser
• Placa esp32
• Baterias
• Fuente 1A
Página 12 de 18
REPUBLICA DEL ECUADOR
9. Bibliografía
Bibliografía
Casper, J., & Murphy, R. (2003). Robot interactions during the robot-assited urban
search and rescue response at the World Trade Center. IEEE TRANSACTIONS
ON SYSTEMS.
García, J., Medina, I., Martínez, J., García, A., Linares, A., & Porras, C. (2017). Robót
móvil dotado de brazo para contacto con el suelo. Revista iberoamericana de
automática e informática industrial, 174-183.
Guanín, E. (2015). Sistema de control electrónico mediante comandos de voz para un
robot secuencial.
Robotnik. (31 de Marzo de 2023). Robornik:Usos y ventajas de los cobots en la
industria manufacturera. Obtenido de https://robotnik.eu/es/usos-y-ventajas-de-
los-cobots-en-la-industria-manufacturera/
Guanín Eduardo. (2015). Sistema de control electrónico mediante comandos de voz
para un robot secuencial.
10. Anexos
CODIGO ARUINO PARA ROBOT MOVIL
#include <motorControl.h>
Página 13 de 18
REPUBLICA DEL ECUADOR
//----------SAMPLING VARIABLES----------//
unsigned long lastTime = 0;
unsigned long sampleTime = 100;
//***DATA RECEPTION**//
String inputString = "";
bool stringComplete = false;
const char separador = ',';
const int dataLength = 2;
double datos[dataLength];
//***PID CONTROLER**///
motorControl motorR(sampleTime);
motorControl motorL(sampleTime);
//----------LEFT ENGINE----------//
const int C1L = 33; //Encoder signal A input - Yellow colored wire.
const int C2L = 32; //Encoder signal B input - Green colored wire.
volatile int nL = 0;
volatile byte antL = 0;
volatile byte actL = 0;
volatile byte estadoL = 0;
//----------RIGHT ENGINE----------//
const int C1R = 34; //Encoder signal B input - Green colored wire.
const int C2R = 35; //Encoder signal A input - Yellow colored wire.
volatile int nR = 0;
volatile byte antR = 0;
volatile byte actR = 0;
volatile byte estadoR = 0;
//Anti-clockwise
if (antR == 0 && actR == 2) nR++;
if (antR == 1 && actR == 0) nR++;
if (antR == 2 && actR == 3) nR++;
if (antR == 3 && actR == 1) nR++;
//Clockwise
if (antR == 0 && actR == 1) nR--;
if (antR == 1 && actR == 3) nR--;
if (antR == 2 && actR == 0) nR--;
if (antR == 3 && actR == 2) nR--;
}
//Anti-clockwise
if (antL == 0 && actL == 2) nL++;
if (antL == 1 && actL == 0) nL++;
if (antL == 2 && actL == 3) nL++;
if (antL == 3 && actL == 1) nL++;
//Clockwise
if (antL == 0 && actL == 1) nL--;
if (antL == 1 && actL == 3) nL--;
if (antL == 2 && actL == 0) nL--;
if (antL == 3 && actL == 2) nL--;
}
Página 15 de 18
REPUBLICA DEL ECUADOR
//***CONTROL VARIABLE***//
int cvR = 0;
int cvL = 0;
//**PWM VARIABLE**///
const int PWMfreq = 6000;
const int PWMres = 8;
void setup() {
Serial.begin(9600);
motorR.setCvLimits(255,180);
motorR.setPvLimits(4062,0);
motorL.setCvLimits(255,180);
motorL.setPvLimits(4085,0);
//----------INPUTS----------//
pinMode(C1R, INPUT);
pinMode(C2R, INPUT);
pinMode(C1L, INPUT);
pinMode(C2L, INPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
digitalWrite(in1, 0);
digitalWrite(in2, 0);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
//----------INTERRUPTIONS----------//
attachInterrupt(C1R, encoderR, CHANGE);
attachInterrupt(C2R, encoderR, CHANGE);
attachInterrupt(C1L, encoderL, CHANGE);
attachInterrupt(C2L, encoderL, CHANGE);
//**PWM**///
ledcSetup(1, PWMfreq, PWMres);
ledcAttachPin(ena, 1);
Página 16 de 18
REPUBLICA DEL ECUADOR
void loop() {
serialEvent();
if (stringComplete) {
for (int i = 0; i < dataLength; i++) {
int index = inputString.indexOf(separador);
datos[i] = inputString.substring(0, index).toFloat();
inputString = inputString.substring(index + 1);
}
cvR = motorR.scaleCv(datos[0]);
cvL = motorL.scaleCv(datos [1]);
inputString = "";
stringComplete = false;
}
if (millis() - lastTime >= sampleTime) {
computeW();
wR = motorR.scalePv(wR);
wL = motorL.scalePv(wL);
Serial.println(wR);
Serial.println(wL);
delay(500);
}
}
void computeW(void) {
wR = (constValueR * nR) / ((millis() - lastTime));
wL = (constValueL * nL) / ((millis() - lastTime));
lastTime = millis();
nR = 0;
nL = 0;
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
Página 17 de 18
REPUBLICA DEL ECUADOR
void anticlockwise (int pin1, int pin2, int analogPin, int PWM) {
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
ledcWrite(analogPin, PWM);
}
void clockwise (int pin1, int pin2, int analogPin, int PWM) {
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
ledcWrite(analogPin, PWM);
}
Página 18 de 18