Ejemplo n.º 1
0
 def __init__(self,*args,**kwds):
     servoControlFrame.__init__(self,*args,**kwds)
     self.servoCtrl = Servo()
     self.initGrid()
     self.timer = wx.Timer(self)
     self.Bind(wx.EVT_TIMER,self.onTick,self.timer)
     self.timer.Start(200)
Ejemplo n.º 2
0
 def __init__(self, horizontalControlPin: int, verticalControlPin: int) -> ArmControl:
     self.horizontalControlPin = horizontalControlPin
     self.verticalControlPin = verticalControlPin
     self.horizontalServo = Servo(horizontalControlPin)
     self.verticalServo = Servo(verticalControlPin)
     
     self.tracking = False
Ejemplo n.º 3
0
class CandyCrush:
    def __init__(self, config):
        self.config = config
        self.setup_servo(config)
        self.setup_apis(config)

    # External APIs
    def setup_apis(self, config):
        toggl_token = config.get('API Tokens', 'toggl')
        self.toggl = Toggl(access_token=toggl_token)

    # Servo control
    def setup_servo(self, config):
        physical_pin = config.getint('Servo', 'physical_pin')
        servo_speed_180 = config.getfloat('Servo', 'speed_180')
        duty_min = config.getfloat('Servo', 'duty_min')
        duty_max = config.getfloat('Servo', 'duty_max')
        self.servo = Servo(physical_pin, servo_speed_180, duty_min, duty_max)

    def dispense_candy(self):
        servo = self.servo
        if not servo.position == 180:
            servo.set_position(180)
            time.sleep(1)
        servo.set_position(90, 1.5)
        servo.set_position(0, 0.5)
        time.sleep(1)
        servo.set_position(180, 1.5)
            
    # Run!
    def main(self):
        self.servo.set_position(180)
        self.dispense_candy()
Ejemplo n.º 4
0
  def __init__(self, printer):
    super(DualServoPlugin, self).__init__(printer)

    logging.debug('Activating ' + __PLUGIN_NAME__ + ' plugin...')

    # Add the servo
    channel = self.printer.config.get(type(self).__name__, 'servo_channel')
    pulse_min = self.printer.config.getfloat(type(self).__name__, 'pulse_min')
    pulse_max = self.printer.config.getfloat(type(self).__name__, 'pulse_max')
    angle_min = self.printer.config.getfloat(type(self).__name__, 'angle_min')
    angle_max = self.printer.config.getfloat(type(self).__name__, 'angle_max')
    angle_init = self.printer.config.getfloat(type(self).__name__, 'extruder_0_angle')

    # Disable the end-stop on this channel
    if channel == "P9_14":
      self.printer.end_stops["X2"].active = False
      self.printer.end_stops["X2"].stop()
    elif channel == "P9_16":
      self.printer.end_stops["Y2"].active = False
      self.printer.end_stops["Y2"].stop()

    self.head_servo = Servo(channel, pulse_min, pulse_max, angle_min, angle_max, angle_init)

    # Load the config for angles
    self.t0_angle = float(self.printer.config.getfloat(type(self).__name__, 'extruder_0_angle'))
    self.t1_angle = float(self.printer.config.get(type(self).__name__, 'extruder_1_angle'))

    # Override the changing tool command to trigger the servo
    self.printer.processor.override_command('T0', T0_DualServo(self.printer))
    self.printer.processor.override_command('T1', T1_DualServo(self.printer))
Ejemplo n.º 5
0
    def __init__(self, printer):
        super(HPX2MaxPlugin, self).__init__(printer)

        logging.debug('Activating ' + __PLUGIN_NAME__ + ' plugin...')

        # Add the servo
        channel = self.printer.config.get(type(self).__name__, 'servo_channel')
        pulse_min = self.printer.config.getfloat(
            type(self).__name__, 'pulse_min')
        pulse_max = self.printer.config.getfloat(
            type(self).__name__, 'pulse_max')
        angle_min = self.printer.config.getfloat(
            type(self).__name__, 'angle_min')
        angle_max = self.printer.config.getfloat(
            type(self).__name__, 'angle_max')
        angle_init = self.printer.config.getfloat(
            type(self).__name__, 'extruder_0_angle')

        self.head_servo = Servo(channel, pulse_min, pulse_max, angle_min,
                                angle_max, angle_init)

        # Load the config for angles
        self.t0_angle = float(
            self.printer.config.getfloat(
                type(self).__name__, 'extruder_0_angle'))
        self.t1_angle = float(
            self.printer.config.get(type(self).__name__, 'extruder_1_angle'))

        # Override the changing tool command to trigger the servo
        self.printer.processor.override_command('T0', T0_HPX2Max(self.printer))
        self.printer.processor.override_command('T1', T1_HPX2Max(self.printer))
Ejemplo n.º 6
0
def main(argv):

    GPIO.setmode(GPIO.BOARD)
    angle = int(argv[0])
    my_servo = Servo(11, "Sg90")
    my_servo.write_angle(angle)
    print("Moving: ", angle)
    time.sleep(1)
