robo taller

Post on 12-Jun-2015

1.230 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

presentacion programacion

TRANSCRIPT

Taller de Robótica

Dr. Gildardo Sánchez Ante

Departamento de Cs. Computacionales

ITESM-Campus Guadalajara

Contenido

SESION I Introducción. Enfoques para programación en robótica

móvil. Robótica móvil en la práctica: Ejemplos. Lego Mindstorms: Hardware. Lego Mindstorms: Software. Proyecto 1: Detección y seguimiento de una

fuente luminosa Proyecto 2: Seguimiento de líneas. Proyecto 3: Robot Merodeador.

Instructor

Gildardo Sánchez AnteDoctorado en Cs. ComputacionalesITESM-Cuernavaca/Stanford Univ.

Área de especialidad: Planeación de movimientos en robótica.

Oficina: DIA-3, 3er Piso, Edificio Administrativo Tel. (33) 3669-3000 x 3130 gildardo@itesm.mx http://academia.gda.itesm.mx/~gsanchez

¿Qué es un robot?

“Máquina reprogramable, multifuncional diseñada para manipular materiales, partes, herramientas o dispositivos especializados a través de movimientos programables para el desarrollo de una variedad de tareas”

Robotics Industries Association

Robots

Investigación

Industrial(Desplazamiento)

¿Juguete?

Industrial(Soldadura)

Exploración

Contenido

SESION I Introducción. Enfoques para programación en robótica móvil. Robótica móvil en la práctica: Ejemplos. Lego Mindstorms: Hardware. Lego Mindstorms: Software. Proyecto 1: Detección y seguimiento de una fuente

luminosa Proyecto 2: Seguimiento de líneas. Proyecto 3: Robot Merodeador.

Enfoques para robótica móvil

Enfoque Deliberativo o de Planificación.Suponiendo que el robot “conoce” su entorno

perfectamente y que éste cambia solamente por la acción del mismo robot o que en su defecto el robot puede predecir esos cambios.

Entonces es posible que el robot genere un plan de movimientos en un proceso fuera de línea y que una vez obtenido éste, lo ejecute.

Enfoques para robótica móvil

Enfoque Reactivo: Para casos en que el robot no conoce la dinámica

del entorno, es posible inducir en él una serie de comportamientos simples cuya combinación crea en un momento determinado la posibilidad de lidiar con ciertos problemas.

En este caso el robot no planifica de antemano sus movimientos, los va decidiendo de acuerdo con la información que los sensores le proporcionan y las reglas que le han sido programadas.

Enfoques para robótica móvil

Ambas propuestas son interesantes y pueden ser complementarias. Mientras que en el enfoque deliberativo puro el lazo de control no se cierra, evitando la posibilidad de manejar errores, en el caso de la robótica reactiva, es muy difícil reproducir acciones complejas en el robot. Casi siempre se limita a imitar en un cierto grado acciones simples de insectos.

Contenido

SESION I Introducción. Enfoques para programación en robótica móvil. Robótica móvil en la práctica: Ejemplos. Lego Mindstorms: Hardware. Lego Mindstorms: Software. Proyecto 1: Detección y seguimiento de una fuente

luminosa Proyecto 2: Seguimiento de líneas. Proyecto 3: Robot Merodeador.

Algunos ejemplos prácticos

La intención de presentar estos casos es dar ideas de cómo se han abordado algunos de los problemas clásicos en planeación de movimientos de robots móviles.

Caso 1

Misión: Construir un mapa de un entorno inicialmente desconocido.

Equipo:Robot Super Scout equipado con un Sick

Laser, y acceso inalámbrico a una computadora.

El robot

El proceso

Hacer un barrido del entorno con el láser. Generar polilíneas. Alinear el mapa actual con la versión

anterior de éste. Marcar “free-edges”. Determinar siguiente posición de barrido

(next-best view algorithm).

Resultado de un barrido con el Sick Laser

Estrategia de Next-best view

Un ejemplo

1122

44 66

Caso 2: Target Tracking

Misión: Identificar un objetivo (target) y mantenerlo siempre dentro del campo de visión del robot (autonomous observer).

Equipo:Robot SuperScout con dos cámaras de video,

frame grabber y acceso inalámbrico a otra computadora.

