Motores
Introducción
Todos los motores de Robobo incorporan un sensor (codificador de eje o encoder) que permite leer su posición mediante los métodos descritos en este apartado.
Elementos de programación
1. Enumerado Wheels
Representa la lista de ruedas de Robobo.
R: Derecha.
L: Izquierda.
Both: Ambas.
2. Método readWheelPosition
| readWheelPosition(wheel) |
|
Lee la posición actual de la rueda especificada.
Parámetros: Devuelve: |
Ejemplo de Uso
Con este bloque podemos conocer la distancia aproximada que recorre Robobo. En este ejemplo, se utiliza este bloque para hacer que el robot se pare cuando la rueda derecha ha dado 2 vueltas completas (720 grados). Si conocemos la longitud de la circunferencia de la rueda, podemos determinar fácilmente la distancia recorrida:
El siguiente programa…
FRASE SIN ACABAR (TB EN EL PDF)
…devuelve el número de vueltas que da Robobo (siempre que sean menos de 720 vueltas).
from robobopy.Robobo import Robobo
from robobopy.utils.Wheels import Wheels
rob = Robobo("localhost")
rob.connect()
rob.moveWheels(20,20)
rob.wait(1)
vueltas = rob.readWheelPosition(Wheels.R)
while (rob.readWheelPosition(Wheels.R) - vueltas > 720):
rob.wait(0.1)
rob.stopMotors()3. Método readWheelSpeed
| readWheelSpeed(wheel) |
|
Lee la velocidad actual de la rueda especificada.
Parámetros: Devuelve: |
Ejemplo de Uso
El siguiente programa hace que Robobo avance en línea recta con una velocidad que aumenta de 10 en 10 desde 20 hasta 50 (4 veces). En cada paso del bucle, dice la velocidad real que alcanza la rueda (se utiliza solo la rueda izquierda ya que ambas usan el mismo valor):
from robobopy.Robobo import Robobo
from robobopy.utils.Wheels import Wheels
rob = Robobo("localhost")
rob.connect()
speed = 20
for i in range(4):
rob.moveWheels(speed, speed)
rob.wait(1)
rob.sayText('Mi velocidad es ' +
str(rob.readWheelSpeed(Wheels.L)))
speed+= 10
rob.stopMotors()
4. Método resetWheelEncoders()
| resetWheelEncoders() |
| Reinicia los encoders de las ruedas. |
Ejemplo de Uso
En este ejemplo, se mueve el robot durante 5 segundos y, a continuación, se usa el método readWheelPosition para leer el valor de la posición actual de la rueda derecha en voz alta. Después, se usa el método resetWheelEncoders para reiniciar dicha posición y se le lee de nuevo al usuario.
from robobopy.Robobo import Robobo
from robobopy.utils.Wheels import Wheels
rob = Robobo("localhost")
rob.connect()
rob.moveWheelsByTime(20,20,5)
rob.sayText('La posición de la rueda derecha es' + str(rob.readWheelPosition(Wheels.R)))
rob.resetWheelEncoders()
rob.wait(0.5)
rob.sayText('La posición de la rueda derecha ha sido reiniciada. La posición actual es' +
str(rob.readWheelPosition(Wheels.R)))5. Método readPanPosition
| readPanPosition() |
|
Lee la posición actual del motor PAN.
Devuelve: |
Ejemplo de Uso
En el siguiente programa, se mueve el motor PAN a un valor aleatorio dentro de su rango de operación y, a continuación, se encienden los LEDs del lado de la base correspondiente al giro realizado. Por lo tanto, este programa nos permite conocer la orientación del smartphone respecto a la base en cualquier momento.
from robobopy.Robobo import Robobo
from robobopy.utils.LED import LED
from robobopy.utils.Color import Color
import random
rob = Robobo("localhost")
rob.connect()
rob.setLedColorTo(LED.All, Color.OFF)
rob.movePanTo(random.randint(-160,160), 15)
if rob.readPanPosition() < 0:
rob.setLedColorTo(LED.FrontLL, Color.CYAN)
rob.setLedColorTo(LED.FrontL, Color.CYAN)
rob.setLedColorTo(LED.BackL, Color.CYAN)
else:
rob.setLedColorTo(LED.FrontR, Color.CYAN)
rob.setLedColorTo(LED.FrontRE, Color.CYAN)
rob.setLedColorTo(LED.BackR, Color.CYAN)6. Método readTiltPosition
| readTiltPosition() |
|
Lee la posición actual del motor TILT.
Devuelve: |
Ejemplo de Uso
En el siguiente programa, se mueve el motor TILT a un valor aleatorio dentro de su rango de operación y, a continuación, se encienden los LEDs delanteros o traseros de la base en función de si el TILT está por encima o por debajo de 90 grados. Por lo tanto, este programa nos permite conocer la orientación del smartphone respecto a la base en cualquier momento.
from robobopy.Robobo import Robobo
from robobopy.utils.LED import LED
from robobopy.utils.Color import Color
import random
rob = Robobo("localhost")
rob.connect()
rob.setLedColorTo(LED.All, Color.OFF)
rob.moveTiltTo(random.randint(60,108), 15)
if rob.readTiltPosition() < 90:
rob.setLedColorTo(LED.BackL, Color.CYAN)
rob.setLedColorTo(LED.BackR, Color.CYAN)
else:
rob.setLedColorTo(LED.FrontC, Color.CYAN)
rob.setLedColorTo(LED.FrontL, Color.CYAN)
rob.setLedColorTo(LED.FrontLL, Color.CYAN)
rob.setLedColorTo(LED.FrontR, Color.CYAN)
rob.setLedColorTo(LED.FrontRE, Color.CYAN)