API

De Proyecto Butiá
Revisión del 19:44 7 abr 2013 de AlanJAS (Discusión | contribuciones) (Módulos)

Saltar a: navegación, buscar

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.

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 y Python

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')

La ruta /home/olpc.. es la ruta donde por defecto se encuentra TurtleBots cuando se instala en una XO. En otras computadoras puede variar. Asimismo, este truco permite utilizar la butiaAPI desde cualquier otro lugar en el sistema, directamente desde python.

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 del Firmware: Devuelve la versión del firmware de la placa con el que estamos trabajando

    ver = robot.getFirmwareVersion()
    print ver

Cerrar: Cierra la comunicación con el servidor

    robot.close()

Conexión/Desconexión con el servidor: Conecta o Reconecta con el servidor

    robot.reconnect()

Cerrar cliente y servidor: Cierra el servidor y el cliente

    robot.closeService()

Módulos

listarModulos:

devuelve la lista de los modulos disponibles en el firmware de la placa


modulos = robot.listarModulos()
print modulos


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

port es el número de puerto donde se encuentra conectado el sensor

getButton(port)

getLight(port)

getDistance(port)

getGray(port)

getTemperature(port)

getResistance(port)

getVoltage(port)

setLed(level) level is 0: off or 1: on

Carga de batería

Esta operacion nos devuelve la carga aproximada de las pilas del robot con un error de 0.1 volt. La medición de la carga la realizan los motores, por lo cual, si no se tienen los motores, el valor devuelto es -1.

Carga de la Batería

carga = robot.getBatteryCharge()
print carga