Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pybot/drivers/ax.py
diff options
context:
space:
mode:
Diffstat (limited to 'pybot/drivers/ax.py')
-rw-r--r--pybot/drivers/ax.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/pybot/drivers/ax.py b/pybot/drivers/ax.py
new file mode 100644
index 0000000..eb1762b
--- /dev/null
+++ b/pybot/drivers/ax.py
@@ -0,0 +1,83 @@
+
+RD_VERSION = 0x00
+WRITE_INFO = 0x01
+READ_INFO = 0x02
+SEND_RAW = 0x03
+
+def getVersion(dev):
+ dev.send([RD_VERSION])
+ raw = dev.read(3)
+ return raw[1] + raw[2] * 256
+
+def writeInfo(dev, motor_id, regstart, value):
+ msg = [WRITE_INFO, motor_id, regstart, value / 256, value % 256]
+ dev.send(msg)
+ raw = dev.read(2)
+ return raw[1]
+
+def readInfo(dev, motor_id, regstart, lenght):
+ msg = [READ_INFO, motor_id, regstart, lenght]
+ dev.send(msg)
+ raw = dev.read(3)
+ if lenght == 1:
+ return raw[1]
+ else:
+ return raw[1] + raw[2] * 256
+
+def sendPacket(dev, pack):
+ wait_resp = len(pack) + 2
+ msg = [SEND_RAW, wait_resp] + pack
+ dev.send(msg)
+ raw = dev.read(255)
+ if len(raw) == 1:
+ return -1 # only opcode o nil
+ timeout = raw[2]
+ print 'timeout', timeout
+ if timeout == 1:
+ return -1
+ size = raw[1]
+ print "AX12 answer\n:::SIZE = " + str(size) + "\n:::TIMEOUT = " + str(timeout)
+ msg = ''
+ for i in range(3,size+3):
+ msg = msg + str(raw[i]) + ' '
+ print ":::MESSAGE\n " + msg
+ return msg
+
+def wheelMode(dev, motor_id):
+ msg = [WRITE_INFO, motor_id, 0x06, 0x00, 0x00]
+ dev.send(msg)
+ raw = dev.read(2)
+ msg = [WRITE_INFO, motor_id, 0x08, 0x00, 0x00]
+ dev.send(msg)
+ raw = dev.read(2)
+ return raw[1]
+
+def jointMode(dev, motor_id, _min, _max):
+ msg = [WRITE_INFO, motor_id, 0x06, _min / 256, _min % 256]
+ dev.send(msg)
+ raw = dev.read(2)
+ msg = [WRITE_INFO, motor_id, 0x08, _max / 256, _max % 256]
+ dev.send(msg)
+ raw = dev.read(2)
+ return raw[1]
+
+def setPosition(dev, motor_id, pos):
+ msg = [WRITE_INFO, motor_id, 0x1E, pos / 256, pos % 256]
+ dev.send(msg)
+ raw = dev.read(2)
+ return raw[1]
+
+def getPosition(dev, motor_id):
+ msg = [READ_INFO, motor_id, 0x24, 2]
+ dev.send(msg)
+ raw = dev.read(3)
+ raw_angle = raw[1] * 256 + raw[2]
+ return raw_angle * 0.29
+
+def setSpeed(dev, motor_id, speed):
+ #vel = speed * 1.496
+ msg = [WRITE_INFO, motor_id, 0x20, speed / 256, speed % 256]
+ dev.send(msg)
+ raw = dev.read(2)
+ return raw[1]
+