PROGRAMACION DE UN BRAZO ROBOTICO
MANIPULADOR BASADO EN EL IBR140 PARA
EL TRASLADO DE PROBETAS DE ANALISIS
BACTEREOLÓGICO
Gerard, Ramírez Araujo., Sharp Santillán Obiaga.
Universidad Nacional del Callao
glramireza@[Link]
fssantillano@[Link]
Abstract describe la posición, perspectiva, escala y
orientación. En el caso de la cinemática
Within robotics, there are different
inversa, en la que se realiza un análisis
mathematical methods that are used to
geométrico para obtener datos del
describe and model the behavior of
manipulador desde un punto final. En el caso
manipulators, such as direct kinematics that
de la dinámica, es un análisis que nos permite
describe position, perspective, scale and
obtener velocidad, aceleración, par, etc. A
orientation. In the case of inverse
partir del vector de posición. En el presente
kinematics, in which a geometric analysis is
trabajo se presenta la programación para un
performed to obtain manipulator data from
robot de la marca ABB modelo IRB140 para
an end point. In the case of dynamics, it is
la automatización del proceso de análisis
an analysis that allows us to obtain speed,
bacteriológico en laboratorios clínicos, de
acceleration, torque, etc. From the position
carácter formativo y bajos costos, con el cual
vector. In the present work, the
se pueden desarrollar prácticas en robótica y
programming for a robot of the ABB brand
automatización, con la intención minina de la
model IRB140 is presented for the
mano humana y ser más precisos en el
automation of the bacteriological analysis
análisis de las bacterias que se puedan
process in clinical laboratories, of a training
encontrar en los compuestos dentro de las
nature and low costs, with which practices
probetas.
in robotics and automation can be
developed, with the minimal intention of the Palabras clave: Robot, antropomórfico,
human hand and to be more precise in the bacteriología, cinemática.
analysis of the bacteria that can be found in
1. INTRODUCCION
the compounds within the test tubes.
Un robot manipulador serial industrial
Keywords: Robot, anthropomorphic,
también conocido como brazo manipulador,
bacteriology, kinematics.
es una estructura mecánica consistente en una
Resumen secuencia de eslabones conectados por medio
de articulaciones, que se caracteriza por un
Dentro de la robótica, existen brazo que asegura movilidad, una muñeca
diferentes métodos matemáticos que se que confiere destreza y un efector final que se
utilizan para la descripción y modelado del mueve dentro de un espacio de trabajo y se
comportamiento de los manipuladores, como encarga de realizar las tareas requeridas por el
es el caso de la cinemática directa que robot (Bravo & Reyes, 2009). La simulación
es una herramienta utilizada para evaluar, eléctrico. Existen diferentes tipos y clases de robots,
predecir y reproducir el comportamiento de entre ellos con forma humana, de animales, de plantas o
incluso de elementos arquitectónicos, pero todos se
los robots en su movimiento, además de diferencian por sus capacidades y se clasifican en 4
verificar y optimizar la planificación de la formas:
trayectoria del proceso. La simulación 1) Androides: Robots con forma humana. Imitan el
utilizando un computador mediante un comportamiento de las personas, su utilidad en la
actualidad es de solo experimentación. El principal
software apropiado es un complemento en el limitante de este modelo es la implementación del
desarrollo de procesos, previo a la etapa equilibrio en el desplazamiento, pues es bípedo.
experimental. Para el desarrollo de una
simulación es necesario conocer el modelo 2) Móviles: Se desplazan mediante una plataforma
exacto del sistema; por lo que se requiere un rodante (ruedas); estos robots aseguran el transporte
de piezas de un punto a otro.
lenguaje de programación matemático de alto
nivel como lo es el software MATLAB, el 3) Zoomórficos: Es un sistema de locomoción
mismo que posee un entorno gráfico imitando a los animales. La aplicación de estos
amigable al usuario a través de herramientas robots sirve, sobre todo, para el estudio de volcanes
y exploración espacial.
y utilerías para el desarrollo de sistemas
aplicados a la robótica. 4) Poli articulados: Mueven sus extremidades con
Los robots reemplazan al humano fácilmente pocos grados de libertad. Su principal utilidad es
porque pueden realizar numerosas tareas industrial, para desplazar elementos que requieren
repetitivas sin equivocarse, no son afectados cuidados.
por el cansancio físico y realizan trabajos B. Grados de Libertad
peligrosos para la salud humana. Se pueden
adaptar a los cambios con base en la demanda Se puede definir como cada una de las variables
variable, además de disminuir los costos de necesarias para obtener los movimientos de un cuerpo
producción de una manera significativa. en el espacio. El máximo de variables es de 6, cuando el
número de grados de libertad es mayor se denomina
Actualmente, se los utilizan en casi todos las redundancia. De cada articulación del robot industrial es
áreas productivas y tipos de industrias como: igual al total de GDL del propio robot. En la práctica en
ensamblado, soldadura, automovilística, robótica solo se emplean articulaciones de sólo 1GDL,
ensamblaje de circuitos eléctricos, etc. (rotación y prismática) por lo tanto el número de GDL
También tienen aplicaciones no industriales de un robot suele coincidir con el número de
articulaciones que posee. Existen 2 formas de
como espaciales, submarinas, subterráneas, articulaciones:
militares, médicas, agrícolas, etc. - Prismática o lineal, accionada por un tornillo
En este proyecto, se realizan análisis sinfín.
cinemáticos de un brazo robótico de seis - Rotacional, la junta gira accionada por el
grados de libertad y se lo automatiza por motor eléctrico o por hidráulica.
medio del lenguaje de Matlab, con función en Las articulaciones permiten el movimiento relativo
entre dos elementos en contacto. Los GDL de una
una industria de ensamblaje de objetos, para
articulación son cada uno de los movimientos
optimizar el proceso de una fábrica y sustituir independientes que en una articulación puede realizar
la interacción del hombre en ciertas líneas de un elemento con respecto al otro. Existen dos tipos de
la producción, para ejecutar la tarea movimiento en las articulaciones: Desplazamiento y
específica de trasladar las probetas de una rotación.
ubicación a otra con libertad, sin colisionar C. Cinemática de un robot
con obstáculos.
Se limita al estudio de la trayectoria que tiene el robot a
2. DEFINICIONES lo largo del tiempo, considerando tan solo la posición,
la velocidad y en ocasiones la aceleración e incluso su
A. ¿Qué es un robot? derivada. Se trata de una descripción analítica del
movimiento espacial del robot como una función del
tiempo.
Un robot es una entidad virtual o mecánica artificial. En
La cinemática del robot consiste en estudiar su
la práctica, esto es por lo general un sistema
movimiento con respecto a un sistema de referencia que
electromecánico que normalmente es conducido por un
determina las relaciones entre la posición y orientación
programa de una computadora o por un circuito
del extremo del robot (localización) y los valores de sus
coordenadas articulares.
1) Cinemática Directa: Determina la posición y Fig. 2 Robot IRB140
orientación del extremo final del robot, con respecto a
un sistema de coordenadas de referencia fijo, conocidos
los valores de las articulaciones. Para el diseño en físico se tomó uno de un
2) Cinemática Inversa: Determina la configuración trabajo ya realizado que se muestra a
que debe adoptar el robot para una posición y continuación, este diseño fue hecho por el
orientación del extremo conocidas. autor en el SolidWorks.
Fig. 1 Cinemática Directa vs Cinemática Inversa.
Fig. 3 Diseño del robot en SolidWorks
3. CARACTERÍSTICAS DEL ROBOT
Las órdenes de control fueron programadas
Para el desarrollo del proyecto se hará desde Matlab mediante el cálculo de los
uso del robot IRB140, el cual se encuentra en parámetros Denavit-Hartenberg, que permiten
la librería ARTE de MATLAB mediante este hacer el análisis de la cinemática inversa y
software se desarrollará la programación y determinar los ángulos que debe tomar cada
simulación del mismo. una de las articulaciones del robot, para crear
las secuencias de movimientos que va a
IRB 140 cumplir el brazo en el desarrollo de sus
Un robot de 6 ejes pequeño, potente y rápido tareas.
Compacto y muy potente. El robot industrial Se piensa trabajar con el ARDUINO para su
multiusos de 6 ejes IRB 140 soporta una desarrollo físico ya que este sería el que
carga de 6 kg con un alcance de 810 mm (con recibe la información proveniente de
respecto al eje 5). Se puede instalar en el MATLAB, información que enviara en forma
suelo, de manera invertida o en la pared desde de PWM para poder controlar los
cualquier ángulo. Disponible en las siguientes servomotores.
versiones: estándar, FoundryPlus, Clean
Room y Hermético, en el que el robot tiene Lenguaje de programación RAPID
una completa protección IP67 que lo hace
apropiado para una extensa gama de RAPID es un lenguaje de programación de
aplicaciones. Su diseño robusto, con cables alto nivel diseñado por la compañía ABB
completamente integrados, además de su para el control de los robots industriales. Este
completa flexibilidad y su función de lenguaje, proporciona un conjunto
detección de colisiones con completa considerable de consignas (como funciones o
retracción de la trayectoria, aseguran la rutinas), aritmética y expresiones lógicas,
fiabilidad y seguridad de este robot. gestión de errores, multitarea, etc. Por lo que
se está utilizando con gran éxito para manejar
algunas operaciones industriales complicadas
y complejas en el ámbito robótico.
Una aplicación RAPID consta de un
programa y una serie de módulos del sistema.
Podemos decir por tanto que básicamente, un
programa de RAPID contiene un conjunto de
instrucciones que describen cómo funciona d) Θi: Angulo entre Xi-1 y Xi medido
un robot. Estas últimas en su mayoría, poseen respecto a Zi-1 para articulaciones de
una serie de argumentos que son utilizados revolución Θi es variable.
para definir un movimiento del brazo robot
Generalizando, podríamos deducir, que el
programa es una secuencia de instrucciones
que controlan el robot y que en general consta
de tres partes: rutina principal, subrutinas y
los datos del programa. En la figura siguiente
observamos la estructura básica de un programa
desarrollado en lenguaje RAPID en el que
localizamos cada una de las partes que acabamos
de mencionar anteriormente.
Arti. θ d a α
1 q1 0.352 0.07 −π / 2
Fig. 4 Esquema básico de la estructura de un Script en
2 q 2−π /2 0 0. 36 0
Rapid 3 θ3 0 0 −π / 2
DENAVIT-HARTENBERG. 4 θ4 0.38 0 π /2
El método de cinemática directa tiene como 5 θ5 0 0 −π / 2
función encontrar las relaciones que permiten 6 q 6−π /2 0.065 0 0
conocer la localización espacial del extremo
Fig. 5 Representación D-H.
final del robot a partir del valor de sus
coordenadas articulares para lo cual se utiliza Tabla 1. Parámetros D-H.
el algoritmo de Denavit-Hartenberg (Spong
M. W., 2004). Se realiza el análisis para un Al reemplazar en la ecuación de arriba se
robot cilíndrico, los primeros pasos del podrá observar las matrices de transformación
algoritmo de Denavit-Hartenberg consisten para cada uno de las articulaciones, para la
en normalizar y generar los sistemas de cinemática directa.
referencia, orígenes, variables de análisis, etc.
de acorde a cada tipo de articulación como se 4. SIMULACIÓN
muestra en la figura 1, el último paso del
algoritmo consiste en obtener la tabla de Posición inicial de nuestro robot.
parámetros como se muestra en la tabla 1 que
queda definida por los siguientes puntos:
a) ai: Distancia a lo largo de Xi del origen Oi
a la intersección de Xi con Zi-1.
b) di: Distancia a lo largo de Zi-1 del origen
Oi-1 a la intersección de Xi con Zi-1 para
articulaciones prismáticas di es variable.
c) αi: Angulo entre Zi-1 y Zi medido con
respecto a Xi.
Fig. 6 Representación de la posición inicial..
Con el comando teach que nos proporciona el - D. J. Aznar, Manual de obtención y manejo de
MATLAB se procedió a enseñar los muestras para el laboratorio clínico.
movimientos que debe de realizar el robot. Andalucía: Servicio Andaluz de Salud, 2009,
pp. 12-24.
Fig. 7 Interfaz del comando Teach.
Fig. 8 Funcionamiento del brazo.
5. CONCLUSIONES
- En las aplicaciones industriales un brazo
con las características que integra el
desarrollado en este proyecto sería una
buena herramienta de apoyo, por sus
diversas ventajas, tanto en agilidad,
eficiencia, velocidad, además que puede ser
reprogramado fácilmente para que cumpla
con el desplazamiento de cargas en
diferentes trayectorias.
- Aún nos falta el control mediante una
interfaz manual para más facilidad de uso al
usuario, ya que todo se variaría por medio
de la programación.
6. BIBLIOGRAFIA
- V. F. Martínez, La automática y la robótica
aplicadas a la medicina. I Workshop Español
de Robótica, ROBOT. Zaragoza, 2007, p.
1223.
- A. Barrientos, Fundamentos de Robótica.
España: McGraw-Hill, pp. 125-130, 2007.
ANEXO
RobotCollet 1.0
Para inicializar el sistema buscamos la ubicación de la librería ARTE con el comando
cd G:\MATLAB\lib\ARTE
Figura 9 – Comando para inicializar la librería
Cargar un robot y representación CAD
Para cargar un robot
robot = load_robot('ABB','IRB140');
Para cargar un ambiente
[Link]{1} = load_robot('equipment','tables/table_two_areas');
Para cargar una herramienta
[Link]= load_robot('equipment','end_tools/parallel_gripper_0');
Para cargar una pieza
[Link]{1}=load_robot('equipment','cylinders/cylinder_tiny');
[Link]{2}=load_robot('equipment','cylinders/cylinder_tiny');
[Link]{3}=load_robot('equipment','cylinders/cylinder_tiny');
Programación RAPID
El lenguaje RAPID es un lenguaje para programar robots ABB. Con la programación en el
lenguaje RAPID a través de Matlab se pueden programar diferentes labores y/o
experimentos con los robots. Estos programas pueden ser usados en el ámbito de la
docencia a través de la simulación y en el escenario investigativo donde además de
trabajar en un ambiente de simulación si se cuenta con un robot real se pueden llevar el
código compilado en Matlab a un tipo de archivo que puede ser usado en robot real.
El punto de destino: contiene la posición y orientación, la configuración del robot y
la posición de los ejes externos.
RT_pos_ini=[[0.044,-0.501,0.432],[0.262525,0.622008,0.673812,-0.300276],
[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
RT_aprox_rec=[[0.03,-0.6,0.45],[0.08,0.60337,0.79283,-0.03126],[0,0,0,0],
[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
RT_pos_rec= [[0.0345,-0.629,0.337],[0.261833,0.652321,0.67413,-0.226869],
[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
RT_aprox_dej=[[0.470,-0.460,0.500],[0.07981,0.603204,0.792983,-0.030902],
[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
RT_pos_dej=[[0.470,-0.460,0.450],[0.07981,0.603204,0.792983,-0.030902],
[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
A través de las funciones MoveJ, MoveC, MoveAbsJ, MoveL y Offs se puede simular el
movimiento deseado del brazo robótico. El argumento de estas funciones lo compone:
Se usa para mover el brazo del robot con un movimiento independiente de las
articulaciones.
MoveJ(RT_aprox_rec,'vmax','z100',TD_gripper, 'wobj0');
MoveJ(RT_aprox_dej,'vmax','z100',TD_gripper, 'wobj0');
Offs( robtarget, X, Y, Z) programa un desplazamiento relativo desde un destino
especificado.
MoveL(Offs(RT_pos_dej,-0.055,0,0),'v1000','z100',TD_gripper, 'wobj0');
MoveL(Offs(RT_pos_dej,-0.055,0,-0.105),'v1000','fine',TD_gripper,
'wobj0');
Se mueve el brazo del robot a una posición articular absoluta.
MoveAbsJ(RJ_ini,'vmax','z100',TD_gripper, 'wobj0');
CODIGO:
function RobotCollet
%Primero se declaran las variables que intervienen
global RT_pos_ini RJ_ini RT_aprox_rec RT_pos_rec
global RT_aprox_dej RT_pos_dej TD_gripper VAR_pieza
global robot
%Se establece la posición final de la pinza
TD_gripper=[1,[[0,0,0.125],[1,0,0,0]],[0.1,[0,0,0.100],[1,0,0,0],0,0,0]];
%Se estable como se mueve el robot
RJ_ini=[0,0,0,0,0,0];
RT_pos_ini=[[0.044,-0.501,0.432],[0.262525,0.622008,0.673812,-0.300276],
[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
RT_aprox_rec=[[0.03,-0.6,0.45],[0.08,0.60337,0.79283,-0.03126],[0,0,0,0],
[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
RT_pos_rec=[[0.0345,-0.629,0.337],[0.261833,0.652321,0.67413,-0.226869],
[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
RT_aprox_dej=[[0.470,-0.460,0.500],[0.07981,0.603204,0.792983,-0.030902],
[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
RT_pos_dej=[[0.470,-0.460,0.450],[0.07981,0.603204,0.792983,-0.030902],
[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
%Luego se carga el robot y su ambiente
robot = load_robot('ABB','IRB140');
[Link]{1} = load_robot('equipment','tables/table_two_areas');
[Link]= load_robot('equipment','end_tools/parallel_gripper_0');
[Link]{1}=load_robot('equipment','cylinders/cylinder_tiny');
[Link]{2}=load_robot('equipment','cylinders/cylinder_tiny');
[Link]{3}=load_robot('equipment','cylinders/cylinder_tiny');
[Link].draw_axes=0;
[Link].draw_axes=0;
[Link]{1}.graphical.draw_axes=0;
[Link]{1}.graphical.draw_axes=0;
[Link]{2}.graphical.draw_axes=0;
[Link]{3}.graphical.draw_axes=0;
%Se establece la cantidad de veces que la pinza se cierra
for i=1:3
[Link]{i}.piece_gripped = 0;
end
%se dibuja el robot IRB140
drawrobot3d(robot)
%se llama a la función init_simulation
init_simulation;
VAR_pieza=0;
main
end
function main()
global RJ_ini TD_gripper VAR_pieza
%Inicializamos la pieza
VAR_pieza=0;
MoveAbsJ(RJ_ini,'vmax','z100',TD_gripper, 'wobj0');
%ejecutamos el bucle para dejar la pieza
for i=1:4
ASIR_DEJAR();
VAR_pieza=VAR_pieza +1;
init_simulation;
end
end
function ASIR_DEJAR()
global RT_aprox_rec RT_aprox_dej TD_gripper
MoveJ(RT_aprox_rec,'vmax','z100',TD_gripper, 'wobj0');
COGER_PIEZA;
MoveJ(RT_aprox_dej,'vmax','z100',TD_gripper, 'wobj0');
METER_EN_CAJA;
end
%ejecutamos el bucle para coger la pieza
function COGER_PIEZA()
global RT_aprox_rec RT_pos_rec TD_gripper
simulation_open_tool;
WaitTime(0.1);!esperar apertura
MoveL(RT_pos_rec,'vmax','fine',TD_gripper, 'wobj0');
simulation_close_tool;
simulation_grip_piece;
WaitTime(0.1); !esperar cierre
MoveL(RT_aprox_rec,'vmax','z50',TD_gripper, 'wobj0');
end
function METER_EN_CAJA()
global RT_pos_dej TD_gripper VAR_pieza
if VAR_pieza==0
MoveL(Offs(RT_pos_dej,0,0,-0.105),'v1000','fine',TD_gripper,
'wobj0');
elseif VAR_pieza==1
MoveL(Offs(RT_pos_dej,-0.055,0,0),'v1000','z100',TD_gripper,
'wobj0');
MoveL(Offs(RT_pos_dej,-0.055,0,-0.105),'v1000','fine',TD_gripper,
'wobj0');
elseif VAR_pieza==2
MoveL(Offs(RT_pos_dej,0,-0.055,0),'v1000','fine',TD_gripper,
'wobj0');
MoveL(Offs(RT_pos_dej,0,-0.055,-0.105),'v1000','fine',TD_gripper,
'wobj0');
else
MoveL(Offs(RT_pos_dej,-0.055,-0.055,0),'v1000','fine',TD_gripper,
'wobj0');
MoveL(Offs(RT_pos_dej,-0.055,-0.055,-
0.105),'v1000','fine',TD_gripper, 'wobj0');
end
simulation_open_tool;
simulation_release_piece;
plot_points;
WaitTime(0.5);
MoveL(Offs(RT_pos_dej,0,0,0.105),'v1000','z10',TD_gripper, 'wobj0');
end
function init_simulation
global robot
[Link]=eye(4);
simulation_open_tool;
for i=1:3
simulation_release_piece(i);
[Link]{i}.T0=eye(4);
[Link]{i}.piece_gripped = 0;
[Link]{i}.T0(1:3,4)=[0.03*i -0.68 0.26]';
end
th=-30*pi/180;
drawrobot3d(robot, robot.q);
end
function plot_points
x0=0.47;
y0=-0.46;
z0=0.45-0.155;
delta=0.055;
X=[x0 x0-delta x0 x0-delta];
Y=[y0 y0 y0-delta y0-delta];
Z=[z0 z0 z0 z0];
plot3(X', Y', Z', 'LineWidth', 5)
end