Sunteți pe pagina 1din 51

UNIVERSIDAD NACIONAL DE TRUJILLO

Facultad de Ingeniería
Escuela de Ingeniería Mecatrónica

CURSO : ROBÓTICA

TEMA : CONTROL DE UN ROBOT MÓVIL MEDIANTE


GUIDE DE MATLAB APLICADO AL MONITOREO
DE FRUTAS

ALUMNO : BARTOLO ESCOBAL, RAFAEL


CASTILLO SIFUENTES, WILMER
ESQUIVEL VENTURA, FRANCISCO

DOCENTE : Ing. ALVA ALCÁNTARA, JOSMEL HENRY

CICLO : IX

TRUJILLO - PERÚ

2017
ÍNDICE
1. Resumen.................................................................................................... 1
2. Capítulo I.................................................................................................... 1
2.1. Planteamiento del Problema ................................................................ 1
2.2. Hipótesis .............................................................................................. 2
2.3. Objetivos .............................................................................................. 2
2.4. Materiales ............................................................................................ 2
3. Capítulo II................................................................................................... 3
3.1. Procedimiento ...................................................................................... 3
3.1.1. Configuración del Robot Móvil Ackerman ...................................... 3
3.1.2. Modelo Cinemático del Robot Móvil Ackerman .............................. 4
3.1.3. Modelo Dinámico de la configuración Ackerman............................ 8
3.1.4. Modelo dinámico del motor DC .................................................... 12
3.1.5.Diseño Cad………………………………………………………………..13
4. Capítulo III................................................................................................ 14
4.1. Conclusiones ...................................................................................... 14
4.2. Bibliografía ......................................................................................... 14
4.3. Anexos ............................................................................................... 15
1. Resumen

Conforme fue evolucionando la robótica se desarrollaron diversas metodologías para

hacer más eficiente el movimiento autónomo de los robots. Gran cantidad de estas

metodologías se desarrollaron para movilizar al robot en un entorno con obstáculos no

estables. Se obtuvieron buenos resultados a costa de la alta complejidad de sus

algoritmos, así como la gran cantidad de sensores implementados en el robot y entorno.

El presente proyecto busca la implementación física de un robot móvil para tomar

fotografías a plantas y realizar el procesamiento digital en el software Matlab usando

una cámara IP, con navegación autónoma dentro del terreno, detectando y/o evitando

obstáculos. Definidas las condiciones del terreno y su distribución; fueron probados

algunos algoritmos de planeación de trayectorias, para seleccionar el más eficiente que

se adapta a la aplicación. También se tuvo que diseñar algoritmos acorde a las

condiciones dadas para la movilidad del proyecto y realizar que el procesamiento de

imágenes sea lo más eficiente posible.

Se resalta que todo el proyecto fue realizado en un entorno gráfico (GUIDE) del

programa Matlab.

2. Capítulo I

2.1. Planteamiento del Problema

A. Formulación del Problema:

Con el proyecto a desarrollar, se quieren resolver los siguientes problemas:

a. Traslado de una coordenada inicial a otra final autónomamente, con las

posiciones previamente configuradas.

b. Conexión del móvil, cámara y arduino mediante Wifi.

c. Tomar fotografías y procesarlas en el software Matlab usando una laptop.

d. Monitorear en tiempo real la navegación del robot.

1
2.2. Hipótesis

“Con el uso de códigos de generación de trayectorias y procesamiento de

imágenes, se verifica la posibilidad de que un robot móvil siga una trayectoria, y

realice la verificación de estado de plantas y/o frutas.”

2.3. Objetivos

A. General

✓ Implementar un robot móvil de configuración ackerman que tome y procese

fotografías a plantas usando una cámara IP para clasificación de las

mismsas.

B. Específico

✓ Implementar algoritmos para realizar el procesamiento de imágenes

usando Matlab.

✓ Decepcionar y enviar datos mediante una red Wifi.

✓ Verificar el sistema de control automatizado a través programas que nos

permitan realizar una correcta simulación.

✓ Establecer los procedimientos para un correcto funcionamiento del robot

móvil de configuración ackerman.

✓ Evaluar económicamente el robot móvil de configuración ackerman.

2.4. Materiales:

N° MATERIAL ESPECIFICACIONES TÉCNICAS


Microcontrolador: ATmega328P
Chip USB: ATmega16U2
Voltaje de Operación: 5V
Voltaje de alimentación: 6-20V (7-12V
recomendado)
Arduino Uno R3 Pines digitales I/O: 14 (6 salidas PWM)
Entradas analógicas: 6
Corriente máxima entrada/salida: 40mA
Memoria flash: 32K
Memoria SRAM: 2K
Memoria EEPROM: 1K
1 Velocidad de reloj: 16Mhz

2
Voltaje de Operación: 5V DC
Chip Ethernet: Wiznet W5100
Velocidad Ethernet: 10/100 Mbps
Shiled Ethernet Interface: SPI
Compatible con Arduino Uno, Mega,
Leonardo
2 Lector MicroSD Card
3 Motor Voltaje de operación : 6V DC
4 Access Point Voltaje de operación : 12V DC
5 Repetidor de señal Voltaje de operación : 12V DC
6 Rele Voltaje de operación : 6V DC
Transistor NPN
3 Pines
Temperatura mácxima: 25°C
Transistor BD135 Maxima corriente Ic:1.5A
Máxma carga de disipación Ptot:12.5W
Disipación:1.25W
7 Tipo de transistor:Bipolar
8 Cable alimentación n° 18
9 Cable Ethernet Para puerto RJ45
10 Platina 1/4x1"
11 Pernos 3/16x2"
12 Baterias una de 6V y otra de 12V

3. Capítulo II

3.1. Procedimiento

3.1.1. Configuración del Robot Móvil Ackerman

Un robot en configuración Ackerman consiste en un cuerpo rígido con centro

de masa y gravedad P0, radio de rotación RG, masa MG y un momento de

inercia IG con dos ruedas traseras no deformables y no orientables (fijas)

separadas una distancia b entre ellas y a una distancia l de dos ruedas

delanteras orientables (también a una distancia b entre ellas) tal y como se

muestra en las figuras 19 y 20. La dirección Ackerman modifica la orientación

de las ruedas delanteras de tal forma que, a bajas velocidades, todas las

ruedas cumplen con la condición de rodamiento puro sin deslizamiento lateral

[19]. Esto se produce debido a que, a baja velocidad, cada rueda sigue una

trayectoria curva con radios distintos, pero con un centro instantáneo de

3
rotación común Cr. Esta configuración se analiza utilizando el modelo de la

bicicleta ([19], [20]) suponiendo que el movimiento se restringe a un plano

horizontal. Con esto, se utiliza el promedio Φ de los ángulos de las ruedas

frontales (Φi, Φo) y las ruedas traseras se consideran como una rueda

equivalente en donde se aplica la fuerza del motor. A diferencia del caso

diferencial, los de configuración Ackerman pueden ir a una velocidad en la

cual se presente deslizamiento, por lo que será considerado en el modelo, a

menos que se garantice una velocidad baja en la plataforma según las

condiciones establecidas en [20].

3.1.2. Modelo Cinemático del Robot Móvil Ackerman

El modelo cinemático de esta configuración representa la evolución de las

velocidades del robot en un marco inercial fijo. La postura del robot se define

mediante las coordenadas del punto P0 = (x, y) y el ángulo de avance θ en el

marco de referencia global (XG, YG) en la figura 19.

Conociendo las velocidades lineales y angulares (v y ω) en el marco de

referencia local (XL, YL), la velocidad global del robot se define según la

ecuación (1).

𝑥̇ cos 𝜃 − sin 𝜃 0 𝑣𝑥 𝑥̇ = 𝑣𝑥 (𝑡) cos 𝜃 (𝑡) − 𝑣𝑦 (𝑡) sin 𝜃 (𝑡)


[ ẏ ] = [ sin 𝜃 cos 𝜃 0] [𝑣𝑦 ] ⇒ 𝑦̇ = 𝑣𝑦 (𝑡) cos 𝜃 (𝑡) + 𝑣𝑥 (𝑡) sin 𝜃 (𝑡) … (1)
𝜃̇ 0 0 1 𝜔 𝜃̇ = 𝜔(𝑡)

