Вы находитесь на странице: 1из 9

LABORATORIO DE ROBOTICA - INFORME

LABORATORIO NRO: 1

PROGRAMACION DE ROBOTS

1. COMPETENCIA(S) A DESARROLLAR

Elabora programas de monitoreo, control aplicados a sistemas robóticos utilizando


sensores, actuadores y generación de trayectorias para el movimiento del robot.

2. MARCO TEORICO

ROBOTS LEGO

LEGO Mindstorms NXT es un set programable fabricado por LEGO en julio de 2006.
Este set reemplazó a la primera versión de Lego Mindstorms RCX. Dicho aparato
tiene dos versiones, la versión comercial (set#8527) y la versión educativa (set
#9797). El set viene con el programa NXT-G u opcionalmente con el programa de
LabVIEW para Lego Mindstorms. Una nueva versión del NXT salió en 2009, llamada
Lego Mindstorms NXT 2.0, la cual incluía un sensor de color y algunas otras mejoras.
Más tarde salió un nuevo modelo llamado EV3, el último a la fecha (2018).

SENSOR DE TACTO

Le proporciona al robot el sentido del tacto, tan to


cuando se presiona como cuando se suelta. También
podemos utilizarlo para ciclos completos de presionar y
soltar.

SENSOR DE SONIDO

Le permite al robot escuchar. El sensor de sonido puede detectar tanto decibeles


(dB), como decibeles ajustados (dBA). Decibel es una medida de presión del sonido.
dBA: la sensibilidad del sensor es ajustada al oído humano db: la sensibilidad del
sensor, no está ajustada y puede escuchar sonidos por debajo o por encima de la
capacidad del oído humano. El sensor puede medir sonido hasta09 dB. La lectura del
sonido se visualiza en porcentaje de acuerdo a la siguiente tabla:
LABORATORIO DE ROBOTICA - INFORME

SENSOR DE LUZ

Le proporciona al robot el sentido de la visión. Le permite al robot distinguir entre luz


y oscuridad.

El sensor de monocromático, es decir puede distinguir entre el


blanco y el negro pasando por una gama de grises, la lectura la
entrega en porcentaje.

SENSOR ULTRASÓNICO

También le proporciona al robot un sentido de visión. El


sensor emite un sonido y mide el tiempo que la señal tarda
en regresar, para luego calcular la distancia, a la cual se
encuentra el objeto u obstáculo. Es el mismo principio
utilizado por los murciélagos y el sonar de las aves, tiene un
rango de 0 a 255 cm con una precisión de +/- 3 cm.

SENSORES OPCIONALES

Sensor Brújula

Le permite al robot saber hacia dónde está apuntando. Este sensor es capaz de medir
el campo magnético terrestre y calcular donde está el norte magnético. Se visualiza
la lectura en grados de 0 a 359º

Sensor de color

Le permite al robot ver colores. No solo blanco y negro, este es un sensor capaz de
distinguir colores reales.

Sensor de Inclinación y aceleración

Le permite al robot saber que inclinación tiene. Dispone de un acelerómetro en los


tres ejes (X, Y y Z) con un rango entre -2g y +2g, lo cual le permite calcular la
inclinación.

Control de los sensores

Los nombres de sensores pueden ser usados en cualquier función que requiera el
puerto del sensor como argumento, estos nombres de constantes son IN_1, IN_2,
IN_3 e IN_4. Cuando se necesita adquirir los valores de los sensores se utiliza las
siguientes constantes: SENSOR_1, SENSOR_2, SENSOR_3 y SENSOR_4. Estos
LABORATORIO DE ROBOTICA - INFORME
nombres pueden además ser usados siempre que un programa desea leer el valor
actual del sensor analógico, por ejemplo:
x= SENSOR_1; // lee sensor y almacena en x el valor
Entre algunas funciones importantes sobre el control del sensor tenemos las
siguientes:

BricxCC, Next Byte Codes, Not eXactly C


Bricx Command Center (BricxCC) es la IDE, usada para escribir, compilar, y editar
programas NBC y NXC para NXT. También, como BricxCC originalmente fue creado
para el RCX, los programas pueden ser escritos usando NQC vía BricxCC. Diferentes
firmwares pueden ser usados para programar al NXT usando BricxCC.
BricxCC tienen muchas utilidades como NeXTExplorer (carga/descarga archivos, y
desfragmento el NXT, usando el archivo hex viewer); y NeXTScreen (visualización de
la pantalla LCD del NXT y captura de imágenes y vídeo).
Next Byte Codes (NBC) es un lenguaje simple de open source con la sintaxis del
lenguaje de ensamblador que puede ser utilizado para programar el NXT.CricxCC
también tiene la capacidad de descompilar ejecutables .rxe de NXT a NBC.
Not eXactly C (NXC) es una lenguaje de programación de open source de alto nivel,
similar a C, construido en el compilador NBC. NXC también sirve para programar el
NXT. El NXC es básicamente el NQC para el NXT . Es uno de los lenguajes de
programación externos más utilizados para programar el NXT. Es posible crear
videojuegos para el NXT en NXC.

void SetSensorType (const byte &port, byte type). Fija el tipo de sensor.
void SetSensorMode (const byte &port, byte mode). Fija el modo del sensor.
void ClearSensor (const byte &port). Limpia el valor del sensor.
void ResetSensor (const byte &port). Reinicia el puerto del sensor.
void SetSensor (const byte &port, const unsigned int config). Fija la configuración del
sensor.
void SetSensorTouch (const byte &port). Configura el sensor de tacto.
void SetSensorLight (const byte &port, bool bActive=true). Configura el sensor de
luz.
void SetSensorUltrasonic (const byte &port). Configura un sensor ultrasonico.
void SetSensorEMeter (const byte &port). Configura un sensor EMeter.
void SetSensorTemperature (const byte &port). Configura un sensor de temperatura.
void SetSensorColorFull (const byte &port). Configura un sensor NXT 2.0 a todo
color.
void SetSensorColorRed (const byte &port). Configura un sensor NXT 2.0 de luz roja.
void SetSensorColorGreen (const byte &port). Configura un sensor NXT 2.0 de luz
verde.
void SetSensorColorBlue (const byte &port). Configura un sensor NXT 2.0 de luz
azul.
void SetSensorColorNone (const byte &port). Configura un sensor NXT 2.0 sin luz.
variant GetInput (const byte &port, const byte field). Obtiene un valor del campo de
entrada.
void SetInput (const byte &port, const int field, variant value). Fija un valor del campo
de
entrada.
unsigned int Sensor(const byte &port). Lee el valor de escala del sensor.
bool SensorBoolean (const byte port). Lee el valor booleano del sensor.
byte SensorDigiPinsDirection (const byte port). Lee la dirección del sensor pins
digital.
byte SensorDigiPinsOutputLevel (const byte port). Lee el nivel de salida del sensor
pins digital.
byte SensorDigiPinsStatus (const byte port). Lee el estado del sensor pins digital.
bool SensorInvalid (const byte &port). Lee el sensor de bandera de datos no valido.
byte SensorMode (const byte &port). Lee el modo del sensor.
LABORATORIO DE ROBOTICA - INFORME

3. MATERIALES

 1 Kit de Robot LEGO NXT


 1 computadora personal con programa BrixCC
 1 Pendrive

4. PROCEDIMIENTO DE DESARROLLO DE LA PRACTICA

//Programa 1
task main()
{
OnFwd(OUT_A, 75); //Motor conectado a la salida A en el NXT,
para avanzar, con velocidad al 75% de la velocidad máxima.
OnFwd(OUT_C, 75); //Ambos motores están en marcha, y el robot
se mueve hacia adelante.
Wait(4000); //Robot avanza por 4 segundos
OnRev(OUT_AC, 75); //Robot se mueve en reversa
Wait(4000); //Se mueve en reversa por 4 segundos
Off(OUT_AC); //El robot se detiene completamente
}
//Programa 2
#define TIEMPO_MOVIMIENTO 1000
#define TIEMPO_GIRO 360
task main()
{
OnFwd(OUT_AC, 75); //Robot va hacia delante.
Wait(TIEMPO_MOVIMIENTO); // Se mueve hacia adelante por 1s.
OnRev(OUT_C, 75); //Gira a la derecha
Wait(TIEMPO_GIRO); //Gira por 0.36 s para rotar 90 grados
Off(OUT_AC); //Apaga motores
}
//Programa 3
#define TIEMPO_GIRO 360
int TIEMPO_MOVIMIENTO; // define una variable
task main()
{
TIEMPO_MOVIMIENTO = 200; // asigna el valor inicial
repeat(50) // Repite por 50 veces
{
OnFwd(OUT_AC, 75); // avanza hacia adelante
Wait(TIEMPO_MOVIMIENTO); // usa la variable para esperar
OnRev(OUT_C, 75); // Gira a la derecha a 90 grados
Wait(TIEMPO_GIRO);
TIEMPO_MOVIMIENTO += 200; // incrementa la variable
LABORATORIO DE ROBOTICA - INFORME
}
Off(OUT_AC); //después de repetir 50 veces, se detiene
}
//Programa 4
#define TIEMPO_MOVIMIENTO 500
#define TIEMPO_GIRO 360
task main()
{
while(true)
{
OnFwd(OUT_AC, 75); // avanza hacia adelante por un tiempo mov
Wait(TIEMPO_MOVIMIENTO);
if (Random() >= 0) //Si el numero random generado por el
programa es mayor a cero, el robot gira a la derecha.
{
OnRev(OUT_C, 75);
}
else //Si el numero random generado por el
programa es menor a cero, el robot gira a la izquierda.
{
OnRev(OUT_A, 75);
}
Wait(TIEMPO_GIRO);
}
}
//Programa 5
Int TIEMPO_MOVIMIENTO, TIEMPO_GIRO, tiempo_total;
task main()
{
tiempo_total = 0;
do
{
TIEMPO_MOVIMIENTO = Random(1000); //escoge de 0 a 1000 aleatorio
TIEMPO_GIRO = Random(1000); //escoge de 0 a 1000 aleatorio
OnFwd(OUT_AC, 75); //avanza hacia delante por t_mov
Wait(TIEMPO_MOVIMIENTO);
OnRev(OUT_C, 75); //gira derecha por t_giro
Wait(TIEMPO_GIRO);
tiempo_total += TIEMPO_MOVIMIENTO; //suma t_mov a t_total
tiempo_total += TIEMPO_GIRO; //suma t_giro a t_total
}
while (tiempo_total < 20000); //Mientras t_total sea < 20 s
hace toda la tarea.
Off(OUT_AC);
}
LABORATORIO DE ROBOTICA - INFORME

//Programa 6
#define UMBRAL 40
task main()
{
SetSensorLight(IN_1); //Mide valor de sensor de luz
OnFwd(OUT_AC, 75); //avanza hacia adelante
while (true)
{
if (Sensor(IN_1) > UMBRAL) //si valor de luz es mayor a
umbral, gira a la derecha, espera y a menos que el valor sea menor
al umbral, avanza hacia adelante.
{
OnRev(OUT_C, 75);
Wait(100);
until(Sensor(IN_1) <= UMBRAL);
OnFwd(OUT_AC, 75);
}
}
}
//Programa 7
#define CERCA 15 //cm
task main()
{
SetSensorLowspeed(IN_4); //mide valor ultrasonido en cm
while(true)
{
OnFwd(OUT_AC,50); //avanza adelante
while(SensorUS(IN_4)> CERCA); //si valor ultrasonido es mayor a
15 cm, apaga motores y va reversa.
Off(OUT_AC);
OnRev(OUT_C,100);
Wait(800);
}
}
//Programa 8
task main()
{
OnFwd(OUT_AC, 75); //va adelante 5 s
Wait(5000);
Off(OUT_C);
OnFwd(OUT_A, 75); //gira a la izquierda 0.5 s
Wait(500);
OnFwd(OUT_AC, 75); //sigue adelante por 3 s.
Wait(3000);
LABORATORIO DE ROBOTICA - INFORME
Off(OUT_A);
OnFwd(OUT_C, 75); //gira a la derecho por medio Segundo.
Wait(500);
OnFwd(OUT_AC, 75); //sigue adelante por 5 segundos.
Wait(5000);
}

5. TABLAS Y RESULTADOS

En la presente práctica, solo se tenía que comprobar que los programas funcionasen.
Para lo cual todos los programas funcionaron correctamente.

Los programas en NXC consisten en tareas. Los programas tienen una sola tarea,
llamada main, cada programa necesita tener una tarea llamada main que es la que
ejecutará el robot. Una tarea consiste en una serie de comandos, también llamados
declaraciones. Hay corchetes alrededor de las afirmaciones de tal manera que quede
claro que todos pertenecen a esta tarea. Cada declaración termina con un punto y
coma. De esta manera queda claro donde termina una declaración y donde comienza
la siguiente declaración.

Para el programa 1

Básicamente, el robot se mueve hacia adelante por 4 segundos y hacia atrás por
cuatro segundos, volviendo a su posición inicial y se detiene.

Para el programa 2

El robot se mueve hacia delante por 1 segundo, luego activa el motor C para girar a
la derecha, gira por 0.36 s y se detiene.
LABORATORIO DE ROBOTICA - INFORME

Para el programa 3

El robot se mueve hacia delante por 200 ms inicialmente, luego activa el motor C para
girar a la derecha, rotando 90 grados, luego vuelve a repetir la tarea, pero
incrementando la distancia del movimiento hacia adelante, hace esto unas 50 veces
y se detiene.

Para el programa 4

El robot se mueve hacia delante por 0.5 segundos, luego activa el motor C para girar
a la derecha si es que el número random es mayor a 0, caso contrario, gira a la
izquierda.

Para el programa 5

El robot se mueve hacia delante por un tiempo aleatorio, y gira por un tiempo
aleatorio, estos tiempos son sumados en un variable tiempo total, mientras tiempo
total sea < 20 s hace toda la tarea.

Para el programa 6

El robot se mueve hacia delante por y mide valor del sensor de luz, si valor de luz es
mayor a umbral, gira a la derecha, espera y a menos que el valor sea menor al umbral,
avanza hacia adelante.

Para el programa 7

El robot se mueve hacia delante por y mide valor del sensor de ultrasonido, si valor
de ultrasonido es mayor a umbral, apaga los motores y va en reversa.

Para el programa 8

El robot se mueve hacia delante por 5 segundos, gira a la izquierda, sigue adelante
por 3 segundos y gira a la derecha y avanza por 5 segundos.

6. CUESTIONARIO

1. Explicar los comandos más importantes de BricxCC para LEGO.

 task main() este línea siempre tiene que estar presente en nuestros programas.
 SetSensorTouch indica que vamos a hacer uso del Sensor de tacto e indica en
qué puerto está conectado este sensor: (IN_1)
 OnFwd indica que el robot irá hacia adelante y hará uso de los motores A y C
(OUT_AC) y con una potencia de 75.
LABORATORIO DE ROBOTICA - INFORME

 Off indica que se apagarán los motores B y C (OUT_BC).


 OnFwd(OUT_A, 75) indica que el motor B se moverá hacia adelante, de esta
manera el robot girará hacia la izquierda
 OnFwd(OUT_C, 75) indica que el motor C se moverá hacia adelante, de esta
manera el robot girará hacia la derecha.
 Wait(2000) indica un tiempo de espera de 2 segundos. En este tiempo de espera
se ejecutará todavía la acción anterior.

2. Explicar el manejo de comandos avanzados en BricxCC (esto a criterio del


docente).

Criterios explicados en el procedimiento de la práctica.

7. CONCLUSIONES

En esta práctica pudimos ver el funcionamiento de robots lego, la manera de cargar


un programa a su plataforma, la programación en Bricx CC y el manejo de funciones
del lenguaje.

Вам также может понравиться