API
Butiá puede utilizarse de muchas formas, como un servicio consumible mediante la red como es el caso de bobot server utilizando directamente la biblioteca bobot o mediante diferentes APIs de programación como C, Java, Python.
Contenido
Antes de empezar
Para utilizar la API es necesario tener corriendo el servidor. En el caso de [bobot] se debe ejecutar:
./lua bobot-server.lua
Si se desea ver que dispositivos está detectando y mas, se debe habilitar el DEBUG:
./lua bobot-server.lua DEBUG
En el caso de usar [pybot| pybot server] se debe ejecutar:
python pybot_server.py
Para habilitar el DEBUG:
python pybot_server.py DEBUG
Luego de iniciado el servidor, podemos conectarnos desde la butiaAPI.
Uso de la butiaAPI en Pippy
Para poder utilizar la librería butiaAPI es necesario que especifiquemos la ruta donde se encuentra. Para ello, en Pippy agregamos:
import sys sys.path.insert(0, '/home/olpc/Activities/TurtleBots.activity/plugins/butia')
Luego de tener eso, procedemos a usar la API.
butiaAPI
Descripción de las funciones y algunos ejemplos.
Instanciar la clase:
robot = butiaAPI.robot()
Versión:
getFirmwareVersion Devuelve la versión del firmware de la placa con el que estamos trabajando
ver = robot.getFirmwareVersion()
print ver
Cerrar:
cerrar Cierra la comunicación con el servidor bobot
robot.cerrar()
Conexión/Desconexión con el servidor:
reconnect Conecta o Reconecta al bobot en address:port
robot.reconnect (address, port)
Módulos
listarModulos:
devuelve la lista de los modulos disponibles en el firmware de la placa
modulos = robot.listarModulos()
print modulos
abrirModulo:
Apertura de modulos, abre el modulo "moduloname"
robot.abrirModulo (moduloname)
llamarModulo:
Operacion de llamada de una funcion de un modulo (CALL)
robot.llamarModulo(modulename, function , params = "")
Para conocer la lista de funciones de un módulo y sus parametros puede ejecutarse en un terminal:
telnet localhost 2009
DESCRIBE nombre_de_modulo
A futuro hay que exportar este servicio en la API
Funciones Varias
isPresent
Retorna si esta presente el modulo
robot.isPresent (moduloname)
abrirLback
Abrir módulo loopBack: modulo de ayuda presente en el butia (open)
robot.abrirLback()
datoRet = butiabot.loopBack("hola")
loopBack:
envia un mensaje a la placa y espera recibir exactamente lo que fue enviado
robot.loopBack(data)
Motores
Operaciones solicidatas al driver motores.lua
abrirMotores:
robot.abrirMotores()
setVelocidadMotores
robot.setVelocidadMotores(self, sentidoIzq = "0", velIzq = "0", sentidoDer = "0", velDer = "0")
sentido: 0: adelante, 1: atras
velocidad: 0..1023
Detiene los 2 motores:
robot.setVelocidadMotores("0", "0", "0", "0")
robot.setVelocidadMotores("0", "500", "1", "500") - gira a la izquierda
robot.setVelocidadMotores("1", "500", "1", "500") - va hacia atrás
robot.setVelocidadMotores("0", "500", "0", "500") - va hacia adelante
robot.setVelocidadMotores("1", "500", "0", "500") - gira a la derecha
setVelMotor
robot.setVelMotor(self, idMotor = "0", sentido = "0", vel = "0")
idMotor: 0: motor derecho, 1: motor izquierdo
Va hacia adelante:
robot.setVelMotor("1","1","500")
robot.setVelMotor("0","1","500")
Va hacia atrás:
robot.setVelMotor("1","0","500")
robot.setVelMotor("0","0","500")
Sensores
Operaciones solicitadas al driver de los sensores
abrirSensor()
getValSenAnalog(pinAnalog = "0")
getValSenDigital(pinDig = "0")
butiabot.abrirSensor()
sen1 = robot.getValSenAnalog("2")
print sen1
sen2 = robot.getValSenAnalog("4")
print sen2
sen3 = robot.getValSenDigital("5")
print sen3
Operaciones solicitadas al driver boton
abrirBoton(self)
getBoton(self)
getLuzAmbiente(self)
getDistancia(self)
getEscalaGris(self)
getTemperature(self)
getVibration(self)
getTilt(self)
getContactoCapacitivo(self)
getInduccionMagnetica(self)
setLed(self, nivel = 255)
Operaciones solicitadas al modulo de la placa, driver butia.lua
abrirButia() ping()
Carga de batería
Esta operacion nos devuelve la carga aproximada del pack de pilas del robot con un error de 1 volt.
getCargaBateria()
carga = robot.getCargaBateria()
print carga