Existen muchas formas de resolver esta ecuación diferencial, sin embargo,

es conveniente obtener el resultado exacto de la integral y evaluar el uso de

aproximaciones que se consideren convenientes para simplificar el cálculo en

la ejecución del algoritmo sobre el robot.

La solución exacta de (1) se calcula de forma discreta para un periodo de

muestreo Ts = tk+1 − tk de forma que se obtenga una ecuación recursiva que

pueda implementarse dentro del robot. De esta forma se define el intervalo

de tiempo entre dos instantes consecutivos de muestreo mostrado en (2).

4
𝑇𝑘 = { 𝑡 ∈ ℝ|𝑘𝑇𝑠 ≤ 𝑡 < (𝑘 + 1)𝑇𝑠 }, 𝑘 = 0, 1, 2, … (2)

Para simplificar la deducción de las ecuaciones se define tk = kTs, tk+1 = (k +

1) Ts. Se considera que las velocidades (vx, vy, ω) son constantes en el

intervalo de integración (no cambian mientras se realiza el muestreo en Ts, lo

que es equivalente a decir que se tiene un retenedor de orden cero (ZOH) en

estas entradas, adquiriendo el valor en tk ⇒ vx (tk), vy (tk), ω (tk) son constantes.

De esta forma se plantea la integral en (3).


𝑡 𝑡
𝑥(𝑡) = 𝑥(𝑡𝑘 ) + 𝑣𝑥 (𝑡𝑘 ) ∫ cos(𝜃(𝜏)) 𝑑𝜏 − 𝑣𝑦 (𝑡𝑘 ) ∫ sin(𝜃(𝜏)) 𝑑𝜏
𝑡𝑘 𝑡𝑘
𝑡 𝑡
𝑦(𝑡) = 𝑦(𝑡𝑘 ) + 𝑣𝑥 (𝑡𝑘 ) ∫ sin(𝜃(𝜏)) 𝑑𝜏 + 𝑣𝑦 (𝑡𝑘 ) ∫ cos(𝜃(𝜏)) 𝑑𝜏 … (3)
𝑡𝑘 𝑡𝑘
𝑡
𝜃(𝑡) = 𝜃(𝑡𝑘 ) + ∫ 𝜔(𝑡𝑘 )𝑑𝜏
𝑡𝑘

Se resuelve primeramente para el ángulo de avance del robot θ tal y como se

muestra en (4).
𝑡 𝑡
𝜃(𝑡) = 𝜃(𝑡𝑘 ) + ∫ 𝜔(𝑡𝑘 )𝑑𝜏 = 𝜃(𝑡𝑘 ) + 𝜔(𝑡𝑘 ) ∫ 𝑑𝜏 = 𝜃(𝑡𝑘 ) + (𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 ) … (4)
𝑡𝑘 𝑡𝑘

Se sustituye este resultado en la ecuación (3) para (x, y). Cabe destacar

que las funciones evaluadas en tk son constantes (x (tk), y (tk), θ (tk)) ya que

son las condiciones iniciales (constantes de integración), de esta forma se

procede a integrar (3) dando el resultado en (5) para x y en (6) para y.


𝑡 𝑡
𝑥(𝑡) = 𝑥(𝑡𝑘 ) + 𝑣𝑥 (𝑡𝑘 ) ∫ cos(𝜃(𝑡𝑘 ) + (𝜏 − 𝑡𝑘 )𝜔(𝑡𝑘 )) 𝑑𝜏 − 𝑣𝑦 (𝑡𝑘 ) ∫ sin(𝜃(𝑡𝑘 ) + (𝜏 − 𝑡𝑘 )𝜔(𝑡𝑘 )) 𝑑𝜏
𝑡𝑘 𝑡𝑘
𝑣𝑥 (𝑡𝑘 ) 𝑡 𝑣𝑦 (𝑡𝑘 ) 𝑡
= 𝑥(𝑡𝑘 ) + sin(𝜃(𝑡𝑘 ) + (𝜏 − 𝑡𝑘 )𝜔(𝑡𝑘 ))|𝑡 + cos(𝜃(𝑡𝑘 ) + (𝜏 − 𝑡𝑘 )𝜔(𝑡𝑘 ))|𝑡 … (5)
𝜔(𝑡𝑘 ) 𝑘 𝜔(𝑡𝑘 ) 𝑘

𝑣𝑥 (𝑡𝑘 ) 𝑣𝑦 (𝑡𝑘 )
∴ 𝑥(𝑡) = 𝑥(𝑡𝑘 ) + [sin(𝜃(𝑡𝑘 ) + (𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 )) − sin(𝜃(𝑡𝑘 ))] + [cos(𝜃(𝑡𝑘 ) + (𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 )) − cos(𝜃(𝑡𝑘 ))]
𝜔(𝑡𝑘 ) 𝜔(𝑡𝑘 )
𝑡 𝑡
𝑦(𝑡) = 𝑦(𝑡𝑘 ) + 𝑣𝑥 (𝑡𝑘 ) ∫ sin(𝜃(𝑡𝑘 ) + (𝜏 − 𝑡𝑘 )𝜔(𝑡𝑘 )) 𝑑𝜏 + 𝑣𝑦 (𝑡𝑘 ) ∫ cos(𝜃(𝑡𝑘 ) + (𝜏 − 𝑡𝑘 )𝜔(𝑡𝑘 )) 𝑑𝜏
𝑡𝑘 𝑡𝑘
𝑣𝑥 (𝑡𝑘 ) 𝑡 𝑣𝑦 (𝑡𝑘 ) 𝑡
= 𝑦(𝑡𝑘 ) − cos(𝜃(𝑡𝑘 ) + (𝜏 − 𝑡𝑘 )𝜔(𝑡𝑘 ))|𝑡 + sin(𝜃(𝑡𝑘 ) + (𝜏 − 𝑡𝑘 )𝜔(𝑡𝑘 ))|𝑡 … (6)
𝜔(𝑡𝑘 ) 𝑘 𝜔(𝑡𝑘 ) 𝑘

𝑣𝑥 (𝑡𝑘 ) 𝑣𝑦 (𝑡𝑘 )
∴ 𝑦(𝑡) = 𝑦(𝑡𝑘 ) + [cos(𝜃(𝑡𝑘 )) − cos(𝜃(𝑡𝑘 ) + (𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 ))] + [sin(𝜃(𝑡𝑘 ) + (𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 )) − sin(𝜃(𝑡𝑘 ))]
𝜔(𝑡𝑘 ) 𝜔(𝑡𝑘 )

5
Ambas expresiones (5) y (6) se pueden simplificar aplicando identidades

trigonométricas, tal y como se muestra en (7):

𝑎 = 𝜃(𝑡𝑘 ) − sin(𝜃(𝑡𝑘 )) + sin(𝜃(𝑡𝑘 ) + (𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 )) = sin(𝑎 + 𝑏) − sin(𝑎)


}⇒
𝑏 = (𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 ) cos(𝜃(𝑡𝑘 )) − cos(𝜃(𝑡𝑘 ) + (𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 )) = cos(𝑎) − cos(𝑎 + 𝑏)
… (7)
sin(𝑎 + 𝑏) − sin(𝑎) = 2 sin(0.5(𝑎 + 𝑏 − 𝑎)) cos(0.5(𝑎 + 𝑏 + 𝑎)) = 2 sin(0.5𝑏) cos(0.5(2𝑎 + 𝑏))
cos(𝑎) − cos(𝑎 + 𝑏) = −2 sin(0.5(𝑎 − 𝑏 − 𝑎)) sin(0.5(𝑎 + 𝑏 + 𝑎)) = −2 sin(−0.5𝑏) cos(0.5(2𝑎 + 𝑏))

Al aplicar esta simplificación (7) a (5) y (6) se obtiene (8).

