Este documento describe una práctica de robótica con Lego NXT. Los estudiantes construirán un "radar" usando un sensor de ultrasonido montado en un motor para barrer un área de 180°. Programarán una clase Radar que realice escaneos y muestre los datos. Luego usarán este radar para programar la navegación de un robot hacia áreas con menos obstáculos.
1. Pr´cticas con Lego NXT
a
Rob´tica
o
o
3 curso de Ingenier´ T´cnica en Inform´tica de Sistemas y Gesti´n
ıa e a o
Universidad Rey Juan Carlos
Pr´ctica 1 - Radar
a
En la fase 0 aprendimos a utilizar el sensor de ultrasonido, uno de los sensores
m´s utiles del kit NXT. Con ´l fuimos capaces de detectar obst´culos, de manera
a ´ e a
que pod´ıamos esquivarlos para no chocar con ellos, de manera reactiva. Como era
de esperar este sensor no es perfecto y, debido al fen´meno de la reflexi´n especular,
o o
cuando nos acerc´bamos a un obst´culo con bajo grado de incidencia, el sensor no
a a
registraba el rebote de los ultrasonidos y choc´bamos contra la pared u obst´culo.
a a
En esta fase vamos a construir un sensor m´s elaborado y rico que simule un radar,
a
aunque m´s bien deber´
a ıamos llamarle ultrasonido de barrido.
Preparando el robot
Para esta fase deber´s modificar el dise˜o de tu robot para que el sensor de
a n
ultrasonidos pueda abarcar un rango de 180◦ (siempre apuntando hacia la parte
frontal del robot). Deber´s utilizar el tercer motor incluido en el kit para gobernar
a
el giro del sensor. Presta especial atenci´n al guiado de los cables, para evitar
o
que al girar se enganchen con alg´n elemento del robot. Evita los dise˜os ultra-
u n
sofisticados y pesados. Si tu soluci´n es funcional, cuanto m´s simple mejor. En la
o a
red puedes encontrar algunos dise˜os, aqu´ te damos un ejemplo usando un sensor
n ı
no convencional.
Figura 1: Ejemplo de montaje
2. Almacenando la informaci´n
o
El objetivo principal de la pr´ctica es crear una nueva clase Radar.java que
a
contenga los siguientes m´todos p´blicos:
e u
public Radar (int vel,int resol,int amp,UltrasonicSensor sonar,Motor motor)
Este ser´ el contructor de la clase y queremos que acepte como par´metros
a a
la velocidad de escaneo, la resoluci´n en grados del radar, la amplitud en grados
o
que es capaz de sensar, el objeto de tipo UltrasonicSensor que vamos a usar como
sensor y el motor que va a controlar el movimiento de escaneo.
public int[] newScan()
Este m´todo provocar´ un nuevo movimiento de escaneo. Se deber´ hacer un
e a a
barrido completo con los par´metros apropiados y se deber´n registrar las medidas
a a
para ser devueltas en forma de array.
public void showOnScreen(boolean value)
Este m´todo habilitar´ o deshabilitar´ la presentaci´n de los datos del radar
e a a o
por pantalla. Si est´ habilitada, cada nuevo escaneo provocar´ un nuevo refresco
a a
de la pantalla con los datos actualizados.
Usando nuestro radar
Para usar nuestro radar crearemos la clase NavigationRadar.java. En ella ins-
tanciaremos un objeto de tipo Radar y lo usaremos para navegar por el entorno.
A continuaci´n mostramos un ejemplo de un peque˜o programa principal que pre-
o n
senta por pantalla los datos capturados por el radar.
import lejos.nxt.*;
public class testRadar {
public static void main(String[] args) throws Exception {
UltrasonicSensor sonic = new UltrasonicSensor(SensorPort.S1);
Radar radar = new Radar(500,20,180,sonic, Motor.B);
radar.showOnScreen(true);
int[] data = new int[180 / 20];
while(!Button.ESCAPE.isPressed()) {
data = radar.newScan();
}
}
}
2
3. Debes programar un mecanismo de navegaci´n que, haciendo uso del radar,
o
comande al robot movimientos para viajar a las zonas con menos obst´culos. Me-
a
diante el radar deber´s observar que el robot ahora dispone de mayor informaci´n
a o
a la hora de seleccionar una direcci´n o asumir que hay un obst´culo en la direcci´n
o a o
de avance del robot.
3