martes, 9 de abril de 2019

Robot sigue-pelota python

Ejercicio - ¡Sigue la pelota, PiBot!.

Tabla resumen de los sensores y actuadores.

Recuerda que la función dameObjeto() retorna dos valores: el centro y el área.
Función
Descripción
dameObjeto()
Esta función hará todo el trabajo sucio por ti, ya que es la que se encarga de hacer el filtro de color para aislar la pelota naranja y devolverá 2 números: centro y área.

- centro: son las coordenadas (pixelX, pixelY) del centro de la pelota en la imagen.

- area: es la superficie (numero de pixeles) que ocupa la pelota dentro de la imagen.
girarIzquierda(vel)
Esta función hará que el robot sobre sí mismo hacia la izquierda a la velocidad dada como parámetro ($rad/s$).
girarDerecha(vel)
Esta función hará que el robot sobre sí mismo hacia la derecha a la velocidad dada como parámetro ($rad/s$).
avanzar(vel)
Esta función hará avanzar al robot a una velocidad dada como parámetro ($m/s$)
retroceder(vel)
Esta función hará retroceder al robot a una velocidad dada como parámetro ($m/s$).



In [ ]:



# -*- coding: utf-8 -*-
import sys, time
sys.path.insert(0, '/usr/local/lib/python2.7')
sys.path.insert(0, '/opt/jderobot/lib/python2.7')
import PiBot



In [ ]:



# Creamos el objeto robot
robot = PiBot.dameRobot()

while True:
   (coordenadas, area) = robot.dameObjeto()
   print (robot.dameObjeto())
   print (area)
   if coordenadas != None:
       x = coordenadas[0]
       if (x < 320):
           robot.girarIzquierda (0.4)
       elif (x > 320):
           robot.girarDerecha (0.4)
       if (area < 700):
           robot.avanzar (0.6)
       elif (area > 700):
           robot.retroceder (0.6)

   else:
       robot.girarDerecha(0.7)
       time.sleep(0.1)

Diagrama de flujo de sigue línea F1

Diagrama F1

miércoles, 3 de abril de 2019

Python robot choca-gira

Ejercicio ChocaGira Ultrasonidos

Tabla resumen de sensores y actuadores

Función
Descripción
leerUltrasonido()
Lee el sensor de US y nos devuelve un valor que representa la distancia (en metros) a un obstáculo que se encuentre enfrente del PiBot
avanzar(v)
Hace que el PiBot avance en línea recta con una velocidad lineal igual a v expresada en metros/segundo
retroceder(v)
Hace que el PiBot retroceda en línea recta con una velocidad lineal igual a v expresada en metros/segundo
girarIzquierda(w)
Hace que el PiBot gire a la izquierda sobre su eje (sin avanzar) con una velocidad angular igual a w expresada en radianes/segundo
girarDerecha(w)
Hace que el PiBot gire a la derecha sobre su eje (sin avanzar) con una velocidad angular igual a w expresada en radianes/segundo
parar()
Hace que el PiBot se detenga (si estaba avanzando, retrocediendo o girando)
Los posibles valores que nos devuelve la función leerUltrasonido() se corresponden con diferentes distancias del PiBot con respecto al obstáculo que tiene enfrente. Por ejemplo:
valor = 4.01
valor = 3.32
valor = 2.43
valor = 1.62
valor = 0.58
NOTA: Recordamos que $2\pi$; radianes equivalen a 360 grados.



In [1]:



import sys
sys.path.insert(0, '/usr/local/lib/python2.7')
sys.path.insert(0, '/opt/jderobot/lib/python2.7')

import PiBot
import time
import random



In [2]:



if __name__ == "__main__":
   
   # Cargamos el robot
   robot = PiBot.dameRobot()
   # Información acerca del PiBot
   robot.quienSoy()
   print ("\nA continuacion se ejecuta su codigo con el robot\n")

   # TODO: escribe aqui tu codigo
while True :
   us = robot.leerUltrasonido()
   print (us)
   if us > 0.4:
       robot.avanzar(2)
   else :
       robot.parar()
       robot.retroceder(2)
       robot.girarIzquierda(random.randrange(4,7))
       robot.avanzar(0.2)

Python robot sigue-línea

Ejercicio Siguelínea Infrarrojos

Tabla resumen de sensores y actuadores

Función
Descripción
leerIRSigueLineas()
Lee los dos sensores de IR y nos devuelve un valor entre 0 y 3.
avanzar(v)
Hace que el PiBot avance en línea recta con una velocidad lineal igual a v expresada en metros/segundo.
retroceder(v)
Hace que el PiBot retroceda en línea recta con una velocidad lineal igual a v expresada en metros/segundo.
girarIzquierda(w)
Hace que el PiBot gire a la izquierda sobre su eje (sin avanzar) con una velocidad angular igual a w expresada en radianes/segundo.
girarDerecha(w)
Hace que el PiBot gire a la derecha sobre su eje (sin avanzar) con una velocidad angular igual a w expresada en radianes/segundo.
parar()
Hace que el PiBot se detenga (si estaba avanzando, retrocediendo o girando).
El valor entre 0 y 3 que devuelve la función depende de las lecturas de los dos sensores de IR, de acuerdo a la siguiente tabla:
lectura IR izquierdo
lectura IR derecho
valor de leerIRSigueLineas()
negro
negro
0
negro
blanco
1
blanco
negro
2
blanco
blanco
3
Estos cuatro valores que nos devuelve la función leerIRSigueLineas() se corresponden con:
valor = 0
valor = 1
valor = 2
valor = 3



In [7]:



# Importar las librerías necesarias.
import sys
sys.path.insert(0, '/usr/local/lib/python2.7')
sys.path.insert(0, '/opt/jderobot/lib/python2.7')

import PiBot
import time



In [8]:



if __name__ == "__main__":
   
   # Cargamos el robot
   robot = PiBot.dameRobot()
   
   # En myJdeRobotKids tendré la instancia de my objeto, para trabajar con el, independientemente del HW
   robot.quienSoy()
   print ("\nA continuacion se ejecuta su codigo con el robot\n")

   # TODO: escribe aqui tu codigo
   ################################
while True:
   ir = robot.leerIRSigueLineas()
   print (ir)
   if ir == 0 :
       robot.avanzar(0.07)
   elif ir == 1:
       robot.girarIzquierda(0.1)
   elif ir == 2:
       robot.girarDerecha(0.1)
   else:
       robot.parar()
       robot.girarIzquierda(0.2)
       robot.avanzar(0.07)