Robot Nomad 200 guiado mediante un humano.

Target

Observador

Campo visualdel observador

Una mejor estrategia

Target

Observador

¿Cuál es la mejor posición?

Target

Observador

Menor tiempo de escape

Target

Observador

Un ejemplo

En un entorno complejo

Videos

Empleo de Simuladores

Los simuladores son herramientas sumamente poderosas que aunque no suplen la utilización de un robot real, sí ayudan a optimizar su uso, especialmente en las etapas de depuración.

KepheraMobs

Caso: Navegación simple

Misión: Moverse por ahí tratando de evitar colisiones.

Equipo: Plataforma de Lego con dos sensores de contacto y uno de luz infrarroja.

Pero mejor....

¡Pongamos manos a la obra!

Contenido

SESION I Introducción. Enfoques para programación en robótica móvil. Robótica móvil en la práctica: Ejemplos. Lego Mindstorms: Hardware. Lego Mindstorms: Software. Proyecto 1: Detección y seguimiento de una fuente

luminosa Proyecto 2: Seguimiento de líneas. Proyecto 3: Robot Merodeador.

Introducción

El RCX es el cerebro del sistema ROBOTICS INVENTION, el RCX se programa mediante una PC, además tiene pre-cargados algunos programas.

Introducción

El RCX tiene puertos para tomar lecturas de los sensores, un procesador para realizar cálculos y salidas con las cuales controla los motores.

Introducción

Para construir un robot se utilizan el RCX y las piezas LEGO.

Introducción

Mediante un lenguaje de programación visual para PC y el puerto serial, es posible programar y posteriormente descargar el código que ejecutará el RCX.

Hardware El RXC

5 programas precargados, que se ejecutan mediante los botones Prgm y Run. Es posible borrarlos para introducir programas propios.

Opera con 6 baterías AA ó con eliminador de baterías

Si el RCX no está ejecutando ningún programa, el sistema se apagará después de 15 minutos, este valor se puede modificar utilizando el software de programación incluido con el sistema

Hardware

Características del RXC3 puertos de entrada3 puertos de salida4 botones de control1 display LCD1 conector para

eliminador de baterías1 emisor/receptor

infrarrojo

El “cerebro” del Lego (RCX)

Imágenes de http://graphics.stanford.edu/~kekoa/rcx/Imágenes de http://graphics.stanford.edu/~kekoa/rcx/

Circuit Board

VISTA FRONTAL

VISTA POSTERIOR

Hardware

Puertos entrada salidaLos puertos de entrada son

puntos de conexión para sensores (luz, contacto, temperatura y rotación)

Los puertos de salida son puntos de conexión para motores y otro tipo de dispositivos como lámparas

Hardware

Botones de control Rojo (ON-OFF): encendido y apagado

del sistema RCX Negro (View), permite seleccionar la

función que se desea monitorear para mostrarla en pantalla. Ejem: visualizar la lectura de un sensor en los puertos de entrada 1,2 o 3 o la velocidad de un motor en los puertos A, B o C

Gris(Prgm o program) permite seleccionar alguno de los programas precargados en el PCX

Verde (Run) ejecuta y detiene el programa seleccionado con el boton Prgm

Hardware

Display del RCX Indicador de batería baja Indicador de puerto infrarrojo, se enciende

cuando se está programando el dispositivo Barra Indicadora de descarga de programas, se

enciende cuando se está bajando un programa de una PC al RCX

Flechas indicadoras para puertos de salida, se activan para indicar actividad en un puerto de salida

Flecha indicadora de puerto de entrada, indican actividad en un puerto de entrada

Icono de persona, cuando está corriendo indica que el RCX está ejecutando un programa

Hardware Transmisor IR

Establece enlace inalámbrico entre una PC y el RCX mediante el puerto serial de la computadora para bajar programas a la unidad RCX

Es necesario tener un campo de visión abierto para establecer comunicación. Se tienen dos rangos de comunicación seleccionables corto/largo mediante un interruptor

Típicamente la distancia para bajar un programa al RCX varía de 4-6 pulgadas, aunque bajo condiciones adecuadas puede establecer comunicación hasta unos 90 pies

El transmisor utiliza una batería de 9 volts

Contenido

SESION I Introducción. Enfoques para programación en robótica móvil. Robótica móvil en la práctica: Ejemplos. Lego Mindstorms: Hardware. Lego Mindstorms: Software. Proyecto 1: Detección y seguimiento de una fuente

luminosa Proyecto 2: Seguimiento de líneas. Proyecto 3: Robot Merodeador.

Software Menú Principal

Cuando se ejecuta por primera vez, el software se activa en modo guiado. Este modo consta de las siguientes etapas: Login, Main Menu, Getting Started, Tour, Set up: Part 1, Set up: Part2, Set up Options, Training Center Introduction and Missions 1-6

El Menú Principal permite accesar a cualquiera de los siguientes submenús: Getting Started, Program RCX, Help y WWW

Software

Getting Started Contiene los submenus: Tour, Set Up:

Part 1 y Set Up Part 2 Tour

Introducción al producto MINDSTORMS y sus conceptos

Set Up: Part 1 Instrucciones paso a paso que explican

cómo cambiar baterías, cómo usar los botones, cómo girar los motores y leer los sensores y cómo utilizar los programas precargados

Software

Set Up: Part 2 Instrucciones paso a paso que

explican cómo preparar el transmisor infrarrojo IR para usarlo y conectarlo a la computadora. Además, tiene instrucciones para bajar el software al sistema RCX

Set Up Options Esta pantalla permite verificar o

cambiar los valores del sistema RCX y del transmisor IR sin necesidad de pasar por los submenus Set Up: Part 1 y Set Up: Part 2

Software

Program RCXIncluye los submenús: Training Center

programming instructions y RCX Code programming environment

Software

TRAINING CENTER Guía a los siguientes

submenús:• explicación de RCX Code

• creación de programas en RCX Code

• cargando un programa al RCX

• guardando un programa en el Program Vault y

• Otras funciones

Software

RCX CODE Es un ambiente de programación

gráfico para construir programas. Cada bloque en la pantalla es una instrucción

Permite generar programas que serán descargados en el RCX con acciones o comportamientos

La programación se realiza en el área de trabajo del RCX Code. El espacio de trabajo variará dependiendo del programa

Software

PROGRAM VAULT Permite almancenar los

programas generados con el RCX Code en el disco duro o en unidades de diskette. Existen opciones como: New, Import, Export o Delete. En el centro existen contenedores que indican los programas almacenados y se opera con las flechas arriba y abajo

I/O

Tres salidas – A, B y CPara manejar motores

Tres entradas– 1, 2 y 3InterruptoresSensor de luzContador de revolucionesOtros (temperatura, etc)

Introducción a Not Quite C (NQC)

Introducción

NQC quiere decir Not Quite C, que es el nombre de un lenguaje de programación desarrollado por Dave Baum y otras personas.

NQC tiene una sintaxis similar a la que posee el lenguaje C.

Sin embargo, NQC es un lenguaje de propósito específico para programar varios de los productos de Lego Mindstorms.

Existen otras alternativas, como es el caso de legOS y pbFORTH.

Reglas léxicas de NQC

Comentarios:/* Esto es un comentario*/

// Esto también lo es

Constantes NuméricasX = 10;

Estructura de un programa en NQC

Un programa en NQC se compone por bloques de código y variables globales.

Existen tres tipos diferentes de bloques de código:Tareas (tasks), Funciones en línea (inline) ySubrutinas (subroutine).

Tasks

El RCX soporta implícitamente el multi-tasking (cuando se comparte un procesador en múltiples procesos).