𝑣𝑥 (𝑡𝑘 )
⇒ 𝑥(𝑡) = 𝑥(𝑡𝑘 ) + 2 sin(0.5(𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 )) cos (𝜃(𝑡𝑘 ) + 0.5((𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 )))
𝜔(𝑡𝑘 )
𝑣𝑦 (𝑡𝑘 )
−2 sin(0.5(𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 ) + 𝜃(𝑡𝑘 )) sin(0.5(𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 ))
𝜔(𝑡𝑘 )
𝑣𝑥 (𝑡𝑘 ) … (8)
⇒ y(𝑡) = 𝑦(𝑡𝑘 ) + 2 sin(0.5(𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 ) + 𝜃(𝑡𝑘 )) sin (0.5((𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 )))
𝜔(𝑡𝑘 )
𝑣𝑦 (𝑡𝑘 )
+2 cos(0.5(𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 ) + 𝜃(𝑡𝑘 )) sin(0.5(𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 ))
𝜔(𝑡𝑘 )
𝜃(𝑡) = 𝜃(𝑡𝑘 ) + (𝑡 − 𝑡𝑘 )𝜔(𝑡𝑘 )

Este es el resultado completo de la integración para cualquier t ∈ TK. Al

evaluar (8) en t = tk+1 se obtiene el modelo discreto en el periodo de muestreo

Ts = tk+1 − tk tal y como se muestra en (9).

𝑣𝑥 (𝑡𝑘 )
𝑥(𝑡𝑘+1 ) = 𝑥(𝑡𝑘 ) + 2 sin(0.5(𝑡𝑘+1 − 𝑡𝑘 )𝜔(𝑡𝑘 )) cos (𝜃(𝑡𝑘 ) + 0.5((𝑡𝑘+1 − 𝑡𝑘 )𝜔(𝑡𝑘 )))
𝜔(𝑡𝑘 )
𝑣𝑦 (𝑡𝑘 )
−2 sin(0.5(𝑡𝑘+1 − 𝑡𝑘 )𝜔(𝑡𝑘 ) + 𝜃(𝑡𝑘 )) sin(0.5(𝑡𝑘+1 − 𝑡𝑘 )𝜔(𝑡𝑘 ))
𝜔(𝑡𝑘 )
𝑣𝑥 (𝑡𝑘 ) … (9)
y(𝑡𝑘+1 ) = 𝑦(𝑡𝑘 ) + 2 sin(0.5(𝑡𝑘+1 − 𝑡𝑘 )𝜔(𝑡𝑘 ) + 𝜃(𝑡𝑘 )) sin (0.5((𝑡𝑘+1 − 𝑡𝑘 )𝜔(𝑡𝑘 )))
𝜔(𝑡𝑘 )
𝑣𝑦 (𝑡𝑘 )
+2 cos(0.5(𝑡𝑘+1 − 𝑡𝑘 )𝜔(𝑡𝑘 ) + 𝜃(𝑡𝑘 )) sin(0.5(𝑡𝑘+1 − 𝑡𝑘 )𝜔(𝑡𝑘 ))
𝜔(𝑡𝑘 )
𝜃(𝑡𝑘+1 ) = 𝜃(𝑡𝑘 ) + (𝑡𝑘+1 − 𝑡𝑘 )𝜔(𝑡𝑘 )

Finalmente, sustituyendo el periodo de muestreo Ts = tk+1 − tk en (9) y

simplificando la notación al eliminar la indicación del tiempo t al agregar un

subíndice a las variables (por ejemplo cambiando x (tk) = xk) se obtiene el

modelo cinemático del robot en (10). Esta ecuación puede considerarse como

una transformación de coordenadas ya que relaciona el movimiento local del

robot (vx, vy, ω) con su movimiento global (x, y, θ). Se muestra en esta

6
ecuación la notación a utilizar en los algoritmos de fusión propuestos,

tomando en cuenta el instante actual k y el anterior k − 1.

2 2
sin(0.5(𝑇𝑠 )𝜔𝑘 ) cos(𝜃𝑘 + 0.5(𝑇𝑠 𝜔𝑘 )) − sin(0.5(𝑇𝑠 )𝜔𝑘 + 𝜃𝑘 ) sin(0.5(𝑇𝑠 𝜔𝑘 )) 0
𝑥𝑘+1 𝑥𝑘 𝜔𝑘 𝜔𝑘 𝑣𝑥
[𝑦𝑘+1 ] = [𝑦𝑘 ] + 𝑇𝑠 2 2 [𝑣𝑦 ] … (10)
𝜃𝑘+1 𝜃𝑘 sin(0.5(𝑇𝑠 )𝜔𝑘 + 𝜃𝑘 ) sin(0.5(𝑇𝑠 𝜔𝑘 )) cos(0.5(𝑇𝑠 )𝜔𝑘 + 𝜃𝑘 ) sin(0.5(𝑇𝑠 𝜔𝑘 )) 0 𝜔
𝜔𝑘 𝜔𝑘 𝑘
[ 0 0 𝑇𝑠 ]

2 2
sin(0.5(𝑇𝑠 )𝜔𝑘−1 ) cos(𝜃𝑘−1 + 0.5(𝑇𝑠 𝜔𝑘−1 )) − sin(0.5(𝑇𝑠 )𝜔𝑘−1 + 𝜃𝑘−1 ) sin(0.5(𝑇𝑠 𝜔𝑘−1 )) 0
𝑥𝑘 𝑥𝑘−1 𝜔𝑘−1 𝜔𝑘−1 𝑣𝑥
[𝑦𝑘 ] = [𝑦𝑘−1 ] + 𝑇𝑠 2 2 [𝑣𝑦 ] … (10)
𝜃𝑘 𝜃𝑘−1 sin(0.5(𝑇𝑠 )𝜔𝑘−1 + 𝜃𝑘−1 ) sin(0.5(𝑇𝑠 𝜔𝑘−1 )) cos(0.5(𝑇𝑠 )𝜔𝑘−1 + 𝜃𝑘−1 ) sin(0.5(𝑇𝑠 𝜔𝑘−1 )) 0 𝜔
𝜔𝑘−1 𝜔𝑘−1 𝑘−1
[ 0 0 𝑇𝑠 ]

En el caso de la mayoría de plataformas con recursos limitados se requiere

un Ts suficientemente pequeño para la implementación. Con esta condición

se puede realizar una aproximación en la integral de la ecuación diferencial

(10) considerando que sin (ωk · 0, 5Ts) ≈ 0, 5Tsωk. Además se considera que

el robot gira a una velocidad tal que en un tiempo Ts el incremento de θk es

muy pequeño entonces se puede simplificar aún más ya que en estas

condiciones θk +ωk · 0, 5Ts ≈ θk, esto se muestra en (11).

𝑥𝑘 𝑥 cos 𝜃𝑘−1 − sin 𝜃𝑘−1 0 𝑣𝑥


𝑦
𝐿𝑘 = [ 𝑘 ] = [𝑦 ] + 𝑇𝑠 [ sin 𝜃𝑘−1 cos 𝜃𝑘−1 0] [𝑣𝑦 ] … (11)
𝜃𝑘 𝜃 𝑘−1 0 0 1 𝜔 𝑘−1

Durante el movimiento de rotación del robot (cuando sigue una trayectoria

circular) y debido al deslizamiento del mismo, el robot se encuentra en

traslación y en rotación simultáneas. Para describir este comportamiento de

la aceleración a se obtienen sus componentes ax, ay del centro de gravedad

P0 utilizando las aceleraciones normal y tangencial (an, at), mostradas en la

figura 19(c), mediante el procedimiento descrito en [19].

El componente tangencial at tiene la misma dirección que la velocidad

resultante v del centro de gravedad, la cual se encuentra a un ángulo β del

7
eje de avance XL tal y como se muestra en la figura 19(c). Este ángulo β se

conoce como el ángulo de deslizamiento lateral del vehículo. Las

aceleraciones tangencial at y normal an se descomponen según los ejes

locales tal y como se muestra en la ecuación (12).

