Example #1
0
class Inmoov(object):
    """
    This class are Inmoov!
    """
    def __init__(self):
        """
        Build all of Inmoov's parts.
        """

        #open the file json file
        with open(INMOOV_FILE) as json_file:
            json.load(json_file, object_hook=parse)

        self.head = Head(
            filter(lambda x: x.name == "head_x", servos)[0],
            filter(lambda x: x.name == "head_y", servos)[0])

        #Right side
        self.right_wrist = Wrist(
            filter(lambda x: x.name == "left_wrist", servos)[0])
        self.right_hand = Hand(
            Finger(filter(lambda x: x.name == "right_pinky", servos)[0]),
            Finger(filter(lambda x: x.name == "right_ring", servos)[0]),
            Finger(filter(lambda x: x.name == "right_mid", servos)[0]),
            Finger(filter(lambda x: x.name == "right_index", servos)[0]),
            Finger(filter(lambda x: x.name == "right_thumb", servos)[0]))
        self.right_forearm = Forearm(self.right_hand, self.right_wrist)
        self.right_shoulder = Shoulder(
            filter(lambda x: x.name == "right_shoulder_flexion", servos)[0],
            filter(lambda x: x.name == "right_shoulder_abduction", servos)[0],
            filter(lambda x: x.name == "right_shoulder_rotation_x", servos)[0],
            filter(lambda x: x.name == "right_shoulder_rotation_y", servos)[0])

        self.right_arm = Arm(self.right_forearm, self.right_shoulder)

        #Left side
        self.left_wrist = Wrist(
            filter(lambda x: x.name == "left_wrist", servos)[0])
        self.left_hand = Hand(
            Finger(filter(lambda x: x.name == "left_pinky", servos)[0]),
            Finger(filter(lambda x: x.name == "left_ring", servos)[0]),
            Finger(filter(lambda x: x.name == "left_middle", servos)[0]),
            Finger(filter(lambda x: x.name == "left_index", servos)[0]),
            Finger(filter(lambda x: x.name == "left_thumb", servos)[0]))
        self.left_forearm = Forearm(self.left_hand, self.left_wrist)
        self.left_shoulder = Shoulder(
            filter(lambda x: x.name == "left_shoulder_flexion", servos)[0],
            filter(lambda x: x.name == "left_shoulder_abduction", servos)[0],
            filter(lambda x: x.name == "left_shoulder_rotation_x", servos)[0],
            filter(lambda x: x.name == "left_shoulder_rotation_y", servos)[0])

        self.left_arm = Arm(self.left_forearm, self.left_shoulder)

        self.initialize()

    def do_motion(self, motion_id):
        """
            Make InMoov do one of these motions
        """
        if motion_id == 0:
            self.wave()
        elif motion_id == 1:
            self.point()
            time.sleep(5)
            self.wave()
        elif motion_id == 2:
            self.initialize()

    def wave(self):
        self.left_arm.forearm.hand.off()
        self.left_arm.shoulder.rotation_up(-20)
        self.left_arm.shoulder.rotation_internal(60)
        self.left_arm.shoulder.abduction_up(-90)
        time.sleep(2)
        self.left_arm.shoulder.abduction_up(60)
        time.sleep(0.5)
        time.sleep(2)
        self.left_arm.shoulder.abduction_up(90)
        time.sleep(1.5)
        self.left_arm.shoulder.abduction_up(0)
        time.sleep(2)
        self.left_arm.shoulder.abduction_up(90)
        time.sleep(1.5)
        self.left_arm.shoulder.abduction_up(0)

        self.left_arm.shoulder.rotation_up(-20)
        self.left_arm.shoulder.flex(90)
        self.left_arm.shoulder.rotation_internal(60)

    def point(self):
        self.left_arm.shoulder.rotation_up(-20)
        self.left_arm.shoulder.rotation_internal(60)
        time.sleep(3)

        self.left_arm.shoulder.rotation_internal(90)
        self.left_arm.forearm.hand.make_fist()
        self.left_arm.shoulder.rotation_up(60)
        self.left_arm.forearm.hand.straighten_all_fingers()

    def thumbs_down(self):
        pass

    def goodbye(self):
        pass

    def initialize(self):
        """initializes InMoov"""
        self.head.initialize()
        self.left_arm.initialize()

    def off(self):
        """Turns InMoov off"""
        self.head.off()
        self.left_arm.off()
        self.right_arm.off()