Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pybot/drivers/ax.py
blob: eb1762b6c5acd0f18415f1bcea184e7163ca6281 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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]