Example #1
0
class Move:
    def __init__(self, b, c, port='/dev/ttyUSB0', baudrate=19200):
        self.m1 = 0
        self.m2 = 0
        self.m3 = 0
        self.offset_m1 = 0
        self.offset_m2 = 24 - 90  # 90
        self.offset_m3 = 180 - 61  # 180
        self.ser = serial.Serial()
        self.ser.port = port
        self.ser.baudrate = baudrate
        self.transform = Transform(b, c)

    def open(self):
        self.ser.open()

    def close(self):
        self.ser.close()

    def __rotate_m1(self, degrees):
        self.m1 = degrees

    def __rotate_m2(self, degrees):
        self.m2 = degrees

    def __rotate_m3(self, degrees):
        self.m3 = degrees

    # #1P600#2P900#8P2500T100\r\n
    # P 500-2500
    # T 100-9999
    def __degrees_to_pos(self, degrees):
        pos_per_degree = 2000 / 180
        return 1500 + degrees * pos_per_degree

    def __do(self):
        t = 100
        param = '#1P%d#2P%d#3P%dT%d\r\n' % \
                (self.__degrees_to_pos(self.m1), self.__degrees_to_pos(self.m2), self.__degrees_to_pos(self.m3), t)
        self.ser.write(param)

    def to(self, x, y, z):
        alpha, beta, gamma = self.transform.i(x, y, z)
        self.__rotate_m1(gamma + self.offset_m1)
        self.__rotate_m2(alpha + self.offset_m2)
        self.__rotate_m3(-beta + self.offset_m3)
        self.__do()