sábado, 15 de diciembre de 2012

Desafio 2 - Robot

Programa:

INICIO:

  LET A=0
  LET B=0
  LET C=0
  LET E=0
  LET F=0
  LET G=0
  LET H=0
  LET I=0
  LET J=0

   MOVE @{1,66},10,1000
   LET D = $PSD
   'PRINT "Distancia ", D

   IF (D <= 20) THEN
   'PRINT "OBJETO EN CUADRANTE 7"
   LET H=1
  GOTO LEECENTRO
   
   ELSE
    IF ((D > 20) & (D <= 24)) THEN
    'PRINT "OBJETO EN CUADRANTE 4"
    LET E=1
  GOTO LEECENTRO
    ELSE
      IF ((D > 24) & (D <= 28)) THEN
     '   PRINT "OBJETO EN CUADRANTE 1"
        LET A=1
      GOTO LEECENTRO
       ELSE
      '   PRINT "NO HAY OBJETO"
         GOTO LEECENTRO
      END IF

    END IF


 LEECENTRO:
 MOVE @{1,82},10,1000
   LET D = $PSD
   'PRINT "Distancia ", D

   IF (D <= 24) THEN
    'PRINT "OBJETO EN CUADRANTE 8"
    LET I=1
    GOTO LEEDERECHA
   ELSE
    IF ((D > 24) & (D <= 29)) THEN
      LET F=1     
    '  PRINT "OBJETO EN CUADRANTE 5"
     GOTO LEEDERECHA
    ELSE
      IF ((D > 29) & (D <= 33)) THEN
      '  PRINT "OBJETO EN CUADRANTE 2"
        LET B=1
        GOTO LEEDERECHA
       ELSE
     '   PRINT "NO HAY OBJETO"
        GOTO LEEDERECHA
      END IF

    END IF


LEEDERECHA:
 MOVE @{1,88},10,1000
   LET D = $PSD
'   PRINT "Distancia ", D

   IF (D <= 19) THEN
 ' PRINT "OBJETO EN CUADRANTE 9"
   LET J=1
   GOTO IMPRIMIR
   
   ELSE
    IF ((D > 19) & (D <= 26)) THEN
  '  PRINT "OBJETO EN CUADRANTE 6"
    LET G=1
    GOTO IMPRIMIR

    ELSE
      IF ((D > 26)& (D <= 30)) THEN
   '     PRINT "OBJETO EN CUADRANTE 3"
        LET C=1
        GOTO IMPRIMIR

       ELSE
    '      PRINT "NO HAY OBJETO"
         GOTO IMPRIMIR

      END IF

    END IF
IMPRIMIR:
 PRINT A,B,C
 PRINT E,F,G
 PRINT H,I,J

 END

Ejecución:

viernes, 14 de diciembre de 2012

Conversión de coordenadas



Diagrama ilustrativo de la relación entre las coordenadas polares y las coordenadas cartesianas.
En el plano de ejes xy con centro de coordenadas en el punto O se puede definir un sistema de coordenadas polares de un punto M del plano, definidas por la distancia r al centro de coordenadas, y el ángulo  \theta  del vector de posición sobre el eje x.

[editar]Conversión de coordenadas polares a rectangulares

Definido un punto en coordenadas polares por su ángulo  \theta  sobre el eje x, y su distancia r al centro de coordenadas, se tiene:
 x= r \cos \theta \,
 y= r \sen \theta \,

[editar]Conversión de coordenadas rectangulares a polares

Definido un punto del plano por sus coordenadas rectangulares (x,y), se tiene que la coordenada polar r es:
 r= \sqrt{x^2 +y^2}  (aplicando el Teorema de Pitágoras)
Para determinar la coordenada angular θ, se deben distinguir dos casos:
  • Para r = 0, el ángulo θ puede tomar cualquier valor real.
  • Para r ≠ 0, para obtener un único valor de θ, debe limitarse a un intervalo de tamaño 2π. Por convención, los intervalos utilizados son [0, 2π) y (−π, π].
Para obtener θ en el intervalo [0, 2π), se deben usar las siguientes fórmulas (\arctan denota la inversa de la función tangente):
\theta = 
\begin{cases}
\arctan(\frac{y}{x})        & \mbox{si } x > 0 \mbox{ y } y \ge 0\\ 
\arctan(\frac{y}{x}) + 2\pi & \mbox{si } x > 0 \mbox{ y } y < 0\\
\arctan(\frac{y}{x}) + \pi  & \mbox{si } x < 0\\
\frac{\pi}{2}               & \mbox{si } x = 0 \mbox{ y } y > 0\\
\frac{3\pi}{2}              & \mbox{si } x = 0 \mbox{ y } y < 0
\end{cases}
Para obtener θ en el intervalo (−π, π], se deben usar las siguientes fórmulas:
\theta = 
\begin{cases}
2\arctan(\frac{y}{x + |z|})        & \mbox{si } x \not\in \Bbb R^-\\ 
\pi               & \mbox{si }  x \in \Bbb R^- \\
\end{cases}
o equivalentemente
\theta = 
\begin{cases}
\arctan(\frac{y}{x}) & \mbox{si } x > 0\\
\arctan(\frac{y}{x}) + \pi & \mbox{si } x < 0 \mbox{ y } y \ge 0\\
\arctan(\frac{y}{x}) - \pi & \mbox{si } x < 0 \mbox{ y } y < 0\\
\frac{\pi}{2} & \mbox{si } x = 0 \mbox{ y } y > 0\\
-\frac{\pi}{2} & \mbox{si } x = 0 \mbox{ y } y < 0
\end{cases}
Muchos lenguajes de programación modernos evitan tener que almacenar el signo del numerador y del denominador gracias a la implementación de la función atan2, que tiene argumentos separados para el numerador y el denominador. En los lenguajes que permiten argumentos opcionales, la función atan puede recibir como parámetro la coordenada x (como ocurre en Lisp).