Los tasks se definen mediante:task nombre(){ // codigo de la tarea}

Un programa debe tener siempre al menos un task, llamado main. El número máximo de tasks depende del hardware en que se correrá. Para el caso del RCX se trata de 10.

Tasks

Los tasks pueden activarse o detenerse mediante las sentencias start y stop. Start task_name;

Stop task_name

Funciones

A veces es conveniente agrupar conjuntos de sentencias en una función, la cual puede ser llamada después cuando sea necesario.

Las funciones en NQC se definen:void name(argument_list){

// body of the function}

Funciones

void proviene de C. En el caso de las funciones de NQC, no es posible regresar valores, de ahí que se les defina con void.

La lista de argumentos puede ser vacía o puede contener variables, separadas por comas e indicando su tipo. NQC soporta cuatro tipos para los argumentos.

Argumentos para las funcionesType Meaning Restriction

int pass by value none

const int pass by value only constants may be used

int& pass by reference only variables may be used

const int & pass by reference function cannot modify argument

Paso de parámetros por valor

void foo(int x){

x = 2;

}

task main(){

int y = 1; // y is now equal to 1

foo(y); // y is still equal to 1!

}

Paso de parámetros const int

void foo(const int x){

PlaySound(x); // okx = 1; // error - cannot modify argument

}task main(){

foo(2); // okfoo(4*5); // ok - expression is still constantfoo(x); // error - x is not a constant

} Esto es particularmente útil ya que hay algunas funciones

del RCX que solamente aceptan argumentos constantes.

Paso de parámetros por referencia

void foo(int &x){

x = 2;}task main(){

int y = 1; // y is equal to 1foo(y); // y is now equal to 2foo(2); // error - only variables allowed

} En este caso es posible que la función modifique

los valores de los argumentos que se le pasan

Funciones

Las funciones en NQC siempre son expandidas como inline.

Esto significa que cada llamada a la función resulta en una copia del código de la función que se incluye en el programa. Si no se les usa de manera cuidadosa, pueden producir códigos de tamaño excesivo.

Subrutinas

A diferencia de las funciones, las subrutinas permiten que una sola copia del mismo código sea compartida por diferentes usuarios.

Esto las hace ser más eficientes en cuanto al uso de espacio, sin embargo, por limitaciones en el RCX, existen algunas restricciones en su uso: No pueden usar argumentos. Una subrutina no puede llamar a otra. El número máximo de ellas está limitado a 8 en el

caso del RCX. Estas restricciones las hacen menos deseables

que las funciones.

Subrutinas

La sintaxis para una subrutina es la siguiente:sub name()

{

// body of subroutine}

Variables

Todas las variables en NQC son del mismo tipo (enteros con signo de 16 bits).

Se les declara empleando int x; // declare x

int y,z; // declare y and z

int a=1,b; // declare a and b, initialize a to 1

Variables

GlobalesSe les declara fuera del alcance de

cualquiera de las funciones. Locales

Se les declara dentro de las tareas, funciones o subrutinas.

Ejemplos de variablesint x; // x is globaltask main(){

int y; // y is local to task mainx = y; // ok{ // begin compound statement

int z; // local z declaredy = z; // ok

}y = z; // error - z no longer in scope

}task foo()

{x = 1; // oky = 2; // error - y is not global

}

Estructuras de Control

Como cualquier lenguaje estructurado, NQC posee las siguientes estructuras de control:SecuenciaTomas de decisiónRepetición

Secuencia

{

x = 1;

y = 2;

} Simplemente, una sentencia se

ejecuta después de la otra. Se pueden agrupar mediante llaves.

Tomas de decisión

if (condition) consequence if (condition) consequence else alternative

if (x==1) y = 2; if (x==1) y = 3; else y = 4; if (x==1) { y = 1; z = 2; }

Tomas de decisión

switch (expression) body

case constant_expression :

default :

Ejemplo:switch(x){

case 1:// do something when X is 1break;

case 2:case 3:

// do something else when x is 2 or 3

break;default:

// do this when x is not 1, 2, or 3break;

}

ExpresionesOperator Description Associativity Restriction Example

abs()sign()

Absolute valueSign of operand

n/an/a

abs(x)sign(x)

++, -- Increment, decrement left variables only x++ or ++x

-~!

Unary minusBitwise negation (unary)Logical negation

rightrightright

constant only -x~123!x

*, /, % Multiplication, division, modulo left x * y

+, - Addition, subtraction left x + y

<<, >> Left and right shift left shift amount must constant

x << 4

<, >, <=, >=

relational operators left x < y

==, != equal to, not equal to left x == 1

& Bitwise AND left x & y

^ Bitwise XOR left x ^ y

| Bitwise OR left x | y

&& Logical AND left x && y

|| Logical OR left x || y

? : conditional value n/a x==1 ? y : z

Condiciones

Condition Meaning

true always true

false always false

expr true if expr is not equal to 0

expr1 == expr2 true if expr1 equals expr2

expr1 != expr2 true if expr1 is not equal to expr2

expr1 < expr2 true if one expr1 is less than expr2

expr1 <= expr2 true if expr1 is less than or equal to expr2

expr1 > expr2 true if expr1 is greater than expr2

expr1 >= expr2 true if expr1 is greater than or equal to expr2

! condition logical negation of a condition - true if condition is false

cond1 && cond2 logical AND of two conditions (true if and only if both conditions are true)

cond1 || cond2 logical OR of two conditions (true if and only if at least one of the conditions are true)

Ciclos

while (condition) body

while(x < 10)

{

x = x+1;

y = y*2;

}

Ciclos

do body while (condition)

for(stmt1 ; condition ; stmt2) body

repeat (expression) body

until()

Esta es nuestra primera construcción de control.

Hasta ahora nuestros códigos habían sido lineales o secuenciales.

Algunas sentencias de NQC permiten controlar el flujo del programa.

Observe while().

While

Sintaxiswhile( condicion )

cuerpo

La condición es una expresión que evalúa a falso o verdadero

Pueden ser también condiciones simples, tales como true, false

Algunas más complejas empleando sensores un poco más adelante…

Until

El opuesto del while El ciclo se ejecuta hasta que la condición sea

verdadera.Mientras sea falsa

Es común usarla sin un cuerpountil(false);

Y su uso completo es until( condicion ) {

sentencias;

}

Programando para el robot Hemos hablado ya de algunos de los elementos fundamentales del

lenguaje. Ahora veamos cómo emplearlos en problemas con el robot.

Ejemplo

task main()

{

OnFwd(OUT_A);

OnFwd(OUT_C);

Wait(400);

OnRev(OUT_A+OUT_C);

Wait(400);

Off(OUT_A+OUT_C);

}

Task y “main”

Por ahora, solamente lo usaremos, más adelante explicaremos con más detalle.

“main” indica dónde es que inicia el programa

Las llaves delimitan bloques, en este caso al programa mismo.

task main()

{

OnFwd(OUT_A);

OnFwd(OUT_C);

Wait(400);

OnRev(OUT_A+OUT_C);

Wait(400);

Off(OUT_A+OUT_C);

}

Wait

Detiene la ejecución del programa durante un cierto tiempo.

El tiempo está dado como centésimas de segundo.

Ejemplo: cuatro segundos.

task main()

{

OnFwd(OUT_A);

OnFwd(OUT_C);

Wait(400);

OnRev(OUT_A+OUT_C);

Wait(400);

Off(OUT_A+OUT_C);

}

Reverse y Off

Similar a Fwd() Note que se controlan

dos salidas.

task main()

{

OnFwd(OUT_A);

OnFwd(OUT_C);

Wait(400);

OnRev(OUT_A+OUT_C);

Wait(400);

Off(OUT_A+OUT_C);

}

Sensores

Se usan los nombre SENSOR_1, SENSOR_2, y SENSOR_3 para identificar los puertos de sensores del RCX. Un sensor tiene dos componentes: su tipo y modo. El tipo determina cómo se lee el sensor, y el modo determina cómo se interpreta el valor. Estos se fijan empleando

SetSensorType(sensor, tipo) y SetSensorMode(sensor, modo). SetSensorType(SENSOR_1,SENSOR_TYPE_LIGHT); SetSensorMode(SENSOR_1, SENSOR_MODE_PERCENT);

Por conveniencia también puede usarse: SetSensor(sensor, configuracion)

SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_2, SENSOR_TOUCH);

Sensores

Sensor Type Meaning

SENSOR_TYPE_TOUCH a touch sensor

SENSOR_TYPE_TEMPERATURE a temperature sensor

SENSOR_TYPE_LIGHT a light sensor

SENSOR_TYPE_ROTATION a rotation sensor

Sensor Mode Meaning

SENSOR_MODE_RAW raw value from 0 to 1023

SENSOR_MODE_BOOL boolean value (0 or 1)

SENSOR_MODE_EDGE counts number of boolean transitions

SENSOR_MODE_PULSE counts number of boolean periods

SENSOR_MODE_PERCENT value from 0 to 100

SENSOR_MODE_FAHRENHEIT degrees F

SENSOR_MODE_CELSIUS degrees C

SENSOR_MODE_ROTATION rotation (16 ticks per revolution)

Sensores

Sensores

Sensor Configuration Type Mode

SENSOR_TOUCH SENSOR_TYPE_TOUCH SENSOR_MODE_BOOL

SENSOR_LIGHT SENSOR_TYPE_LIGHT SENSOR_MODE_PERCENT

SENSOR_ROTATION SENSOR_TYPE_ROTATION SENSOR_MODE_ROTATION

SENSOR_CELSIUS SENSOR_TYPE_TEMPERATURE SENSOR_MODE_CELSIUS

