diff options
Diffstat (limited to 'pybot/functions.py')
-rw-r--r-- | pybot/functions.py | 254 |
1 files changed, 254 insertions, 0 deletions
diff --git a/pybot/functions.py b/pybot/functions.py new file mode 100644 index 0000000..71dbf42 --- /dev/null +++ b/pybot/functions.py @@ -0,0 +1,254 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- +# +# Abstract class with common functions +# +# Copyright (c) 2012-2013 Alan Aguiar alanjas@hotmail.com +# Copyright (c) 2012-2013 Butiá Team butia@fing.edu.uy +# Butia is a free and open robotic platform +# www.fing.edu.uy/inco/proyectos/butia +# Facultad de Ingeniería - Universidad de la República - Uruguay +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +class ButiaFunctions: + + def isPresent(self, module_name): + """ + Check if module: module_name is present + """ + module_list = self.get_modules_list() + return (module_name in module_list) + + def loopBack(self, data, board='0'): + """ + LoopBack command: send data to the board and get the result. If all is ok + the return must be exactly of the data parameter + """ + msg = [str(data)] + return self.callModule('lback', str(board), '0', 'send', msg, ret_type=str) + + ############################## Movement calls ############################## + + def set2MotorSpeed(self, leftSense='0', leftSpeed='0', rightSense='0', rightSpeed='0', board='0'): + """ + Set the speed of 2 motors. The sense is 0 or 1, and the speed is + between 0 and 1023 + """ + msg = [str(leftSense), str(leftSpeed), str(rightSense), str(rightSpeed)] + return self.callModule('motors', str(board), '0', 'setvel2mtr', msg) + + def setMotorSpeed(self, idMotor='0', sense='0', speed='0', board='0'): + """ + Set the speed of one motor. idMotor = 0 for left motor and 1 for the + right motor. The sense is 0 or 1, and the speed is between 0 and 1023 + """ + msg = [str(idMotor), str(sense), str(speed)] + return self.callModule('motors', str(board), '0', 'setvelmtr', msg) + + def getMotorType(self, board='0'): + """ + If AX-12 motors present returns 1. If there are a shield "cc" returns 2 + """ + return self.callModule('motors', str(board), '0', 'getType') + + ##################### Operations for ax.lua driver ######################### + + def writeInfo(self, idMotor, regstart, value, board='0'): + """ + Writes the motor: idMotor in the registry: regstart with value: value + """ + msg = [str(idMotor), str(regstart), str(value)] + return self.callModule('ax', str(board), '0', 'writeInfo', msg) + + def readInfo(self, idMotor, regstart, length='1', board='0'): + """ + Reads the motor: idMotor in the registry: regstart + """ + msg = [str(idMotor), str(regstart), str(length)] + return self.callModule('ax', str(board), '0', 'writeInfo', msg) + + def sendPacket(self, msg, board='0'): + """ + Send a raw packet to ax module + """ + msg_s = [str(i) for i in msg] + return self.callModule('ax', str(board), '0', 'sendPacket', msg_s, ret_type=str) + + def wheelMode(self, idMotor='0', board='0'): + """ + Sets the motor: idMotor in wheel mode (continuos rotation) + """ + msg = [str(idMotor)] + return self.callModule('ax', str(board), '0', 'wheelMode', msg) + + def jointMode(self, idMotor='0', _min='0', _max='1023', board='0'): + """ + Sets the motor: idMotor in servo mode + """ + msg = [str(idMotor), str(_min), str(_max)] + return self.callModule('ax', str(board), '0', 'jointMode', msg) + + def setPosition(self, idMotor='0', pos='0', board='0'): + """ + Sets the position: pos of the motor: idMotor + """ + msg = [str(idMotor), str(pos)] + return self.callModule('ax', str(board), '0', 'setPosition', msg) + + def getPosition(self, idMotor='0', board='0'): + """ + Gets the position of motor: idMotor + """ + msg = [str(idMotor)] + return self.callModule('ax', str(board), '0', 'getPosition', msg) + + def setSpeed(self, idMotor='0', speed='0', board='0'): + """ + Set the speed: speed to the motor: idMotor + """ + msg = [str(idMotor), str(speed)] + return self.callModule('ax', str(board), '0', 'setSpeed', msg) + + ############################### General calls ############################## + + def getBatteryCharge(self, board='0'): + """ + Gets the battery level charge + """ + return self.callModule('butia', str(board), '0', 'getVolt', ret_type=float) + + def getVersion(self, board='0'): + """ + Gets the version of Butiá module. 22 for new version + """ + return self.callModule('butia', str(board), '0', 'getVersion') + + def getFirmwareVersion(self, board='0'): + """ + Gets the version of the Firmware + """ + return self.callModule('admin', str(board), '0', 'getVersion') + + ############################### Sensors calls ############################### + + def getButton(self, port, board='0'): + """ + Gets the value of the button connected in port + """ + return self.callModule('button', str(board), str(port), 'getValue') + + def getLight(self, port, board='0'): + """ + Gets the value of the light sensor connected in port + """ + return self.callModule('light', str(board), str(port), 'getValue') + + def getDistance(self, port, board='0'): + """ + Gets the value of the distance sensor connected in port + """ + return self.callModule('distanc', str(board), str(port), 'getValue') + + def getGray(self, port, board='0'): + """ + Gets the value of the gray sensor connected in port + """ + return self.callModule('grey', str(board), str(port), 'getValue') + + def getResistance(self, port, board='0'): + """ + Gets the value of the resistance sensor connected in port + """ + return self.callModule('res', str(board), str(port), 'getValue', ret_type=float) + + def getVoltage(self, port, board='0'): + """ + Gets the value of the voltage sensor connected in port + """ + return self.callModule('volt', str(board), str(port), 'getValue', ret_type=float) + + def getTemperature(self, port, board='0'): + """ + Gets the value of the temperature sensor connected in port + """ + return self.callModule('temp', str(board), str(port), 'getValue', ret_type=float) + + def setLed(self, port, on_off, board='0'): + """ + Sets on or off the LED connected in port (0 is off, 1 is on) + """ + return self.callModule('led', str(board), str(port), 'turn', [str(on_off)]) + + ################################ Extras ################################ + + def modeHack(self, pin, mode, board='0'): + """ + Sets the mode of hack pin. If mode 0 = input, mode 1 = output + """ + msg = [str(pin), str(mode)] + return self.callModule('hackp', str(board), '0', 'setMode', msg) + + def setHack(self, pin, value, board='0'): + """ + Sets the value of hack pin configured as output. Value is 0 or 1 + """ + msg = [str(pin), str(value)] + return self.callModule('hackp', str(board), '0', 'write', msg) + + def getHack(self, pin, board='0'): + """ + Gets the value of hack pin configured as input. Returns 0 or 1 + """ + return self.callModule('hackp', str(board), '0', 'read', [str(pin)]) + + ############################# Generic modules ############################# + + def getModuleA(self, port, board='0'): + """ + Gets the value of the generic sensor ModuleA connected in port + """ + return self.callModule('moduleA', str(board), str(port), 'getValue') + + def getModuleB(self, port, board='0'): + """ + Gets the value of the generic sensor ModuleB connected in port + """ + return self.callModule('moduleB', str(board), str(port), 'getValue') + + def getModuleC(self, port, board='0'): + """ + Gets the value of the generic sensor ModuleC connected in port + """ + return self.callModule('moduleC', str(board), str(port), 'getValue') + + def setModuleA(self, port, on_off, board='0'): + """ + Sets on or off the generic module A + """ + return self.callModule('modSenA', str(board), str(port), 'turn', [str(on_off)]) + + def setModuleB(self, port, on_off, board='0'): + """ + Sets on or off the generic module B + """ + return self.callModule('modSenB', str(board), str(port), 'turn', [str(on_off)]) + + def setModuleC(self, port, on_off, board='0'): + """ + Sets on or off the generic module C + """ + return self.callModule('modSenC', str(board), str(port), 'turn', [str(on_off)]) + |