𝑣𝑥̇ 𝐸𝑗𝑒 𝑋𝐿
𝑎𝑡 = { 𝑣 ̇ 𝐸𝑗𝑒 𝑌
𝑦 𝐿

… (12)

−(𝑣 2 ⁄𝑅 ) sin 𝛽 = −𝑣𝜔 sin 𝛽 = −𝑣𝑦 𝜔 𝐸𝑗𝑒 𝑋𝐿


𝑎𝑛 = {
(𝑣 2 ⁄𝑅 ) cos 𝛽 = 𝑣𝜔 cos 𝛽 = 𝑣𝑥 𝜔 𝐸𝑗𝑒 𝑌𝐿

De esta forma, los componentes ax, ay de la aceleración a se definen al

agrupar en los ejes locales (XL, YL) los términos de las aceleraciones an y at

[19] tal y como se muestra en la ecuación (13).

𝑎𝑥 = 𝑣𝑥̇ − 𝑣𝑦 𝜔

… (13)

𝑎𝑦 = 𝑣𝑦̇ + 𝑣𝑥 𝜔

Finalmente, se observa en la ecuación (14) la relación cinemática entre el

ángulo de la dirección Ackerman Φ y el ángulo de avance del robot ω.

𝜔 = (𝑣𝑥 tan ∅)⁄𝑙 … (14)

Con esto se procede al análisis de la dinámica del robot.

3.1.3. Modelo Dinámico de la configuración Ackerman

Este modelo representa la evolución de las aceleración linear y angular del

robot (𝛼𝑥 , 𝛼𝑦 , 𝛼) en términos de las fuerzas que han sido aplicadas por los

motores en las ruedas frontal 𝐹𝑓 y trasera 𝐹𝑟 y el par angular 𝜏. De forma

similar al caso diferencial, los modelos describen la dinámica en los ejes

globales, por lo que nuevamente se requiere aplicar el análisis por partículas

dinámicamente equivalentes para obtener los modelos a utilizar en los filtros

de fusión. En este caso se utilizará el caso de tres partículas. El cuerpo rígido

del robot Ackerman (masa 𝑀𝐺 , momento de inercia 𝐼𝐺 ) se estudia como un

8
sistema dinámicamente equivalente formado por tres partículas con masa 𝑀𝑟 ,

𝑀𝑐 y 𝑀𝑓 unidas por dos barras (conectores) sin masa, de longitud constante

𝑅𝑟 y 𝑅𝑓 tal y como se muestra en la figura 20. Nuevamente, las condiciones

se deben aplicar:

▪ Conservación de la masa: 𝑀𝐺 = 𝑀𝑓 + 𝑀𝑐 + 𝑀𝑟 … (15)

▪ Conservación del centro de masa: 𝑀𝑓 𝑅𝑓 = 𝑀𝑟 𝑅𝑟 … (16)

▪ Conservación del momento de inercia: 𝑀𝑓 𝑅𝑓 2 + 𝑀𝑟 𝑅𝑟 2 = 𝐼𝐺 … (17)

Con estas condiciones se despejarán las masas del sistema equivalente

mostradas en la ecuación (18).

𝐼𝐺 𝐼𝐺 𝐼𝐺
𝑀𝑓 = , 𝑀𝑟 = , 𝑀𝑐 = 𝑀𝐺 − ( ) … (18)
𝑅𝑓 (𝑅𝑓 + 𝑅𝑟 ) 𝑅𝑟 (𝑅𝑓 + 𝑅𝑟 ) 𝑅𝑓 𝑅𝑟

Las distancias, al ser un modelo de 3 partículas equivalentes, pueden ser

asignadas a conveniencia. Por simplicidad se asignan para que sean iguales

entre sí por lo que 𝑅𝑓 = 𝑅𝑟 = 𝑅𝑁 ; con esto se reduce (18) a (19) en donde las

masas 𝑀𝑓 y 𝑀𝑟 son proporcionales a la masa total MG, lo que se expresa

mediante la constante γ (0 ≤ γ < 1), y de la misma forma Mc es proporcional a

MG expresado por la constante δ (0 ≤ δ < 1). Adicionalmente se definen dos

constantes, λa utilizando γ y δ, y λ mediante MG, RN e IG.

𝐼𝐺 𝛾
𝑀𝑓 = 𝑀𝑟 = 2 = 𝛾𝑀𝐺 , 𝜆𝛼 =
2𝑅𝑁 1−𝛿

… (19)

𝐼𝐺 𝑀𝐺 𝑅𝑁
𝑀𝑐 = 𝑀𝐺 − ( 2) = 𝛿𝑀𝐺 , 𝜆𝛼 =
𝑅𝑁 𝐼𝐺

En el caso de los robots de configuración Ackerman, la gran mayoría son de

forma rectangular (con longitud c y ancho b), por lo que, para este caso, se

utilizará 𝑅𝑓 = 𝑙𝑓 = 𝑅𝑟 = 𝑙𝑟 = 0.5𝑙 según la figura 20. De esta forma, se

1
obtienen los parámetros al sustituir 𝐼𝐺 = (𝑏 2 + 𝑐 2 )𝑀𝐺 en (19) asignando
12

9
𝑅𝑁 = 0.5𝑙 = 0.5𝑐. Con esto, se muestran los parámetros en la ecuación (20).

Esta deducción de los parámetros se puede hacer de forma exacta para otras

formas de la plataforma si se posee la ecuación de 𝐼𝐺 o bien numéricamente

según las características físicas de la misma (𝑀𝐺 , 𝐼𝐺 , 𝑅𝑓 , 𝑅𝑟 ).

1 2 1 𝑏 2
𝐼𝐺 = (𝑏 + 𝑐 2 )𝑀𝐺 , 𝛾 = (1 + ( ) )
12 6 𝑐

𝑏 2
1+( ) 6
𝛿 = (1 − 𝑐 ), 𝜆𝛼 = … (20)
3 𝑏 2
𝑐 (1 + ( ) )
𝑐

1
𝜆𝛼 = 0.5, 𝜆𝛼 𝛾 =
𝑐

Para obtener el modelo dinámico se aplica la segunda ley de Newton al

cuerpo rígido y al sistema de partículas mostrado en la figura 20 para obtener

(21) y (22).

∑ 𝐹𝑥 = (𝐹𝑥𝑓 cos ∅ − 𝐹𝑦𝑓 sin ∅) + 𝐹𝑥𝑟 = 𝑀𝐺 𝑎𝑥

∑ 𝐹𝑦 = (𝐹𝑦𝑓 cos ∅ + 𝐹𝑥𝑓 sin ∅) + 𝐹𝑦𝑟 = 𝑀𝐺 𝑎𝑦 … (21)

∑ 𝜏 = 𝑙𝑓 (𝐹𝑦𝑓 cos ∅ + 𝐹𝑥𝑓 sin ∅) − 𝑙𝑟 𝐹𝑦𝑟 = 𝐼𝐺 𝛼

∑ 𝐹𝑥 = (𝐹𝑥𝑓 cos ∅ − 𝐹𝑦𝑓 sin ∅) + 𝐹𝑥𝑟 = 𝑀𝑓 𝑎𝑓,𝑥 + 𝑀𝑐 𝑎𝑐,𝑥 + 𝑀𝑟 𝑎𝑟,𝑥

∑ 𝐹𝑦 = (𝐹𝑦𝑓 cos ∅ + 𝐹𝑥𝑓 sin ∅) + 𝐹𝑦𝑟 = 𝑀𝑓 𝑎𝑓,𝑦 + 𝑀𝑐 𝑎𝑐,𝑦 + 𝑀𝑟 𝑎𝑟,𝑦 … (22)

∑ 𝜏 = 𝑅𝑓 (𝐹𝑦𝑓 cos ∅ + 𝐹𝑥𝑓 sin ∅) − 𝑅𝑟 𝐹𝑦𝑟 = 𝑅𝑓 𝑀𝑓 𝑎𝑓,𝑦 − 𝑅𝑟 𝑀𝑟 𝑎𝑟,𝑦

Aplicando el principio de D’Alembert a (21) y (22) se obtienen (23) y (24)

respectivamente.

𝑀𝐺 𝑎𝑥 − (𝐹𝑥𝑓 cos ∅ − 𝐹𝑦𝑓 sin ∅ + 𝐹𝑥𝑟 ) = 0

𝑀𝐺 𝑎𝑦 − (𝐹𝑦𝑓 cos ∅ + 𝐹𝑥𝑓 sin ∅ + 𝐹𝑦𝑟 ) = 0 … (23)

𝐼𝐺 𝛼 − (𝑙𝑓 𝐹𝑦𝑓 cos ∅ + 𝑙𝑓 𝐹𝑥𝑓 sin ∅ − 𝑙𝑟 𝐹𝑦𝑟 ) = 0

𝑀𝑓 𝑎𝑓,𝑥 + 𝑀𝑐 𝑎𝑐,𝑥 + 𝑀𝑟 𝑎𝑟,𝑥 − (𝐹𝑥𝑓 cos ∅ − 𝐹𝑦𝑓 sin ∅ + 𝐹𝑥𝑟 ) = 0

10
𝑀𝑓 𝑎𝑓,𝑦 + 𝑀𝑐 𝑎𝑐,𝑦 + 𝑀𝑟 𝑎𝑟,𝑦 − (𝐹𝑦𝑓 cos ∅ + 𝐹𝑥𝑓 sin ∅ + 𝐹𝑦𝑟 ) = 0 … (24)

(𝑅𝑓 𝑀𝑓 𝑎𝑓,𝑦 − 𝑅𝑟 𝑀𝑟 𝑎𝑟,𝑦 ) − [𝑅𝑓 (𝐹𝑦𝑓 cos ∅ + 𝐹𝑥𝑓 sin ∅) − 𝑅𝑟 𝐹𝑦𝑟 ] = 0

Al igualar (23) y (24) se obtiene (25).

𝑀𝐺 𝑎𝑥 = 𝑀𝑓 𝑎𝑓,𝑥 + 𝑀𝑐 𝑎𝑐,𝑥 + 𝑀𝑟 𝑎𝑟,𝑥

𝑀𝐺 𝑎𝑦 = 𝑀𝑓 𝑎𝑓,𝑦 + 𝑀𝑐 𝑎𝑐,𝑦 + 𝑀𝑟 𝑎𝑟,𝑦 … (25)

𝐼𝐺 𝛼 = (𝑅𝑓 𝑀𝑓 𝑎𝑓,𝑦 − 𝑅𝑟 𝑀𝑟 𝑎𝑟,𝑦 ) ↔ 𝑅𝑓 = 𝑙𝑓 , 𝑅𝑟 = 𝑙𝑟

Se observa de la ecuación (25) que el cuerpo rígido y el sistema de partículas

son dinámicamente equivalentes al utilizar los parámetros de la ecuación (20)

y cuando 𝑅𝑓 = 𝑙𝑓 , 𝑅𝑟 = 𝑙𝑟 . Como se mencionó anteriormente se utilizará 𝑅𝑓 =

𝑙𝑓 = 𝑅𝑟 = 𝑙𝑟 = 0.5𝑙 para el sistema equivalente del robot Ackerman (esta es

la distancia a la que se colocarán los acelerómetros, en el centro de los ejes

de la plataforma). Utilizando estas condiciones se resuelve para las

aceleraciones locales 𝑎𝑥 , 𝑎𝑦 𝑦 𝛼 (con 𝑎𝑐 = 𝑎) tal y como se muestra en la

ecuación (26).
𝛾
𝑀𝐺 𝑎𝑥 − 𝛿𝑀𝐺 𝑎𝑥 = 𝛾𝑀𝐺 (𝑎𝑓,𝑥 + 𝑎𝑟,𝑥 ) → 𝑎𝑥 = (𝑎 + 𝑎𝑟,𝑥 ) = 𝜆𝑎 (𝑎𝑓,𝑥 + 𝑎𝑟,𝑥 )
1 − 𝛿 𝑓,𝑥
𝛾
𝑀𝐺 𝑎𝑦 − 𝛿𝑀𝐺 𝑎𝑦 = 𝛾𝑀𝐺 (𝑎𝑓,𝑦 + 𝑎𝑟,𝑦 ) → 𝑎𝑥 = (𝑎 + 𝑎𝑟,𝑦 ) = 𝜆𝑎 (𝑎𝑓,𝑦 + 𝑎𝑟,𝑦 )
1 − 𝛿 𝑓,𝑦
𝛾𝑀𝐺 𝛾𝑀𝐺
𝛼= (𝑅𝑓 𝑎𝑓,𝑦 − 𝑅𝑟 𝑎𝑟,𝑦 ) = 𝑅 (𝑎 − 𝑎𝑟,𝑦 ) = 𝜆𝑎 𝛾(𝑎𝑓,𝑦 − 𝑎𝑟,𝑦 )
𝐼𝐺 𝐼𝐺 𝑁 𝑓,𝑦

∴ 𝑎𝑥 = 𝜆𝑎 (𝑎𝑓,𝑥 + 𝑎𝑟,𝑥 ), 𝑎𝑦 = 𝜆𝑎 (𝑎𝑓,𝑦 + 𝑎𝑟,𝑦 ), 𝛼 = 𝜆𝑎 𝛾(𝑎𝑓,𝑦 − 𝑎𝑟,𝑦 ) … (26)

Ahora bien, estas aceleraciones (26) se muestran en la ecuación (27).

𝑣𝑥̇ = 𝑣𝑦 𝜔 + 𝜆𝑎 (𝑎𝑓,𝑥 + 𝑎𝑟,𝑥 ) = 𝑣𝑦 𝜔 + 𝜆𝑎 𝑢1

𝑣𝑦̇ = −𝑣𝑥 𝜔 + 𝜆𝑎 (𝑎𝑓,𝑦 + 𝑎𝑟,𝑦 ) = −𝑣𝑥 𝜔 + 𝜆𝑎 𝑢2 … (27)

𝜔̇ = 𝜆𝛼 𝛾(𝑎𝑓,𝑦 − 𝑎𝑟,𝑦 ) = 𝜆𝛼 𝛾𝑢3

La ecuación (27) corresponde al modelo dinámico local en el que se han

definido las entradas 𝑢1 , 𝑢2 , 𝑢3 como los respectivos términos de las

aceleraciones de entrada en las ecuaciones de 𝑣𝑥̇ , 𝑣𝑦̇ , 𝜔̇ para facilitar la

11
notación. Se observa que el modelo (27) del robot Ackerman con

deslizamiento, corresponde a un modelo no lineal, con lo que resulta

conveniente aproximar la solución de la integral discreta mediante el método

numérico de Euler, pudiendo utilizarse otros métodos numéricos o resolver la

integral exacta (siguiendo un procedimiento similar a la cinemática diferencial)

si se desea más precisión o se disponen de más recursos en la plataforma.

De esta forma, obteniendo la discretización mediante el método de Euler, el

modelo dinámico del robot se obtiene en (28).

𝑣𝑥 𝑣𝑥 𝑣𝑦 𝜔 + 𝜆𝑎 𝑢1
𝑣 𝑣
[ 𝑦 ] = [ 𝑦] + 𝑇𝑠 [−𝑣𝑥 𝜔 + 𝜆𝑎 𝑢2 ] … (28)
𝜔 𝑘 𝜔 𝑘−1 𝜆𝛼 𝛾𝑢3 𝑘−1

Se obtiene el modelo dinámico global del robot tal y como se muestra en (29).

𝑥 𝑥 𝑣𝑥 cos 𝜃 − 𝑣𝑦 sin 𝜃
𝑦 𝑦 𝑣𝑥 sin 𝜃 + 𝑣𝑦 cos 𝜃
𝜃 𝜃 𝜔
𝑣𝑥 = 𝑣𝑥 + 𝑇𝑠 𝑣𝑦 𝜔 + 𝜆𝑎 𝑢1 … (29)
𝑣𝑦 𝑣𝑦 −𝑣𝑥 𝜔 + 𝜆𝑎 𝑢2
[ 𝜔 ]𝑘 [ 𝜔 ]𝑘−1
[ 𝜆 𝛾𝑢
𝛼 3 ]𝑘−1

Por último, en caso de que el robot viaje a baja velocidad, se puede

aprovechar la condición de no deslizamiento vy ≈ 0 para obtener los modelos

local y global simplificados, tal y como se muestra en (30) y (31). [23]

𝑣 𝑣 𝜆 𝑢
[ 𝑥] = [ 𝑥] + 𝑇𝑠 [ 𝑎 1 ] … (30)
𝜔 𝑘 𝜔 𝑘−1 𝜆𝛼 𝛾𝑢3 𝑘−1

𝑥 𝑥 𝑣𝑥 cos 𝜃
𝑦 𝑦 𝑣𝑥 sin 𝜃
𝜃 = 𝜃 + 𝑇𝑠 𝜔 … (31)
𝑣𝑥 𝑣𝑥 𝜆𝑎 𝑢1
[ 𝜔 ]𝑘 [ 𝜔 ]𝑘−1 [ 𝜆𝛼 𝛾𝑢3 ]𝑘−1

3.1.4. Modelo dinámico del motor DC

Ecuaciones Físicas del Modelo:

𝑑𝑖
𝑒𝑎 = 𝑖𝑅 + 𝐿 + 𝑒𝑏 (32)
𝑑𝑡

𝑒𝑏 = 𝑘𝑏 𝜃̇ (33)

12
𝜏 − 𝐵𝜃̇ = 𝐽𝜃̈ (34)

𝜏 = 𝑘𝑖 𝑖 (35)

Luego aplicando transformada de Laplace obtenemos lo siguiente:

𝑉𝑎 (𝑠) = 𝐼(𝑠)𝑅 + 𝐿𝑠𝐼(𝑠) + 𝑉𝑏 (𝑠) (36)

𝑉𝑏 (𝑠) = 𝐾𝑏 𝑠𝜃(𝑠) (37)

𝜏 − 𝐵𝑠𝜃(𝑠) = 𝐽𝑠2 𝜃(𝑠) (38)

𝜏 = 𝐾𝑖 𝐼(𝑠) (39)

Despejando la ecuación (23) se obtiene la función de transferencia:

𝐼(𝑠) 1
= (40)
𝑉𝑎 (𝑠) − 𝑉𝑏 (𝑠) 𝐿𝑠 + 𝑅

Igualmente operando en la ecuación (29) nos resulta:


𝜏
= 𝜃(𝑠) (41)
𝐽𝑠2 + 𝐵𝑠

3.1.5. Diseño CAD

13
4. Capítulo III

4.1. Conclusiones

▪ Es necesario hacer varias pruebas de todos los sensores que se utilizaron,

posteriormente calibrarlos si fuera el caso que estén otorgando medidas

diferentes a las reales. Esto es muy imprescindible e importante para que

funcione adecuadamente el sistema de control automático.

▪ El sistema de navegación requiere precisión por lo que los sensores deberían

poseer error casi nulo. Sin embargo, para obtener sensores de dicha calidad

se requiere de mayor inversión.

▪ La creación de un entorno virtual de simulación conlleva al modelamiento tanto

del ambiente como del robot, estos se realizaron usando el toolbox

SimMechanics de Matlab.

4.2. Bibliografía

[1] http://mardukferreteria.com/detalle.php?producto=322&marca=23

[2] http://www.directindustry.es/prod/steinel-normalien-ag/product-126303-

1559015.html

[3] http://articulo.mercadolibre.com.ve/MLV-459591604-motor-6v-para-carrito-o-

moto-electrica-montable-_JM

[4] Fotografía propia

[5] http://www.grupogonher.com/herramientas/servicio-automotriz/grasas.html

[6] http://www.nextiafenix.com/producto/resistencia-1k-1w4/

[7] http://circuit-diagramz.com/bd-135-transistors/

[8] https://www.sotudo.com.br/produto/rele-12v-10a

[9] https://www.miki.pro/pcb-y-pines.html

[10] http://simple.ripley.com.pe/hp-laptop-stream-14-ax004la-14-intel-celeron-

32gb-4gb-funda-mouse-audifonos-2004190808055p

[11] https://es.mathworks.com/products/matlab.html

14
[12] http://eyesunelectronics.com/producto/eyebaby-camara-ip-wifi/

[13] https://www.bosch-professional.com/es/es/gws-20-230-jh-33804-ocs-p/

[14] Fotografía propia

[15] http://www.sodimac.com.pe/sodimac-pe/product/1060627/Taladro-de-Banco-

500-W/1060627

[16] Fotografía propia

[17] Fotografía propia

[18] Fotografía propia

[19] J.Y. Wong. Theory of Ground Vehicles. John Wiley & Sons, 2008.

ISBN: 9780470170380 (vid. págs. 17, 49-52, 57).

[20] R. Rajamani. Vehicle Dynamics And Control. Mechanical Engineering

Series. Springer US, 2012. ISBN: 9780387263960 (vid. págs. 27, 49, 57).

[21] Marín Paniagua, Leonardo José (2014). Localización de robots móviles de

recursos limitados basada en fusión sensorial por eventos (Tesis de doctorado).

Universidad Politécnica de Valencia, Valencia.

4.3. Anexos

FOTOGRAFÍAS

15
16
Fig. 19. Cinemática de un robot en configuración Ackerman [21]

17
Fig. 20: Dinámica de un robot en configuración Ackerman como un cuerpo rígido y como

un sistema de tres partículas equivalente [21]

Modelo dinámico del motor DC en Simulink

18
19
20
21
Circuito de conexión

22
CÓDIGO EN MATLAB APLICADO AL RECONOCIMIENTO DE LA FRUTA

close all;

clc

%SELECCIÓN DE NARANJA POR MEDIO DE VISIONARTIFICIAL

fprintf('%s%\n',' VISION ARTIFICIAL USANDO MATLAB');

fprintf('\n');

fprintf('%s%\n',' SELECCION DE NARANJAS');

fprintf('\n');

23
fprintf('%s%\n',' UNIVERSIDAD NACIONAL DE TRUJILLO');

fprintf('\n');

fprintf('\n');

%ADQUISICION DE DATOS (hay dos formas)

%imagen guardada en la pc o por medio de cámara web

%video=videoinput('winvideo',1);

%set(video)

%video.ReturnedColorSpace='rgb';

%preview(video)

%im_RGB=getsanpshot(video);

%Ajuste de la direccion donde estara guardada la imagen

im_RGB=imread('preprocesar.jpg');

msgbox('-CAPTURAR IMAGEN - PULSA ENTER EN COMAND WINDWS','VISION

ARTIFICAL EN MATLAB');

pause

DIM=size(im_RGB);

figure(1)

subplot(2,3,1)

%imshow(im_RGB)

title({'VISION ARTIFICIAL USANDO MATLAB';'SELECCION DE

NARANJAS';'IMAGEN ORIGINAL'})

%PROCESAMIENTO DE LA IMAGEN BINARIA

24
umb=graythresh(im_RGB);

im_bin=im2bw(im_RGB,umb);

%Parametro importante para metodos DILATACIÓN Y EROCIÓN, y

%decidir con cual se hara el analisis. A menor V mejor

v=5;

%Procesamiento de Imagen Dilatacion

%se adiciona pixeles en las fronteras de la imagen, este depende

%directamenre del parametro modificable de la funcion strel('square',v) es

%el v. strel genera una estructura (rejilla), donde se trelapan el elemento

%central de la rejilla con la operacion de dilatacion

SE=strel('square',v);

im_gray=rgb2gray(im_RGB);

%la funcion edge se refiere a la intensidad de la frontera que por medio

%del metodo sobel aproxima esta frontera a 1(blanco) y lo demas a 0 (negro)

im_edge=edge(im_gray,'sobel');

im_dilate=imdilate(im_edge,SE);

%limpiar los agujeros

im_bin2=imfill(im_dilate,'holes');

25
%PROCESAMIENTO DE PROPIEDADES DE LA IMAGEN

%Obteniendo propiedades de la imagen como: centroide, area, ubicacion, etc

[l, ne]=bwlabel(im_bin2); %crea matriz de detalles con relacion a una matriz binaria,

(blancos y negros)

%con relacion a una matriz binaria, blancos y negros

%entregando numeros enteros de los detalles

propied=regionprops(1);

hold on

for i=1:size(propied,1)

rectangle('Position', propied(i).BoundingBox, 'EdgeColor', 'g', 'LineWidth',2);

x=propied(i).Centroid(1);

y=propied(i).Centroid(2);

plot(x,y,'*')

end

%Busca areas menores a < 1250 y eliminarlas son los defectos de la imagen

s=find([propied.Area]<1250);

for i=1:size(s,2)

rectangle('Position', propied(s(i)).BoundingBox, 'EdgeColor', 'r', 'LineWidth',2);

end

26
for n=1:size(s,2)

d=round(propied(s(n)).BoundingBox);

im_bin2(d(2):d(2)+d(4),d(1):d(1)+d(3))=0;

end

[l2, ne2]=bwlabel(im_bin2);

propied2=regionprops(l2);

NUMERO_DE_NARANJAS=ne2;

%ajuste automatico de la imagen

subplot(2,3,2)

imagesc([0 DIM(1,2)],[0 DIM(1,1)],im_RGB),grid on;

title({'IMAGEN ORIGINAL';'ESCALA DE MEDIA, RECUADRO Y FRONTERA'})

hold on

for i=1:size(propied2,1)

rectangle('Position', propied2(i).BoundingBox, 'EdgeColor', 'g', 'LineWidth',2);

x=propied2(i).Centroid(1);

y=propied2(i).Centroid(2);

plot(x,y,'*')

end

%Obtiene parametro, linea roja

B=bwboundaries(im_bin2);

for k=1:length(B)

27
boundary=B{k};

plot(boundary(:,2),boundary(:,1),'r','LineWidth',2)

end

subplot(2,3,3)

GRI=rgb2gray(im_RGB);

imshow(GRI)

title({'IMAGEN ORIGINAL';'ESCALA DE GRISES'})

%Area en numero de pixeles

AREA=[propied2.Area];

%Caja [x1,y1,ancho,largo] donde x1 y y1 son coordenadas superior

%izquierda de la caja

CAJAS=[propied2.BoundingBox];

%Caja de la primera figura

CAJA1=[CAJAS(1,1) CAJAS(1,2) CAJAS(1,3) CAJAS(1,4)];

%Procesamiento de segmentacion de la imagen

%procesamiento de color RGB

subplot(2,3,4)

RECO=imcrop(im_RGB,[CAJA1]);

imshow(RECO)

title({'NARANJA'})

subplot(2,3,5)

imshow(im_bin2)

title({'IMAGEN BINARIA'})

28
%Procesamiento de histogramas

GRIS=rgb2gray(RECO);

RED=RECO(:,:,1);

GREEN=RECO(:,:,2);

BLUE=RECO(:,:,3);

subplot(2,3,6)

imhist(GRIS)

title({'HISTOGRAMA NARANJA'})

%CARACTERISTICAS NARANJA

fprintf('%s%\n', 'CARACTERISTICAS NARANJA :');

fprintf('\n')

TAMANOAREA=12500;

if (AREA<= TAMANOAREA)

fprintf('%s%\n', 'TAMAÑO: PEQUEÑO');

else

fprintf('%s%\n', 'TAMAÑO: OPTIMO');

end

fprintf('\n')

sumR=sum(RED,1);

sumR1=sum(sumR,2);

sumG=sum(GREEN,1);

sumG1=sum(sumG,2);

sumB=sum(BLUE,1);

sumB1=sum(sumB,2);

imtool(RECO)

29
%DESICION DE RECHAZO O ACEPTADO

if ((sumR1-sumR1*0.25)>=sumG1) && ((sumG1-sumG1*0.3)<=sumB1)

fprintf('%s%\n', 'COLOR: PREDOMINANTE ROJO');

fprintf('\n')

fprintf('%s%\n', 'RESULTADO: NARANJA ACEPTADA');

fprintf('\n')

msgbox('NARANJA ACEPTADA, PREDOMINANTE ROJO');

M1=0;

elseif((sumR1-sumR1*0.1)>=sumG1) && ((sumG1-sumG1*0.3)>=sumB1)

fprintf('%s%\n', 'COLOR: PREDOMINANTE AMARILLO');

fprintf('\n')

fprintf('%s%\n', 'RESULTADO: NARANJA ACEPTADA');

fprintf('\n')

msgbox('NARANJA ACEPTADA, PREDOMINANTE AMARILLO');

M1=0;

else

fprintf('%s%\n', 'COLOR: PREDOMINANTE VERDE');

fprintf('\n')

fprintf('%s%\n', 'RESULTADO: NARANJA RECHAZADA');

fprintf('\n')

msgbox('NARANJA RECHAZADA, PREDOMINANTE VERDE');

M1=1;

end

CÓDIGO DE LA GUIDE EN MATLAB APLICADO AL RECONOCIMIENTO DE LA FRUTA

30
function varargout = procesamiento_imagen_ok(varargin)

% PROCESAMIENTO_IMAGEN_OK MATLAB code for

procesamiento_imagen_ok.fig

% PROCESAMIENTO_IMAGEN_OK, by itself, creates a new

PROCESAMIENTO_IMAGEN_OK or raises the existing

% singleton*.

% H = PROCESAMIENTO_IMAGEN_OK returns the handle to a new

PROCESAMIENTO_IMAGEN_OK or the handle to

% the existing singleton*.

PROCESAMIENTO_IMAGEN_OK('CALLBACK',hObject,eventData,handles,...)

calls the local

% function named CALLBACK in PROCESAMIENTO_IMAGEN_OK.M with the

given input arguments.

% PROCESAMIENTO_IMAGEN_OK('Property','Value',...) creates a new

PROCESAMIENTO_IMAGEN_OK or raises the

% existing singleton*. Starting from the left, property value pairs are

% applied to the GUI before procesamiento_imagen_ok_OpeningFcn gets called.

An

% unrecognized property name or invalid value makes property application

% stop. All inputs are passed to procesamiento_imagen_ok_OpeningFcn via

varargin.

31
%

% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one

% instance to run (singleton)".

% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help procesamiento_imagen_ok

% Last Modified by GUIDE v2.5 30-Aug-2017 20:47:20

% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @procesamiento_imagen_ok_OpeningFcn, ...

'gui_OutputFcn', @procesamiento_imagen_ok_OutputFcn, ...

'gui_LayoutFcn', [] , ...

'gui_Callback', []);

if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

gui_mainfcn(gui_State, varargin{:});

end

% End initialization code - DO NOT EDIT

% --- Executes just before procesamiento_imagen_ok is made visible.

32
function procesamiento_imagen_ok_OpeningFcn(hObject, eventdata, handles,

varargin)

% This function has no output args, see OutputFcn.

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% varargin command line arguments to procesamiento_imagen_ok (see

VARARGIN)

% Choose default command line output for procesamiento_imagen_ok

a=imread('fondo3.jpg');

axes(handles.axes9);

image(a)

axis off

%a=imread('fondo2.jpg');

%axes(handles.axes7);

%image(a)

%axis off

handles.output = hObject;

% Update handles structure

guidata(hObject, handles);

% UIWAIT makes procesamiento_imagen_ok wait for user response (see

UIRESUME)

% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.

33
function varargout = procesamiento_imagen_ok_OutputFcn(hObject, eventdata,

handles)

% varargout cell array for returning output args (see VARARGOUT);

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure

varargout{1} = handles.output;

% --- Executes on button press in imagen.

function imagen_Callback(hObject, eventdata, handles)

% hObject handle to imagen (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

[nombre dire] = uigetfile('*jpg','imagen');

if nombre==0

return

end

img_RGB=imread(fullfile(dire,nombre));

axes(handles.axes1)

imshow(img_RGB)

handles.img=img_RGB;

guidata(hObject,handles)

% --- Executes on button press in procesar.

34
function procesar_Callback(hObject, eventdata, handles)

% hObject handle to procesar (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

im_RGB=handles.img;

DIM=size(im_RGB);

%PROCESAMIENTO DE LA IMAGEN BINARIA

umb=graythresh(im_RGB);

im_bin=im2bw(im_RGB,umb);

%Parametro importante para metodos DILATACIÓN Y EROCIÓN, y

%decidir con cual se hara el analisis. A menor V mejor

v=5;

%Procesamiento de Imagen Dilatacion

%se adiciona pixeles en las fronteras de la imagen, este depende

%directamenre del parametro modificable de la funcion strel('square',v) es

%el v. strel genera una estructura (rejilla), donde se trelapan el elemento

%central de la rejilla con la operacion de dilatacion

SE=strel('square',v);

im_gray=rgb2gray(im_RGB);

%la funcion edge se refiere a la intensidad de la frontera que por medio

%del metodo sobel aproxima esta frontera a 1(blanco) y lo demas a 0 (negro)

im_edge=edge(im_gray,'sobel');

im_dilate=imdilate(im_edge,SE);

%limpiar los agujeros

im_bin2=imfill(im_dilate,'holes');

35
%PROCESAMIENTO DE PROPIEDADES DE LA IMAGEN

%Obteniendo propiedades de la imagen como: centroide, area, ubicacion, etc

[l, ne]=bwlabel(im_bin2); %crea matriz de detalles con relacion a una matriz binaria,

(blancos y negros)

%con relacion a una matriz binaria, blancos y negros

%entregando numeros enteros de los detalles

propied=regionprops(1);

hold on

for i=1:size(propied,1)

rectangle('Position', propied(i).BoundingBox, 'EdgeColor', 'g', 'LineWidth',2);

x=propied(i).Centroid(1);

y=propied(i).Centroid(2);

plot(x,y,'*')

end

%Busca areas menores a < 1250 y eliminarlas son los defectos de la imagen

s=find([propied.Area]<1250);

for i=1:size(s,2)

rectangle('Position', propied(s(i)).BoundingBox, 'EdgeColor', 'r', 'LineWidth',2);

end

for n=1:size(s,2)

d=round(propied(s(n)).BoundingBox);

im_bin2(d(2):d(2)+d(4),d(1):d(1)+d(3))=0;

end

[l2, ne2]=bwlabel(im_bin2);

36
propied2=regionprops(l2);

NUMERO_DE_NARANJAS=ne2;

%ajuste automatico de la imagen

axes(handles.axes2);

imagesc([0 DIM(1,2)],[0 DIM(1,1)],im_RGB),grid on;

title({'IMAGEN ORIGINAL';'ESCALA DE MEDIA, RECUADRO Y FRONTERA',})

hold on

for i=1:size(propied2,1)

rectangle('Position', propied2(i).BoundingBox, 'EdgeColor', 'g', 'LineWidth',2);

x=propied2(i).Centroid(1);

y=propied2(i).Centroid(2);

plot(x,y,'*')

end

%Obtiene parametro, linea roja

B=bwboundaries(im_bin2);

for k=1:length(B)

boundary=B{k};

plot(boundary(:,2),boundary(:,1),'r','LineWidth',2)

end

axes(handles.axes3);

GRI=rgb2gray(im_RGB);

imshow(GRI)

title({'IMAGEN ORIGINAL';'ESCALA DE GRISES'})

%Area en numero de pixeles

AREA=[propied2.Area];

37
%Caja [x1,y1,ancho,largo] donde x1 y y1 son coordenadas superior

%izquierda de la caja

CAJAS=[propied2.BoundingBox];

%Caja de la primera figura

CAJA1=[CAJAS(1,1) CAJAS(1,2) CAJAS(1,3) CAJAS(1,4)];

%Procesamiento de segmentacion de la imagen

%procesamiento de color RGB

axes(handles.axes4);

RECO=imcrop(im_RGB,[CAJA1]);

imshow(RECO)

title({'NARANJA'})

axes(handles.axes5);

imshow(im_bin2)

title({'IMAGEN BINARIA'})

%Procesamiento de histogramas

GRIS=rgb2gray(RECO);

RED=RECO(:,:,1);

GREEN=RECO(:,:,2);

BLUE=RECO(:,:,3);

axes(handles.axes6);

imhist(GRIS)

title({'HISTOGRAMA NARANJA'})

%CARACTERISTICAS NARANJA

TAMANOAREA=12500;

if (AREA<= TAMANOAREA)

38
msgbox('NARANJA DE TAMAÑO PEQUEÑO');

else

msgbox('NARANJA DE TAMAÑO OPTIMO');

end

fprintf('\n')

sumR=sum(RED,1);

sumR1=sum(sumR,2);

sumG=sum(GREEN,1);

sumG1=sum(sumG,2);

sumB=sum(BLUE,1);

sumB1=sum(sumB,2);

imtool(RECO)

%DESICION DE RECHAZO O ACEPTADO

if ((sumR1-sumR1*0.25)>=sumG1) && ((sumG1-sumG1*0.3)<=sumB1)

msgbox('NARANJA ACEPTADA, PREDOMINANTE ROJO');

M1=0;

elseif((sumR1-sumR1*0.1)>=sumG1) && ((sumG1-sumG1*0.3)>=sumB1)

msgbox('NARANJA ACEPTADA, PREDOMINANTE AMARILLO');

M1=0;

else

msgbox('NARANJA RECHAZADA, PREDOMINANTE VERDE');

M1=1;

end

% --- Executes on button press in regresar.

function regresar_Callback(hObject, eventdata, handles)

39
% hObject handle to regresar (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

close(procesamiento_imagen_ok);

untitled

CÓDIGO DE LA GUIDE EN MATLAB APLICADO AL CONTROL DEL ROBOT

TELEOPERADO

function varargout = untitled(varargin)

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @untitled_OpeningFcn, ...

'gui_OutputFcn', @untitled_OutputFcn, ...

'gui_LayoutFcn', [] , ...

'gui_Callback', []);

if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

gui_mainfcn(gui_State, varargin{:});

end

40
% --- Executes just before untitled is made visible.

function untitled_OpeningFcn(hObject, eventdata, handles, varargin)

% This function has no output args, see OutputFcn.

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% varargin command line arguments to untitled (see VARARGIN)

% Choose default command line output for untitled

a=imread('fondo2.jpg');

axes(handles.axes4);

image(a)

axis off

handles.output = hObject;

% Update handles structure

guidata(hObject, handles);

axis off

% UIWAIT makes untitled wait for user response (see UIRESUME)

% uiwait(handles.figure1);

41
% --- Outputs from this function are returned to the command line.

function varargout = untitled_OutputFcn(hObject, eventdata, handles)

% varargout cell array for returning output args (see VARARGOUT);

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure

varargout{1} = handles.output;

% --- Executes on button press in adelante.

function adelante_Callback(hObject, eventdata, handles)

% hObject handle to adelante (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of adelante

a=get(hObject,'Value');

if a == 1

urlread('http://192.168.0.110/?adelante');

else

urlread('http://192.168.0.110/?parada1');

42
end

% --- Executes on button press in atras.

function atras_Callback(hObject, eventdata, handles)

% hObject handle to atras (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of atras

a=get(hObject,'Value');

if a == 1

urlread('http://192.168.0.110/?atras');

else

urlread('http://192.168.0.110/?parada1');

end

% --- Executes on button press in izquierda.

function izquierda_Callback(hObject, eventdata, handles)

% hObject handle to izquierda (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of izquierda

43
a=get(hObject,'Value');

if a == 1

urlread('http://192.168.0.110/?izquierda');

else

urlread('http://192.168.0.110/?parada2');

end

% --- Executes on button press in derecha.

function derecha_Callback(hObject, eventdata, handles)

% hObject handle to derecha (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of derecha

a=get(hObject,'Value');

if a == 1

urlread('http://192.168.0.110/?derecha');

else

urlread('http://192.168.0.110/?parada2');

end

44
% --- Executes on button press in prender_camara.

function prender_camara_Callback(hObject, eventdata, handles)

% hObject handle to prender_camara (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

global url

axes(handles.imagen_camara);

url='http://192.168.43.1:8080/shot.jpg';

ss = imread(url);

fh = image(ss);

while(1)

ss = imread(url);

set(fh,'CData',ss);

drawnow;

end

% --- Executes on button press in capturar_imagen.

function capturar_imagen_Callback(hObject, eventdata, handles)

% hObject handle to capturar_imagen (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

global url imagen_base

imagen_base = imread(url); %leemos imagen

axes(handles.imagen_estatica); %manda al eje: imagen base

imshow(imagen_base); %imprime la imagen base

45
% --- Executes on button press in guardar_imagen.

function guardar_imagen_Callback(hObject, eventdata, handles)

% hObject handle to guardar_imagen (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

rgb = getimage(handles.imagen_estatica);

if isempty(rgb), return, end

% Guardar archivo

formatos = {'*.jpg','JPEG (*.jpg)';'*.tif','TIFF (*.tif)'};

[nomb,ruta] = uiputfile(formatos,'GUARDAR IMAGEN');

if nomb==0, return, end

fName = fullfile(ruta,nomb);

imwrite(rgb,fName);

% --- Executes on button press in procesamiento.

function procesamiento_Callback(hObject, eventdata, handles)

% hObject handle to procesamiento (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

close(untitled);

procesamiento_imagen_ok

46
GRÁFICA DEL ENLACE IP DEL ROBOT MÓVIL

DIBUJOS CAD

47
SIMULACIÓN SOLIDOWORKS – SIMULINK

48
49

S-ar putea să vă placă și