sábado, 1 de diciembre de 2012

Movimientos de robot - grupo 4


***** linea recta *****


INICIO:
IF $PSD < 20 THEN 
     MOVE @{2,0,179},10,1000
     MOVE @{2,22,197},10,1000
     MOVE @{2,42,206},10,1000
     MOVE @{2,62,203},10,1000
     MOVE @{2,70,182},10,1000

     GOTO INICIO
ELSE
     IF $KIR < 0 THEN
         GOTO INICIO
     ELSE
         END
ENDIF



***** CIRCUNFERENCIA *****


INICIO:
IF $PSD < 20 THEN 
     MOVE @{2,88,206},10,1000
     MOVE @{2,64,161},10,1000
     MOVE @{2,61,138},10,1000
     MOVE @{2,98,181},10,1000
     MOVE @{2,114,211},10,1000

     GOTO INICIO
ELSE
     IF $KIR < 0 THEN
         GOTO INICIO
     ELSE
         END
ENDIF

Comandos en BASICIDE455

Comandos en BASICIDE455

En VT100

i: modo ingreso
.: salir de modo ingreso
r: modo ejecución
l: lista programa
c: clear memoria

>PRINT "HOLA MUNDO"

En editor

Para asignar el valor a una variable LET
Ej: LET i=0

LET i=0
Inicio:
     LET i=i+1
     Print "HOLA MUNDO"
     IF i=10 THEN fin ELSE Inicio
Fin:

Luego se compila, después download finalmente se ejecuta con el botón rojo del control.

$KBD captura lo que se escribe en el teclado

foro: http://robosavvy.com/forum/viewtopic.php?p=32739

inicio:
let a=$kbd
print a
goto inicio

$ir lectura de control remoto

7 rojo
6 izquierda
4 arriba
8 derecha
10 abajo
5 rotación der
3 rotaciió izq
11 mano derecha
9 mano izquierda
12 num 1
13 num 2
14 num 3
15 num 4
16 num 5
17 num 6
18 num 7
19 num 8
20 num 9
21 num 0
1 tecla A
2 tecla B

$kir lectura control y teclado

servo controla los aparatos

INICIO:
SERVO 0=@
LET A = $SERVO(0)
PRINT A
IF $KIR < 0 THEN
     GOTO INICIO
ELSE
     END
ENDIF

$PSD es un sensor del robot

INICIO:
   PRINT $PSD
   GOTO INICIO


Manejo de lista:



PRINT "PRUEBA DE LISTA"
LIST A=5,4,3,2,1,5
PRINT @A[1]
PRINT @A
LET A = @A
PRINT "LARGO = ",A
PRINT @A



LIST A=5,65,66,67,68,69
FOR I = 0 TO 4
OUT @A[I]
NEXT I
PRINT


FOR I=0 TO 10
PRINT $RND MOD 6
NEXT I


MOVE @{2,50,50},10,1000




INICIO:
IF $PSD < 20 THEN 
     MOVE @{2,80,125},10,1000
     END
ELSE
     GOTO INICIO


LEE POSICION DE SERVO 0 Y 1


INICIO:
SERVO 0=@
SERVO 1=@
LET A = $SERVO(0)
LET B = $SERVO(1)
PRINT "SERVO 0 = ",A
PRINT "SERVO 1 = ",B
WAIT 2000

IF $KIR < 0 THEN
     GOTO INICIO
ELSE
     END

linea recta


INICIO:
IF $PSD < 20 THEN 
     MOVE @{2,0,179},10,1000
     MOVE @{2,22,197},10,1000
     MOVE @{2,42,206},10,1000
     MOVE @{2,62,203},10,1000
     MOVE @{2,70,182},10,1000

     GOTO INICIO
ELSE
     IF $KIR < 0 THEN
         GOTO INICIO
     ELSE
         END
ENDIF



CIRCUNFERENCIA


INICIO:
IF $PSD < 20 THEN 
     MOVE @{2,88,206},10,1000
     MOVE @{2,64,161},10,1000
     MOVE @{2,61,138},10,1000
     MOVE @{2,98,181},10,1000
     MOVE @{2,114,211},10,1000

     GOTO INICIO
ELSE
     IF $KIR < 0 THEN
         GOTO INICIO
     ELSE
         END
ENDIF