View
221
Download
0
Category
Preview:
Citation preview
Las tareas que requiere la misión deben permitir al robot recolectar objetos y reportar la actividad actual.
Recolectar Objetos
La tarea de recolectar objetos coloca al robot en un entorno junto con varios objetos que debe encontrar y transportar hacia un determinado lugar. Este problema es estudiado en varios trabajos basándose en el comportamiento que ciertos insectos muestran al encontrar comida y transportarla a su nido u hogar (home) [Kube1992, Kube1993, Mataric1994, Mataric1995, Mataric1997, Mataric1998, Werger1999]. También se ha estudiado por su similitud con tareas de recolección de rocas en planetas desconocidos [Brooks1989] o aplicaciones de limpieza [Parker1998, Jung1999].
Caso de estudio: recolección
Gonzalo Tejera, INCO, Universidad de la República del Uruguay
El comportamiento de recolectar objetos se implementó a partir de varios comportamientos reactivos muy simples. Estos comportamientos utilizan reglas que evalúan los sensores y
determinan la potencia de los actuadores.
El comportamiento que recolecta objetos se basa en una máquina de estados, donde el estado indica el comportamiento activo y las transiciones se indican como predicados sobre los sensores. El comportamiento activo es
elegido para interactuar con el entorno.
Comportamientos simples:
IrPorComida,
ExplorarZona,
RodearHorario,
RodearAntiHorarios,
MirarAlHome,
Empujar y
EvitarObstaculos.
Los predicados:
veoAlgo,
enZonaComida,
cercaDelHome,
fueraDeRumbo,
homeALaIzquierda,
comidaLaIzquierda,
comidaLaDerecha,
miroAlHome y
perpendicularAlHome.
El comportamiento recolectar objetos obtiene de los sensores la siguiente información:
valor de sensores infrarrojos del robot Khepera,
posición y dirección del robot Khepera en el mundo,
posición de los objetos (centro de la zona de recolección) y
posición del home,
y debe controlar en todo momento los dos motores del robot.
Predicado veoAlgo
. ( ) _( )
true i sensoresKhepera i UMBRAL RUIDOveoAlgo sensoresKhepera
false en otro caso
Predicado enZonaComida
( , )
( ( , ) _ )
enZonaAlimento posRobot posAlimento
distancia posRobot posAlimento CERCA ALIMENTO
Predicado cercaDelHome
( , )
( ( , ) _ )
cercaDelHome posRobot posHome
distancia posRobot posHome CERCA HOME
Predicado fueraDeRumbo
( , , )
( ( , , ) _ )
( ( ,
alineado puntoAlinear posRobot dirRobot
anguloEntre puntoAlinear posRobot dirRobot DIF ANGULO
anguloEntre puntoAlinear
, ) _ )posRobot dirRobot DIF ANGULO
( , , ) ( , , )fueraDeRumbo posHome posRobot dirRobot alineado posHome posRobot dirRobot
darAccion(in double sensoresIR[8], out double actuadores[2])
const double pesos[2][8]begin for iterAct=0 to 1 actuadores[iterAct]=pesos[iterAct][0] for iterSens=0 to 7 do actuadores[iterAct] + = sensores[iterSens]*pesos[iterAct][iterSens] end endend
Comportamiento EvitarObstáculos
darAccion(in double posRobot[2],in double dirRobot,
in posMirar, out double actuadores[2])
const double ERR_ANGULO, VEL_GIRO, VEL_DETENIDObegin if abs(anguloEntre(posMirar,posRobot,dirRobot))>ERR_ANGULO actuadores[0]=VEL_DETENIDO+VEL_GIRO actuadores[1]=VEL_DETENIDO-VEL_GIRO else actuadores[0]=VEL_DETENIDO actuadores[1]=VEL_DETENIDO endend
Comportamiento MirarA
Comportamiento IrPorComida
Comportamiento RodearHorario
darAccion(in double sensoresIR[8], out double actuadores[2])
const double VEL_IZQ_DOBLAR_IZQ, VEL_DER_DOBLAR_IZQ, VEL_IZQ_DOBLAR_DER, VEL_DER_DOBLAR_DER, VEL_IZQ_GIRAR, VEL_DER_GIRAR, VEL_AVANCE const double DEBO_ABRIRME, MIN_DEBO_CERRARME, MAX_DEBO_CERRARMEbegin if (sensoresIR[4]>DEBO_ABRIRME) actuadores[0] = VEL_IZQ_DOBLAR_IZQ actuadores[1] = VEL_DER_DOBLAR_IZQ else if (sensoresIR [5]<MAX_DEBO_CERRARME)&& (sensoresIR [5]>MIN_DEBO_CERRARME) actuadores[0] = VEL_IZQ_DOBLAR_DER actuadores[1] = VEL_DER_DOBLAR_DER else if (sensoresIR [5]<=MIN_DEBO_CERRARME) actuadores[0] = VEL_IZQ_GIRAR actuadores[1] = VEL_DER_GIRAR else actuadores[0] = VEL_AVANCE actuadores[1] = VEL_AVANCE endend
Comportamiento Empujar
darAccion(in double sensoresIR[8], out double actuadores[2])
const double VEL_AVANCE, AJUSTE, UMBRAL_DERECHObegin if (sensoresIR[2] + sensoresIR[3])>UMBRAL_DERECHO) actuadores[0] = VEL_AVANCE actuadores[1] = VEL_AVANCE else if (sensoresIR[2] < sensoresIR[3]) actuadores[0] = VEL_AVANCE actuadores[1] = VEL_AVANCE+AJUSTE else actuadores[0] = VEL_AVANCE+AJUSTE actuadores[1] = VEL_AVANCE endend
Recommended