Ejemplo n.º 7
0
def main(argv):
	


	frame = cv2.imread("/home/pi/Downloads/IMG_4644.JPG")
        frame = imutils.resize(frame, width=400)
	
        # Converting captured frame to monochrome
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # Blurring the image using the GaussianBlur() method of the opencv object
        blur = cv2.GaussianBlur(gray, (9, 9), 0)

        # Using an opencv method to identify the threshold intensities and locations
        (darkest_value, brightest_value, darkest_loc, brightest_loc) = cv2.minMaxLoc(blur)
	print "Brightest Value:",brightest_value
        # Threshold the blurred frame accordingly
        # First argument is the source image, which is the grayscale image. Second argument is the threshold value
        # which is used to classify the pixel values. Third argument is the maxVal which represents the value to be given
        # if pixel value is more than (sometimes less than) the threshold value
        out2, threshold2 = cv2.threshold(blur, brightest_value - 10, 230, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
	out, threshold = cv2.threshold(blur, brightest_value - 10, 230, cv2.THRESH_BINARY)
        thr = threshold.copy()
        print "out value:",out2
        # Resize frame for ease
        # cv2.resize(thr, (300, 300))
        # Find contours in thresholded frame
        edged = cv2.Canny(threshold, 50, 150)

        # First one is source image, second is contour retrieval mode, third is contour approximation method. And it outputs
        # the contours and hierarchy. Contours is a Python list of all the contours in the image. Each individual contour
        # is a Numpy array of (x,y) coordinates of boundary points of the object.
        lightcontours, hierarchy = cv2.findContours(edged, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)


        # Checking if the list of contours is greater than 0 and if any circles are detected
        if (len(lightcontours)):
                # Finding the maxmimum contour, this is assumed to be the light beam
                maxcontour = max(lightcontours, key=cv2.contourArea)
                # Avoiding random spots of brightness by making sure the contour is reasonably sized
                if cv2.contourArea(maxcontour):
                        (x, final_y), radius = cv2.minEnclosingCircle(maxcontour)

                        print "x value:",x,"y value:",final_y

			t=Stepper(x,final_y)
			s = Servo(final_y)
			s.servo_control()
			t.change_position()
	
                        cv2.circle(frame, (int(x), int(final_y)), int(radius), (0, 255, 0), 4)
                        cv2.rectangle(frame, (int(x) - 5, int(final_y) - 5), (int(x) + 5, int(final_y) + 5), (0, 128, 255), -1)
                        # Display frames and exit

        cv2.imshow('frame', frame)
        cv2.waitKey(0)
        key = cv2.waitKey(1)

	cv2.destroyAllWindows()
Ejemplo n.º 8
0
class HPX2MaxPlugin(AbstractPlugin):
    @staticmethod
    def get_description():
        return "Plugin to use a HPX2-Max extruder in redeem (single motor - two hotends)"

    def __init__(self, printer):
        super(HPX2MaxPlugin, self).__init__(printer)

        logging.debug('Activating ' + __PLUGIN_NAME__ + ' plugin...')

        # Add the servo
        self.head_servo = Servo(
            int(
                self.printer.config.get(
                    type(self).__name__, 'servo_channel', 1)), 500, 750, 90,
            10)

        # Load the config for angles
        self.t0_angle = float(
            self.printer.config.get(
                type(self).__name__, 'extruder_0_angle', 20))
        self.t1_angle = float(
            self.printer.config.get(
                type(self).__name__, 'extruder_1_angle', 175))

        # Override the changing tool command to trigger the servo
        self.printer.processor.override_command('T0', T0_HPX2Max(self.printer))
        self.printer.processor.override_command('T1', T1_HPX2Max(self.printer))

    def exit(self):
        self.head_servo.stop()

    def path_planner_initialized(self, path_planner):
        # Configure the path planner so that the motor direction
        # is reversed when selecting T1 or T0 (depending on the angle)

        # 3 axis, plus 2 extruders
        assert Path.NUM_AXES >= 5

        for i in range(2):
            e = self.printer.path_planner.native_planner.getExtruder(i)

            # FIXME: We have hardcoded the motor to be used here.
            #       It is always the Extruder E. Patch welcome.
            e.setStepperCommandPosition(3)

            # If extruder 1 angle is > 90, then we invert the motor for
            # him, otherwise for the other
            # This is how the HPX2 Max is built.
            if i == 0:
                e.setDirectionInverted(True if self.t0_angle <= 90 else False)
            else:
                e.setDirectionInverted(True if self.t1_angle <= 90 else False)

        # Select tool 0 as this is the default tool
        self.head_servo.set_angle(
            self.printer.plugins[__PLUGIN_NAME__].t0_angle, asynchronous=True)
Ejemplo n.º 9
0
class DualServoPlugin(AbstractPlugin):

    @staticmethod
    def get_description():
        return "Plugin to change between two hot ends that is tilted with a servo"

    def __init__(self, printer):
        super(DualServoPlugin, self).__init__(printer)

        logging.debug('Activating '+__PLUGIN_NAME__+' plugin...')

        # Add the servo
        channel     = self.printer.config.get(type(self).__name__, 'servo_channel')
        pulse_min   = self.printer.config.getfloat(type(self).__name__, 'pulse_min')
        pulse_max = self.printer.config.getfloat(type(self).__name__, 'pulse_max')
        angle_min = self.printer.config.getfloat(type(self).__name__, 'angle_min')
        angle_max = self.printer.config.getfloat(type(self).__name__, 'angle_max')
        angle_init = self.printer.config.getfloat(type(self).__name__, 'extruder_0_angle')

        self.head_servo = Servo(channel, pulse_min, pulse_max, angle_min, angle_max, angle_init)

        # Load the config for angles
        self.t0_angle = float(self.printer.config.getfloat(type(self).__name__, 'extruder_0_angle'))
        self.t1_angle = float(self.printer.config.get(type(self).__name__, 'extruder_1_angle'))

        # Override the changing tool command to trigger the servo
        self.printer.processor.override_command('T0', T0_DualServo(self.printer))
        self.printer.processor.override_command('T1', T1_DualServo(self.printer))

    def exit(self):
        self.head_servo.stop()

    def path_planner_initialized(self, path_planner):
        # Configure the path planner so that the motor direction
        # is reversed when selecting T1 or T0 (depending on the angle)

        # 3 axis, plus 2 extruders
        assert Printer.NUM_AXES >= 5

        #for i in range(2):
        #    e = self.printer.path_planner.native_planner.getExtruder(i)

            # FIXME: We have hardcoded the motor to be used here.
            #       It is always the Extruder E. Patch welcome.
        #    e.setStepperCommandPosition(3)

            # If extruder 1 angle is > 90, then we invert the motor for
            # him, otherwise for the other
            # This is how the HPX2 Max is built.
        #    if i == 0:
        #        e.setDirectionInverted(True if self.t0_angle <= 90 else False)
        #    else:
        #        e.setDirectionInverted(True if self.t1_angle <= 90 else False)

        # Select tool 0 as this is the default tool
        self.head_servo.set_angle(self.printer.plugins[__PLUGIN_NAME__].t0_angle, asynchronous=True)
Ejemplo n.º 10
0
def main():
	s0 = Servo(0)
	s1 = Servo(1)
	s2 = Servo(2)
	s0.all_stop()

	for i in range(0, 2):
		loop(s0, s1, s2)

	s0.all_stop()
Ejemplo n.º 11
0
Archivo: Leg.py Proyecto: hen31/SpinDP
    def __init__(self, leg_number, pwm):
        #Servo controller
        self.pwm = pwm
        #last leg position
        self.last_x = 0
        self.last_y = 0
        self.last_z = 0
        #normal leg position
        self.normal_x = 0
        self.normal_y = 130
        self.angle_afwijking = 0
        self.angle_afwijking_knee = 0
        #leg number
        self.leg_number = leg_number

        if leg_number == 1:
            self.hip = Servo(0, pwm)
            self.height = Servo(1, pwm)
            self.knee = Servo(2, pwm)

        if leg_number == 3:
            self.hip = Servo(13, pwm)
            self.height = Servo(1, pwm)
            self.knee = Servo(2, pwm)

        elif leg_number == 2 or leg_number == 4:
            self.hip = Servo(6, pwm)
            self.height = Servo(7, pwm)
            self.knee = Servo(15, pwm)
Ejemplo n.º 12
0
Archivo: Leg.py Proyecto: hen31/SpinDP
class Leg:
    #Length in mm
    COXA = 46.13
    FEMUR = 70.61
    TIBIA = 146.0

    def __init__(self, leg_number, pwm):
        #Servo controller
        self.pwm = pwm
        #last leg position
        self.last_x = 0
        self.last_y = 0
        self.last_z = 0
        #normal leg position
        self.normal_x = 0
        self.normal_y = 130
        self.angle_afwijking = 0
        self.angle_afwijking_knee = 0
        #leg number
        self.leg_number = leg_number

        if leg_number == 1:
            self.hip = Servo(0, pwm)
            self.height = Servo(1, pwm)
            self.knee = Servo(2, pwm)

        if leg_number == 3:
            self.hip = Servo(13, pwm)
            self.height = Servo(1, pwm)
            self.knee = Servo(2, pwm)

        elif leg_number == 2 or leg_number == 4:
            self.hip = Servo(6, pwm)
            self.height = Servo(7, pwm)
            self.knee = Servo(15, pwm)


    #set hip
    def set_hip(self, degree):
        self.hip.set_servo(degree - self.angle_afwijking)

    #get hip
    def get_hip(self):
        return self.hip.get_servo()

    #set height
    def set_height(self, degree):
        self.height.set_servo(degree)

    #get height
    def get_height(self):
        return self.height.get_servo()

    #set knee
    def set_knee(self, degree):
        self.knee.set_servo(degree + self.angle_afwijking_knee)

    #get knee
    def get_knee(self):
        return self.knee.get_servo()
Ejemplo n.º 13
0
	def __init__(self):
		#ServoBlaster is what we use to control servo motors
		#Upper Limit for servos
		self._ServoXul = 250
		self._ServoYul = 230

		#Lower limit for servos
		self._ServoXll = 75
		self._ServoYll = 75

		self.servo_X = Servo(0, self._ServoXul, self._ServoXll) 
		self.servo_Y = Servo(1, self._ServoYul, self._ServoYll)
Ejemplo n.º 14
0
 def __init__(self, **kwargs):
     Controller.__init__(self, **kwargs)
     self.L3X = 0
     self.L3Y = 0
     self.R3X = 0
     self.R3Y = 0
     self.leftMotorPWM = 0
     self.rightMotorPWM = 0
     self.arrow = "None"
     self.motor = Motor()
     self.servo = Servo()
     self.motor.InitMotorHw()
     self.servo.InitServoHw()
     self.BASESTEPSIZE = 5      
Ejemplo n.º 15
0
    def __init__(self,
                 name,
                 pin,
                 minAngle=0,
                 maxAngle=180,
                 angle=0,
                 minPWM=1000,
                 maxPWM=2000,
                 simulation=True):

        self.setAngleLimit(minAngle, maxAngle)
        self.angle = angle

        Servo.__init__(self, name, pin, minPWM, maxPWM, simulation)
Ejemplo n.º 16
0
    def __init__(self, a):
        # Open the serial device
        self.dyn_chain = a
        self.servos = Servo()
        self.mik = MachineIK()

        # self.labeler = Labeler()

        self.INIT_TEST = False
        self.VIEW_POS_RT = False
        self.curr_joints = [
            p for key, p in self.dyn_chain.get_position([1, 2, 4, 6]).items()
        ]
        self.curr_pos = self.get_arm_pose()
Ejemplo n.º 17
0
class HPX2MaxPlugin(AbstractPlugin):

    @staticmethod
    def get_description():
        return "Plugin to use a HPX2-Max extruder in redeem (single motor - two hotends)"

    def __init__(self, printer):
        super(HPX2MaxPlugin, self).__init__(printer)

        logging.debug('Activating '+__PLUGIN_NAME__+' plugin...')

        # Add the servo
        self.head_servo = Servo(int(self.printer.config.get(type(self).__name__, 'servo_channel', 1)),500,750,90,10) 

        # Load the config for angles
        self.t0_angle = float(self.printer.config.get(type(self).__name__, 'extruder_0_angle', 20))
        self.t1_angle = float(self.printer.config.get(type(self).__name__, 'extruder_1_angle', 175))

        # Override the changing tool command to trigger the servo
        self.printer.processor.override_command('T0', T0_HPX2Max(self.printer))
        self.printer.processor.override_command('T1', T1_HPX2Max(self.printer))

    def exit(self):
        self.head_servo.stop()

    def path_planner_initialized(self, path_planner):
        # Configure the path planner so that the motor direction
        # is reversed when selecting T1 or T0 (depending on the angle)

        # 3 axis, plus 2 extruders
        assert Path.NUM_AXES >= 5

        for i in range(2):
            e = self.printer.path_planner.native_planner.getExtruder(i)

            # FIXME: We have hardcoded the motor to be used here.
            #       It is always the Extruder E. Patch welcome.
            e.setStepperCommandPosition(3)

            # If extruder 1 angle is > 90, then we invert the motor for
            # him, otherwise for the other
            # This is how the HPX2 Max is built.
            if i == 0:
                e.setDirectionInverted(True if self.t0_angle <= 90 else False)
            else:
                e.setDirectionInverted(True if self.t1_angle <= 90 else False)

        # Select tool 0 as this is the default tool
        self.head_servo.set_angle(self.printer.plugins[__PLUGIN_NAME__].t0_angle, asynchronous=True)
Ejemplo n.º 18
0
    def __init__(self, AddressArray, ChannelArray, DefaultPulseArray, inverse=False, offset=[0,0,0]):
        self._AddressArray = AddressArray
        self._ChannelArray = ChannelArray
        self._DefaultPulseArray = DefaultPulseArray
        self._inverse = inverse
        self._offset = offset

    # Receiving variables, this will be set into arrays. If there aren't 3 input variables of the address
    # it will print an Error.
        if len(self._AddressArray) == 3:
            self._Hip = Servo(self._AddressArray[0], self._ChannelArray[0], self._DefaultPulseArray[0], self._inverse, self._offset[0])
            self._Knee = Servo(self._AddressArray[1], self._ChannelArray[1], self._DefaultPulseArray[1], self._inverse, self._offset[1])
            self._Ankle = Servo(self._AddressArray[2], self._ChannelArray[2],self._DefaultPulseArray[2], self._inverse, self._offset[2]) #3 keer nul? aangepast naar 0,1,2
        else:
            print "-----------Error Creating leg-----------"
Ejemplo n.º 19
0
    def __init__(self):
        # ServoBlaster is what we use to control servo motors
        # Upper Limit for servos
        self._ServoXul = 250
        self._ServoYul = 230

        # Lower limit for servos
        self._ServoXll = 75
        self._ServoYll = 75
        """
        Servos are default to Servo X-axis is assigned (servo-0) GPIO 4
            Servo-Y axis is assigned (servo-1) GPIO 17
        """
        self.servo_X = Servo(0, self._ServoXul, self._ServoXll)
        self.servo_Y = Servo(1, self._ServoYul, self._ServoYll)
Ejemplo n.º 20
0
 def __init__(self):
     '''
     小车功能初始化
     '''
     Fire.__init__(self, Fire_Pin=37)
     Hc_Sr501.__init__(self, Hc_Sr501_Pin=32)
     Moter.__init__(self,
                    Left_Pin=33,
                    Left_Pwm_Pin=35,
                    Right_Pin=29,
                    Right_Pwm_Pin=31)
     Tem_Hum.__init__(self, Tem_Hum_Pin=36)
     Servo.__init__(self, Servo_Pin=40)
     Mq_2.__init__(self, Mq_2_Pin=38)
     Network.Get_Socket(self, Socket_Ip="10.4.250.237", Sockeet_Port=2001)
Ejemplo n.º 21
0
def main():
    car = Car()
    ultrasound = Ultrasound()
    font_servo = Servo(0)

    time.sleep(2)
    safe_distance = 70
    while True:

        # 1. 是否符合前进条件
        dis = ultrasound.test()
        if dis < safe_distance:
            # 移动
            d1, d2, d3, d4 = probe(ultrasound, font_servo)
            if max(d1, d2, d3, d4) < 100:
                car.back(0.2)
            if d1 == max(d1, d2, d3, d4):
                car.right(0.5)
            if d2 == max(d1, d2, d3, d4):
                car.right(0.25)
            if d3 == max(d1, d2, d3, d4):
                car.left(0.25)
            if d4 == max(d1, d2, d3, d4):
                car.left(0.5)

        time.sleep(1)
        # 向前移动
        # 重新获取距离
        distance = ultrasound.test()
        while distance > safe_distance:
            car.run()
            time.sleep(0.1)
            distance = ultrasound.test()
        else:
            car.stop()
Ejemplo n.º 22
0
    def MoveServo(self, Servo, Angle):

        if Servo.getAngle() != Angle:
            Servo.SetAngle(Angle)

            #voor TestDoeleiden
            return "Moved servo to: " + Angle
Ejemplo n.º 23
0
    def __init__(self):
        if MovementController.__instance is not None:  # if the constructor of this class is called more than once
            raise Exception("This class is a singleton!")
        else:
            # puts the created instance in the "__instance" variable
            MovementController.__instance = self
            # array that holds the pins of all the motors
            pinArray = [[20, 23, 24], [16, 5, 6]]
            # creates instances of the Motor class to control the physical motors
            self.leftMotor = Motor(pinArray[0])
            self.rightMotor = Motor(pinArray[1])

            self.servos = AX12.Ax12()  # list of all servos
            # creates instances of the Servo class to control the physical servos
            self.armServo = Servo(self.servos, 3, 426, 576, 100)
            self.gripServo = Servo(self.servos, 4, 280, 574, 512)
Ejemplo n.º 24
0
    def __init__(self, driver_board, left_or_right, front_or_back, hip_knee_indices: HipKneeIndices, **kwargs):

        assert left_or_right in LeftOrRight, 'Leg side must be in LeftOrRight! Val : {}'.format(left_or_right)
        assert front_or_back in FrontOrBack, 'front_or_back must be in FrontOrBack! Val : {}'.format(front_or_back)

        self.left_or_right = left_or_right
        self.front_or_back = front_or_back
        self.driver_board = driver_board

        self.hip_servo_index = hip_knee_indices.hip
        self.knee_servo_index = hip_knee_indices.knee

        self.incr_pause = kwargs.get('incr_pause', 0.005)
        self.phase_incr = 0.05 * 2 * pi
        self.direction = 1  # should determine this from left_or_right etc

        # I have to think about this side/direction stuff. Maybe it's a bad
        # way of thinking about it, when it's really just 1D anyway (so really
        # just diff phases, which I already have).
        self.hip = Servo(
            self.driver_board,
            self.hip_servo_index,
            direction=1,
            servo_type='hip',
            **kwargs
        )
        self.knee = Servo(
            self.driver_board,
            self.knee_servo_index,
            direction=1,
            servo_type='knee',
            **kwargs
        )

        # Also, I DEFINITELY need to set their phases separately here. I think
        # it'll probably be another top-down thing where the leg gets a phase,
        # and then uses that to set the phases of the servos.
        self.servos = [self.hip, self.knee]
        self.phase = 0.
        self.hip_phase_offset = 0.

        if self.front_or_back == FrontOrBack.FRONT:
            self.knee_phase_offset = 1 * pi/2
        else:
            self.knee_phase_offset = 3 * pi/2
Ejemplo n.º 25
0
def Servo(*args, **kwargs):
    try:
        from Servo import Servo as Servo
        return Servo(*args, **kwargs)
    except Exception as e:
        print "Failed to Initialize Servo"
        print "Error: %s" % e.message
        print "Using Mock Servo"
        from Servo_Mock import Servo as Servo_Mock
        return Servo_Mock()
Ejemplo n.º 26
0
class Leg(object):
    """
    Setting the addresses, channels and default position of the 3 servos of the leg.
    """

    def __init__(self, AddressArray, ChannelArray, DefaultPulseArray, inverse=False, offset=[0,0,0]):
        self._AddressArray = AddressArray
        self._ChannelArray = ChannelArray
        self._DefaultPulseArray = DefaultPulseArray
        self._inverse = inverse
        self._offset = offset

    # Receiving variables, this will be set into arrays. If there aren't 3 input variables of the address
    # it will print an Error.
        if len(self._AddressArray) == 3:
            self._Hip = Servo(self._AddressArray[0], self._ChannelArray[0], self._DefaultPulseArray[0], self._inverse, self._offset[0])
            self._Knee = Servo(self._AddressArray[1], self._ChannelArray[1], self._DefaultPulseArray[1], self._inverse, self._offset[1])
            self._Ankle = Servo(self._AddressArray[2], self._ChannelArray[2],self._DefaultPulseArray[2], self._inverse, self._offset[2]) #3 keer nul? aangepast naar 0,1,2
        else:
            print "-----------Error Creating leg-----------"

    # Setting the Hip to the position of the given pulse
    def moveHip(self, Pulse):
        self._Hip.setPulse(Pulse)

    # Setting the Knee to the position of the given pulse
    def moveKnee(self, Pulse):
        self._Knee.setPulse(Pulse)

    # Setting the Ankle to the position of the given pulse
    def moveAnkle(self, Pulse):
        self._Ankle.setPulse(Pulse)

    # Setting the full Leg to the starting position of 375 pulses
    def defaultPos(self):
        self.moveHip(self._Hip, self._DefaultPulseArray[0])
        self.moveKnee(self._Knee, self._DefaultPulseArray[1])
        self.moveAnkle(self._Ankle, self._DefaultPulseArray[2])

    def getHip(self):
        return self._Hip.getPulse()

    def getKnee(self):
        return self._Knee.getPulse()

    def getAnkle(self):
        return self._Ankle.getPulse()
Ejemplo n.º 27
0
def test_full_fk_ik(c=[0, 1, 2]):
	length = {
		'coxaLength': 26,
		'femurLength': 42,
		'tibiaLength': 63
	}
	channels = c
	leg = Leg(length, channels)

	servorange = [[-90, 90], [-90, 90], [-180, 0]]
	for s in range(0, 3):
		leg.servos[s].setServoRangeAngle(*servorange[s])

	for i in range(1, 3):
		for a in range(-70, 70, 10):
			angles = [0, 0, -10]
			if i == 2: a -= 90
			angles[i] = a
			pts = leg.fk(*angles)
			angles2 = leg.ik(*pts)
			pts2 = leg.fk(*angles2)

			angle_error = np.linalg.norm(np.array(angles) - np.array(angles2))
			pos_error = np.linalg.norm(pts - pts2)
			# print(angle_error, pos_error)

			if angle_error > 0.0001:
				print('Angle Error')
				printError(pts, pts2, angles, angles2)
				exit()

			elif pos_error > 0.0001:
				print('Position Error')
				printError(pts, pts2, angles, angles2)
				exit()

			else:
				print('Good: {} {} {}  error(deg,mm): {} {}'.format(angles[0], angles[1], angles[2], angle_error, pos_error))
				leg.move(*pts)
				time.sleep(0.1)

	Servo.all_stop()
Ejemplo n.º 28
0
def parse(obj):
    if "body_part" not in obj:
        raise Exception("Could not parse JSON object")

    if "disabled" in obj:
        if obj["disabled"] is True:
            return

    servos.append(
        Servo(obj["id"], obj["min_pulse"], obj["max_pulse"], obj["min_degree"],
              obj["max_degree"], obj["default_angle"], obj["body_part"]))
Ejemplo n.º 29
0
	def __init__(self, debug=False, db="config", bus_number=1, channel=FRONT_WHEEL_CHANNEL):
		''' setup channels and basic stuff '''
		self.db = fileDB(db=db)
		self.channel = channel
		self.straight_angle = 90
		self.turning_max = 45
		self.DEBUG_INFO = 'DEBUG "front_wheels.py":'
		# self.turning_offset = int(self.db.get('turning_offset', default_value=0))
		self.turning_offset = 25
		self.wheel = Servo(self.channel, bus_number=bus_number, offset=self.turning_offset)
		self.DEBUG = debug
		self.set_turning_max(45)
		self.min_angle=30
		self.max_angle=150.
		if self.DEBUG:
			print(self.DEBUG_INFO, 'Front wheel PWM channel:', self.channel)
			print(self.DEBUG_INFO, 'Front wheel offset value:', self.turning_offset)
		self.angle = {"left":self.min_angle, "straight":self.straight_angle, "right":self.max_angle}
		if self.DEBUG:
			print(self.DEBUG_INFO, 'left angle: %s, straight angle: %s, right angle: %s' % (self.angle["left"], self.angle["straight"], self.angle["right"]))
Ejemplo n.º 30
0
	def initPeriph(self):
		"""
		Initialise tout les périphériques servant à l'application (Laser, Servos, Manette nunchuk...) et instancie les objets globals.
		"""
		try:
			# GPIOs
			Methods.writeFile("/sys/class/gpio/export", "66", "a")
			Methods.writeFile("/sys/class/gpio/export", "69", "a")
			Methods.writeFile("/sys/class/gpio/export", "45", "a")

			# PWMs
			Methods.writeFile("/sys/devices/bone_capemgr.8/slots", "am33xx_pwm", "a")

			# UART
			Methods.writeFile("/sys/devices/bone_capemgr.8/slots", "BB-UART1", "a")

			sleep(2)

		except IOError:
			print "La configuration des périphériques a déjà été faites"

		# Création du laser
		self.laser = Laser(45)

		# Création de la gestion d'indication des modes
		self.modeObj = Mode(66, 69)

		# Création des servos
		self.verticalServo = Servo("P9_14", "10", False)
		self.horizontalServo = Servo("P9_22", "11", True)

		# Création de l'UART
		self.uart = UART()

		# Création du Nunchuk
		try:
			self.nunchuk = Nunchuk()
			self.nunchukIsConnected = True
		except IOError:
			print "Erreur de connexion avec la manette \"Nunchuk\""
			self.nunchukIsConnected = False
Ejemplo n.º 31
0
 def SetServos(self):
     servos = []
     servos.append(Servo('Deg0', 'Deg180', 2))  #SRV1
     servos.append(Servo('Deg180', 'Deg90', 3))  #SRV2
     servos.append(Servo('Deg90', 'Deg180', 4))  #SRV3
     servos.append(Servo('Deg180', 'Deg90', 14))  #SRV4
     servos.append(Servo('Deg180', 'Deg90', 15))  #SRV5
     servos.append(Servo('Deg90', 'Deg180', 18))  #SRV6
     servos.append(Servo('Deg180', 'Deg90', 23))  #SRV7
     return servos
Ejemplo n.º 32
0
    def __init__(self):
        #Initiate servo objects
        baseServo = Servo(self.BasePanIndex, self.BaseHomeAngle,
                          self.BaseMinAngle, self.BaseMaxAngle)
        shoulderServo = Servo(self.ShoulderIndex, self.ShoulderHomeAngle,
                              self.ShoulderMinAngle, self.ShoulderMaxAngle)
        elbowServo = Servo(self.ElbowIndex, self.ElbowHomeAngle,
                           self.ElbowMinAngle, self.ElbowMaxAngle)
        wristPanServo = Servo(self.WristPanIndex, self.WristPanHomeAngle,
                              self.WristPanMinAngle, self.WristPanMaxAngle)
        wristServo = Servo(self.WristIndex, self.WristHomeAngle,
                           self.WristMinAngle, self.WristMaxAngle)
        gripperServo = Servo(self.GripperIndex, self.GripperHomeAngle,
                             self.GripperMinAngle, self.GripperMaxAngle)

        #Populate servo list
        self.m_servoList = [
            baseServo, shoulderServo, elbowServo, wristPanServo, wristServo,
            gripperServo
        ]
        #set current servo index
        self.m_currentServoIndex = 0

        #Move to home position
        self.HomePosition()
Ejemplo n.º 33
0
    def __init__(self, printer):
        super(HPX2MaxPlugin, self).__init__(printer)

        logging.debug('Activating ' + __PLUGIN_NAME__ + ' plugin...')

        # Add the servo
        self.head_servo = Servo(
            int(
                self.printer.config.get(
                    type(self).__name__, 'servo_channel', 1)), 500, 750, 90,
            10)

        # Load the config for angles
        self.t0_angle = float(
            self.printer.config.get(
                type(self).__name__, 'extruder_0_angle', 20))
        self.t1_angle = float(
            self.printer.config.get(
                type(self).__name__, 'extruder_1_angle', 175))

        # Override the changing tool command to trigger the servo
        self.printer.processor.override_command('T0', T0_HPX2Max(self.printer))
        self.printer.processor.override_command('T1', T1_HPX2Max(self.printer))
Ejemplo n.º 34
0
 def __init__(self):
     _servo_type = {"Base": 0, "Leg": 2, "Arm": 4, "Neck": 6, "Head": 8}
     self.pwm = PWM.PCA9685(
     )  # Initialise the PCA9685 using the default address (0x40).
     self.pwm.set_pwm_freq(50)
     # Create all the servos
     self.servos = {}
     for i in _servo_type.keys():
         self.servos[i] = Servo(self.pwm, _servo_type[i])
         print 'Servo "' + i + '" on channel ' + str(_servo_type[i])
     self.scanThread = None
     self.scan_event = threading.Event()
     self.angryLock = threading.Lock()
     self.angry = False
Ejemplo n.º 35
0
class Head(object):

    configuration = conf("Settings.ini")

    jaw = Servo(
        channel = int(configuration.get_setting("Jaw","channel")),
        frequency = int(configuration.get_setting("Jaw","frequency")),
        minPulseLength = int(configuration.get_setting("Jaw","minPulseLength")),
        maxPulseLength = int(configuration.get_setting("Jaw","maxPulseLength"))
    )

    left_antenna = Servo(
        channel = int(configuration.get_setting("LeftAntenna","channel")),
        frequency = int(configuration.get_setting("LeftAntenna","frequency")),
        minPulseLength = int(configuration.get_setting("LeftAntenna","minPulseLength")),
        maxPulseLength = int(configuration.get_setting("LeftAntenna","maxPulseLength"))
    )

    right_antenna = Servo(
        channel = int(configuration.get_setting("RightAntenna","channel")),
        frequency = int(configuration.get_setting("RightAntenna","frequency")),
        minPulseLength = int(configuration.get_setting("RightAntenna","minPulseLength")),
        maxPulseLength = int(configuration.get_setting("RightAntenna","maxPulseLength"))
    )

    left_brow_Vertical = Servo(
        channel = int(configuration.get_setting("LeftBrowVertical","channel")),
        frequency = int(configuration.get_setting("LeftBrowVertical","frequency")),
        minPulseLength = int(configuration.get_setting("LeftBrowVertical","minPulseLength")),
        maxPulseLength = int(configuration.get_setting("LeftBrowVertical","maxPulseLength"))
    )

    right_brow_vertical = Servo(
        channel = int(configuration.get_setting("RightBrowVertical","channel")),
        frequency = int(configuration.get_setting("RightBrowVertical","frequency")),
        minPulseLength = int(configuration.get_setting("RightBrowVertical","minPulseLength")),
        maxPulseLength = int(configuration.get_setting("RightBrowVertical","maxPulseLength"))
    )

    left_brow_horizontal = Servo(
        channel = int(configuration.get_setting("LeftBrowHorizontal","channel")),
        frequency = int(configuration.get_setting("LeftBrowHorizontal","frequency")),
        minPulseLength = int(configuration.get_setting("LeftBrowHorizontal","minPulseLength")),
        maxPulseLength = int(configuration.get_setting("LeftBrowHorizontal","maxPulseLength"))
    )

    right_brow_horizontal = Servo(
        channel = int(configuration.get_setting("RightBrowHorizontal","channel")),
        frequency = int(configuration.get_setting("RightBrowHorizontal","frequency")),
        minPulseLength = int(configuration.get_setting("RightBrowHorizontal","minPulseLength")),
        maxPulseLength = int(configuration.get_setting("RightBrowHorizontal","maxPulseLength"))
    )
Ejemplo n.º 36
0
class Leg:

    # constructor
    def __init__(self, name, shoulder_pin, knee_pin, ankle_pin):
        self.name = name
        self.shoulder = Servo(shoulder_pin)
        self.knee = Servo(knee_pin)
        self.ankle = Servo(ankle_pin)

    # step(self)
    # step forward
    def step(self):
        shoulder.setPosition(180)
        knee.setPosition(180)
        ankle.setPosition(180)
        print("Stepping {} forward".format(name))

    # pull(self)
    # pull forward
    def pull(self):
        shoulder.setPosition(90)
        knee.setPosition(90)
        ankle.setPosition(90)
        print("Pulling {} backward".format(name))

    # driveMode(self)
    # set leg to drive position
    def driveMode(self):
        # for now, use name of leg to determine if in
        # front or back. Eventually should use Leg
        # Manager for this
        if(self.name == "FR" || "FL")
            shoulder.setPosition(90)
            knee.setPosition(60)
            ankle.setPosition(120)
        if(self.name == "BR" || "BL")
            shoulder.setPosition(90)
            knee.setPosition(60)
            ankle.setPosition(30)
        

    # cleanUp(self)
    # stop all servos in Leg
    def cleanUp(self):
        shoulder.stop
        knee.stop
        ankle.stop

    # calibrate(self)
    # for initial calibration of leg joints using command line
    def calibrate(self):
        s_value = int(raw_input("s_value: "))
        k_value = int(raw_input("k_value: "))
        a_value = int(raw_input("a_value: "))
        self.shoulder.setPosition(s_value)
        self.knee.setPosition(k_value)
        self.ankle.setPosition(a_value)
Ejemplo n.º 37
0
    def __init__(self, printer):
        super(HPX2MaxPlugin, self).__init__(printer)

        logging.debug('Activating '+__PLUGIN_NAME__+' plugin...')

        # Add the servo
        self.head_servo = Servo(int(self.printer.config.get(type(self).__name__, 'servo_channel', 1)),500,750,90,10) 

        # Load the config for angles
        self.t0_angle = float(self.printer.config.get(type(self).__name__, 'extruder_0_angle', 20))
        self.t1_angle = float(self.printer.config.get(type(self).__name__, 'extruder_1_angle', 175))

        # Override the changing tool command to trigger the servo
        self.printer.processor.override_command('T0', T0_HPX2Max(self.printer))
        self.printer.processor.override_command('T1', T1_HPX2Max(self.printer))
Ejemplo n.º 38
0
def main():

    GPIO.setmode(GPIO.BOARD)
    get_out = False
    raspberry_pin = 11
    my_servo = Servo(raspberry_pin)

    while not get_out:

        angle = input("Write an angle: ")
        my_servo.write_angle(int(angle))

        duty_cycke = input("Write duty cyccle: ")
        my_servo.write_duty_cycle(float(duty_cycke))
Ejemplo n.º 39
0
def run (self):
    # s_joint = Servo(channel=0, min=250, max=327, freq=50)
    # s_joint = Servo(channel=0, min=250, max=530, freq=100) # mg995
    # time.sleep(4)
    s_tilt = Servo(channel=1, min=250, max=327, freq=50)
    time.sleep(1)
    # s_pan = Servo(channel=2, min=250, max=380, freq=50)
    s_pan = Servo(channel=2, min=300, max=380, freq=50)
    # put your init and global variables here
    # main loop
    while 1:
        headPosition = self.getInputs().headPosition
        lampPosition = self.getInputs().lampPosition
        s_tilt.move_to(1 - headPosition.y)
        s_pan.move_to(1- headPosition.x)
        # s_joint.move_to(lampPosition.z)

        time.sleep(0.5)

    pwm = PWM(0x40)
    pwm.setPWMFreq(50)
    pwm.softwareReset()
Ejemplo n.º 40
0
    def parse(self, obj):
        # build a Servo object out of the data read from the JSON
        # then append it into the global "servos" list
        if "body_part" not in obj:
            raise Exception("Could not parse JSON object")

        if "disabled" in obj and obj["disabled"] == True:
            d = True
        else:
            d = False

        self.all_servos.append(
            Servo(obj["id"],
                  obj["min_pulse"],
                  obj["max_pulse"],
                  obj["min_angle"],
                  obj["max_angle"],
                  obj["default_angle"],
                  obj["body_part"],
                  disabled=d))
Ejemplo n.º 41
0
	def __init__(self, channels):
		"""
		Each leg has 3 servos/channels
		"""
		if not len(channels) == 3:
			raise LegException('len(channels) != 3')

		Servo.bulkServoWrite = True

		# angle offsets to line up with fk
		self.servos = []
		for i in range(0, 3):
			self.servos.append(Servo(channels[i]))
			self.servos[i].setServoLimits(self.s_offsets[i], *self.s_limits[i])

		self.sit_angles = self.convertRawAngles(*self.sit_raw)
		# initAngles = [0, 0, -90+30]  # nico legs have a small offset
		# initAngles = [0, 45, -90+30-45]  # nico legs have a small offset
		initAngles = self.convertRawAngles(*self.stand_raw)
		self.stand_angles = initAngles
		self.foot0 = self.fk(*initAngles)  # rest/idle position of the foot/leg
Ejemplo n.º 42
0
    def __init__(self, printer):
        super(DualServoPlugin, self).__init__(printer)

        logging.debug('Activating '+__PLUGIN_NAME__+' plugin...')

        # Add the servo
        channel     = self.printer.config.get(type(self).__name__, 'servo_channel')
        pulse_min   = self.printer.config.getfloat(type(self).__name__, 'pulse_min')
        pulse_max = self.printer.config.getfloat(type(self).__name__, 'pulse_max')
        angle_min = self.printer.config.getfloat(type(self).__name__, 'angle_min')
        angle_max = self.printer.config.getfloat(type(self).__name__, 'angle_max')
        angle_init = self.printer.config.getfloat(type(self).__name__, 'extruder_0_angle')

        self.head_servo = Servo(channel, pulse_min, pulse_max, angle_min, angle_max, angle_init)

        # Load the config for angles
        self.t0_angle = float(self.printer.config.getfloat(type(self).__name__, 'extruder_0_angle'))
        self.t1_angle = float(self.printer.config.get(type(self).__name__, 'extruder_1_angle'))

        # Override the changing tool command to trigger the servo
        self.printer.processor.override_command('T0', T0_DualServo(self.printer))
        self.printer.processor.override_command('T1', T1_DualServo(self.printer))
Ejemplo n.º 43
0
import time

from Adafruit_PWM_Servo_Driver import PWM
from Servo import Servo


if __name__ == '__main__':
    # mg995
    servo2 = Servo(channel=0, min=150, max=530, freq=100) # mg995

    # sg90
    # Servo pan
    # servo2 = Servo(channel=2, min=250, max=380, freq=50)

    # sg90 2
    # servo tilt
    # servo3 = Servo(channel=1, min=240, max=327, freq=50)

    time.sleep(4)
    servo2.move_to(0)
    # # servo3.move_to(0)
    # #
    time.sleep(4)
    servo2.move_to(1)
    #
    # time.sleep(0.1)
    # servo2.move_to(0)
    # # servo3.move_to(1)
    #
    # #
    time.sleep(4)
Ejemplo n.º 44
0
#!/usr/bin/python

import RPi.GPIO as GPIO
import time

from Servo import Servo


ele = Servo(pin=25)
rot = Servo(pin=24)

ele.step_arriba();




GPIO.cleanup()
Ejemplo n.º 45
0
class App():
	"""
	Démarre une application qui permet de gérer la position sur deux axes d'un laser via des servomoteurs.
	"""
	def __init__(self):
		"""
		Méthode "main" de l'application.
		"""
		print "Initialisation des péripheriques..."
		self.initPeriph()
		print "Initialisation des servos..."
		self.initServos()
		print "Initialisation terminée !"

		print "Programme prêt !"
		print ""

		#################################################
					
		self.mode = "Manual"
		self.modeObj.setMode(self.mode)

		# Création des formes
		self.shape = Shape(self.horizontalServo, self.verticalServo, self.laser, self.uart)

		try:
			while 1:
				self.reading = self.uart.read()
				if self.reading != "Up" and self.reading != "Left" and self.reading != "Right" and self.reading != "Down" and self.reading != "Center" and self.reading != "Laser" and self.reading != "":
					self.mode = self.reading
					self.modeObj.setMode(self.mode)

				if self.mode == "Auto":
					self.autoMode()
				elif self.mode == "Semi-auto":
					self.semiAutoMode()
				elif self.mode == "Manual":
					self.manualMode()
				elif self.mode == "Wii":
					if self.nunchukIsConnected:
						self.wiiMode()
					else:
						print "La manette \"Nunchuk\" n'est pas connectée"
						self.mode = "Manual"
				else:
					sleep(2)
					self.mode = "Auto"
					self.modeObj.setMode(self.mode)
		except KeyboardInterrupt:
			print "Arret du programme..."
			self.modeObj.setMode("Stop")
			self.laser.OFF()
			self.initServos()
			print "Programme arreté"

	def initPeriph(self):
		"""
		Initialise tout les périphériques servant à l'application (Laser, Servos, Manette nunchuk...) et instancie les objets globals.
		"""
		try:
			# GPIOs
			Methods.writeFile("/sys/class/gpio/export", "66", "a")
			Methods.writeFile("/sys/class/gpio/export", "69", "a")
			Methods.writeFile("/sys/class/gpio/export", "45", "a")

			# PWMs
			Methods.writeFile("/sys/devices/bone_capemgr.8/slots", "am33xx_pwm", "a")

			# UART
			Methods.writeFile("/sys/devices/bone_capemgr.8/slots", "BB-UART1", "a")

			sleep(2)

		except IOError:
			print "La configuration des périphériques a déjà été faites"

		# Création du laser
		self.laser = Laser(45)

		# Création de la gestion d'indication des modes
		self.modeObj = Mode(66, 69)

		# Création des servos
		self.verticalServo = Servo("P9_14", "10", False)
		self.horizontalServo = Servo("P9_22", "11", True)

		# Création de l'UART
		self.uart = UART()

		# Création du Nunchuk
		try:
			self.nunchuk = Nunchuk()
			self.nunchukIsConnected = True
		except IOError:
			print "Erreur de connexion avec la manette \"Nunchuk\""
			self.nunchukIsConnected = False
	def initServos(self):
		"""
		Initialise les servomoteurs à la position 0,0 et éteint le laser.
		"""
		self.horizontalServo.setPosition(0)
		self.verticalServo.setPosition(0)
		Methods.sendData(self.uart, 0, 0, self.laser.getState())

	def autoMode(self):
		"""
		Gére le mode "Auto" de l'application. Le mode "Auto" réalise une succession de toutes les formes pré-enregistré en boucle.
		"""
		while 1:
			self.laser.ON()
			print "Dessine un carré"
			self.shape.startShape("Square", 2)
			self.initServos()

			self.reading = self.uart.read()
			if self.reading == "Auto":
				self.reading = self.uart.read()
			if self.uart.inWaiting() != 0:
				break
			sleep(2)
			print "Dessine un losange"
			self.shape.startShape("Diamond", 3)
			self.initServos()

			if self.uart.inWaiting() != 0:
				break
			sleep(2)
			print "Dessine un cercle"
			self.shape.startShape("Circle", 3)
			self.initServos()
			
			if self.uart.inWaiting() != 0:
				break
			sleep(2)
			print "Dessine un infini"
			self.shape.startShape("Infinite", 3)
			self.initServos()
			sleep(2)
			break
	def semiAutoMode(self):
		"""
		Gére le mode "Semi-auto" de l'application. Le mode "Semi-auto" réalise les formes demandées via l'IHM.
		"""
		self.laser.OFF()
		horizontalPositionTable = []
		verticalPositionTable = []
		laserStateTable = []

		while 1:
			pointDatas = self.uart.read()
			if pointDatas == "Finish":
				break
			if pointDatas != "Semi-auto":
				if pointDatas == "Square":
					print "Dessine un carré"
					self.shape.startShape(pointDatas, 1)
					self.initServos()
				elif pointDatas == "Diamond":
					print "Dessine un losange"
					self.shape.startShape(pointDatas, 1)
					self.initServos()
				elif pointDatas == "Circle":
					print "Dessine un cercle"
					self.shape.startShape(pointDatas, 1)
					self.initServos()
				elif pointDatas == "Infinite":
					print "Dessine un infini"
					self.shape.startShape(pointDatas, 1)
					self.initServos()
				else:
					pointDatasTable = pointDatas.split(",")
					horizontalPositionTable.append(int(pointDatasTable[0])*2)
					verticalPositionTable.append(int(pointDatasTable[1])*2)
					laserStateTable.append(pointDatasTable[2])

		if len(horizontalPositionTable) != 0:
			print "Dessine une forme personnalisé"
			self.shape.start(horizontalPositionTable, verticalPositionTable, laserStateTable)
		self.laser.OFF()
		self.mode = "Manual"
	def manualMode(self):
		"""
		Gére le mode "Manuel" de l'application. Le mode "Manuel" réalise les mouvements simples via l'IHM (Déplacement vert le Haut, la droite, allumer le laser...).
		"""
		for i in range(100):
			self.reading = self.uart.read()
			hPos = self.horizontalServo.getPosition()
			vPos = self.verticalServo.getPosition()
			if self.reading != "":
				if self.reading == "Up":
					vPos+=2
				elif self.reading == "Left":
					hPos-=2
				elif self.reading == "Right":
					hPos+=2
				elif self.reading == "Down":
					vPos-=2
				elif self.reading == "Center":
					hPos = 0
					vPos = 0
				elif self.reading == "Laser":
					if self.laser.getState() == "0":
						self.laser.ON()
					else:
						self.laser.OFF()
				else:
					break
				
				self.horizontalServo.setPosition(hPos)
				self.verticalServo.setPosition(vPos)
				
			Methods.sendData(self.uart, self.horizontalServo.getPosition(), self.verticalServo.getPosition(), self.laser.getState())
			sleep(0.01)
	def wiiMode(self):
		"""
		Gére le mode "Wii" de l'application. Le mode "Wii" réalise les actions via la manette nunchuk.
		"""
		buttons = self.nunchuk.getButtons()
		button_c = buttons[0]
		button_z = buttons[1]

		if button_z:
			self.laser.ON()
		else:
			self.laser.OFF()

		if button_c:
			axis = self.nunchuk.getAccelerometerAxis()
			hAngle = int(axis[0]*1.8-216.0)# Min=70 ; Max=170
			vAngle = int(axis[1]*-1.8+225.0)# Min=175 ; Max=75
		else:
			position = self.nunchuk.getJoystickPosition()
			hAngle = int(position[0]*0.93-123.58)# Min=36 ; Max=229
			vAngle = int(position[1]*0.95-120.48)# Min=32 ; Max=221

		self.horizontalServo.setPosition(hAngle)
		self.verticalServo.setPosition(vAngle)
		Methods.sendData(self.uart, self.horizontalServo.getPosition(), self.verticalServo.getPosition(), self.laser.getState())
		sleep(0.01)
Ejemplo n.º 46
0
 def setup_servo(self, config):
     physical_pin = config.getint('Servo', 'physical_pin')
     servo_speed_180 = config.getfloat('Servo', 'speed_180')
     duty_min = config.getfloat('Servo', 'duty_min')
     duty_max = config.getfloat('Servo', 'duty_max')
     self.servo = Servo(physical_pin, servo_speed_180, duty_min, duty_max)
Ejemplo n.º 47
0
#WriringPi pins
THROTTLE_PIN = 1
STEERING_PIN = 0
FRONT_LIGHT_PIN = 2
BACK_LIGHT_PIN = 3

# IO Modes on Raspberry
OUTPUT = 1
INPUT = 0

print "[..] ", "Init Wiring Pi Lib"
wiringpi2.wiringPiSetup()

print "[..] ", "Init Servos"

throttle = Servo(THROTTLE_PIN)
steering = Servo(STEERING_PIN)

wiringpi2.pwmSetMode(PWM_MODE_MS)

print "[..] ", "Init LEDs"

frontLed = LED(FRONT_LIGHT_PIN)
backLed = LED(BACK_LIGHT_PIN)


### Open a Socket
s = socket.socket()
print "[..] New Socket on localhost:5556"
host = ''   # Get local machine name
port = 5556 # Reserve a port for your service.
Ejemplo n.º 48
0
else:
    obj = '/dev/ttyAMA0'
=======
if True:
    obj = '/dev/ttyAMA0'
    fake = False
else:
    obj = SerialFake
    fake = True
>>>>>>> e9ffd7ef371450a29e24962357af5942710c8547

serial = Serial()
serial.connect(obj)

<<<<<<< HEAD
servo = Servo(serial, fakemode = Config.FAKE_MODE)
=======
servo = Servo(serial, fakemode = fake)
>>>>>>> e9ffd7ef371450a29e24962357af5942710c8547
servo.init()

#ServoSeq = Servo_Sequencer(servo)
#ServoSeq.daemon = True;
#ServoSeq.start()

#sspeed = Servo_SpeedStep(servo)
sspeed = Servo_SpeedDelay(servo)
sspeed.start()

<<<<<<< HEAD
[ sspeed.setSpeed(i, i * 7) for i in range(0, 14) ]
Ejemplo n.º 49
0
#!/usr/bin/python

from Servo import Servo
from Position import Position

servo0 = Servo(0)
servo1 = Servo(1)
p = Position()

while True:
        (x_pos, y_pos, z_pos) = p.get_position()
        print("X:{} Y:{} Z:{}".format(x_pos, y_pos, z_pos))

        x_pos_target  = int((1.0 + x_pos) * 50)
        y_pos_target  = int((1.0 + y_pos) * 50)

        servo0.move_to_position(x_pos_target)
        servo1.move_to_position(y_pos_target)
Ejemplo n.º 50
0
import time

from Adafruit_PWM_Servo_Driver import PWM
from Servo import Servo


if __name__ == '__main__':
    # mg995
    servo = Servo(channel=0, min=115, max=460, freq=50) # mg995

    # sg90
    servo1 = Servo(channel=1, min=190, max=550, freq=50)

    # sg90 2
    servo2 = Servo(channel=2, min=190, max=550, freq=50)

    time.sleep(0.5)

    for i in range(11):
        # print i
        dc = i / 10.0
        print dc
        servo.move_to(dc)
        servo1.move_to(dc)
        servo2.move_to(dc)
        time.sleep(0.3)

    # time.sleep(0.5)
    # servo.move_to(0)
    # servo1.move_to(0)
    # servo2.move_to(0)
Ejemplo n.º 51
0
    def __init__(self):
        """ Init """
        logging.info("Redeem initializing " + version)

        printer = Printer()
        self.printer = printer
        
        # check for config files
        if not os.path.exists("/etc/redeem/default.cfg"):
            logging.error("/etc/redeem/default.cfg does not exist, this file is required for operation")
            sys.exit() # maybe use something more graceful?
            
        # Parse the config files.
        printer.config = CascadingConfigParser(
            ['/etc/redeem/default.cfg', '/etc/redeem/printer.cfg',
             '/etc/redeem/local.cfg'])

        # Find out which capes are connected
        self.printer.config.parse_capes()
        self.revision = self.printer.config.replicape_revision
        if self.revision:
            logging.info("Found Replicape rev. " + self.revision)
            Path.set_axes(5)
        else:
            logging.warning("Oh no! No Replicape present!")
            self.revision = "0A4A"
            # We set it to 5 axis by default
            Path.set_axes(5)
        if self.printer.config.reach_revision:
            Path.set_axes(8)
            logging.info("Found Reach rev. "+self.printer.config.reach_revision)

        # Get the revision and loglevel from the Config file
        level = self.printer.config.getint('System', 'loglevel')
        if level > 0:
            logging.getLogger().setLevel(level)

        if self.revision in ["00A4", "0A4A", "00A3"]:
            PWM.set_frequency(100)
        elif self.revision in ["00B1"]:
            PWM.set_frequency(1000)

        # Init the Paths
        Path.axis_config = printer.config.getint('Geometry', 'axis_config')

        # Init the end stops
        EndStop.callback = self.end_stop_hit
        EndStop.inputdev = self.printer.config.get("Endstops", "inputdev")
        for es in ["X1", "X2", "Y1", "Y2", "Z1", "Z2"]:
            pin = self.printer.config.get("Endstops", "pin_"+es)
            keycode = self.printer.config.getint("Endstops", "keycode_"+es)
            invert = self.printer.config.getboolean("Endstops", "invert_"+es)
            self.printer.end_stops[es] = EndStop(pin, keycode, es, invert)

        # Backwards compatibility with A3
        if self.revision == "00A3":
            # Init the 5 Stepper motors (step, dir, fault, DAC channel, name)
            printer.steppers["X"] = Stepper_00A3("GPIO0_27", "GPIO1_29", "GPIO2_4" , 0, "X", 0, 0)
            printer.steppers["Y"] = Stepper_00A3("GPIO1_12", "GPIO0_22", "GPIO2_5" , 1, "Y", 1, 1)
            printer.steppers["Z"] = Stepper_00A3("GPIO0_23", "GPIO0_26", "GPIO0_15", 2, "Z", 2, 2)
            printer.steppers["E"] = Stepper_00A3("GPIO1_28", "GPIO1_15", "GPIO2_1" , 3, "E", 3, 3)
            printer.steppers["H"] = Stepper_00A3("GPIO1_13", "GPIO1_14", "GPIO2_3" , 4, "H", 4, 4)
        elif self.revision == "00B1":
            # Init the 5 Stepper motors (step, dir, fault, DAC channel, name)
            printer.steppers["X"] = Stepper_00B1("GPIO0_27", "GPIO1_29", "GPIO2_4" , 11, 0, "X", 0, 0)
            printer.steppers["Y"] = Stepper_00B1("GPIO1_12", "GPIO0_22", "GPIO2_5" , 12, 1, "Y", 1, 1)
            printer.steppers["Z"] = Stepper_00B1("GPIO0_23", "GPIO0_26", "GPIO0_15", 13, 2, "Z", 2, 2)
            printer.steppers["E"] = Stepper_00B1("GPIO1_28", "GPIO1_15", "GPIO2_1" , 14, 3, "E", 3, 3)
            printer.steppers["H"] = Stepper_00B1("GPIO1_13", "GPIO1_14", "GPIO2_3" , 15, 4, "H", 4, 4)
        else:
            # Init the 5 Stepper motors (step, dir, fault, DAC channel, name)
            printer.steppers["X"] = Stepper_00A4("GPIO0_27", "GPIO1_29", "GPIO2_4" , 0, 0, "X", 0, 0)
            printer.steppers["Y"] = Stepper_00A4("GPIO1_12", "GPIO0_22", "GPIO2_5" , 1, 1, "Y", 1, 1)
            printer.steppers["Z"] = Stepper_00A4("GPIO0_23", "GPIO0_26", "GPIO0_15", 2, 2, "Z", 2, 2)
            printer.steppers["E"] = Stepper_00A4("GPIO1_28", "GPIO1_15", "GPIO2_1" , 3, 3, "E", 3, 3)
            printer.steppers["H"] = Stepper_00A4("GPIO1_13", "GPIO1_14", "GPIO2_3" , 4, 4, "H", 4, 4)

            if printer.config.reach_revision:
                printer.steppers["A"] = Stepper_00A4("GPIO2_2" , "GPIO1_18", "GPIO0_14", 5, 5, "A", 5, 5)
                printer.steppers["B"] = Stepper_00A4("GPIO1_14", "GPIO0_5" , "GPIO0_14", 6, 6, "B", 6, 6)
                printer.steppers["C"] = Stepper_00A4("GPIO0_3" , "GPIO3_19", "GPIO0_14", 7, 7, "C", 7, 7)


        # Enable the steppers and set the current, steps pr mm and
        # microstepping
        for name, stepper in self.printer.steppers.iteritems():
            stepper.in_use = printer.config.getboolean('Steppers', 'in_use_' + name)
            stepper.direction = printer.config.getint('Steppers', 'direction_' + name)
            stepper.has_endstop = printer.config.getboolean('Endstops', 'has_' + name)
            stepper.set_current_value(printer.config.getfloat('Steppers', 'current_' + name))
            stepper.set_steps_pr_mm(printer.config.getfloat('Steppers', 'steps_pr_mm_' + name))
            stepper.set_microstepping(printer.config.getint('Steppers', 'microstepping_' + name))
            stepper.set_decay(printer.config.getboolean("Steppers", "slow_decay_" + name))
            # Add soft end stops
            Path.soft_min[Path.axis_to_index(name)] = printer.config.getfloat('Endstops', 'soft_end_stop_min_' + name)
            Path.soft_max[Path.axis_to_index(name)] = printer.config.getfloat('Endstops', 'soft_end_stop_max_' + name)

        # Commit changes for the Steppers
        #Stepper.commit()

        # Delta printer setup
        if Path.axis_config == Path.AXIS_CONFIG_DELTA:
            opts = ["Hez", "L", "r", "Ae", "Be", "Ce", "A_radial", "B_radial", "C_radial", "A_tangential", "B_tangential", "C_tangential" ]
            for opt in opts:
                Delta.__dict__[opt] = printer.config.getfloat('Delta', opt)

            Delta.recalculate()

        # Set up cold ends
        path = self.printer.config.get('Cold-ends', 'path', 0)
        if os.path.exists(path):
            self.printer.cold_ends.append(ColdEnd(path, "Cold End 0"))
            logging.info("Found Cold end on " + path)
        else:
            logging.info("No cold end present in path: " + path)

        # Make Mosfets, thermistors and extruders
        heaters = ["E", "H", "HBP"]
        if self.printer.config.reach_revision:
            heaters.extend(["A", "B", "C"])
        for e in heaters:
            # Mosfets
            channel = self.printer.config.getint("Heaters", "mosfet_"+e)
            self.printer.mosfets[e] = Mosfet(channel)
            # Thermistors
            adc = self.printer.config.get("Heaters", "path_adc_"+e)
            chart = self.printer.config.get("Heaters", "temp_chart_"+e)
            self.printer.thermistors[e] = Thermistor(adc, "MOSFET "+e, chart)

            # Extruders
            onoff = self.printer.config.getboolean('Heaters', 'onoff_'+e)
            prefix =  self.printer.config.get('Heaters', 'prefix_'+e)
            if e != "HBP":
                self.printer.heaters[e] = Extruder(
                                        self.printer.steppers[e],
                                        self.printer.thermistors[e], 
                                        self.printer.mosfets[e], e, onoff)
            else:
                self.printer.heaters[e] = HBP(
                                        self.printer.thermistors[e],
                                        self.printer.mosfets[e], onoff)
            self.printer.heaters[e].prefix = prefix
            self.printer.heaters[e].P = self.printer.config.getfloat('Heaters', 'pid_p_'+e)
            self.printer.heaters[e].I = self.printer.config.getfloat('Heaters', 'pid_i_'+e)
            self.printer.heaters[e].D = self.printer.config.getfloat('Heaters', 'pid_d_'+e)

        # Init the three fans. Argument is PWM channel number
        self.printer.fans = []
        if self.revision == "00A3":
            self.printer.fans.append(Fan(0))
            self.printer.fans.append(Fan(1))
            self.printer.fans.append(Fan(2))
        elif self.revision == "0A4A":
            self.printer.fans.append(Fan(8))
            self.printer.fans.append(Fan(9))
            self.printer.fans.append(Fan(10))
        elif self.revision == "00B1":
            self.printer.fans.append(Fan(7))
            self.printer.fans.append(Fan(8))
            self.printer.fans.append(Fan(9))
            self.printer.fans.append(Fan(10))


        for f in self.printer.fans:
            f.set_value(0)

        # Init the servos
        printer.servos = []
        servo_nr = 0
        while(printer.config.has_option("Servos", "servo_"+str(servo_nr)+"_enable")):
            if printer.config.getboolean("Servos", "servo_"+str(servo_nr)+"_enable"):
                channel = printer.config.getint("Servos", "servo_"+str(servo_nr)+"_channel")
                angle_off = printer.config.getint("Servos", "servo_"+str(servo_nr)+"_angle_off")
                s = Servo(channel, 500, 750, angle_off)
                s.angle_on = printer.config.getint("Servos", "servo_"+str(servo_nr)+"_angle_on")
                s.angle_off = angle_off
                printer.servos.append(s)
                logging.info("Added servo "+str(servo_nr))
            servo_nr += 1

        # Connect thermitors to fans
        for t, therm in self.printer.heaters.iteritems():
            for f, fan in enumerate(self.printer.fans):
                if self.printer.config.getboolean('Cold-ends', "connect-therm-{}-fan-{}".format(t, f)):
                    c = Cooler(therm, fan, "Cooler-{}-{}".format(t, f), False)
                    c.ok_range = 4
                    c.set_target_temperature(60)
                    c.enable()
                    self.printer.coolers.append(c)
                    logging.info("Cooler connects therm {} with fan {}".format(t, f))

        # Connect fans to M106
        printer.controlled_fans = []
        for i, fan in enumerate(self.printer.fans):
            if self.printer.config.getboolean('Cold-ends', "add-fan-{}-to-M106".format(i)):
                printer.controlled_fans.append(self.printer.fans[i])
                logging.info("Added fan {} to M106/M107".format(i))

        # Connect the cold end 0 to fan 2
        # This is very "Thing" specific, should be configurable somehow.
        if len(self.printer.cold_ends):
            self.printer.coolers.append(
                Cooler(self.printer.cold_ends[0], self.printer.fans[2],
                       "Cooler0", False))
            self.printer.coolers[0].ok_range = 4
            self.printer.coolers[0].set_target_temperature(60)
            self.printer.coolers[0].enable()

        # Make a queue of commands
        self.printer.commands = JoinableQueue(10)

        # Make a queue of commands that should not be buffered
        self.printer.sync_commands = JoinableQueue()
        self.printer.unbuffered_commands = JoinableQueue(10)

        # Bed compensation matrix
        Path.matrix_bed_comp = printer.load_bed_compensation_matrix()
        Path.matrix_bed_comp_inv = np.linalg.inv(Path.matrix_bed_comp)
        logging.debug("Loaded bed compensation matrix: \n"+str(Path.matrix_bed_comp))

        for axis in printer.steppers.keys():
            i = Path.axis_to_index(axis)
            Path.max_speeds[i] = printer.config.getfloat('Planner', 'max_speed_'+axis.lower())
            Path.home_speed[i] = printer.config.getfloat('Homing', 'home_speed_'+axis.lower())
            Path.home_backoff_speed[i] = printer.config.getfloat('Homing', 'home_backoff_speed_'+axis.lower())
            Path.home_backoff_offset[i] = printer.config.getfloat('Homing', 'home_backoff_offset_'+axis.lower())
            Path.steps_pr_meter[i] = printer.steppers[axis].get_steps_pr_meter()
            Path.backlash_compensation[i] = printer.config.getfloat('Steppers', 'backlash_'+axis.lower())

        dirname = os.path.dirname(os.path.realpath(__file__))

        # Create the firmware compiler
        pru_firmware = PruFirmware(
            dirname + "/firmware/firmware_runtime.p",
            dirname + "/firmware/firmware_runtime.bin",
            dirname + "/firmware/firmware_endstops.p",
            dirname + "/firmware/firmware_endstops.bin",
            self.revision, self.printer.config, "/usr/bin/pasm")

        printer.maxJerkXY = printer.config.getfloat('Planner', 'maxJerk_xy')
        printer.maxJerkZ = printer.config.getfloat('Planner', 'maxJerk_z')
        printer.maxJerkEH = printer.config.getfloat('Planner', 'maxJerk_eh')
        
        printer.move_cache_size = printer.config.getfloat('Planner', 'move_cache_size')
        printer.print_move_buffer_wait = printer.config.getfloat('Planner', 'print_move_buffer_wait')
        printer.min_buffered_move_time = printer.config.getfloat('Planner', 'min_buffered_move_time')
        printer.max_buffered_move_time = printer.config.getfloat('Planner', 'max_buffered_move_time')

        self.printer.processor = GCodeProcessor(self.printer)
        self.printer.plugins = PluginsController(self.printer)

        # Path planner
        travel_default = False
        center_default = False
        home_default = False
        self.printer.path_planner = PathPlanner(self.printer, pru_firmware)
        for axis in printer.steppers.keys():
            i = Path.axis_to_index(axis)
            
            printer.acceleration[Path.axis_to_index(axis)] = printer.config.getfloat(
                                                        'Planner', 'acceleration_' + axis.lower())
                                                        
            # Sometimes soft_end_stop aren't defined to be at the exact hardware boundary.
            # Adding 100mm for searching buffer.
            if printer.config.has_option('Geometry', 'travel_' + axis.lower()):
                printer.path_planner.travel_length[axis] = printer.config.getfloat('Geometry', 'travel_' + axis.lower())
            else:
                printer.path_planner.travel_length[axis] = (Path.soft_max[i] - Path.soft_min[i]) + .1
                if axis in ['X','Y','Z']:                
                    travel_default = True
            
            if printer.config.has_option('Geometry', 'offset_' + axis.lower()):
                printer.path_planner.center_offset[axis] = printer.config.getfloat('Geometry', 'offset_' + axis.lower())
            else:
                printer.path_planner.center_offset[axis] =(Path.soft_min[i] if Path.home_speed[i] > 0 else Path.soft_max[i])
                if axis in ['X','Y','Z']:                
                    center_default = True

            if printer.config.has_option('Homing', 'home_' + axis.lower()):
                printer.path_planner.home_pos[axis] = printer.config.getfloat('Homing', 'home_' + axis.lower())
            else:
                printer.path_planner.home_pos[axis] = printer.path_planner.center_offset[axis]
                if axis in ['X','Y','Z']:                   
                    home_default = True
                
        if Path.axis_config == Path.AXIS_CONFIG_DELTA:
            if travel_default:
                logging.warning("Axis travel (travel_*) set by soft limits, manual setup is recommended for a delta")
            if center_default:
                logging.warning("Axis offsets (offset_*) set by soft limits, manual setup is recommended for a delta")
            if home_default:
                logging.warning("Home position (home_*) set by soft limits or offset_*")
                logging.info("Home position will be recalculated...")
        
                # convert home_pos to effector space
                Az = printer.path_planner.home_pos['X']
                Bz = printer.path_planner.home_pos['Y']
                Cz = printer.path_planner.home_pos['Z']
                
                z_offset = Delta.vertical_offset(Az,Bz,Cz) # vertical offset
                xyz = Delta.forward_kinematics2(Az, Bz, Cz) # effector position
                
                # The default home_pos, provided above, is based on effector space 
                # coordinates for carriage positions. We need to transform these to 
                # get where the effector actually is.
                xyz[2] += z_offset
                for i, a in enumerate(['X','Y','Z']):
                    printer.path_planner.home_pos[a] = xyz[i]
                
                logging.info("Home position = %s"%str(printer.path_planner.home_pos))

        # Enable PWM and steppers
        printer.enable = Enable("P9_41")
        printer.enable.set_enabled()

        # Set up communication channels
        printer.comms["USB"] = USB(self.printer)
        printer.comms["Eth"] = Ethernet(self.printer)

        if Pipe.check_tty0tty() or Pipe.check_socat():
            printer.comms["octoprint"] = Pipe(printer, "octoprint")
            printer.comms["toggle"] = Pipe(printer, "toggle")
            printer.comms["testing"] = Pipe(printer, "testing")
            printer.comms["testing_noret"] = Pipe(printer, "testing_noret")
            # Does not send "ok"
            printer.comms["testing_noret"].send_response = False
        else:
            logging.warning("Neither tty0tty or socat is installed! No virtual tty pipes enabled")