Professional Documents
Culture Documents
Investigación Ej22 - Tesis - 1806637 Jahir Antonio RDZ Perales
Investigación Ej22 - Tesis - 1806637 Jahir Antonio RDZ Perales
Tesis:
Prototipo de la arquitectura de una red
neuronal convolucional para un Robot
móvil con geometría de Ackermann para
el seguimiento automático de un camino
PRESENTA:
Mecánica y Eléctrica, por ser mi alma máter y la fuente de todos los conocimientos
Garza, por todas las contribuciones que hicieron y ayuda que me brindaron.
i
Contenido
Agradecimientos ............................................................................................i
Resumen ..................................................................................................... 1
Abstract ....................................................................................................... 2
ii
2.2. Visión artificial ............................................................................ 15
Ackermann ................................................................................................... 36
Convolucional 40
iii
5.2. Conclusiones y observaciones sobre el diseño del prototipo del
6. Referencias ...................................................................................... 45
7. Anexo ............................................................................................... 47
Tabla de figuras
Artificial. ............................................................................................................... 18
Figura 7. Analogía entre una neurona biológica y una neurona artificial. ... 23
Figura 12. Menú principal del Self Driving Car Simulator de Udacity. ........ 29
Figura 13. Gráfica del ángulo de giro del volate por imágen ...................... 30
iv
Figura 14. Submuestreo de los datos de entrenamiento. ........................... 31
Figura 21. Gráfica del mse por época del entrenamiento de la CNN. ........ 35
Figura 22, Vista isométrica inferior de la base inferior del robot en Solidworks
............................................................................................................................. 37
Figura 24. Vista isométrica frontal del diseño final del prototipo del robot movil.
............................................................................................................................. 38
v
Resumen
En la siguiente Tesis, se muestra principalmente el trabajo realizado por el
1
Abstract
In the following Thesis, the work made by the author in the architecture and
architecture of this Neural Network is of image processing for the automatic following
of a track. As it is shown forward in the hypothesis, the Neural Network was only
trained using images generated by a simulator, this with the objective of reducing
cost in the implementation of this project and mainly time in the implementation of
this Neural Network. Additionally, the work made by a team of engineers in the
creation of the prototype of a mobile robot with Ackermann’s geometry is also briefly
shown. The initial idea of this project came from a contest organized by the
enterprise Yasaki.
2
1. Capítulo I. Presentación del Proyecto.
1.1. Introducción
como su nombre lo indica. Se presentará la idea desde la cuál surgió, así como los
detalles que llevaron a tomar la decisión de realizar una investigación sobre este
proyecto.
del prototipo, tanto como diseño del mismo, así como de la red neuronal
convolucional.
3
Finalmente, en el capítulo 6 se incluirán las referencias y el capítulo 7 será
1.2. Antecedentes
cual, ya se tienen ciertos avances en el trabajo, dentro de los cuales hay una tesina
ya desarrollada que cubre ciertos temas, más no todos, también hay avances en los
diseños CAD y en la parte electrónica de este carrito, hasta el punto de estar casi
Software, pero aún están pendiente el terminarla y conectarla, así como la parte de
control de los motores. Finalmente, cuenta con salidas de 3.3 V y 5 V, para el control
Ackermann para poder tomar así una dirección en el espacio según la potencia que
4
le entregan 2 motores paralelos traseros para poder avanzar, viéndose modificado
robot a valores sencillos, integrales a ser posible, esto para que el microcontrolador
dirección actual.
distinguir carretera con la cámara, y sepa decidir qué acción tomar en base a lo que
robot móvil capaz de seguir las líneas de una carretera, soportar señales
prueba de agua y que pudiera subir rampas con inclinaciones no mayores a 30°.
diseño mecánico y electrónico, sin embargo, por varios motivos de los diferentes
Por lo cual, se tomó la decisión de presentar este robot móvil como proyecto
5
idea, cubriendo así las diferentes ramas de la mecatrónica, y buscando innovar en
1.4. Objetivos
que, a su vez, logre continuar bajo ciertas condiciones ambientales que puedan
1.5. Hipótesis
Es posible entrenar la RNA que genere las trayectorias de un robot móvil para
6
2. Capítulo II. Marco teórico.
En el presente capítulo se hablará sobre los puntos más relevantes de la
2.1.1. Antecedentes
La robótica nació como una ciencia a partir del siglo XX, en la década de los
40. Los orígenes de esta datan de tiempo más atrás, en el siglo XVIII con la
palabra checa robota, que significa servidumbre o trabajo forzado. Isaac Asimov
introdujo por primera vez el término robótica en su obra I, Robot, incluyendo en ese
acuerdo con la fecha en la que fue propuesta, ya que antes la robótica era más
7
enfocada a la industria en robots que ayudaban a manipular materiales o
debido a que debe tomarse muy en cuenta la tarea que va a realizar el robot; debido
a esto, los criterios tomados en cuenta para clasificar a los robots son varios, tales
50s hasta el día de hoy, con diferentes campos de aplicación, hasta la identificación
móvil, se encuentran:
8
Equipments. Ambos robots utilizaban sensores para detectar su entorno y evitar
Sentry, diseñado por la empresa Demming Mobile Robotics Este robot cumplía con
Helpmate Robotics Inc. Fue diseñado con la finalidad de ayudar a los enfermeros
el robot a determinado lugar del mapa y navegar de una estación programada a otra
pathfinder llevó a Marte el que se puede considerar el robot móvil más sofisticado
mundo en su fecha, al poder hacer tareas únicas como subir escaleras. El diseño
situados en las manos y en los pies, que le permiten controlar la fuerza de agarre o
10
como ruedas, patas, orugas, etc. (Barrientos Sotelo, García Sánchez, & Silva
Ortigoza, 2007).
Los robots móviles son clasificados según el tipo de locomoción utilizado, los
tres medios de movimiento son: por ruedas, por patas y por orugas. Dentro de los
atributos más relevantes de los Robots Móviles con Ruedas (RMR), destacan su
dirigida a considerar que las partes dinámicas del RMR son insignificantes, o sea,
que no contiene partes flexibles, esto para aplicar mecanismos de cuerpos rígidos
11
para el modelado cinemático; La segunda limita que la rueda tenga máximo un
finalmente, la tercera es asumir que rodos los ejes de dirección son perpendiculares
común que se utilicen motores. Existe una gamma bastante amplia dependiendo de
su empleo; los más utilizados en la robótica móvil son los motores de corriente
directa (CD). (Barrientos Sotelo, García Sánchez, & Silva Ortigoza, 2007)
ejecutar tareas diversas y/o ejecutar una misma de forma diversa, lo cual implica
12
un robot debe alcanzar su objetivo por si solo a pesar de las perturbaciones
él mismo.
un modelo del entorno o estrategias para conocerlo, y los programas que permiten
Gualán, 2018).
13
Actualmente, existe una gran variedad de sistemas de dirección en el
mercado del automóvil, cada uno con unas determinadas características que lo
Pese a esto, todos son funcionalmente similares. Todos están formados por
que circulan por nuestras carreteras está basado en el efecto que produce la
El efecto Ackermann indica que es muy importante que todas las ruedas del
(CIR) al punto donde la velocidad será cero respecto al sólido que está girando en
ese instante.
Dado que las ruedas traseras son fijas y no cambian de orientación, el CIR
estará sobre una línea perpendicular al movimiento del vehículo. Además, en caso
de que el vehículo circule en línea recta, el CIR aparecerá en el infinito, por lo que
determinará si ambas ruedas se quedan paralelas o si una girará más que la otra.
14
Para el uso de bajas aceleraciones laterales (vehículos de carretera), es
en un ángulo diferente.
elementos que proporcionan ojos a una máquina y se podría decir que la visión
15
artificial o comprensión de imágenes describe la deducción automática de la
involucran la visión artificial, por esta razón existe un amplio conjunto de métodos
cual son necesarios sensores y la capacidad para digitalizar las señales producidas
Una vez que la imagen digital ha sido obtenida, el siguiente paso consiste en
16
El paso posterior es la segmentación, cuyo objetivo es dividir la imagen en
solución del problema, y una mala segmentación conducirá al fallo en dar solución
al problema.
convertir estos datos a una forma que sea apropiada para el ordenador. La primera
convexidades,
los datos de entrada. Es necesario especificar un método que extraiga los datos de
o rasgos que son básicos para diferenciar una clase de objetos de otra.
17
En último lugar se
encuentran el reconocimiento y la
interpretación. El reconocimiento
descriptores (clasificación). La
otros, 2006)
Sensor óptico: El sensor puede ser una cámara color o monocromática que
problema cada cierto tiempo, normalmente a una tasa de 30 cuadros por segundo
(o FPS por las siglas en inglés de Frames per second), pero nuevamente los FPS
la imagen que produzca son determinadas por la aplicación que se le vaya a dar.
18
Tarjeta de adquisición de imagen: Permite digitalizar la señal del video
programa.
2.2.3. Aplicaciones
19
embotelladoras y de embalaje, etiquetadoras, textiles, papeleras, metalúrgicas, de
que máquinas realicen tareas que podría realizar el hombre aplicando cualquier tipo
qué no lo es.
problema sea resuelto exactamente de la misma manera que lo haría una persona.
Mientras que ciertos libros enfocan la definición a sistemas que piensan o actúan
(Russell & Norvig, 2004). Las definiciones de IA generalmente aluden a los procecos
20
2.3.1. Redes Neuronales
mismo autor de esta investigación, dando crédito al final en las referencias citadas
neurona. De forma genérica, una neurona consta de un cuerpo celular o soma más
o menos esférico, del que parten una rama principal o axón y un denso árbol de
la función que cumple, esto es, de la posición que ocupa en el sistema y de los
21
Figura 6. Partes de una RNA.
lineal.
22
Figura 7. Analogía entre una neurona biológica y una neurona artificial.
proceso en el que se adaptan las sinapsis o pesos, para que la red responda de un
modo distinto a los estímulos del medio. Para casos sencillos, los pesos pueden
asignarse de forma manual, pero lo usual es utilizar algún algoritmo para llevar a
cabo este proceso de entrenamiento. Todos los métodos de aprendizaje pueden ser
supervisado.
23
en masa, la mayoría de tareas de reconocimiento de patrones eran realizadas
(Bojarski , y otros).
24
3. Capítulo III. Metodología de la
investigación.
En el presente capítulo se describirá la metodología utilizada para la presente
esta razón, es posible que no se haya seguido al pie de la letra desde el principio
ejemplo:
4. Revisan tales suposiciones o ideas sobre la base de las pruebas o del análisis
25
5. Proponen nuevas observaciones y evaluaciones para esclarecer, modificar y
en realidad son muy diferentes y cada una tiene sus propias características.
También, aunque ambos métodos son diferentes, puede que una investigación opte
por usar una mezcla de ambos o cierta etapa del proceso de uno según sea
cualitativo y cuantitativo.
26
entonces, tras hacer una pequeña investigación al respecto, se desarrolló la idea
tesis.
27
4. Capítulo VI. Sistemas diseñados.
En el presente capítulo, se expondrá el proyecto realizado y los resultados
conclusiones halladas tras trabajar en este proyecto. Debido a que este trabajo se
propuesta por NVIDIA en su artículo “end to end learning for self driving cars”
28
Como se menciona en la hipótesis de este trabajo, todas las imágenes con
la que fue entrenada esta CNN, fueron generadas mediante un simulador. Dicho
Unity; el simulador puedes ser encontrado con la búsqueda en Google “Udacity self
Figura 12. Menú principal del Self Driving Car Simulator de Udacity.
derecho, el espejo retrovisor izquierdo, y una tercer cámara sobre el centro del
en cada momento se le asigna el valor actual que tiene de ángulo de giro del volante,
que permite poner a prueba nuestra CNN una vez haya sido entrenada, usando un
código para generar predicciones por parte del modelo y conectando un servidor
local al simulador.
evitar que los datos mostraran una preferencia de girar hacia la izquierda o la
derecha.
Figura 13. Gráfica del ángulo de giro del volate por imágen
giro del volate hacia la derecha, -1 un máximo de giro del volante hacia la izquierda
y 0 indica que el volante no ha sido girado), la gran mayoría de los ángulos de giro
30
del volante se presentan en 0, lo cual ocasionaría que nuestro vehículo aprendiese
forma que aunque la mayoría del tiempo el automóvil fuera recto, no se viera tan
apreciar una línea azul que atraviesa el gráfico verticalmente, esta línea indica un
corte en la cantidad de imágenes de tal forma que todas las imágenes por encima
de esta línea sean omitidas del entrenamiento de la CNN. Dicho corte se puede
entrenamiento de la CNN.
31
Dichas divisiones se pueden apreciar mejor en la figura 15, donde se puede
ver que como datos de entrenamiento se tienen un total de 4610 muestras, mientras
que para validación se tienen 1537 muestras. Ambos grupos de muestras cuentan
con la mayoría de los valores de giro del volante ligeramente hacia la izquierda,
entrenar la RNA, es por esto que se usaron técnicas de aumento con las imágenes
veces con todas las imágenes, sino que cada técnica tenía una probabilidad de 50%
32
de aplicarse a la imagen, por lo que ver una imagen con todas las técnicas de
ya que se requiere que tenga ciertas características antes de ser procesada por la
RNA. Por ejemplo, la imagen debe estar en formato YUV y tener un tamaño de
entrenamiento.
34
Figura 20. Épocas de entrenamiento de la CNN.
cada paso de cada época, también para evitar que el proceso de entrenamiento
Figura 21. Gráfica del mse por época del entrenamiento de la CNN.
35
tomara demasiado tiempo, como se puede ver en la figura 20, el entrenamiento de
Se utilizó el error cuadrático medio (mse por mean squared error) para
evaluar la calidad del entrenamiento por época de la CNN, obteniendo así la gráfica
Para ver la discusión sobre los resultados que se tuvieron respecto a este
código de Python utilizado para este segmento del trabajo se puede visitar el anexo
prototipo del robot móvil, desde el diseño mecánico hasta el diseño electrónico. El
geometría de Ackermann para el diseño del sistema de dirección. Esta fue la idea
seguida para diseñar la placa base de todo el robot, sobre la cuál estarían montados
36
Figura 22, Vista isométrica inferior de la base inferior del robot en
Solidworks
Una vez que esta placa fue diseñada, el siguiente diseño importante fue el
del firmware y software del robot, como por ejemplo el ángulo máximo de giro que
el sistema podía dar. El sistema de dirección diseñado se puede ver en la figura 30.
37
Habiendo diseñado este sistema de dirección, lo siguiente que quedaba por
Figura 24. Vista isométrica frontal del diseño final del prototipo del robot
movil.
de voltajes de los distintos componentes del robot, teniendo así 12 V de entrada por
38
Figura 25. Layout de la placa central.
39
5. Capítulo V. Conclusiones y
observaciones
En este capítulo final de la tesis, se discutirán tanto las conclusiones que se
anterior. Para esto, primeramente, se dividirá el capítulo por secciones, para así
modificaron en cada intento. Sin embargo, el mínimo error que se obtuvo en los
intentos fue de 0.0718 para el entrenamiento y 0.0503 para la validación, tal y como
pista completamente diferente que nuestra RNA veía y exploraba por primera vez.
Para el primer caso, se puede decir que la CNN recorrió la pista dando una
complicación que se tuvo es que el carrito tenía cierta tendencia a seguir la línea de
40
la izquierda muy cercano a ella, mientras que se esperaba que el automóvil siguiera
una trayectoria más centrada al avanzar por la pista, esto que se describe se puede
Otra de las complicaciones que tuvo la CNN es que a base de que no siempre
iba por el centro del camino, algunas veces chocaba con el borde del camino o con
complicaciones para volver, a tal punto de que en algunas ocasiones podía volver,
41
Figura 28. Automóvil manejando por la segunda pista.
Para la segunda pista, esta era la primera vez que la CNN veía este camino,
por lo cual se esperaba que fallara más fácilmente que en la primera pista, además
aunque en algunas ocasiones si falló el recorrido al chocar con los bordes, se puede
decir que la CNN tuvo un buen desempeño al poder dar una vuelta completa, al
poder girar incluso en una curva muy pronunciada a una velocidad promedio.
42
esperaba, únicamente con las imágenes generadas por el simulador. Aunque
también hay que mencionar que los resultados obtenidos del entrenamiento podrían
no ser debido a las imágenes generadas, también se podría dar el caso de que hubo
dirección.
miembros del equipo encargado de la creación de este prototipo junto con el autor
experiencia por parte del autor en las distintas áreas que incluyó este trabajo, ya
43
sea en el área de trabajo práctico o en el área de trabajo teórico. Esta experiencia
adquirida será muy útil en la búsqueda de futuros proyectos para trabajar ya sea en
ingenieros debíamos resolver. Sin duda alguna, por parte del autor, se disfrutó
44
6. Referencias
Aldabas-Rubira, E., Vega Huerta, H., Cortez Vásquez, A., María Huyana, A., Alarcón
Barrientos Sotelo, V. R., García Sánchez, J. R., & Silva Ortigoza, R. (2007). Robots
Bojarski , M., Del Testa, D., Dworakowski, D., Firner , B., Flepp, B., Goyal, P., . . .
Industrial de Barcelona.
García Villanueva, M., Ramírez Zavala, S., & Ortega Reyes, H. (2016). Robot móvil
Gómez Quesada, F. J., Fernández Graciani, M. Á., López Bonal, M. T., & Díaz-
169-179.
45
González Marcos, A., Martínez de Pisón Ascacíbar, F. J., Pernia Espinoza, A. V.,
Alba Elías, F., Castejón Limas, M., Ordieres Meré, J., & Vergara González,
Universidad de la Rioja.
Hernández Sampieri, R., Fernández Collado, C., & Baptista Lucio, P. (2014).
Education.
López Flórez, R., & Fernández Fernández, J. M. (2008). Las redes neuronales
Gesbiblo.
Milliken, W. F., & Milliken, D. F. (1995). Race car vehicle Dynamics. E.U.A.: Society
of Automotive Engineers.
46
7. Anexo
7.1. A-1 Código de Python para el seguimiento de un camino
!ls Behavioural-clonning
datadir = 'Behavioural-clonning'
##Se une el directorio data dir con el csv, y después se especifica el nombre de las
columnas
def path_leaf(path):
return tail
data['center'] = data['center'].apply(path_leaf)
data['left'] = data['left'].apply(path_leaf)
data['right'] = data['right'].apply(path_leaf)
data.head()
num_bins = 25
samples_per_bin = 400
47
center = (bins[:-1]+ bins[1:]) * 0.5
plt.xlabel('Angulo de giro')
plt.ylabel('Cantidad de imágenes')
samples_per_bin))
remove_list = []
for j in range(num_bins):
list_ = []
for i in range(len(data['steering'])):
list_.append(i)
list_ = shuffle(list_)
list_ = list_[samples_per_bin:]
remove_list.extend(list_)
print('removed:', len(remove_list))
data.drop(data.index[remove_list], inplace=True)
print('remaining:', len(data))
samples_per_bin))
48
print(data.iloc[0])
image_path = []
steering = []
for i in range(len(data)):
indexed_data = data.iloc[i]
image_path.append(os.path.join(datadir, center.strip()))
steering.append(float(indexed_data[3]))
image_path.append(os.path.join(datadir,left.strip()))
steering.append(float(indexed_data[3])+0.15)
image_path.append(os.path.join(datadir,right.strip()))
steering.append(float(indexed_data[3])-0.15)
image_paths = np.asarray(image_path)
steerings = np.asarray(steering)
test_size=0.25, random_state=6)
49
print('Training Samples: {}\nValid Samples: {}'.format(len(X_train),
len(X_valid))).
axes[0].set_title('Training set')
axes[1].set_title('Validation set')
def zoom(image):
image = zoom.augment_image(image)
return image
print(image_paths[random.randint(0, len(image_paths))])
original_image = plt.imread(image)
print (original_image)
zoomed_image = zoom(original_image)
fig.tight_layout()
axs[0].imshow(original_image)
50
axs[0].set_title('Original Image')
axs[1].imshow(zoomed_image)
axs[1].set_title('Zoomed Image')
def pan(image):
image = pan.augment_image(image)
return image
original_image = mpimg.imread(image)
panned_image = pan(original_image)
fig.tight_layout()
axs[0].imshow(original_image)
axs[0].set_title('Original Image')
axs[1].imshow(panned_image)
axs[1].set_title('Panned Image')
def img_random_brightness(image):
image = brightness.augment_image(image)
return image
original_image = mpimg.imread(image)
brightness_altered_image = img_random_brightness(original_image)
51
fig, axs = plt.subplots(1, 2, figsize=(15, 10))
fig.tight_layout()
axs[0].imshow(original_image)
axs[0].set_title('Original Image')
axs[1].imshow(brightness_altered_image)
image = cv2.flip(image,1)
steering_angle = -steering_angle
image = image_paths[random_index]
steering_angle = steerings[random_index]
original_image = mpimg.imread(image)
steering_angle)
fig.tight_layout()
axs[0].imshow(original_image)
axs[1].imshow(flipped_image)
str(flipped_steering_angle))
52
def random_augment(image, steering_angle):
image = mpimg.imread(image)
image = pan(image)
image = zoom(image)
image = img_random_brightness(image)
ncol = 2
nrow = 10
fig.tight_layout()
for i in range(10):
random_image = image_paths[randnum]
random_steering = steerings[randnum]
original_image = mpimg.imread(random_image)
random_steering)
53
axs[i][0].imshow(original_image)
axs[i][0].set_title("Original Image")
axs[i][1].imshow(augmented_image)
axs[i][1].set_title("Augmented Image")
def img_preprocess(img):
img = img[60:135,:,:]
img = img/255
return img
image = image_paths[100]
original_image = mpimg.imread(image)
preprocessed_image = img_preprocess(original_image)
fig.tight_layout()
axs[0].imshow(original_image)
axs[0].set_title('Original Image')
axs[1].imshow(preprocessed_image)
axs[1].set_title('Preprocessed Image')
while True:
54
batch_img = []
batch_steering = []
for i in range(batch_size):
if istraining:
steering_ang[random_index])
else:
im = mpimg.imread(image_paths[random_index])
steering = steering_ang[random_index]
im = img_preprocess(im)
batch_img.append(im)
batch_steering.append(steering)
fig.tight_layout()
axs[0].imshow(x_train_gen[0])
axs[0].set_title('Training Image')
axs[1].imshow(x_valid_gen[0])
axs[1].set_title('Validation Image')
55
def nvidia_model():
model = Sequential()
activation='relu'))
activation='relu'))
#model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dropout(0.5))
#model.add(Dropout(0.5))
#model.add(Dropout(0.5))
model.add(Dense(1))
optimizer = Adam(lr=1e-4)
model.compile(loss='mse', optimizer=optimizer)
return model
56
model = nvidia_model()
print(model.summary())
steps_per_epoch=300,
epochs=10,
0),
validation_steps=200,
verbose=1,
shuffle = 1)
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.legend(['training', 'validation'])
plt.title('Loss')
plt.xlabel('Epoch')
model.save('model.h5')
files.download('model.h5')
57