SENSOR_FAHRENHEIT SENSOR_TYPE_TEMPERATURE SENSOR_MODE_FAHRENHEIT

SENSOR_PULSE SENSOR_TYPE_TOUCH SENSOR_MODE_PULSE

SENSOR_EDGE SENSOR_TYPE_TOUCH SENSOR_MODE_EDGE

Salidas Los nombres OUT_A, OUT_B, y OUT_C se emplean para

identificar las salidas del RCX. Todos los comandos para controlar salidas pueden trabajar con varias salidas a la vez. Pro ejemplo: "OUT_A + OUT_B".

Cada salida tiene tres atributos distintos: modo, dirección, y nivel de potencia. El modo se especifica de acuerdo con:

Output Mode Meaning

OUT_OFF output is off (motor is prevented from turning)

OUT_ON output is on (motor will be powered)

OUT_FLOAT motor can "coast"

Salidas

La dirección se fija mediante SetDirection(salidas, direccion). La dirección puede ser:

La potencia va de 0 (menor) a 7 (mayor). Se fijan mediante

SetPower(salidas, potencia).

Direction Meaning

OUT_FWD Set to forward direction

OUT_REV Set to reverse direction

OUT_TOGGLE Switch direction to the opposite of what it is presently

Salidas

Command Action

On(outputs) turns motors on

Off(outputs) turns motors off

Float(outputs) makes outputs "float"

Fwd(outputs) sets outputs to forward direction

Rev(outputs) sets outputs to reverse direction

Toggle(outputs) toggles direction of outputs

OnFwd(outputs) sets direction to forward, then turns on

OnRev(outputs) sets direction to reverse, then turns on

OnFor(outputs, time) turns outputs on for specified amount of time (in 100ths of a second)

Salidas

Algunos ejemplos son:

OnFwd(OUT_A); // turn on A in the forward direction

OnRev(OUT_B); // turn on B in the reverse direction

Toggle(OUT_A + OUT_B); // flip directions of A and B

Off(OUT_A + OUT_B); // turn off A and B OnFor(OUT_C, 100); // turn on C for 1 second

Motores

OUT_A es el dispositivo (motor) en la salida A

OnFwd( ) enciende el motor hacia adelante

Más adelante: POWER

task main()

{

OnFwd(OUT_A);

OnFwd(OUT_C);

Wait(400);

OnRev(OUT_A+OUT_C);

Wait(400);

Off(OUT_A+OUT_C);

}

Instalando RxcCC

Las instrucciones dicen que se instale primero el sofware de LEGO.

RcxCC necesita que se instale Acrobat 4 Finalmente, corra el ejecutable para hacer

la instalación. Vea la página de web:

http://www.cs.unc.edu/~lastra/comp006/Notes/notes_8_28_01.html

El RCX cc

RcxCC

Integrated Development Environment

Diagnóstico

Controlador

El Joystick

Un piano

Un programa simple

Corra 1_simple.nqc Mostrar cómo compilar y bajar el programa

Pruebe en diferentes slots de programa Uso de Start y Stop Herramientas

Firmware, Direct Control, Joysticks, etc.

Sintaxis

Los comandos terminan con punto y coma( ; )

Las llaves encierran bloques de código.

¡La sintaxis es importante! Mostrar un ejemplo de error de sintaxis

Es diferente de un error lógico

Salidas

Tres salidas: OUT_A, OUT_B, OUT_C

AtributosModo (off, on, float)Dirección (fwd, rev)Nivel de potencia

Modo

Float significa que un motor puede moverseNo lo detiene

Ejemplo (Corra – 8_float.nqc)task main()

{

SetOutput(OUT_A, OUT_FLOAT);

}

Dirección

