Skip to content

Instantly share code, notes, and snippets.

@joseanpg
Created August 8, 2012 12:29
Show Gist options
  • Save joseanpg/3294776 to your computer and use it in GitHub Desktop.
Save joseanpg/3294776 to your computer and use it in GitHub Desktop.
RoboMind :: Leccion 2
##################################################################################
#
# Comandos utilizados
#
# Ha resultado muy util clasificar los comandos basicos que entiende
# el robot en cuatro categorias
#
# - Comandos basicos mediante los cuales el robot realizara acciones muy sencillas
#
# avanza izquierda derecha
# pinta no_pintes
#
# - Comandos basicos mediante los cuales el robot nos informará sobre lo que
# observa justamente en frente
#
# despejado obstaculo baliza
# blanco
#
# - Comandos basicos para repetir las acciones de la categoría anterior
#
# repite repite_mientras
#
# - Comando basico mediante el cual enseñamos al robot a realizar nuevas
# acciones
#
# aprende_procedimiento
#
# Respecto a los operadores logicos no se ha explicado nada, simplemente
# se han ido introduciendo de forma "natural" cuando ha sido necesario.
# En este momento no considero que sea un objetivo fundamental su comprensión
# plena
#
# Se han obtenido resultados muy satisfactorios como el de este ejemplo
#
##################################################################################
#
# Underline vs. CamelCase
#
# Aunque tengan que pulsar un poco mas, tras varias experiencias
# ha funcionado mejor repetir_mientras, no_pintes, ...
#
##################################################################################
[Las tildes han sido omitidas deliberadamente]
#
# En la sesion anterior el siguiente procedimiento fue inicialmente llamado
#
# avanza_lo_que_puedas
#
# Posteriormente fue abreviado utilizando las iniciales
#
# alqp
#
# En esta sesión hemos decidido llamarle simplemente av
#
aprende_procedimiento av(){
repite_mientras(despejado y no blanco){
avanza(1)
}
}
# [Animamos a poner en marcha al robot pero ...]
# ¿Por que no hace nada ?
# Porque solamente estamos enseñando algo nuevo al robot,
# no le estamos pidiendo que haga nada más que aprender
aprende_procedimiento av(){
repite_mientras(despejado y no blanco){
avanza(1)
}
}
# Digamosle que vaya al rincon inferior izquierdo
izquierda
av()
izquierda
av()
izquierda
aprende_procedimiento av(){
repite_mientras(despejado y no blanco){
avanza(1)
}
}
izquierda
av()
izquierda
av()
izquierda
# Ahora comencemos a dibujar nuestra espiral
pinta
av()
izquierda
av()
izquierda
av
izquierda
av
# [Cada vez que ha añadido un izquierda ha ido ejecutando el programa.
# Interrumpo precisamente cuando llevamos cuatro segmentos]
# Observa que ha pintado un rectangulo. ¿Que te parece si le enseñamos este
# procedimiento que vamos a realizar frecuentemente?
aprende_procedimiento av(){
repite_mientras(despejado y no blanco){
avanza(1)
}
}
aprende_procedimiento rec(){
pinta
repite(4){
av()
izquierda
}
}
izquierda
av()
izquierda
av()
izquierda
# Adelante con el rectangulo!
rec()
aprende_procedimiento av(){
repite_mientras(despejado y no blanco){
avanza(1)
}
}
aprende_procedimiento rec(){
pinta
repite(4){
av()
izquierda
}
}
izquierda
av()
izquierda
av()
izquierda
# En realidad van a ser varios rectangulos
rec()
rec()
rec()
rec()
rec()
# Estamos repitiendo nosotros. ¿Se te ocurre alguna alternativa?
aprende_procedimiento av(){
repite_mientras(despejado y no blanco){
avanza(1)
}
}
aprende_procedimiento rec(){
pinta
repite(4){
av()
izquierda
}
}
izquierda
av()
izquierda
av()
izquierda
repite(7){
rec()
}
# Como ves tenemos dos procedimientos separados: ir al rincón y pintar la espiral.
# Vamos a enseñarselos al robot
# ENSEÑANDO AL ROBOT
aprende_procedimiento av(){
repite_mientras(despejado y no blanco){
avanza(1)
}
}
aprende_procedimiento rec(){
pinta
repite(4){
av()
izquierda
}
}
aprende_procedimiento ve_al_rincon(){
izquierda
av()
izquierda
av()
izquierda
}
aprende_procedimiento espiral(){
repite(7){
rec()
}
}
# AUTOBOTS, ROLL OUT!
ve_al_rincon()
espiral()
# Map file for RoboMind
# (Lines that start with '#' are comments)
#
# The tiles are:
# A..Z Tiles A through Z
# * Start
#
# Paint strokes kan be added in the according list
# by adding tuples of the form: ([color],[type],[x],[y])
#
# [color] : w = white
# b = black
# [type] : . = single dot
# - = horizontal stroke to the right
# | = vertical stroke down
# [x] : integer horizontal position
# [y] : integer vertical position
paint:
{}
map:
CHHHHHHHHHHHHHHHHHHHHHD
GMFFFFFFFFFFFFFFFFFFFJI
GI GI
GI GI
GI GI
GI GI
GI GI
GI GI
GI @ GI
GI GI
GI GI
GI GI
GI GI
GI GI
GI GI
GLHHHHHHHHHHHHHHHHHHHKI
BFFFFFFFFFFFFFFFFFFFFFE
### Control structures ###
If=si
Else=en_caso_contrario
Procedure=aprende_procedimiento
Repeat=repite
RepeatWhile=repite_mientras
Return=regresar
Break=truncar
End=fin
### Logical operators ###
And=&
Or=|
Not=~
VarAnd=y
VarOr=o
VarNot=no
True=verdadero
False=falso
### Random ###
RandomBool=moneda
### Moving/rotating ###
MoveForward=avanza
MoveBackward=atras
RotateRight=derecha
RotateLeft=izquierda
MoveNorth=norte
MoveSouth=sur
MoveEast=este
MoveWest=oeste
## Seeing ###
LeftIsObstacle=izquierdaEsObstaculo
FrontIsObstacle=obstaculo
RightIsObstacle=derechaEsObstaculo
LeftIsClear=izquierdaEsClaro
FrontIsClear=despejado
RightIsClear=derechaEsClaro
LeftIsBlack=izquierdaEsNegro
FrontIsBlack=negro
RightIsBlack=derechaEsNegro
LeftIsWhite=izquierdaEsBlanco
FrontIsWhite=blanco
RightIsWhite=derechaEsBlanco
LeftIsBeacon=izquierdaEsBaliza
FrontIsBeacon=baliza
RightIsBeacon=derechaEsBaliza
### Painting ###
PaintWhite=pinta
PaintBlack=pintaNegro
StopPainting=no_pintes
### Grabbing ##
GripperGet=toma
GripperPut=suelta
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment