Aron Christian Mauricio Luis Antonio: de La Cruz Vázquez Castillo Estrada Álvarez Oval
Aron Christian Mauricio Luis Antonio: de La Cruz Vázquez Castillo Estrada Álvarez Oval
2
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
3
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
Resumen / abstract. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. 7
PRÓLOGO.. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . 9
INTRODUCCIÓN GENERAL . . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. 11
4
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
5
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
CONCLUSIONES. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . .. . 138
6
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
Definir el comportamiento de un robot educativo a través del diseño Defining the behavior of an educational robot through the design of
de algoritmos y su codificación con el lenguaje de programación deno- algorithms and their coding with the programming language called
minado ROBOTC es el ámbito de esta obra. Desde el control del movi- ROBOTC is the scope of this work. From the control of movement and
miento y detección de variables del medioambiente usando los sensores detection of environmental variables using the sensors provided by the
que nos proporciona el robot se le presentarán al lector de manera robot will be presented to the reader in an entertaining way. Let’s do it.
amena. Manos a la obra.
7
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
8
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
9
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
10
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
introducción general
Desde los inicios del programa educativo de Licenciatura en Derivado de la incorporación de un nuevo programa educa-
Sistemas Computacionales, que se ofertaba en la Facultad de tivo a la oferta académica de la Facultad de Negocios, nuevos
Negocios del Campus IV de la Universidad Autónoma de Chia- retos surgen y la necesidad de dar solución a cada uno de
pas, se identificaba en el proceso de enseñanza-aprendizaje la ellos es prioritario. Los laboratorios de prácticas académicas
necesidad de utilizar herramientas educativas complementarias, que se han elaborado para la unidad de competencia deno-
para coadyuvar al reto que representa para los estudiantes el minada Metodología de la Programación, la cual forma parte
estructura y metodología de programación, muchas genera- Software tratan de resolver la problemática mencionada;
ciones alertaban de diferentes problemas, pero una constante estos laboratorios de prácticas consideran como elemento
aparece siempre: el razonamiento de pasar de las nociones abs- educativo innovador, el uso de robots LEGO EV3 programables,
tractas de la computadora a la implementación práctica. Limi- permitiendo la aplicación del Razonamiento Computacional
tar esta brecha entre teoría y práctica resulta una decisión vital como una técnica que se requiere para resolver problemas en
para controlar el arte de programar computadoras. las diferentes etapas de formación de los estudiantes. Cada
11
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
descripción de un problema o reto, posteriormente se repre- el lenguaje ROBOTC® en idioma español; no obstante, en inglés
senta de manera gráfica la solución a través de Diagramas de existe una vasta documentación generada por la Universidad
Flujo, y finalmente se escribe un programa en un lenguaje Carnegie Mellon. Estos laboratorios se basan en los materiales
de programación denominado ROBOTC®, el cual es cargado o educativos y manuales de usuario, sin ser su copia, a los que se
transferido al robot LEGO® para su correspondiente ejecución. puede acceder mediante los sitios web oficiales señalados en las
Lo anterior permite una sinergia de la teoría y la práctica como secciones de bibliografía de este libro. Todos los programas aquí
una herramienta para desarrollar proyectos de programación; el presentados han sido debidamente probados para asegurar la
estudiante no es un simple observador, sino todo lo contrario, calidad del trabajo. Debido a que no existe bibliografía en idioma
es el responsable de diseñar el algoritmo correcto y codificarlo español, hemos buscado cómo estos materiales pueden formar
para que el robot pueda cumplir con el reto propuesto en cada la base de este libro.
una de las prácticas que conforman al laboratorio. En estos laboratorios algunos desafíos de programación
Por todo lo anterior, en este libro didáctico se contempla se han tomado de los publicados en el sitio web de ROBOTC® y
el uso del lenguaje de programación ROBOTC®, en virtud de que LEGO®, otros son parte de la experiencia de programación de
provee un entorno de desarrollo fácil para fortalecer el apren- computadoras de los autores y la necesidad de explicar a los
dizaje del estudiante, y que pueda aplicar los fundamentos de estudiantes el plan de estudios de la asignatura y todos se han
programación, asociándolos con el lenguaje de programación C, resuelto con programas desarrollados por los autores.
el cual es usado en los semestres subsecuentes en otras unidades También es necesario comentar que este material ha sido
competencias tales como: Estructura de Datos, Sistemas probado con estudiantes de la Escuela Secundaria General “16
Operativos, Bases de Datos, Diseño de interfaces, etcétera. En la de Septiembre”, en el ejido La Libertad, municipio de Ciudad
12
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Hidalgo, Chiapas. También se ha usado para capacitar estudiantes preparar a nuestros estudiantes para que programen una amplia
del CONALEP plantel Tuxtla Chico. En ambos casos tuvimos exce- variedad de robots, participen en las competencias que organizan
lentes resultados. Es nuestra intención reproducir este curso los fabricantes de los dispositivos y los prepara para enfrentar
fuera de las aulas universitarias para la mayor cantidad de los retos de programación que presenta el programa académico
Además se explotará la amplia infraestructura robótica Finalmente, esperamos que los materiales preparados para
que posee la facultad. En su inventario cuenta con robots de las los estudiantes universitarios puedan permear a estudiantes de
marcas VEX®, LEGO® y ARDUINO®; todos se pueden programar nivel medio superior, y que nuevos retos se implementen para
con el mismo lenguaje de programación ROBOTC®. También enriquecer la asignatura, como la programación de otros disposi-
contamos con licencias de ROBOTC® para VEX® y LEGO®, y licen- tivos robotizados aéreos, mejor conocidos como drones. ¡Manos
cias para ARDUINO®, que son gratuitas. Esta estrategia permite a la obra!
13
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
ROBOT VELADOR, LABORATORIO 1
COMPORTAMIENTO
BÁSICO: MARCHA
• RECORRIDO RECTILÍNEO
• RECORRIDO CON VUELTAS Y GIROS
14
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
De acuerdo al sitio de documentación oficial de Robomatter dose a un lenguaje máquina. Finalmente, estos comandos ya
Inc. La tecnología ROBOTC® es considerada como un lenguaje traducidos serán cargados en el robot para ser ejecutados.
de programación eficaz con base en los principios y sintaxis del ROBOTC® y el robot nos permiten trasladar la programa-
lenguaje de programación C. Esta tecnología ofrece un entorno ción del mundo abstracto dentro de la computadora al mundo
de programación integrado (IDE, por sus siglas en inglés) orien- real, en donde cada orden que se escribe puede ser percibida
tado al sistema operativo Windows utilizado para escribir y como la actividad que desarrolla el robot. El estudiante debe
Así también, es importante señalar que ROBOTC es un vidad lógica sencilla de entender y aplicar, esa comprensión le
lenguaje de programación que expone un depurador con búsqueda permitirá desarrollar conceptos mucho más abstractos tales
paso a paso en tiempo real. Es una solución multiplataforma para como la comunicación entre procesos remotos, programación
que los estudiantes tengan acceso al aprendizaje de robótica orientada a objetos, programación web, etcétera.
básica aplicando los principios de la programación estructurada El robot que usaremos a lo largo de este curso tiene una
(Robomatter 2016). configuración de dos ruedas, cada una con su propio motor,
Cabe señalar que el estudiante debe consultar la lista de que serán los actuadores, y una rueda de arrastre omnidirec-
comandos que se visualizan en el IDE, escribirlos en pantalla, cional; en el tema de sensores, para percibir su ambiente, el robot
posteriormente serán procesados por el compilador traducién- dispone de un sensor táctil, ultrasónico, y otro de luz/color.
15
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
DESAFÍO POR RESOLVER cubo que se te proporciona, y debe regresar a su posición inicial
La compañía ACME Robotics ha ganado un proyecto para dise- en reversa. Finalmente, ya en la posición inicial, debe depositar
ñar un robot programable que patrulle los alrededores de un el cubo en el piso. Esto nos permitirá ganar comprensión del
edificio rectangular que almacena autos, por lo que ACME te comportamiento de la mecánica del robot.
del edificio. Otro equipo de trabajo ya ha desarrollado el pro- RECORRIDO DEL ROBOT VELADOR.
por el cliente.
16
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Para este desafío el estudiante necesita los siguientes CONCEPTOS BÁSICOS
materiales: Aquí encontrarás material de apoyo para entender el objetivo
• Cinta aislante de color negro primario de este documento. En general, los apuntes provienen
• Lenguaje de programación ROBOTC® en los cursos de robótica que imparte y en la página web del
[Link]
17
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Diagramas de flujo Tabla 1.
Los diagramas de flujo son un conjunto de símbolos gráficos que PRINCIPALES SÍMBOLOS DE UN DIAGRAMA DE FLUJO.
18
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Comportamientos básicos prender y realizar directamente. En ROBOTC®, estos son los
En el nivel más básico, todo en un programa tiene que ser divi- comportamientos de un solo enunciado, como encender un
dido en pequeños comportamientos que tu robot pueda com- solo motor o reajustar un cronómetro.
Comportamiento cativa tarea, como moverse hacia delante por un tiempo. Son,
5 task main () básico
6 quizá, los comportamientos más útiles en los que debes pensar,
7 // Paso 1. Avanzar derecho 35 cm
porque son suficientemente grandes para describir acciones úti-
8 motor [Izquierda] = 63;
9 motor [Derecha] = 63; les, y suficientemente pequeños para programarlos fácilmente
10 wait1Msec (1200);
con órdenes básicas de ROBOTC®.
11 // Paso 2. Girar izquierda 45 grados
12 motor [Izquierda] = -63;
Comportamiento
13 motor [Derecha] = 63;
14 wait1Msec (170);
simple Comportamientos complejos
15 // Paso 3. Avanzar derecho 145 cm Estos son comportamientos en los niveles más altos, como
16 motor [Izquierda] = 63;
Comportamiento navegar todo un laberinto. Pueden parecer complejos, pero
17 motor [Derecha] = 63;
complejo
18 wait1Msec (4350);
una buena propiedad de los comportamientos complejos es
19 // Paso 4. Girar derecha 135 grados
20 motor [Izquierda] = 63; que están compuestos de otros más pequeños. Si los observas
21 motor [Derecha] = -63;
con detalle, verás que puedes dividirlos en comportamientos
22 wait1Msec (460)
más y más pequeños y, con práctica, llegarás a reconocer todos.
19
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Cuerpo de un programa Comando motor Comando wait1sec()
en ROBOTC® El comando motor indica al robot El comando wait1sec() le indica al
La ejecución de un programa en encender un motor a un determinado robot cuánto esperar antes de que
ROBOTC® inicia en la línea identificada nivel de potencia. El ejemplo del pro- ejecute el siguiente comando, por
por el comando “task main”, por omi- grama 1 configura los puertos B y C, a un tiempo dado en milisegundos. El
sión el compilador lo buscará y si no lo los que están conectados los motores número entre paréntesis representa
encuentra marcará error. Después eje- izquierdo y derecho, respectivamente, los milisegundos que el robot tendrá
cuta el siguiente comando hacia abajo y para que corran a toda potencia hacia que esperar para ejecutar el siguiente
así sucesivamente. En el programa que delante. Recuerda que cada comando comando.
se muestra en la figura 3 puedes ver en ROBOTC® termina con punto y coma
dos comandos: motor y wait1msec. ( ; ).
Figura 3.
4
Task main. Esta línea crea {Cuerpo} los corchetes
5 task main()
una tarea llamada task 6 { [ ] encierran el cuerpo
main, la cual contiene 7 de la estructura. Entre
los comportamientos que 8 // Paso 2. Girar izquierda los corchetes se indica al
9 motor[Izquierda] = 0;
queremos que el robot programa qué comandos seguir
10 motor[Derecha] = 63;
realice. Task main marca el 11 wait1Msec (170); como parte de la task main.
inicio de una estructura. 12
13 }
14
20
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
A continuación se muestra un resumen del Programa Resultado
motor[Izquierda] = 126;
comportamiento que se puede lograr variando
motor[Derecha] = 126;
la potencia que se aplica a cada motor. En cada
Avanzar a toda
caso es necesario agregar el tiempo que dedi- potencia
motor[Izquierda] = -126;
motor[Derecha] = -126;
Reversa a toda
potencia
motor[Izquierda] = -126;
motor[Derecha] = 126;
Giro
de pivote
Figura 4.
motor[Izquierda] = 126;
COMPORTAMIENTO motor[Derecha] = 0;
VARIANDO POTENCIA Giro de punto
DE LOS MOTORES.
motor[Izquierda] = 126;
motor[Derecha] = -63;
Giro de
semipunto
21
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
SOLUCIÓN DEL DESAFÍO comportamiento del robot, y para eso tienes que hacer otras
Lograr que el robot vaya derecho no es simple. Hay muchas la relación programando tu robot para que corra a 25, 50, 75, y a
variables que entran en juego: 100% de potencia por 1, 3, y 5 segundos. Considera que la poten-
• Los motores pueden generar diferentes empujes, cia máxima del robot es de 127, si es necesario, aplica redon-
• Puede haber más fricción en un eje que en otro, deo al número inmediato inferior. Marca la zona de arranque
• El peso del robot podría no estar equilibrado o parejo, para que obtengas resultados consistentes en todas las prue-
• Las llantas pueden estar fuera de balance, etcétera. bas. El valor numérico asignado al comando motor representa
Eventualmente recibirás respuesta de los sensores que cia mientras que un valor de 63 indica aproximadamente media
te pueden ayudar a enderezar el movimiento de tu robot, potencia. Llena la tabla 2 con los valores de potencia faltantes
pero mientras tanto tendrás que programarlo manualmente. (usa la regla de tres). Usa el Programa 1 (véase) para llenar la
Para lograrlo hay que variar ligeramente la potencia que tabla 3 con los valores resultantes al momento de ejecutar las
22
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
1 #pragma config(Motor, motorB, Derecha. tmotorNormal)
Programa 1.
2 #pragma config(Motor, motorC, Izquierda, tmotorNormal1)
PROGRAMA 1 3
4
PARA LLENAR
5 task main (){
LA TABLA 2. 6 // Activación de los motores
7 motor[motorB] = 126; Nivel de potencia.
8 motor[motorC] = 126; Modificar valores para: 100, 75,
9 // Tiempo de espera de 50 y 25%
10 // concluir el programa
11 // Igual al tiempo de recorrido Tiempo de recorrido.
12 wait1Msec (1000); Modificar para 1, 3 y 5 segundos
13 }
Tabla 2.
Porcentaje Potencia
VALORES DE POTENCIA
100% 127
POR CADA PORCENTAJE.
75%
50% 63
25%
23
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tiempo recorrido Distancia Tabla 3.
Nivel de potencia
milisegundos) recorrida RESULTADOS DE NIVEL DE POTENCIA
50% 1000
75% 1000
Para que el robot mueva el brazo, aplica los comandos que
100% 1000
ya conoces (se mueve con un motor en puerto D), aplica una
-------------------
potencia baja (25%). Documenta el movimiento circular del brazo
25% 3000 en la tabla 4.
50% 3000
25% 5000
Tiempo de recorrido Grados de giro
50% 5000 100
75% 5000 200
24
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Ahora se te proporcionan tres herramientas que permiten Tabla 5.
1. Solución del problema con una serie de pasos (Tabla A UNA RECETA DE COCINA.
el desafío.
25
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tabla 6. Figura 5.
9 {
10 Esperar 2 segundos
AVANZAR X SEG
11 Avanzar x segundos
15 }
RETROCEDER X SEG
BAJAR BRAZO Y°
FIN
26
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Anota en este recuadro el programa resultante con el que Construyendo el conocimiento
diste solución a los pasos de este desafío: del recorrido rectilíneo
1. Crea tres gráficas separadas (una para cada tiempo de
recorrida.
TRABAJO ADICIONAL
Modifica tu programa para que ejecute el siguiente desafío.
27
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
inicial. Finalmente, debe dar otro giro de 180° grados y depositar
básicos”.
Referencias
RobotC for LEGO Mindstorms Web Help. (s.f.). ROBOTC Downloads. Consultado 2 de enero de 2018: [Link]
[Link]/WebHelpMindstorms/[Link]#Resources/topics/ROBOTC_Interface/[Link]
Curriculum for Tetrix and Lego Mindstorm Product Overview. (s.f.). Consultado el 2 de enero de 2018: http:// www.
[Link]/products/teaching_ROBOTC_tetrix/home/ROBOTC_TETRIX_Curriculum.pdf
Cairó O. Metodología de la programación. Algoritmos, diagramas de flujo y programas. Alfaomega. 3ª. edición.
28
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
ROBOT VELADOR, LABORATORIO 2
COMPORTAMIENTO BÁSICO:
RECORRIDO DE GIRO
29
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
ROBOTC® y el robot nos permiten trasladar la programación la comunicación entre procesos remotos, programación orien-
del mundo abstracto dentro de la computadora al mundo real, tada a objetos, programación web, etcétera.
en donde cada orden que se escribe puede ser percibida como El robot que estaremos usando a lo largo de este curso
la actividad que desarrolla el robot. El estudiante debe com- tiene una configuración de dos ruedas, cada una con su propio
prender la programación de computadoras como una actividad motor, que serán los actuadores, y una rueda de arrastre omni-
lógica, sencilla de entender y aplicar; esa comprensión le per- direccional; en el tema de sensores, para percibir el ambiente el
mitirá desarrollar conceptos mucho más abstractos tales como robot dispone de un sensor táctil, ultrasónico, y otro de luz/color.
30
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
DESAFÍO POR RESOLVER
La compañía ACME Robotics ha ganado un proyecto para dise- La problemática que se debe resolver en esta sección
ñar un robot programable que patrulle los alrededores de un es la siguiente: el robot debe arrancar de su posición inicial
edificio rectangular que almacena autos, por lo que ACME te hasta la posición final, el recorrido lo obliga a evadir algunos
ha contratado para que desarrolles el programa para que ese obstáculos. El recorrido adopta una forma de una equis.
robot prototipo pueda, de forma autónoma, “vigilar” los alre- Solucionar el desafío incrementará tu comprensión del
dedores del edificio. Otro equipo de trabajo ya ha desarrollado comportamiento de la mecánica del robot durante los giros.
se vaya construyendo paso a paso, así que la rutina de vigilan- Para este desafío necesitas los siguientes materiales:
cia constante será desarrollada en laboratorios posteriores. Es • Cinta aislante de color negro
necesario que imprima este documento ya que debes respon- • Flexómetro
der las preguntas que se te hacen en la sección “Solución del • Transportador
desafío”. El administrador de este proyecto ha planteado divi- • Lenguaje de programación ROBOTC®
dir en seis etapas el proceso de ingeniería para el desarrollo • Robot LEGO® armado
del sistema que va a controlar el robot y que resolverá la pro- • Editor de diagramas DIA. Liga de descarga: http://
blemática planteada por el cliente. [Link]/
31
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Figura 1. Es interesante abordar el concepto de diagramas de flujo
RECORRIDO DEL ROBOT VELADOR nuevamente en este laboratorio, el estudiante debe conocer cada
Obstáculo uso de flechas de dirección que apuntan de una acción a otra. Hay
32
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
indicando los posibles caminos a seguir. Las flechas Recorrido de giro
deben ser siempre etiquetadas de adecuadamente. Hay dos tipos de giros que nuestro robot puede ejecutar: giro
SOLUCIÓN DEL DESAFÍO cuando a los dos motores se les asignan valores opuestos, a uno
Puesto que nunca nos hemos enfrentado a un proyecto de se asigna un valor positivo mientras que al opuesto uno negativo.
ingeniería de este tipo, es necesario que apliquemos el con- Determina los tiempos de recorrido para diferentes poten-
cepto de “divide y vencerás”; dividiremos el desafío en varias cias de motor para lograr una vuelta a la izquierda de 90, 180 y
etapas para ir construyendo el conocimiento necesario para 360 grados. Modifica el programa 1 para llenar las tablas 1 y 2
resolver la problemática de esta sección. con tus resultados. Recorta la plantilla para resolver esta tarea.
Programa 1.
5 task main()⎨
6 // activación de los motores. Giro de Punto
7 motor [motorB] = -126;
Nivel de potencia. Modificar valores
8 motor [motorC] = 126;
para: 100, 75, 50, y 25% de potencia.
9 // Tiempo de espera antes de
10 // Concluir el programa
11 // Igual al tiempo de recorrido
Tiempo de recorrido. Modificar para
12 wait1msec(1000);
1, 3 y 5 segundos.
13 ⎬
14 |
33
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tabla 1. Tabla 2.
RESULTADOS DE NIVEL DE POTENCIA RESULTADOS DE NIVEL DE POTENCIA
VS. GRADOS CON GIRO DE PIVOTE. VS. GRADOS CON GIRO DE PUNTO.
Nivel de potencia Grados de giro Tiempo Nivel de potencia Grados de giro Tiempo
de recorrido de recorrido
34
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Construyendo Figura 2.
tu conocimiento sobre los giros PLANTILLA PARA LA INVESTIGACIÓN
en el giro?
35
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Ahora se te proporcionan tres herramientas que permiten
1. Solución del problema con una serie de pasos (Tabla SOLUCIÓN PARECIDA
cocina.
ciona estos conceptos con el proceso de ingeniería que 8. Girar a la derecha y grados.
9. Avanzar x segundos
se te ha presentado en la sección “Conceptos básicos”.
10. Girar a la izquierda y grados
Todas las soluciones se explican usando la técnica del 11. Avanzar x segundos
comportamiento simple, su tarea es convertir esta en 12. Fin del programa
comportamiento básico (ver sección “Conceptos bási-
36
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tabla 4. Figura 3.
Inicio
8 task main () Avanzar
9 ⎨ x segundos
Avanzar
x segundos
Girar
Derecha y°
37
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Anota en el recuadro el programa resultante con el que TRABAJO ADICIONAL
solucionaste este desafío. Modifica tu programa para resolver una nueva situación. El
aprecia en la figura 4.
Cubo
LEGO Figura 4.
LOS RECORRIDOS
DEL ROBOT
Obstáculo EN EL TRABAJO
ADICIONAL.
Obstáculo
Ruta 2 Ruta 1
Posición Posición
final inicial
38
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Referencias
Robomatter Inc. (2016). ROBOTC for LEGO Mindstorms 4.X - Users Manual. Disponible para consulta en el sitio web:
[Link]
Carnegie Mellon University (2020). ROBOTC for TETRIX & LEGO® [Link]://[Link]/roboticsacademy/
roboticscurriculum/Lego%20Curriculum/ROBOTC-Tetrix_Mindstorms.html
Cairó, O (2005). Metodología de la programación. Algoritmos, diagramas de flujo y programas. Alfaomega. 3ª. edición.
39
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
ROBOT VELADOR, LABORATORIO 3
40
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
En este tercer laboratorio, el estudiante deberá utilizar el len- programas, y es el único que depura exhaustivamente en
guaje de programación ROBOTC® para diseñar el algoritmo y tiempo real. Es una solución multiplataforma que permite que
codificarlo; así también, hará uso de ciertos materiales com- los estudiantes aprendan el tipo de programación con base en
plementarios: bloque de madera, flexómetro y cronómetro C, usada en educación avanzada y aplicaciones profesionales.
con la finalidad de desarrollar una solución para el reto plan- Los comandos para el robot primero se escriben en la
teado, y finalmente, realizar las pruebas del correcto funcio- pantalla, después son procesados por el compilador de ROBOTC®
namiento del algoritmo, con el robot en ejecución. en un archivo de lenguaje de máquinas que el robot comprende.
Así también, el estudiante debe hacer uso del IDE que Finalmente, son cargados en el robot en donde pueden ejecutarse.
ofrece ROBOTC®, consultando el apartado de ayuda, mismo ROBOTC® y el robot nos permiten trasladar la programación
que despliega una lista de comandos disponibles y su corres- del mundo abstracto de la computadora al mundo real, en donde
pondiente descripción; cada uno de estos comandos se traduce cada orden escrita puede percibirse como actividad del robot.
a lenguaje máquina con la finalidad que el robot los pueda inter- El estudiante debe comprender la programación de computa-
pretar y ejecutar. doras como una actividad lógica sencilla de entender y aplicar;
ROBOTC® es un poderoso lenguaje de programación con esa comprensión le permitirá desarrollar conceptos mucho más
41
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
El robot que estaremos usando a lo largo de este curso DESAFÍO POR RESOLVER
tiene una configuración de dos ruedas, cada una con su propio La compañía ACME Robotics ha ganado un proyecto para dise-
motor, que serán los actuadores, y una rueda de arrastre omni- ñar un robot programable que patrulle los alrededores de
direccional; en el tema de sensores, percibe el ambiente que un edificio rectangular que almacena autos, por lo que ACME
lo rodea con un sensor táctil, ultrasónico, y otro de luz/color. te ha contratado para desarrollar el programa para que ese
Para este desafío necesitas los siguientes materiales: robot prototipo pueda, de forma autónoma, “vigilar” los alre-
• Marco de madera (que representará el edificio). dedores del edificio. La figura 1, explica paso a paso la solu-
• Teléfono celular con sistema operativo Android y el prototipo mecánico-electrónico del robot y está disponible
Enlace para descargar la aplicación móvil: https:// El programa que debes construir en ROBOTC® , debe
• Lenguaje de programación ROBOTC®. así que la rutina de vigilancia constante será desarrollada en
• Editor de diagramas DIA. Liga de descarga: [Link] Es necesario que imprimas este documento ya que deberás
42
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Figura 1. CONCEPTOS BÁSICOS
RECORRIDO DEL ROBOT VELADOR. Aquí encontrarás material de apoyo para entender el objetivo
Pseudocódigo
El pseudocódigo es una técnica para expresar la serie de pasos
Paso 8 Punto ser una técnica para delimitar un programa antes de codificarlo
43
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
representa un beneficio durante la etapa de análisis y INVESTIGAR Figura 2.
1. Identificar problema
planeación. Otro beneficio adicional del pseudocódigo 2. Investigarsoluciones actuales PROCESO
3. Lluvia de ideas
5. Desarrollar prototipos
es la facilidad que ofrece para poder traducirlo a dife- DE INGENIERÍA.
Idea seleccionada
rentes lenguajes de programación; en otras palabras,
44
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
otras palabras como por ejemplo “potencia del robot SOLUCIÓN DEL DESAFÍO
apagada” o “detener todos los motores”. Ahora se te proporcionan las tres herramientas que permiten
figuras de rectángulos y funcionan como comandos 1. Solución del problema con una serie de pasos (Tabla
tados por el símbolo o figura de rombo; evaluando 2. Solución con pseudocódigo (Tabla 3), expresado también
que ayudarán a tomar la decisión de elegir el camino 3. Solución con algoritmo usando la notación de diagra-
Con base en lo manifestado en el diccionario de la Real Academia ya que el siguiente paso es que generes el programa que
de Lengua Española, el término proceso se define como “con- resuelva el desafío. Relaciona estos conceptos con el proceso
junto de las fases sucesivas de un fenómeno natural o de una de ingeniería que se te ha presentado en la sección “Conceptos
los pasos que debes llevar a cabo para proyectos de ingeniería. A continuación, las tres herramientas ya mencionadas.
45
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tabla 1. Tabla 2.
SOLUCIÓN DEL PROBLEMA COMO UNA RECETA DE COCINA SOLUCIÓN DEL PROBLEMA COMO UNA RECETA DE COCINA
1. Mide el extremo más largo del rectángulo. cuánto tiempo necesita el robot para alcanzar
Anota cuánto mide: _____________ la siguiente esquina del edificio. Haz los ajustes
2. Haz que el robot viaje del punto A al B a ½ necesarios a su programa. Anota tu primera res-
potencia. Usa el cronómetro del celular para puesta: _____________
determinar el tiempo que le toma al robot. Apaga 5. Ahora, haz que el robot gire a la izquierda
el motor al llegar al extremo contrario del marco. (aplica ¼ de potencia del motor del robot). Usa
Considera que al llegar al extremo contrario del los datos que obtuviste en el punto 3.
punto de partida el robot deberá dar vuelta a la 6. Haz que el robot viaje del punto C al D a ½
izquierda, por lo que debes darle suficiente espa- potencia. Usa los datos que obtuviste en el paso 2.
cio para que el dispositivo no choque con el edifi- 7. Ahora, que el robot gire a la izquierda (aplique
cio. Describe tus acciones: _____________ ¼ potencia al motor del robot). Usa los datos del
3. Ahora, haz que el robot gire a la izquierda (aplica punto 3.
¼ de potencia del motor del robot). ¿Cuánto 8. Haz que el robot viaje del punto D al A a ½
tiempo debes aplicar fuerza a las ruedas para dar potencia. Usa los datos obtenidos en el paso 4.
un giro de 90°? Anota tu respuesta: _____________. 9. Ahora, haz que el robot gire a la izquierda (apli-
4. Haga que el robot viaje del punto B al C a que ¼ potencia del motor del robot). Use los
½ potencia. Usa los conceptos de matemáti- datos que obtuviste en el punto 3.
cas que ya conoces (regla de tres) y determina
46
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tabla 3. Figura 3.
47
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Anota en el recuadro el programa resultante con el que TRABAJO ADICIONAL
diste solución a los pasos de este desafío. Los desafíos que se encuentran en esta sección deben ser resueltos
figura 4, para que tengas una idea del recorrido del robot. Aunque
48
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Figura 4. 1) Un proyecto adicional ha sido asignado a ACME Robotics,
Figura 5.
49
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
¿Qué cambios tendrías que hacer a tu programa para reco-
Referencias
Robomatter Inc. (2016). ROBOTC for LEGO Mindstorms 4.X - Users Manual. Disponible para consulta en el
Interface/[Link]
Carnegie Mellon University (2020). ROBOTC for TETRIX & LEGO® [Link]://[Link]/
roboticsacademy/roboticscurriculum/Lego%20Curriculum/ROBOTC-Tetrix_Mindstorms.html
50
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
ROBOT VELADOR, LABORATORIO 4
51
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
El desafío por resolver en este cuarto laboratorio consiste en ROBOTC® es un poderoso lenguaje de programación basado
diseñar y codificar un algoritmo que permita al robot efectuar en C con un ambiente Windows para escribir y depurar programas,
una vuelta completa a la representación de un edificio de tipo y es el único que ofrece un depurador exhaustivo en tiempo real.
rectangular, que haremos con un bloque de madera; el estu- Es una solución multiplataforma que permite a los estudiantes
diante debe aplicar los principios teóricos de las estructuras aprender el tipo de programación basada en C usada en educa-
repetitivas e identificar los valores de potencia idóneos para ción avanzada y aplicaciones profesionales.
ser asignados a los motores, que permitan realizar los giros con Los comandos para el robot los escribes primero en la
precisión en cada esquina del edificio. pantalla, después los procesas en el compilador de ROBOTC®, que
De igual manera que en los laboratorios anteriores, el estu- es un archivo de lenguaje de máquinas que el robot comprende.
diante debe seleccionar el conjunto de comandos necesarios para Finalmente, los cargas en el robot para que pueda ejecutarlos.
codificar el algoritmo, posteriormente debe efectuar el proceso El robot que estaremos usando a lo largo de este curso
de compilación para traducir los comandos al lenguaje-máquina; tiene una configuración de dos ruedas, cada una con su propio
y finalmente, realizar las pruebas evaluando el comportamiento motor, que serán los actuadores, y una rueda de arrastre omni-
del robot al ejecutar el programa direccional; en el tema de sensores, para percibir el ambiente
52
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
que lo rodea, el robot dispone de un sensor táctil, ultrasónico, Figura 1.
[Link]/
53
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
El programa que debes construir en ROBOTC® debe contener puede ser un problema cuando necesitas usar la misma varia-
las instrucciones para dar tres vueltas completas al edificio. Como ble en muchos lugares diferentes, por ejemplo, una función
se trata de un prototipo no es necesario que ejecute una rutina que creaste, y task main.
Es necesario que imprimas este documento ya que debes ejemplo, sólo dentro de las funciones en las que fueron decla-
responder las preguntas de la sección “Solución del desafío”. radas. El “alcance” es la “definición” de estos límites: que tan
CONCEPTOS BÁSICOS alcance existe para prevenir los conflictos entre las funciones
Aquí vas a encontrar material de apoyo para entender el con variables de nombres parecidos, y más importante, para
objetivo primario de este documento. En general los con- evitar que las variables de diferentes funciones intervengan
ceptos básicos provienen de los documentos que el Labo- accidentalmente unas con las otras, o incluso con ellas mismas
ratorio Nacional de Ingeniería Robótica de la Universidad si la misma función es ejecutada más de una vez.
Carnegie Mellon ha proporcionado en los cursos de robótica En general, la regla es que una variable puede ser usada
Cuando se crea una variable, ésta puede ser usada únicamente un error y declara que tal variable no existe, porque el programa
dentro de la función o tarea en la que fue declarada. Esto en ese punto no es capaz de “verla”.
54
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Declarar una variable global. La variable
global es declarada fuera de cualquier tarea o
2 |int variable;
función, permitiendo que todas las “vean”.
3 void cambiar valor(){
4 variable = 2000;
La variable es visible dentro de las funciones.
La variable global puede ser usada y modificada 5 {
55
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Ciclo while
Un bucle while es una estructura dentro de ROBOTC® la cual permite que una porción de código se ejecute una y otra vez mientras
Condición
1
2 while(condicion)
Ya sea “true” o “false” (veáse referencia > lógica
3 {
booleana).
4 // Comandos que se ejecutan
5 // repetidamente Comandos repetidos
6 }
7 Los comandos colocados aquí se ejecutarán una y
otra vez mientras la (condición) sea verdad cuando
el programa valida al principio cada paso por el
bucle.
56
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tabla 1.
SOLUCIÓN DEL DESAFÍO SOLUCIÓN PARECIDA A UNA RECETA DE COCINA
Ahora se te proporcionan tres herramientas que permiten (continúa en la pagina siguiente)
resolver el problema.
1. Inicio del programa.
1) Solución del problema con una serie de pasos (Tabla 1)
2. Numero de vuelta es igual a 0.
explicados en idioma español, como en una receta de cocina.
3. Medir el lado más largo del rectángulo. Anótalo:
2) Solución con pseudocódigo (Tabla 2), expresado también ______________________________________________
en idioma español, concreto. 4. Si ya va en la cuarta vuelta ir al paso 15.
3) Solución con algoritmo usando la notación de diagramas 5. Haz que el robot viaje del punto A al B a ½
potencia. Usa el cronómetro del celular y deter-
de flujo (Figura 2).
mina cuánto tiempo le toma al robot. Apaga el
Asegúrate de estudiar completamente cada solución, ya motor al llegar al lado contrario del marco. Consi-
que en el siguiente paso generarás el programa que resuelva el dere que al llegar ahí, desde el punto de partida, el
desafío. Relaciona estos conceptos con el proceso de ingeniería robot deberá dar vuelta a la izquierda, por lo que
debe haber suficiente espacio para que el disposi-
que se te ha presentado en la sección “Conceptos básicos” del
tivo no choque con el edificio. Anota tus observa-
Laboratorio 3 (véase página 43).
ciones y acciones: _____________________________
A continuación, las tres herramientas ya mencionadas. _____.
6. Ahora haz que el robot gire a la izquierda (aplica
¼ de potencia del motor). ¿Cuánto tiempo debe
aplicar fuerza a las ruedas para que dé un giro de
90°? Anota tu respuesta: ______________________.
57
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tabla 1.
SOLUCIÓN PARECIDA A UNA RECETA DE COCINA
(finaliza)
58
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tabla 2.
// Desafío Robot Velador
PSEUDOCÓDIGO
// El robot da 3 vueltas alrededor del edificio rectangular
PARA EL DESAFÍO. // por lo que el tiempo de recorrido en cada recta puede variar
// En cada esquina gira 90 grados
task main()
{
it NoVuelta = 0;
// Se darán 3 vueltas
While(NoVuelta > 4)
{
// Movimiento del punto A al punto B
avanzar el robot x segundos
// Giro en la esquina
girar a la Izquierda
// Movimiento del punto B al punto C
avanzar el robot x segundos
// Giro en la esquina
girar a la Izquierda
// Movimiento del punto C al punto D
avanzar el robot x segundos
// Giro en la esquina
girar a la Izquierda
// Movimiento del punto D al punto A
avanzar el robot x segundos
// Giro en la esquina
girar a la Izquierda
//Contador de vueltas
NoVuelta = NoVuelta + 1
59
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
INICIO Figura 2. Anota en el recuadro el programa resultante con el que
Avanzar
x segundos
Sí ¿Número de
vueltas >3? Avanzar
x segundos
No
Vuelta a
Avanzar la izquierda
x segundos
Avanzar
Vuelta a x segundos
la izquierda
Vuelta a
Avanzar la izquierda
x segundos
Número de vuelta =
Vuelta a Número de vuelta +
la izquierda
FIN
60
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
TRABAJO ADICIONAL Figura 3.
Los desafíos de esta sección debe resolverlos el estudiante. Es RECORRIDO DEL ROBOT
necesario crear un algoritmo y que el programa dé solución PARA EL EDIFICIO DEL “PENTÁGONO”.
61
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
cambios tendrías que hacer a su programa para que dé Figura 4.
ritmo y el programa en ROBOTC® para hacer el reco- PARA EL EDIFICIO CON FORMA DE CRUZ.
aristas.
30 cm
Punto
de partida
62
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Referencias
Robomatter Inc. (2016). ROBOTC for LEGO Mindstorms 4.X - Users Manual. Disponible para consulta en el
Interface/[Link]
63
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
ROBOT VELADOR, LABORATORIO 5
64
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
El desafío que corresponde a este quinto laboratorio de prác- decisiones que le permitan al robot evadir el obstáculo a través
ticas, resulta ser una continuación al anterior; considerando de la implementación de estructuras de decisión simple.
como principal reto la evasión de obstáculos por parte del ROBOTC® es un poderoso lenguaje de programación basado
robot durante el recorrido de vigilancia que realiza. Por lo ante- en C con un ambiente Windows para escribir y depurar programas,
rior, el estudiante deberá incorporar a la estructura del robot, y es el único que ofrece un depurador exhaustivo en tiempo real.
un sensor de contacto que le permita identificar obstáculos Es una solución multiplataforma que permite que los estudiantes
localizados en la parte frontal en relación a la trayectoria que aprendan el tipo de programación basada en C usada en educa-
En virtud de lo anterior, el estudiante debe seleccionar la El robot que estaremos usando a lo largo de este curso
lista de comandos que ofrece ROBOTC para la manipulación de tiene una configuración de dos ruedas, cada una con su propio
sensores de contactos, los cuales emitirán valores que deben motor, que serán los actuadores, y una rueda de arrastre omni-
ser evaluados en tiempo de ejecución, y con base a ellos, tomar direccional; en el tema de sensores, para percibir el ambiente
65
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
que lo rodea, el robot dispone de sensor táctil, ultrasónico, y olvidado los “pallets” en donde se transportaban dichos equi-
Para este desafío necesitas los siguientes materiales: mos que no hay obstáculo cuando el robot está girando, pero
• Marco de madera (para simular el edificio). puede estar en cualquier otro lugar. El robot debe estar prepa-
• Editor de diagramas DIA. Liga de descarga: [Link] estar “encendido” al inicio de la jornada, pero debe empezar a
• Cinta aislante de color negro. figura 1, explica paso a paso el problema, las líneas de color verde
La compañía ACME Robotics ha ganado un proyecto para dise- mecánico-electrónico del robot y está disponible para su uso.
ñar un robot programable que patrulle los alrededores de un El programa que debes construir en ROBOTC® debe contener
edificio rectangular que almacena autos, por lo que ACME te ha las instrucciones para que el robot inicie el recorrido hasta que
contratado para desarrollar el programa que permita que ese el usuario presione un interruptor, dé tres vueltas completas al
robot prototipo pueda, de forma autónoma, “vigilar” los alre- edificio, eludiendo obstáculos. Puesto que se trata de un proto-
dedores del edificio, desde las 20:00 horas de un día hasta las tipo no es necesario que ejecute una rutina de vigilancia cons-
6:00 horas del siguiente. Para este desafío hemos agregado “mar- tante. El proceso de ingeniería implica que vayas construyendo
cas” en las esquinas del edificio. También “sabemos” que algunos la solución paso a paso, así que la rutina de vigilancia constante
trabajadores, que instalaron equipos de aire acondicionado, han será desarrollada en laboratorios posteriores.
66
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Es necesario que imprimas este documento ya que se deben Figura 1.
responder las preguntas que se te hacen en la sección “Solución RECORRIDO DEL ROBOT VELADOR.
del desafío”.
Edificio
Paso 6 Paso 2
por vigilar
Percibir, planear y actuar (PPA)
Percibir, planear y actuar es el proceso más importante de los
67
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
• Percibe. En esta actividad el robot requiere de la habili-
recolectar la información?
esa estrategia?
68
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
¿Dónde están S, P y A en este programa? Tabla 1.
69
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
motores marcharán hacia delante; si ese sensor es presionado, Enunciados if-else
el robot se mueve en reversa y luego girará para alejarse del Un enunciado “if-else” es una manera de permitirle a tu
obstáculo. Esto está capturado dentro del programa que ejecuta computadora que tome una decisión. Con este comando el
el robot, al tiempo que lee los datos del sensor y emplea los programa checará la (condición) y después ejecutará una
comandos de motor apropiados. de las dos partes del código, dependiendo si la condición es
de los comandos dados, los motores hacen combinaciones para Abajo está el pseudocódigo que da una idea general de un
70
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Abajo, un ejemplo de programa que contiene un enunciado IF–ELSE
sensor ultrasónico está a más de 25 pulgadas de distancia. tantes de cualquier máquina a la que se considere o denomine
Si el sensor ultrasónico detecta un objeto a menos de 25 robot; los cuales le proporcionan información relacionada al
pulgadas, entonces la parte “else” del código será ejecutada ambiente en el cual interactua el procesador central del robot.
y el robot dejará de moverse. El bucle while (true), que está Estos componentes son una extensión del robot y en ocasiones
más afuera, hace que el enunciado se ejecute una y otra vez simulan los sentidos del cuerpo humano, y resultan de vital impor-
para siempre. tancia para que el robot decida la siguiente acción a ejecutar con
71
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
base a la información emitida por los sensores. En el
72
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
detectar y medir la distancia de objetos, de la misma manera en • Retorna un valor de verdadero o true al identificar
que lo hacen los murciélagos. Es capaz de enviar ondas de sonido otro sonido ultrasónico.
Con la ayuda del sensor ultrasónico, los estudiantes tienen Mindstorms EV3, resulta ser un elemento simple, pero al mismo
los elementos necesarios para diseñar un modelo de simula- tiempo excepcional para detectar las acciones de pulsar o sol-
ción de un sistema de monitorización de tráfico, el cual permite tar un botón frontal; así también, proporciona información
calcular distancias entre autos. Así también, los estudiantes acerca del número de presiones simples y múltiples que ha
descubrirán el impacto significativo que genera el uso de este detectado. Con este sensor, el robot adquiere una nueva fun-
tipo de sensores aplicados a la vida cotidiana. cionalidad que le permitirán a los estudiantes construir mode-
Aspectos por considerar: los de robots con capacidad de dar solución a desafíos de
• Precisión de +/- 1 cm. laberintos o crear interfaces de interacción con diversos dispo-
• Rango de medida de distancia (1 - 250 cm). sitivos tales como: instrumentos musicales, teclados de com-
lectura (escucha).
73
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
1 task main(){ Variable para la velocidad inicial de los
2 int velocidad = 50; motores.
3 while (true) {
4 if(SensorValue(Toque) = = 1){ Si el sensor está activo(presionado) se
5 velocidad = velocidad * -1; invierte la velociad del motor (reversa).
6 else
7 velocidad = 50; Cuando se deja de presionar el sensor, el
8 } /* Fin del IF */ motor regresa a velocidad normal (hacia
9 motor[Izquierda] = velocidad; adelante).
10 motor[Derecha] = velocidad;
11 } Los motores avanzan de acuerdo al valor
12 } /* Fin del main */ almacenado en la variable velocidad.
Sensor de luz probando con diferentes colores, y adquirir experiencia con una
Este sensor digital de color es capaz de distinguir hasta ocho tecnología que se utiliza ampliamente en industrias.
colores. Otra de sus funciones es ocupar el rol de sensor de luz, El sensor de luz tiene un rango de estados entre 0 y 100.
es decir, permite la identificación de diversas intensidades de Mientras más bajo sea el número, el color que “ve” es más oscuro;
la misma. Por lo anterior, existe la posibilidad que los estudian- mientras más alto el número, el color que “ve” es más claro.
tes puedan incorporar este tipo de sensor al robot, con la fina- Por esto debe ser calibrado para la cantidad de luz en donde
lidad de construir modelos de clasificación de objetos con base esté operando, usando como referencia el color que se quiere
sensores ayuda al proceso de aprendizaje, permitiendo al estu- • Capaz de detectar ocho colores.
diante experimentar con el reflejo derivado de la captura de luz • Frecuencia de muestreo de 1 kHz
74
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
2 task main(){ Si la lectura del sensor de luz es
3 while (true) { inferior a 45,lo que corresponde a un
4 while(SensorValue(SensorLuz) < 45){ color que tiende al negro, el robot
5 motor[Izquierda] = 65; da vueltas hacia la derecha.
6 motor[Derecha] = 0;
7 } Si la lectura del sensor de luz es
8 while(SensorValue(SensorLuz) > = 45){ superior a 45, lo que corresponde a
9 motor[Izquierda] = 0; un color que tiende al blanco, el
10 motor[Derecha] = 65; robot da vuelta hacia la izquierda.
11 } /* Fin del IF */
12 }
13 } /* Fin del main */
75
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
SOLUCIÓN DEL DESAFÍO B) Solución con pseudocódigo (Tabla 3), expresado también
Con la cinta aislante agrega las marcas en las esquinas del en idioma español concreto.
edificio, tal y como puedes verlo en el diagrama de la figura C) Solución con algoritmo usando la notación de diagramas
1. Ahora el robot no se moverá con tiempo, lo hará hasta que de flujo (Figura 3).
el robot detecte el cambio de color del fondo blanco al color Asegúrate de estudiar completamente cada solución, ya el
negro de la cinta aislante. Incluso las vueltas pueden ser contro- siguiente paso es que generes un programa que resuelva el
ladas hasta que el sensor detecte el cambio de color. desafío y relaciones estos conceptos con el proceso de inge-
Ahora se te proporcionan tres herramientas que te permi- niería que se te ha presentado en la sección “Conceptos básicos“
A) Solución del problema, como una receta de cocina (serie A continuación, las tres herramientas ya mencionadas.
76
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
1. Inicio del programa
2. Leer el estado del interruptor Tabla 2.
3. Si el interruptor está apagado vaya al paso 2
SOLUCIÓN PARECIDA
4. Numero de vuelta es igual a 0
5. Si ya va en la cuarta vuelta ir al paso 64. A UNA RECETA DE COCINA.
6. -- Viaje del punto A al B.
(continúa en la pagina siguiente)
7. Ciclar mientras el sensor no “vea” color negro
8. Avanzar a media potencia
9. Si el robot se acerca a un obstáculo al menos a 10 cm
10. Girar a la derecha
11. Avanzar
12. Girar a la Izquierda
13. Avanzar
14. Girar a la Izquierda
15. Avanzar
16. Girar a la Derecha
17. Fin Si
18. Fin de Ciclo. Vaya al paso 7
19. Ahora gire el robot a la izquierda (aplique media potencia al motor del robot).
20. -- Viaje del punto B al C.
21. Ciclar mientras el sensor no vea color negro
22. Avanzar a media potencia
23. Si el robot se acerca a un obstáculo al menos a 10 cm
24. Girar a la derecha
25. Avanzar
26. Girar a la Izquierda
27. Avanzar
28. Girar a la Izquierda
29. Avanzar
30. Girar a la Derecha
31. Fin Si
32. Fin de Ciclo. Vaya al paso 21
77
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
33. Ahora gire el robot a la izquierda (aplique media potencia al motor del robot).
34. -- Viaje del punto C al D Tabla 2.
35. Ciclar mientras el sensor no vea color negro
SOLUCIÓN PARECIDA
36. Avanzar a media potencia
37. Si el robot se acerca a un obstáculo al menos a 10 cm A UNA RECETA DE COCINA.
38. Girar a la derecha
(finaliza)
39. Avanzar
40. Girar a la Izquierda
41. Avanzar
42. Girar a la Izquierda
43. Avanzar
44. Girar a la Derecha
45. Fin Si
46. Fin de Ciclo. Vaya al paso 35
47. Ahora gire el robot a la izquierda (aplique media potencia al motor del robot)
48. -- Viaje del punto D al A
49. Ciclar mientras el sensor no vea color negro
50. Avanzar a media potencia
51. Si el robot se acerca a un obstáculo al menos a 10 cm
52. Girar a la derecha
53. Avanzar
54. Girar a la Izquierda
55. Avanzar
56. Girar a la Izquierda
57. Avanzar
58. Girar a la Derecha
59. Fin Si
60. Fin de Ciclo. Vaya al paso 49
61. Ahora gire el robot a la izquierda (aplique media potencia al motor del robot).
62. Numero de vuelta = Numero de vuelta + 1.
63. Vaya al paso 5.
64. Fin del Programa.
78
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
19 // Desafío Robot Velador Tabla 3.
20 // El robot da 3 vueltas alrededora el edificio retangular
21 // por lo que el tiempo de recorrido en cada recta puede variar PSEUDOCÓDIGO
22 // En cada esquina 90 grados
23 task main ()(
PARA SOLUCIONAR EL DESAFÍO.
24 int NoVuelta = 0;
25 int valorInt = 0
26 // Evaluando el interruptor 65 // Giro en la esquina
27 while (valorInt = )( 66 GirarIzq(15);
28 if SensorValue( interruptor ) = 1{ 67 // Movimiento del punto C al punto D
29 valorInt = 1; 68 While (sensor no vea color Negro){
30 } 69 Avanzar(50);
31 } 70 // Librando al pallet
32 // Solo debe dar tres vueltas 71 IF SensorValue(sonarSensor) < 10 {
33 while(NoVuelta < 4) 72 GirarDerecha(15);
34 { 73 Avanzar();
35 // Movimiento del punto A al punto B 74 GirarIzq();
36 While (sensor no vea color Nero)( 75 Avanzar();
37 Avanzar(50); 76 GirarIzq();
38 // Librando el pallet 77 Avanzar(50);
39 IF SensorValue(sonarSensor) < 10 { 78 GirarDerecha();
40 GirarDerecha(15); 79 }
41 Avanzar(); 80 }
42 GirarIzq() 81 // Giro en la esquina
43 Avanzar(); 82 GirarIzq(15);
44 GirarDerecha(); 83 // Movimiento del punto D al punto A
45 Avanzar(50); 84 While (sensor no vea color Negro)(
46 GirarDerecha(); 85 Avanzar(50);
47 } 86 // Librando el pallet
48 } 87 IF SensorValue(sonarSensor) < 10 {
49 //Giro en la esquina 88 GirarDerecha(15);
50 GirarIzq(15); 89 Avanzar();
51 // Movimiento del punto B al punto C 90 Girar()
52 While (sensor no ea color Negro){ 91 Avanzar()
53 Avanzar(50); 92 GirarIzq();
54 // Librando el pallet 93 GirarDerecha();
55 IF SensorValue(sonarSensor) < 10 { 94 GirarDerecha();
56 GirarDerecha (15); 95 }
57 Avanzar(); 96 }
58 GirarIzq(); 97 // Giro en la esquina
59 Avanzar(50); 98 GirarIzq(15);
60 GirarIzq(); 99 // Contador de vueltas
61 Avanzar(50); 100 NoVuelta = NoVuelta + 1
62 GirarDerecha(); 101 }
63 } 102 }
64 } 103
79
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
INICIO
Figura 3.
Número
de vuelta = 0
DIAGRAMA DE FLUJO
PARA EL DESAFÍO.
Sí
¿Número
de vueltas
> 3?
Girar_Der(15) Girar_Der(15) Girar_Der(15) Girar_Der(15)
No
Sí
Sí Sí
¿Ve color
Sí
¿Ve color ¿Ve color ¿Ve color Girar_Der(15)
negro? negro? negro? negro?
No No No No
No No No No
¿Está a ¿Está a ¿Está a ¿Está a
10 cm de 10 cm de 10 cm de 10 cm de
obstáculos? obstáculos? obstáculos? obstáculos?
Sí Sí Sí Sí
CO N T E N I D O FIN
GENERAL Viaje de A −> B Viaje de B −> C Viaje de C −> D Viaje de D −> A
Anota en el recuadro el programa resultante con el que TRABAJO ADICIONAL
diste solución a los pasos de este desafío. Desarrolla el programa para que el giro del robot se ejecute
este laboratorio.
81
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Referencias
Robomatter Inc. (2016). ROBOTC for LEGO Mindstorms 4.X - Users Manual. Disponible para consulta
ROBOTC_Interface/[Link]
Carnegie Mellon University (2020). ROBOTC for TETRIX & LEGO® [Link]://[Link]/
roboticsacademy/roboticscurriculum/Lego%20Curriculum/ROBOTC-Tetrix_Mindstorms.html
82
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
ROBOT VELADOR, LABORATORIO 6
83
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
Con la finalidad de que el estudiante aprenda el diseño e sencilla de entender y aplicar; esa comprensión le permitirá desa-
implementación de funciones, o procedimientos dentro del rrollar conceptos mucho más abstractos, como la Comunicación
programa, usando el lenguaje de programación robotc; en este entre procesos remotos, Programación orientada a objetos,
través del uso de funciones que ejecuten las tareas que permi- El robot que estaremos usando a lo largo de este curso
tan dar cumplimiento al objetivo principal. tiene una configuración de dos ruedas, cada una con su propio
Para dar solución al desafío planteado, es importante iden- motor, que serán los actuadores, y una rueda de arrastre omni-
tificar las tareas más relevantes y transformarlas en funciones; direccional; en el tema de sensores, para percibir el ambiente
posteriormente, el estudiante debe usar los comandos necesa- que lo rodea, el robot dispone de sensores táctil, ultrasónico, y
del ahorro y optimización del código. Finalmente, es necesario Para este desafío necesita los siguientes materiales:
del mundo abstracto dentro de la computadora al mundo real, • Robot LEGO® armado.
en donde cada orden que se escribe puede ser percibida en la • Editor de diagramas DIA. Liga de descarga: [Link]
la programación de computadoras como una actividad lógica • Cinta aislante de color negro.
84
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
DESAFÍO POR RESOLVER sea presionado. La figura 1 explica paso a paso el problema, las
La compañía ACME Robotics ha ganado un proyecto para dise- líneas de color verde muestran en dónde se deben ubicar las
ñar un robot programable que patrulle los alrededores de un marcas en las esquinas del edificio. Otro equipo de trabajo ya
edificio rectangular que almacena autos. ACME te ha contra- ha desarrollado el prototipo mecánico-electrónico del robot y
tado para desarrollar el programa para que ese robot proto- está disponible para su uso.
tipo pueda, de forma autónoma, “vigilar” los alrededores del El programa que debes construir en ROBOTC® contendrá
edificio desde las 20:00 horas de un día hasta las 6:00 horas del las instrucciones para que se mueva hasta que el usuario
siguiente. Para este desafío hemos agregado “marcas” en las presione un interruptor e inicie el recorrido, que será de tres
esquinas del edificio. También debemos suponer que algunos vueltas completas al edificio, evadiendo obstáculos. Puesto
trabajadores que instalaron equipos de aire acondicionado que se trata de un prototipo no es necesario que ejecute una
han olvidado los “pallets” en donde se transportaban dichos rutina de vigilancia constante. Se aplicará el concepto “crear
equipos (se desconoce la ubicación exacta del obstáculo). Una funciones” para completar el desafío. El proceso de ingeniería
condición con la que se cuenta es que el obstáculo no estor- implica que vayas construyendo la solución paso a paso, así que
bará los giros del robot, y que sí puede estorbarlo en cual- la rutina de vigilancia constante será desarrollada en laborato-
quier otro lugar. El robot debe estar preparado para evadir rios posteriores.
dicho obstáculo. También ha surgido un nuevo requerimiento, Es necesario que imprimas este documento ya que debes
el robot debe estar “encendido” al inicio de la jornada, pero responder las preguntas que se te hacen en la sección “Solución
debe empezar a moverse hasta que un interruptor del robot del desafío”
85
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Figura 1.
Paso 4
Paso 5 Paso 3
C B
Pallet
D A
Paso 7 Paso 9
Paso 8
Punto
de partida
86
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
CONCEPTOS BÁSICOS Las funciones ofrecen diversas ventajas, por mencionar
primario de este documento. Cabe señalar que ciertas ideas • Ahorro de tiempo permitiendo que tareas comunes sean
plasmadas en este libro se relacionan con los apuntes en los escritas como funciones, y después sean ejecutadas juntas
Carnegie Mellon, que se encuentran para libre consulta de los funciones permite el código cumpla con los objetivos del
robótica que imparten (Carnegie Mellon University 2020). • Diferentes tareas relacionadas pueden ser controladas con
Es importante comprender el concepto de función o procedi- controlar y modificar el resultado de una tarea.
trucciones que son ejecutadas en una sola unidad, por ejemplo, Utilizando las funciones
task main(). Por otra parte, es necesario considerar que cada Para poder usar las funciones dentro de un programa codifi-
función representa una tarea o comportamiento específico; y cado con el lenguaje ROBOTC, deben ser declaradas, desarro-
en la mayoría de las ocasiones retornará un valor como resul- lladas y finalmente ejecutadas de forma independiente. Se
[Link] funciones ofrecen varias ventajas sobre codificación considera que una función es creada al momento de declararla,
87
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
1. Declara la función con el tipo de
dato de retorno void: En el código
de ejemplo se escribe el tipo de
22 void girarIzquierda90()[
dato, y después el nombre que tendrá
23 nMotorEncoder[Derecha] = 0;
la función. Se recomienda elegir un
24 while [nMotorEncoder[Derecha] < = 170)[
nombre adecuado para la función, mismo
25 motor[Izquierda] = -31;
que represente el comportamiento o la
26 motor[derecha] = 31;
tarea que ejecutará. Dentro de los
27 ]
[corchetes] de la función escribe
28 motor[Izquierda] = 0;
los comandos de la misma manera en
29 motor[derecha] = ;
que lo harías normalmente. Cuando la
30 ]
función es invocada, ejecutará las
31
líneas entre los corchetes en orden,
32 task main()[
tal y como task main lo hace con el
33 // Avanzar de punta A → B
código entre sus propios corchetes.
34 avanzarConGrados(60);
35 girarIzquierda90();
2. Invoca tu función: Acto posterior
a la declaración de una función, esta
es identificada o representada como
un nuevo comando en el lenguaje de
ROBOTC. Por tal motivo, para invocar
o llamar a la función, es necesario
escribir el nombre incluyendo parén-
tesis con sus respectivos valores
de los parámetros y finalizando por
punto y coma.
88
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
1. Declara un parámetro. 12 void GirarIzq(int ptiempo)[
Se recomienda realizar la declaración 13 motor[motorB] = -50;
de un parámetro del mismo modo que 14 motor[motorC] = 50;
una variable, es decir, en primera 15 wait1msec[ptiempo];
instancia especificar el tipo 16 ]
de dato, después del nombre del 17
parámetro, todo ello dentro de los 18 task main()[
paréntesis de la función. 19 int NoVuelta = 0;
20 // Se darán 3 vueltas
21 While(NoVuelta < 4)
2. Uso de parámetros. 22 [
El valor del parámetro se comporta 23 Avanzar(50);
como un “guarda valores”. Cualquier 24 GirarIzq(15);
valor que se asigne al parámetro 25 Avanzar(50);
cuando la función es invocada
aparece aquí.
maneras. Cabe señalar que los valores se asignan a cada uno de los paráme-
89
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Sustitución 12 void Girar(Izq int ptiempo)
En el código ejemplificado, se 13 motor[motorB] = -50
observan dos flechas que indican 14 motor[motorC[ = 50;
15 wait1msec[ptiempo[;
el camino que sigue el valor
16 ]
asignado al parámetro; partiendo
17
desde la posición donde fue
18 task main()[
asignado, hasta donde su valor 19 int NoVuelta = 0;
es sustituido en la función. 20 // Se darán 3 vueltas
21 while(NoVuelta < 4)
22 [
23 Avanzar(50);
24 GirarIzq(15);
25 Avanzar(50);
1
La función será ejecutada de 2 motor[motorB] = -50;
acuerdo al orden en que fueron 3 motor[motorC] = 50;
invocadas en el código. 4 wait1msec[15];
5
En relación a los tipos de datos de retorno utilizados al momento función; por ejemplo, si la función efectúa un cálculo matemá-
de declarar una función, es importante señalar que el tipo void tico entonces se obtendrá como valor de salida un dato de tipo
es usualmente elegido; sin embargo, el estudiante debe analizar entero, en esa situación se debe utilizar la palabra int.
90
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
1. Declara el tipo de retorno. 1 int Cuadrado(int tiempo)[
2 int cuad;
Como la función dará un valor de 3 cuad = tiempo * tiempo;
retorno al final, ésta debe ser 4 return cuad;
declarada con un tipo que no sea 5 ]
“void”, indicando qué tipo de 6
valor dará. 7 task main()[
8 motor[Derecha] = 63;
9 motor[Izquierda] = 63;
2. Valor de retorno. 10 waitmsec (Cuadrado(25));
11 ]
La función debe “devolver” un
valor. En este caso, significa
devolver el resultado de la
fórmula, el cuadro del parámetro.
3. el nombramiento
de funciones es un valor.
El nombramiento de funciones se
vuelve un valor en la parte del
programa que la nombra. Aquí está
actuando como un valor entero por
el comando de wait1Msec.
91
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Substitución 1 int Cuadrado(int tiempo)[
El código de ejemplo de la función 2 int cuad;
denominada Cuadrado, posee una 3 cuad = tiempo = tiempo;
serie de flechas que indican la 4 return cuad;
trayectoria del valor de salida 5 ]
cuando es retornado y regresa 6
hasta la función principal. 7 task main()[
8 motor[Derecha] = 63;
9 motor[Izquierda] = 63;
Para este ejemplo el valor de 25 es 10 wait1msec(Cuadrado(25));
usado como un intervalo de tiempo 11 ]
dentro de la función, y la salida
que genere la función depende de
ese parámetro.
1
2 wait1msec(Cuadrado(625));
3
92
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Substitución tencia del movimiento lineal del robot. Vea el programa 1 de este
Lego EV3 Encoder (sensor de rotación) laboratorio para una mejor comprensión del funcionamiento del
Los motores que permiten que el robot LEGO® se desplace sensor de rotación.
En realidad, miden en grados el movimiento de las ruedas, por SENSORES DEL ROBOT VELADOR.
ras por cada rotación completa de la llanta. RUEDA DEL ROBOT VELADOR.
93
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
SOLUCIÓN DEL DESAFÍO
Con la cinta aislante agrega las marcas en las esquinas del edificio,
task main()
tal y como se ven en la figura 1. Ahora el robot no se moverá con
[
tiempo; lo hará hasta que detecte el cambio de color del fondo
int lectura = 0;
int grados = 0;
blanco al color negro de la cinta de aislar. Incluso las vueltas pue-
// Inicializando el encoder del motor izquierdo den controlarse hasta que el sensor detecte el cambio de color.
motor[Izquierda] = 0;
mas de flujo (Figura 4).
94
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tabla 1.
SOLUCIÓN PARECIDA
95
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
// Función AvanzarLado. Da una vuelta completa al edificio rectangular
// Espera una marca (cinta aislante) al llegar al extremo opuesto
// Si ahy obstáculo detectado por el sensor sónico, lo evade por la derecha
void AvanzarLado()[
while(no vea color negro)
// Avanzar en línea recta hasta encontrar marca de esquina
Tabla 2.
Avanzar(50);
PSEUDOCÓDIGO
// Dar vuelta a 10 cm del obstáculo
IF (distancia obstáculo < = 10)[ PARA SOLUCIONAR EL DESAFÍO.
GirarDer(15); (continúa en la página siguiente)
// Avanzar línea recta
Avanzar(50);
// Giro Izquierda en la esquina
GirarIzq(15);
// Avanzar línea recta
Avanzar(50);
// Giro Izquierda en la derecha
GirarIzq(15);
// Avanzar línea recta
Avanzar(50);
// Giro Derecha en la esquina
GirarDer(15);
]
]
96
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
// Girar a la izquierda
GirarIzq(50);
]
// Desafío Robot Velador
// El robot da 3 vueltas alrededor del edificio rectangular
// por lo que el tiempo de recorrido en cada recta puede variar
Tabla 2.
// En cada esquina gira 90 grados
PSEUDOCÓDIGO
task main()[
int NoVuelta = 0; PARA SOLUCIONAR EL DESAFÍO.
int valorInt = 0 (finaliza)
// Evaluando el interruptor
while (valorInt = 0 )[
if SensoValue( interruptor ) = 1[
valorInt = 1;
]
]
while(NoVuelta = 4)
[
// una vuelta completa
AvanzarLado(50);
// contador de vueltas
NoVuelta = NoVuelta = 1
]
]
97
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
FUNCIÓN AVANZAR LADO ()
INICIO
Figura4.
Girar _izq(15)
DIAGRAMA DE FLUJO
SALIDA
Sí
PARA SOLUCIONAR ¿Está Sí A −> B
presionado Número
el sensor? de vuelta = 0 ¿Ve color
EL DESAFÍO.. B −> C negro?
No C −> D
¿Número
de vueltas
Sí > 3? Girar_Der(15)
D −> A
No
A −> B ¿Está a
Viaje de A −> B Avanzar Lado () 10 cm de
obstáculo?
D −> A Girar_Izq(15)
Avanzar Lado ()
Avanzar(50)
Número vuelta =
Número vuelta = 1 Girar_Izq(15)
Avanzar(50)
FIN
Girar_Der(15)
98
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Anota en el recuadro el programa resultante con el que TRABAJO ADICIONAL
diste solución a los pasos de este desafío. Los desafíos que se encuentran en esta sección los debes resol-
más tu proyecto.
truir? Trata de que el proyecto trabaje con solo dos funciones, una
99
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
probar que el robot está funcionando adecuadamente. Observa Figura 5.
la figura 5 para que tengas idea del recorrido del robot; aunque no RECORRIDO DEL ROBOT
se muestran las vueltas en la figura, considera que el robot debe PARA EL EDIFICIO CON FORMA DE CRUZ.
girar al dar vuelta en las aristas. Las marcas de color verde indican
Punto
de partida
100
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Referencias
Robomatter Inc. (2016). ROBOTC for LEGO Mindstorms 4.X - Users Manual. Disponible para consulta en el sitio web: https://
[Link]/WebHelpMindstorms/[Link]#Resources/topics/ROBOTC_Interface/[Link]
Carnegie Mellon University (2020). ROBOTC for TETRIX & LEGO® [Link]://[Link]/roboticsacademy/
roboticscurriculum/Lego%20Curriculum/ROBOTC-Tetrix_Mindstorms.html
101
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
ROBOT VELADOR, LABORATORIO 7
BITÁCORA DE VIGILANCIA
102
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
En este séptimo laboratorio el estudiante se enfrenta al desa- real, en donde cada orden que se escribe puede percibirse como
fío de mejorar su técnica de programación incorporando actividad del robot. El estudiante debe comprender la progra-
estructuras estáticas y elementos avanzados que permitan el mación de computadoras como una actividad lógica sencilla de
almacenamiento de datos en tiempo real, tales como: varia- entender y aplicar; esa comprensión le permitirá desarrollar
bles, arreglos, punteros y estructuras; sin perder de vista la conceptos mucho más abstractos como la comunicación entre
relación que existe con los fundamentos teóricos de la meto- procesos remotos, programación orientada a objetos, progra-
nitivas en los estudiantes. El robot que estaremos usando a lo largo de este curso
Para poder implementar los elementos mencionados el estu- tiene una configuración de dos ruedas cada una con su propio
diante debe identificar las palabras reservadas y los comandos motor, que serán los actuadores, y una rueda de arrastre omni-
necesarios que le permitan declarar las diferentes estructuras direccional; en el tema de sensores. Para percibir el ambiente
estáticas para el almacenamiento de información. Así también, que lo rodea el robot dispone de un sensor táctil, ultrasónico, y
es necesario que realice las pruebas de funcionamiento evitando de otro para luz/color.
errores de acceso a segmentos de memoria no permitidos en el Para este desafío necesita los siguientes materiales:
ROBOTC® y el robot nos permiten trasladar la programa- • Robot Lego EV3 armado.
ción del mundo abstracto dentro de la computadora al mundo • Cinta aislante de color negro.
103
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
DESAFÍO POR RESOLVER Figura 1.
La compañía ACME Robotics ha ganado un proyecto para RECORRIDO DEL ROBOT VELADOR.
res del edificio, desde las 20:00 horas de un día hasta las 6:00 C B
horas del siguiente. Además de que el robot pueda evadir
104
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Es necesario que el robot recorra tres vueltas completas al nibles dos arreglos de tipo entero con 12 posiciones cada uno,
edificio, eluda obstáculos y debe iniciar el recorrido hasta que uno para almacenar el número de vuelta y otro para almacenar
el usuario presione un interruptor. Puesto que se trata de un los grados recorridos por el sensor de rotación.
constante. Sólo que estará aplicando el concepto almacenar Tercer problema. Uso de arreglos
datos usando primero variables, arreglos, estructuras y después con estructuras
apuntadores para completar el desafío. El proceso de ingeniería El robot debe ser capaz de ejecutar tres vueltas y en cada
implica que la solución la vayas construyendo paso a paso, por vuelta debe tomar cuatro lecturas, así que el robot debe tener
lo que el problema lo resolverás en tres pasos, mismos que te disponibles un arreglo de tipo estructura con 12 posiciones
explicaremos más adelante. cada uno, la estructura debe manejar una variable para almace-
tomar cuatro lecturas; así que debe tener disponibles 12 varia- Cuarto problema. Uso de apuntadores
bles para almacenar el número de vuelta y otras 12 variables El robot debe ser capaz de ejecutar n vueltas y en cada una
para almacenar los grados recogidos por el sensor de rotación. debe tomar cuatro lecturas, así que el robot debe tener dispo-
Segundo problema. Uso de arreglos uno, la estructura debe manejar una variable para almacenar el
El robot debe ser capaz de ejecutar tres vueltas y en cada una número de vuelta y otra para almacenar los grados recorridos
debe tomar cuatro lecturas, asi que el robot debe tener dispo- por el sensor de rotación.
105
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
CONCEPTOS BÁSICOS Por ejemplo:
Aquí encontrarás material de apoyo para que entiendas el long foo = 79876;
Conceptos básicos proviene de los documentos que el Labora- string saludo = “hola”;
Mellon ha proporcionado en los cursos de robótica que imparte. En efecto, cuando se declara una variable, el compilador
Apuntadores y estructuras de datos un nombre simbólico, definido por el usuario, como “saludo” o
En esta sección se te introducirá a los conceptos variables y “foo” o “pi”. Un entero (int) tiene cuatro bytes de tamaño, un
apuntadores, usando diagramas, ejemplos y programas desarro- número de punto flotante (float) también tiene cuatro bytes,
llados en lenguaje C estándar. La versión 3.5 de ROBOTC® trajo pero una cadena de caracteres (string - en el caso de ROBOTC®)
una miríada de nuevas características, incluyendo la tan espe- suele tener 20 bytes de tamaño. Observa la figura 2 (verá los
rada implementación de punteros a variables. Teniendo esta fun- bloques de memoria, las etiquetas asignadas a ellos, sus conte-
cionalidad abre una amplia gama de nuevas posibilidades, como nidos y la dirección de memoria para ese bloque (los números
Antes de la versión 3.5, ROBOTC® solo soportaba variables norma- al lado derecho de la declaración de asignación y el valor-i se
les; en otras palabras, una variable, ya sea un int, float o cual- refiere al lado izquierdo. Considera como referencia el programa
quier otra cosa, solo tenía un valor, como 712, 0,383 o “howdy”. 1, para la explicación que se ofrece abajo.
106
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Programa 1.
Figura 2. EJEMPLO DE USO DE VARIABLES EN ROBOTC®.
LAS VARIABLES
Saludo “HOLA”
// Ejemplo 1 Apuntadores
Y LA DIRECCIÓN
0 x 4576
task main(){
DE MEMORIA EN DONDE int i, j;
SE ALOJAN. i = 10;
Foo 79876 j = 51;
// Este comando debe imprimir - i: 10, j: 51
0 x 5891
writeDebugStreamLine(“i: %d, j: %d”, i, j);
// Asignar el valor r de i a j
π (pi) 3.1416 j = i;
// Este comando debe imprimir - i: 10, j: 10
0 x 7458 writeDebugStreamLine(“i: %d, j: %d”, i, j);
i++;
// Este comando debe imprimir - i: 11, j: 10
Cuando se ejecuta el programa 2, la salida a “Debug Stream”* writeDebugStreamLine(“i: %d, j: %d”, i, j);
de ROBOTC® debería verse así: }
i: 10, j: 51
Para abrir el ROBOTC® “Debug Stream”, asegúrate de Al mirar las ubicaciones de la memoria y su contenido
que la interfaz de ROBOTC® esté en el modo “Experto” o después de cada operación del programa 1, deberás ver algo
“Súper usuario” y abre el flujo de depuración desde el cómo lo que se describe en la figura 3. En la primera asignación
menú de ventanas del depurador normal. Lee tu antología al inicio del programa, la variable i en el valor derecha (valor-d)
107
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
se le ha asignado un 10. Justo debajo de esta asignación, hay una En la primera asignación al comienzo del programa, variable.
segunda asignación donde valor -d de la variable j se le asigna Su valor r tiene el valor 10. Justo debajo de esta asignación, hay
un 51. Esto se considera como establecer un valor inicial. Más una segunda asignación donde el valor r de la variable j recibe
adelante en el programa, ¿qué pasará con la línea “j = i”? Simple, el valor 51.
el valor -d de i se copia y se asigna al valor-d de j. Ahora ambos Esto se considera establecer un valor inicial. Más adelante
valores de j e i son 10. ¿Qué sucede cuando se incrementa? ¿Se en el programa, ¿Qué pasará con la línea “j = i”?
cambia el valor de j? En resumen, no, los dos valores -d, tanto Simple, el valor r de i se copia y se asigna al valor -d de j.
de i como de j están completamente separados. Ahora ambos son los valores de j e i son 10. ¿Qué sucede cuando
DIRECCIONES DE MEMORIA DE LA EJECUCIÓN DEL PROGRAMA 2. Cuando el compilador asigna el valor de la variable i a la variable
0 x 4576
casa. Si quieres que acceda a esta dirección, puede hacerlo con el
0 x 4576 0 x 4576
El valor - d se copia
operador de referencia (&). Sin embargo, esto no es muy útil en
0 x 5891 0 x 5891 0 x 5891 Aquí es donde el puntero (*) del operador entra en la imagen.
108
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Anteriormente, vimos que el valor-d de una variable variable a la que estamos apuntando? Podemos hacer eso
contiene el valor real que le asignamos. Con un apuntador, con el operador de referencia, también un “ * “. Combinando
el valor-d es de hecho la dirección de la variable a la que todo este nuevo conocimiento encontrado, obtenemos el
Programa 2.
109
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
La salida en el ROBOTC Debug Stream debería verse así:
Estado
inicial iPtr = &i i + +
i 10 10 11
0 x 4576 0 x 4576 0 x 4576
La dirección de memoria se copia
* iPtr indefinido 10 11
110
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Apuntador aritmético
Ahora que ya sabe cómo son los apuntadores, puedes
Programa 3.
// programa ejemplo USO DE APUNTADORES.
// Ejemplo 2 relacionado al uso de punteros
task main(){
ubyte arrNumeros[3] = {1, 2, 3};
ubyte *punteroArrNum;
// El puntero declarado apunta a la dirección de memoria de arrNumeros[0]
punteroArrNum = &arrNumeros[0];
// Esto debe imprimir
// arrNumeros[0]: 1, punteroArrNum: F4DF6933, * punteroArrNum: 1
// (el valor de punteroArrNum puede variar dependiendo del valor que se desea obtener)
writeDebugStreamLine(“arrNumeros[0]: %d, punteroArrNum: %p, * punteroArrNum: %d”, arrNu-
meros[0], punteroArrNum, * punteroArrNum);
111
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
El programa 4 debería imprimir algo como esto en la
ción a la que apunta arrPtr sea más alto que en el primero. Cuando
DIRECCIONES DE MEMORIA 1 2 3 1 2 3
arr
0x4576 0x4577 0x4578 0x4576 0x4577 0x4578
DEL PROGRAMA 4.
La dirección de memoria se copia
0 x 5891 0 x 5891
* arrPtr indefinido 10
0 x 5891 0 x 5891
112
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Hechos interesantes de un apuntador typedef struct{
Cuando use sizeof () en una variable normal, como ubyte, int int velocidadBrazo;
o long, se obtiene la cantidad de bytes que ocupa este tipo. En int valoresSensorReversa[10];
el caso de un ubyte eso es un byte, int ocupa dos y un long usa int posicionMaxima;
cuatro. Hacer un “tamaño de” de un puntero es, inútil; no obten- int posicionMinima;
en el puntero es un número de 4 bytes, uno largo. Considera En el código de ejemplo anterior, se realiza la declaración
esto cuando quieras usar sizeof ( ) para obtener el número de de una estructura integrada por 4 atributos o variables, para ello,
bytes que deseas borrar con la función memset( ), por ejemplo. se utiliza la palabra reservada struct; tomando en consideración
Las estructuras son variables que se componen de una colec- usar una estructura que almacene los valores de las propiedades
ción de otras variables. También son conocidas como registros. de cada uno de los brazos. Al implementar una estructura, la
Nuevamente, esta no es una característica única de ROBOTC®, sintaxis para acceder a cada componente es la siguiente:
[Link] = 750;
[Link] = 700;
113
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Arreglos [Tipo de datos] [Nombre del arreglo] [Tamaño]
trucciones y manipular grandes cantidades de información Esto es como una declaración de variable ordinaria, pero el
de forma controlada. Supongamos que quisiéramos escribir nombre de la variable va seguido de un entero entre corchetes
un programa que recopila mediciones de luz, una vez cada 15 que indica el número de elementos asociados con el nombre de
minutos durante todo un día. Supongamos, además, que al la matriz. En el caso de nuestras mediciones de luz, que serán de
final del período de medición queremos crear un gráfico de tipo entero, podríamos usar la declaración
ción de las mismas a lo largo del día. Para crear el gráfico de int lectura_luz[96]
mediciones de luz, de principio a fin. Un total de 96 valores. Por Esta declaración directa le da al programador 96 variables
lo general, la forma en que almacenamos y recuperamos valo- de la forma lectura_luz[0], lectura_luz[1], lectura_
res es en variables. Sería tedioso tener que declarar 96 varia- luz[2], ..., lectura_luz[95] trabajar con . Observe
bles en un programa, por lo que la mayoría de los lenguajes de que el primer elemento de la matriz tiene índice 0 , que el
programación, incluido ROBOTC®, le permiten al programador elemento subsiguiente índice cada incremento en uno, y que el
declarar matrices de variables. Una matriz es una colección último elemento tiene índice 95. Los índices de matriz siempre
indexada de variables del mismo tipo de datos. Indexado sig- comienzan en 0 y terminan con un índice menor que el tamaño
nifica que se puede acceder a cada variable (también llamada declarado de la matriz.
elemento) de la matriz usando un índice entero. Se produce un desborde del arreglo si intenta usar un
La sintaxis para declarar una matriz de variables (arreglo) es índice fuera de rango para acceder a un elemento del mismo.
114
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Este error común puede ser difícil de encontrar porque el compi- Programa 4.
lador no puede detectarlo. Dichos errores pueden conducir a LECTURA DE LUZ CADA 15 MINUTOS.
Inicializa una variable de contador de tipo entero, count a 0, y // Almacenando la lectura del sensor
declara una matriz de 96 elementos para las lecturas de luz. El lectura_luz[cuenta] = SensorValue[lightsensor];
que la declaración de interrupción se produce después del incre- // Fin del programa
115
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
SOLUCIÓN DEL DESAFÍO
Con la cinta aislante agrega las marcas en las esquinas del edi- Tabla 1.
ficio, tal y como se ven en la figura 1 (pág. 101). Pero ahora el SOLUCIÓN PARECIDA A UNA RECETA DE COCINA
robot no se moverá con tiempo, va a moverse hasta que detecte (continúa en la página siguiente).
aislante. Incluso las vueltas pueden ser controladas hasta que el 1. Inicio del programa
2. Leer el estado del interruptor
sensor detecte el cambio de color.
3. Si el interruptor está apagado vaya al paso 2
Ahora se te proporcionan tres herramientas que te permiten
4. Número de vuelta es igual a 0
resolver el problema. 5. Si ya va en la cuarta vuelta ir al paso 21
A) Solución del problema como una receta de cocina (Tabla 6. -- Viaje del punto A al B.
7. Ir a función AvanzarLado()
1), explicada en idioma español.
8. -- Viaje del punto B al C
B) Solución con pseudocódigo (Tabla 2), expresado también
9. Ir a función AvanzarLado()
en idioma español concreto. 10. -- Viaje del punto C al D
C) Solución con algoritmo usando la notación de diagramas 11. Ir a función AvanzarLado()
de flujo (Figura 6). 12. -- Viaje del punto D al A
13. Ir a función AvanzarLado()
14. Numero de vuelta = Numero de vuelta + 1.
Asegúrate de estudiar completamente cada solución ya que el
15. Vaya al paso 5.
siguiente paso es que generes el programa que resuelva el desafío. 16. Desplegar Datos
Relaciona estos conceptos con el proceso de ingeniería que se te 17. Fin del Programa.
116
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tabla 1.
(finaliza).
117
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tabla 2.
118
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
]
Tabla 2. ]
PSEUDOCÓDIGO PARA EL DESAFÍO. AlmacenarDatos();
// Giro a la Izquierda
(finaliza) GirarIzq(50);
]
// Desafio Robot Velador
// El robot da 3 vueltas alrededor del edificio rectangular
// por lo que el tiempo de recorrido en cada recta puede variar
// En cada esquina gira 90 grados
task main()[
int NoVuelta = 0;
int valorInt = 0
// Evaluando el interruptor
while(valorInt = 0 )[
if Sensorvalue( interruptor )= 1[
valorInt = 1;
]
]
while(NoVuelta) < 4)
[
// Una vuelta completa
AvanzarLado(50);
// Contador de vueltas
NoVuelta = NoVuelta = 1
]
DesplegarDatos();
]
119
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
INICIO
FUNCIÓN AVANZAR LADO ()
Figura 6.
¿Está
Sí Girar _izq(15)
Número
DIAGRAMA DE FLUJO presionado de vuelta = 0
el sensor? SALIDA Sí
PARA SOLUCIONAR A −> B
No ¿Ve color
EL DESAFÍO.. ¿Número
de vueltas negro?
Sí > 3? B −> C
No C −> D
Girar_Der(15)
Viaje de A −> B Avanzar Lado ()
A −> B D −> A
Avanzar Lado () Sí
C −> D
Viaje de D −> A
ENTRADA Girar_Der(15)
Avanzar Lado ()
D −> A
Avanzar(50)
Avanzar(50)
FIN
Girar_Izq(15)
Avanzar(50)
Girar_Der(15)
120
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Anote en el recuadro el programa resultante con que diste TRABAJO ADICIONAL
solución a los pasos de este desafío. Los desafíos que se encuentran en esta sección deben ser
121
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Referencias
Robomatter Inc. (2016). ROBOTC for LEGO Mindstorms 4.X - Users Manual. Disponible para consulta en el sitio web:
[Link]
Carnegie Mellon University (2020). ROBOTC for TETRIX & LEGO® [Link]://[Link]/roboticsacademy/
roboticscurriculum/Lego%20Curriculum/ROBOTC-Tetrix_Mindstorms.html
Cairó, O (2005). Metodología de la programación. Algoritmos, diagramas de flujo y programas. Alfaomega. 3ª. edición.
122
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
ROBOT VELADOR, LABORATORIO 8
MONITOREO DE VIGILANCIA
MEDIANTE UNA CÁMARA MÓVIL
OBJETIVOS DEL DESAFÍO QUE SE TE PLANTEA:
→ Analizar el entorno, tomar decisiones y establecer comunicación remota en acciones
que coadyuven al desarrollo del pensamiento cognitivo y a la creatividad.
→ Diseñar un algoritmo para controlar a un robot Lego EV3 y probar que ejecute las instrucciones
en el orden adecuado y de forma precisa para simular la vigilancia mediante cámara móvil.
123
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
Este último laboratorio de prácticas, presenta un desafío de alto iVCam es una aplicación móvil comercial que se instala en dispo-
grado de dificultad para el estudiante; en virtud de incorporar sitivos móviles con sistema operativo IOS o Android, que permite
un componente electrónico para simular la capacidad de visión realizar transmisión de video en tiempo real haciendo uso de la
por parte del robot, para ello, es necesario el uso de una cámara cámara del dispositivo en formato HD hacia un equipo de cómputo
móvil o web cam que permita tomar imágenes del entorno en (PC). En unos segundos, la cámara del dispositivo se comportará
tiempo real, y posteriormente seas procesadas a nivel código de exactamente como una cámara web, enviando señal de video y
Para poder codificar correctamente el algoritmo a través del ción avanzada, tan sólo una conexión a una red inalámbrica WI-FI.
Lenguaje ROBOTC, el estudiante debe seleccionar los comandos De acuerdo al sitio web oficial de la empresa de tecnología
relacionados con el procesamiento de imágenes. Además deberá CISCO, el término de ACCESS POINT (AP) se define como un dispo-
hacer uso de estructuras de control, selectivas, repetitivas y sitivo de red que permite que un conjunto de dispositivos con
estructuras para el almacenamiento de datos, es decir, aplicar capacidad inalámbrica se conecten a una red cableada (CISCO,
todos los fundamentos de programación aprendidos durante 2019). Así también, el autor Enrlich realiza la definición de este
el desarrollo de cada laboratorio, con la finalidad de diseñar el término AP, como punto de acceso inalámbrico (WAP) por sus
algoritmo idóneo para este último desafío. siglas en inglés Wireless Access Point; en ese sentido, resulta
124
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
ser un dispositivo que permite interconectar varios dispositivos • Editor de diagramas DIA. Liga de descarga: [Link]
red local. En otro orden de ideas, este concepto representa la • 1 dispositivo móvil con cámara integrada y tarjeta de
única ruta de acceso que facilita o permite la comunicación de un red inalámbrica WI-FI.
grupo de dispositivos, en cierto rango de distancia dependiendo • 1 equipo de cómputo portátil o de escritorio con tarjeta
La estructura de robot que usaremos en este laboratorio, • Aplicación iVCam para transmisión de video (instalación
debe poseer una configuración de cuatro ruedas, dos de ellas en dispositivo móvil y en PC). Liga de descarga: https://
con su propio motor, que serán los actuadores, y dos ruedas al [Link]/ivcam/
rodea, el robot debe disponer de sensor táctil, ultrasónico, y de ESTRUCTURA DE SOPORTE PARA DISPOSITIVO
luz/color, además, se deberá construir una base giratoria para MÓVIL GIRATORIO USANDO UN SERVO MOTOR.
125
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
DESAFÍO POR RESOLVER Figura 2.
robot programable que patrulla los alrededores de un edificio DE VIGILANCIA CON CÁMARA MÓVIL
nicar el robot con las oficinas de vigilancia usando la red inalám- Paso 4
Paso 5 Paso 3
brica de ese edificio. ACME te ha contratado para que adaptes
126
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
tantemente. El proceso de ingeniería implica que construyas la antes de ejecutar el siguiente comando. Deberás calcular el
solución paso a paso, por tal motivo, en este laboratorio se diseña tiempo necesario para que el soporte del dispositivo móvil rea-
la rutina de vigilancia mediante transmisión de señal de video lice un giro de 360°, así decidirá el valor de potencia del motor
en tiempo real. más efectivo para el giro de la cámara y que la señal de video
Aquí encontrarás material de apoyo para entender el objetivo que en el siguiente paso generarás el programa que resuelva el
primario de este documento. En general, los apuntes provienen desafío. Relaciona estos conceptos con el proceso de ingeniería
de los documentos que el Laboratorio Nacional de Ingeniería que se te ha presentado en la sección “Conceptos básicos” del
laboratorio, le indicarás al robot el tiempo —en milisegundos— 1) Solución del problema con una serie de pasos (Tabla 1)
que debe esperar antes de que ejecute el siguiente comando. explicados en idioma español.
El número dentro de los paréntesis representa el número de 2) Solución con pseudocódigo (Tabla 2), expresado también
milisegundos que tu robot debe esperar para poder ejecutar en idioma español concreto.
otra acción; en ese sentido, 3000 milisegundos equivalen a 3 3) Solución con algoritmo usando la notación de diagramas
segundos, así que el robot enciende su motor por tres segundos de flujo (Figura 3).
127
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tabla 1.
5. Haz que el robot viaje del punto A al B a media potencia. Usando el cronómetro del
celular determina cuánto tiempo le toma al robot. Apaga el motor al llegar al extremo
contrario del marco. Considera que al llegar al extremo contrario del punto de partida
el robot deberá realizar una pausa y activar el motor de soporte del dispositivo móvil
que sostiene la cámara para efectuar un giro de 360°. Anota el tiempo en milisegundos
6. El robot debe continuar su recorrido, y para esto debe dar vuelta a la izquierda,
por lo que debe tener suficiente espacio para no chocar con el edificio.
robot). ¿Cuánto tiempo debe aplicar fuerza a las ruedas para dar un giro de 90°? Anota
tu respuesta: _____________.
128
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Figura 3.
(finaliza)
8. Haz que el robot viaje del punto B al C a ½ potencia. Usando los conceptos de matemá-
ticas que ya conoces (regla de tres) determina cuánto tiempo le toma al robot alcanzar
la siguiente esquina del edificio. Haz los ajustes necesarios a tu programa. Anota tu
9. Ahora, que gire el robot a la izquierda (aplique un ¼ de potencia al motor del robot).
11. Activa el motor del soporte del dispositivo con cámara y que gire 360°.
12. Ahora, que gire el robot a la izquierda (aplica ¼ potencia al motor del robot)
14. Activa el motor del soporte del dispositivo con cámara y que gire 360°.
15. Ahora, que gire el robot a la izquierda (aplica ¼ de potencia al motor del robot).
17. Ve al paso 4.
129
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
// En cada esquina debe realizar una pausa y realizar giro del soporte del dispositivo
task main()
int no Vuelta = 0;
// Se daran 3 vueltas
130
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tabla 2.
girar a la Izquierda
// Giro en la esquina
girar a la Izquierda
131
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Tabla 2.
(finaliza)
// giro en la esquina
girar a la Izquierda
// Giro en la esquina
girar a la Izquierda
// Contador de vueltas
NoVueltas = NoVuelta + 1
132
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Figura 3.
INICIO
DIAGRAMA DE FLUJO Anote en el recuadro el programa resultante con que diste
Sí
¿Número
de vuelta Vuelta
> 5? a la izquierda
No
Avanzar
x segundos
Avanzar
x segundos Detener y girar motor
de soporte de cámara
Vuelta
a la izquierda Avanzar
x segundos
Avanzar
x segundos Detener y girar motor
de soporte de cámara
Número de vuelta =
número de vuelta - 1
FIN
133
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
TRABAJO ADICIONAL Figura 4.
Los desafíos que se encuentran en esta sección deben ser RECORRIDO DEL ROBOT DE VIGILANCIA
resueltos por el estudiante, es necesario crear un algoritmo y PARA EL EDIFICIO DEL GOBIERNO DE RUSIA.
Observa la figura 4, para que tengas idea del recorrido del robot
134
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Un proyecto adicional ha sido asignado a ACME Robotics. El Figura 5.
Gobierno de Rusia desea implementar un segundo robot para RECORRIDO DEL ROBOT
vigilancia autónoma dentro del edificio, que recorrerá durante el DE VIGILANCIA PARA PASILLO DE OFICINAS
próxima. Oficina
Oficina
Mando Militar de
Inteligencia
Punto
de partida
135
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
Referencias
Robomatter Inc. (2016). ROBOTC for LEGO Mindstorms 4.X - Users Manual. Disponible para consulta en el sitio
web: [Link]
[Link]
Acerca de iVCam. (s.f). Consultado en el mes de agosto de 2020, en el sitio web [Link]
Enrlich, S.D. (2011). Access Points: An Institutional Theory of Policy and Policy Complexity. New York: Oxford.
CISCO (2019). ¿Qué es un access point? Disponible para consulta en el sitio web: [Link]
es_mx/solutions/small-business/resource-center/networking/[Link]
136
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica
[Link] Disponible en: [Link]
CONSIDERACIONES FINALES
Con el objetivo de tener un mayor impacto en el lector, se le soluciomar los problemas que se plantean en los diferentes
recomienda utilizare un kit completo del Robot LEGO Minds- temas; y con esto, crear una guía de referencia para futuros
torm EV3, adquirir una licencia del lenguaje de programación algoritmos que el lector pueda desarrollar para perfeccionar
aprenda el armado del robot, identificando las piezas y senso- Finalmente, se recomienda al lector implementar un repo-
res que lo integran para facilitar su toma de decisiones durante sitorio de códigos, utilizando herramientas open source como
el proceso de codificación. github , para que pueda llevar un control de sus avances y
Otro aspecto que consideramos relevante es crear un respaldo de los mismos. Así mismo, es fundamental la valida-
cuadernillo de ejercicios o bitácora de control para tomar ción e instalar el firmware correcto en el robot antes de iniciar
nota de ciertos parámetros o datos de control que permitan con las pruebas del código.
137
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
En una sociedad globalizada donde la innovación tecnología mación, como: estructuras secuenciales, decisión y repetitivas;
avanza de manera significativa día a día, resulta inevitable que manipulación de datos en arreglos multidimensionales, diseño
misma. Consideramos que la robótica será un área de conoci- Como profesores investigadores y autores de esta obra de
miento que se implementará desde la educación básica en sus texto educativa, estamos conscientes de que es neceario desarro-
planes de estudios en los próximos años. llar en los jóvenes nuevas competencias relacionadas con la lógica
Estamos convencidos de que esta obra literaria despertará de programación y mejorar sus capacidades cognitivas, aprove-
en el lector, y principalmente en los estudiantes, el interés por chando esa inmensa capacidad que poseen de explorar nuevas
mejorar sus habilidades en programación con un enfoque en los cosas. Todo esto permitirá formar nuevas generaciones de inge-
principios de la robótica mejorando su razonamiento y creati- nieros que se apasionen por la ciencia y tecnología, capaces de
vidad; aplicando los fundamentos y metodologías de la progra- resolver los retos del futuro.
138
Luis Antonio Álvarez Oval, Christian Mauricio Castillo Estrada y Aron de la Cruz Vázquez, Introducción a la robótica,
Sin fronteras, núm. 3, UNACH, México, 2022, 180 pp. ISBN: 978-607-561-130-3
JetBrains mono.