Veamos estoMain llama

SetDirection(OUT_B, OUT_FWD);o OUT_REV o OUT_TOGGLE

También Fwd(), Rev(), Toggle(), OnFwd(), OnRev(), etc.

También OnFor(salidas, tiempo)

Potencia

SetPower(OUT_C, x)Donde x va de 0 a 7.0 es la mínima potencia.7 es el máximo.

Util para movernos despacio mientras depuramos el código.

Inicialmente la potencia se fija en 7.

Programa Tankbot 1

Dos cosas nuevas#defineuntil()

Y los comentarios

// tankbot1.nqc - …

#define LEFT OUT_A

#define RIGHT OUT_C

task main()

{

On(LEFT+RIGHT);

until(false);

}

#define

Es sólo una sustitución directa Ejemplo

#define LEFT OUT_A

Simplemente reemplaza LEFT con OUT_A

•OnFwd(LEFT); OnFwd(LEFT); OnFwd(OUT_A); OnFwd(OUT_A);•OnFwd(LEFT); OnFwd(LEFT); OnFwd(OUT_A); OnFwd(OUT_A);

• ¡Note que #define no termina con punto y ¡Note que #define no termina con punto y coma!coma!

• ¡Note que #define no termina con punto y ¡Note que #define no termina con punto y coma!coma!

Regresando a Tankbot 1

Note que dado que false nunca puede ser trueEl programa estará en until(false)

¡por siempre!

¿Qué ciclo while() podríamos haber usado en lugar de éste?

Tankbot 2

Abra el programa Tankbot2 Observe el #define

Es más fácil leer y modificar el programa.

On ( )Por omisión – potencia máxima, hacia

adelante Wait – lo veremos en la siguiente lámina

Wait

Muy simpleSimplemente haz nada hasta que el

tiempo haya transcurrido.Wait(x)

Donde x es el tiempo en centésimas de segundo

#define TURN_TIME 200

Wait(TURN_TIME)

¿Cuánto es eso?

Tankbot 2

Veamos qué ocurre cuando cambiamos algunos valores.

Bumpbot

Iniciemos con el uso de sensores.Configurar los sensoresMuestrear los sensores

Sensores

Los sensores son llamadosSENSOR_1, SENSOR_2, SENSOR_3

ConfigurándolosNQC nos permite definir el tipo y modo

de los sensoresEl modo permite hacer diversas

interpretaciones del valor de un sensor.Por ahora, ignoraremos eso.

Sensor

Simplemente usaremos la subrutinaSetSensor(SENSOR_1, SENSOR_TOUCH);

Con ello, podemos reer valores tanto procesados como sin procesar.

Por ahora, le usaremos como en este caso:while(SENSOR_1 == 0)

owhile(SENSOR_1 == 1)

Contenido

SESION I Introducción. Enfoques para programación en robótica

móvil. Robótica móvil en la práctica: Ejemplos. Lego Mindstorms: Hardware. Lego Mindstorms: Software. Proyecto 1: Detección y seguimiento de una

fuente luminosa Proyecto 2: Seguimiento de líneas. Proyecto 3: Robot Merodeador.

Proyecto 1Sigue la luz

Diseñar un robot que sea capaz de detectar una fuente de luz y dirigirse a ella.

Contenido

SESION I Introducción. Enfoques para programación en robótica

móvil. Robótica móvil en la práctica: Ejemplos. Lego Mindstorms: Hardware. Lego Mindstorms: Software. Proyecto 1: Detección y seguimiento de una

fuente luminosa Proyecto 2: Seguimiento de líneas. Proyecto 3: Robot Merodeador.

Proyecto 2Seguimiento de líneas

Diseñar un robot que sea capaz de identificar una línea de color negro en el piso y seguirla.

Contenido

SESION I Introducción. Enfoques para programación en robótica

móvil. Robótica móvil en la práctica: Ejemplos. Lego Mindstorms: Hardware. Lego Mindstorms: Software. Proyecto 1: Detección y seguimiento de una

fuente luminosa Proyecto 2: Seguimiento de líneas. Proyecto 3: Robot Merodeador.

Proyecto 3Robot merodeador

Diseñar un robot que sea capaz de moverse aleatoriamente en el entorno sin colisionar con obstáculos.

top related