示例#1
0
    def __init__(self):
        self.i2c = busio.I2C(SCL, SDA)
        self.pca = PCA9685(self.i2c)
        self.pca.frequency = 50
        self.br_motor = servo.Servo(self.pca.channels[0],
                                    actuation_range=119,
                                    min_pulse=700,
                                    max_pulse=2300)
        self.fr_motor = servo.Servo(self.pca.channels[1],
                                    actuation_range=119,
                                    min_pulse=700,
                                    max_pulse=2300)
        self.fl_motor = servo.Servo(self.pca.channels[2],
                                    actuation_range=119,
                                    min_pulse=700,
                                    max_pulse=2300)
        self.bl_motor = servo.Servo(self.pca.channels[3],
                                    actuation_range=119,
                                    min_pulse=700,
                                    max_pulse=2300)

        self.rc = Roboclaw("/dev/ttyS0", 115200)
        i = self.rc.Open()

        self.d1 = 7.254  #C/L to corner wheels
        self.d2 = 10.5  #mid axle to fwd axle
        self.d3 = 10.5  #mid axle to rear axle
        self.d4 = 10.073  #C/L to mid wheels

        self.fl_motor.angle = bias
        self.fr_motor.angle = bias
        self.bl_motor.angle = bias
        self.br_motor.angle = bias
示例#2
0
 def __init__(self, hat, channel_x, channel_y, location, host, port):
     # self.channel_x = channel_x
     # self.channel_y = channel_y
     self.host = host
     self.port = port
     self.location = "/dev/video" + str(location)
     self.servo_x = servo.Servo(hat.channels[channel_x])
     self.servo_y = servo.Servo(hat.channels[channel_y])
示例#3
0
    def __init__(self, container):
        i2c = busio.I2C(SCL, SDA)
        self.pca = PCA9685(i2c)
        self.pca.frequency = 50

        self.left = servo.Servo(self.pca.channels[1])
        self.mid = servo.Servo(self.pca.channels[0],
                               min_pulse=500,
                               max_pulse=2000)
        self.right = servo.Servo(self.pca.channels[2])

        self.arduino = container.get('arduinoStepper')
示例#4
0
def Servo_move_test(Direction):
    servox = servo.Servo(pca.channels[0])
    servoy = servo.Servo(pca.channels[1])
    try:
        Direction = eval(Direction)
        #print (Direction[0])
        #print (type(Direction[0]))
        servox.angle = int(Direction[0]['x_angle'])
        print(Direction[0]['x_angle'])
        servoy.angle = int(Direction[0]['y_angle'])
        print(Direction[0]['y_angle'])
    except ValueError:
        print("Angle out of range")
示例#5
0
    def __init__(self):

        print("Initializing Servos")
        self._i2c_bus0 = (busio.I2C(board.SCL_1, board.SDA_1))
        print("Initializing ServoKit")
        self._pca_1 = PCA9685(self._i2c_bus0, address=0x40)
        self._pca_1.frequency = 60
        self._pca_2 = PCA9685(self._i2c_bus0, address=0x41)
        self._pca_2.frequency = 60
        self._servos = list()
        for i in range(0, 12):
            if i < 6:
                self._servos.append(
                    servo.Servo(self._pca_1.channels[i],
                                min_pulse=771,
                                max_pulse=2740))
            else:
                self._servos.append(
                    servo.Servo(self._pca_2.channels[i],
                                min_pulse=771,
                                max_pulse=2740))

        # servos.append(servo.Servo(pca[int(i/6)].channels[int(i%6)], min_pulse=460, max_pulse=2440)) CL motor
        # servos.append(servo.Servo(pca[int(i/6)].channels[int(i%6)], min_pulse=771, max_pulse=2740)) MG996R
        print("Done initializing")

        #1 by 12 array
        self.MOTOR_LEG_FRONT = 0
        self.MOTOR_LEG_BACK = 0
        self.MOTOR_LEG_LEFT = 0
        self.MOTOR_LEG_RIGHT = 0
        self.MOTOR_LEG_SHOULDER = 0
        self.MOTOR_LEG_UPPER = 0
        self.MOTOR_LEG_LOWER = 0

        #4 by 3 matrix
        self.SIM_LEG_FRONT = 0
        self.SIM_LEG_BACK = 6
        self.SIM_LEG_LEFT = 0
        self.SIM_LEG_RIGHT = 1
        self.SIM_LEG_THETA1 = 0
        self.SIM_LEG_THETA2 = 1
        self.SIM_LEG_THETA3 = 2

        # [0]~[2] : 왼쪽 앞 다리 // [3]~[5] : 오른쪽 앞 다리 // [6]~[8] : 왼쪽 뒷 다리 // [9]~[11] : 오른쪽 뒷 다리
        # centered position perpendicular to the ground
        self._servo_offsets = [180, 90, 90, 1, 90, 90, 180, 90, 90, 1, 90, 90]
        self._val_list = np.zeros(12)  #[ x for x in range(12) ]

        # All Angles for Leg 3 * 4 = 12 length
        self._thetas = []
    def __init__(self, smokeyGpio, exit_condition):
        self.__keyboardController = KeyboardController(exit_condition)

        self.__smokeyGpio = smokeyGpio
        self.__greenArm = SmokeyArm(self.__pca, self.__kit.motor3, 12,
                                    servo.Servo(self.__pca.channels[2]),
                                    servo.Servo(self.__pca.channels[5]), 30, 0,
                                    False, 6)
        self.__redArm = SmokeyArm(self.__pca, self.__kit.motor2, 22,
                                  servo.Servo(self.__pca.channels[1]), None,
                                  30, 0, False, 10)
        self.__blueArm = SmokeyArm(self.__pca, self.__kit.motor1, 21,
                                   servo.Servo(self.__pca.channels[0]),
                                   servo.Servo(self.__pca.channels[4]), 30, 0,
                                   True)
示例#7
0
    def __init__(self):
        # init i2c
        i2c = busio.I2C(SCL, SDA)

        # init PCA
        self.pca = PCA9685(i2c)
        self.pca.frequency = 50

        self.servo_steer = servo.Servo(self.pca.channels[0])
        self.esc = servo.ContinuousServo(self.pca.channels[1])

        # init model

        model = neural_network.Net()
        self.model = model.eval()
        self.model.load_state_dict(torch.load('model/autopilot.pt'))
        self.device = torch.device('cuda')
        self.model.to(self.device)

        # init vars
        self.temp = 0
        mean = 255.0 * np.array([0.485, 0.456, 0.406])
        stdev = 255.0 * np.array([0.229, 0.224, 0.225])
        self.normalize = torchvision.transforms.Normalize(mean, stdev)
        self.angle_out = 0

        # init Camera
        self.cam = camera.Camera()

        # initial content
        with open('control_data.csv', 'w') as f:
            f.write('date,steering,speed\n')
示例#8
0
def set_servo(x):
    """
    :param i: fuction to define a servo with the parameter of board pin
    :return: a servo
    """
    pwm = pulseio.PWMOut(x, duty_cycle=2**15, frequency=50)
    return servo.Servo(pwm, min_pulse=620, max_pulse=2320)
    def send(self, value):
        # Control as a Servo
        print("Controlling servo [" + format(hex(self.cardAddr)) + ":" +
              format(self.channelNr) + "] with angle = " + str(value))

        myCardAddr = hex(self.cardAddr)
        if (boards.get(myCardAddr)):

            #print("Board found ++++++++++++++")
            #specific pulse range ---
            try:

                # initiate servo variable
                theServo = servo.Servo(
                    boards[myCardAddr].channels[self.channelNr],
                    min_pulse=50,
                    max_pulse=2500)

                newAngle = (value / 270.0) * 180
                stepAngle = 0.25
                cmdAngle = theServo.angle

                # Check out of range values
                if (cmdAngle < 0):
                    cmdAngle = 0
                if (cmdAngle > 180):
                    cmdAngle = 180

                #print("floatValue= {0}".format(value), " Angle desired= {0}".format(newAngle), " Actual angle= {0}".format(cmdAngle))

                if newAngle > cmdAngle:
                    # Increase
                    while cmdAngle < newAngle:
                        #print("passing command of angle {0}".format(cmdAngle), " Servo Angle={0}".format(theServo.angle), " Step is {0}".format(stepAngle))
                        theServo.angle = cmdAngle
                        cmdAngle += stepAngle

                elif newAngle < cmdAngle:
                    # Decrease
                    while cmdAngle > newAngle:
                        #print("passing command of angle {0}".format(cmdAngle), " Servo Angle={0}".format(theServo.angle), " Step is {0}".format(stepAngle))
                        theServo.angle = cmdAngle
                        cmdAngle -= stepAngle

                else:
                    theServo.angle = newAngle
                    print("no command of angle {0}".format(cmdAngle),
                          " Servo Angle={0}".format(theServo.angle),
                          " Step is {0}".format(stepAngle))

                theServo.angle = newAngle

            except Exception as e:
                print(format(e))

            except:
                pass

        else:
            print("No board matching --------")
    def __init__(self):
        self.steering_angle_max = 30.0
        self.servo_center = 90.0
        self.servoPIN = 0
        self.motorPIN = 1
        self.motorMax = 0.1

        print ( " Initializing motors " )

        # Startup the i2c interface
        i2c = busio.I2C(SCL, SDA)

        # Create a simple PCA9685 class instance
        self.pca = PCA9685(i2c)
        self.pca.frequency = 50

        # Start the PWM for the motor at 0
        self.motor = self.pca.channels[self.motorPIN]
        self.motor.duty_cycle = 0

        # Setup the steering servo and set to center
        self.steering = servo.Servo(self.pca.channels[self.servoPIN])
        self.steering.angle = self.servo_center

        print ( " Motors initialized " )
示例#11
0
 def __init__(self, servo_id: int, debug_log: bool = False):
     self._servo_id = servo_id
     self._angle = 0
     self._debug_log = debug_log
     self._driver = servo.Servo(Servo.pca.channels[self._servo_id],
                                min_pulse=Servo.min_pulse,
                                max_pulse=Servo.max_pulse)
示例#12
0
    def __init__(self):
        i2c_bus = busio.I2C(SCL, SDA)
        self.pca = PCA9685(i2c_bus)
        self.pca.frequency = 150
        self.maxPulse = 2500
        self.minPulse = 600
        self.angleInit = [5, 90, 50, 90]
        self.angleCurrent = [0, 0, 0, 0]
        self.angleMin = [5, 0, 50, 60]
        self.angleMax = [65, 180, 150, 110]
        self.angleStep = [5, 5, 5, 4]
        self.servo0 = servo.Servo(self.pca.channels[0], min_pulse=600, max_pulse=2500)
        self.servo1 = servo.Servo(self.pca.channels[2], min_pulse=600, max_pulse=2500)
        self.servo2 = servo.Servo(self.pca.channels[3], min_pulse=600, max_pulse=2500)
        self.servo3 = servo.Servo(self.pca.channels[4], min_pulse=600, max_pulse=2500)

        self.servos =[self.servo0, self.servo1, self.servo2, self.servo3]
示例#13
0
def extGate():
    ext_srv = servo.Servo(pca.channels[3])
    for i in range(90):
        ext_srv.angle = i
    while (GPIO.input(ext_ir) != 1):
        time.sleep(0.5)
    time.sleep(2.0)
    for i in range(90):
        ext_srv.angle = 90 - i
示例#14
0
    def setUpClass(cls):
        i2c = busio.I2C(SCL, SDA)

        # Create a simple PCA9685 class instance.
        cls.pca = PCA9685(i2c)
        cls.pca.frequency = 50

        cls.servo = servo.Servo(cls.pca.channels[0],
                                min_pulse=500,
                                max_pulse=2500)
示例#15
0
 def __init__(self, servo_locs, frequency=50):
     if not simpleMode:
         self.pca = PCA9685(i2c)
         self.pca.frequency = frequency
         self.servos = [None] * 16
         for i, (loc, s_type) in enumerate(servo_locs):
             self.servos.append((servo.Servo(
                 pca.channels[loc],
                 settings["servo_settings"][s_type]["min_pulse"],
                 settings["servo_settings"][s_type]["max_pulse"]), s_type))
示例#16
0
def entGate():
    ent_srv = servo.Servo(pca.channels[7])
    for i in range(90):
        ent_srv.angle = i
        #gate is open at this point, updating database:
    db.child("GateStatus").set(noEntry)
    while (GPIO.input(ent_ir) != 1):
        time.sleep(0.5)
    time.sleep(2.0)
    for i in range(90):
        ent_srv.angle = 90 - i
 def __init__(self,
              channel,
              initial_angle=180,
              min_pulse=1000,
              max_pulse=2000):
     self.servo = servo.Servo(pca.channels[channel],
                              min_pulse=min_pulse,
                              max_pulse=max_pulse)
     self.min_pulse = min_pulse
     self.max_pulse = max_pulse
     self.angle = initial_angle
    def __init__(self):
        self.i2c_bus = busio.I2C(SCL, SDA)
        self.pca = PCA9685(self.i2c_bus)
        self.pca.frequency = 60

        self.steering = servo.Servo(self.pca.channels[0])
        self.streering_angle = 90

        rospy.init_node('rccar_interface', anonymous=True)
        rospy.Subscriber('move_cmd', MoveCommand, self.message_callback)
        rospy.spin()
    def __init__(self, container):
        self.serial = serial.Serial("/dev/ttyAMA0", 115200)
        self.websocket = container.get('websocket')
        self.positionWatcher = container.get('positionWatcher')
        self.logger = self.container.get('logger').get('Lidar')

        i2c = busio.I2C(SCL, SDA)
        self.pca = PCA9685(i2c)
        self.pca.frequency = 50

        self.servo = servo.Servo(self.pca.channels[8])
        self.servo.set_pulse_width_range(400, 2600)
示例#20
0
def Servo_move(Direction):
    servox = servo.Servo(pca.channels[0])
    servoy = servo.Servo(pca.channels[1])
    try:
        if Direction == "L":
            # 90度置中點
            for i in range(0, 90):
                servox.angle = 90 - i
        if Direction == "R":
            for i in range(90, 180):
                servox.angle = i
        if Direction == "D":
            for i in range(0, 90):
                servoy.angle = 90 - i
        if Direction == "U":
            for i in range(90, 180):
                servoy.angle = i
    except ValueError:
        print("Angle out of range")
    finally:
        pca.deinit()
示例#21
0
  def __init__(self):
    global GPIO, PWM
    from periphery import GPIO, PWM, GPIOError
    from adafruit_motor import servo
    import pulseio

# create a PWMOut object on Pin PWM3.
    pwm1 = pulseio.PWMOut(board.PWM1, duty_cycle=2 ** 15, frequency=50)
    pwm2 = pulseio.PWMOut(board.PWM2, duty_cycle=2 ** 15, frequency=50)
    pwm3 = pulseio.PWMOut(board.PWM3, duty_cycle=2 ** 15, frequency=50)

# Create a servo object, my_servo.
    self.my_servo1 = servo.Servo(pwm1)
    self.my_servo2 = servo.Servo(pwm2)
    self.my_servo3 = servo.Servo(pwm3)

    def initPWM(pin):
      pwm = PWM(pin, 0)
      pwm.frequency = 1e3
      pwm.duty_cycle = 0
      pwm.enable()
      return pwm
    try:
      self._LEDs = [GPIO(86, "out"),
                    GPIO(77,"out"),
                    initPWM(0),
                    GPIO(140, "out"),
                    GPIO(73,"out"),
]
      self._buttons = [GPIO(141, "in"),
                       GPIO(8, "in"),
                       GPIO(7, "in"),
                       GPIO(138, "in"),
                       GPIO(6, "in"),
]
    except GPIOError as e:
      print("Unable to access GPIO pins. Did you run with sudo ?")
      sys.exit(1)

    super(UI_EdgeTpuDevBoard, self).__init__()
示例#22
0
def Servo_move_Y(Id, Direction):
    servo = servo.Servo(pca.channels[Id])
    try:
        if Direction == "D":
            # 90度置中點
            for i in range(0, 90):
                servo.angle = 90 - i
        if Direction == "U":
            for i in range(90, 180):
                servo.angle = i
    except ValueError:
        print("Angle out of range")
    finally:
        pca.deinit()
示例#23
0
    def __init__(self):
        # init i2c bus
        self.i2c = busio.I2C(SCL, SDA)

        # init PWM controller
        self.pwm = PCA9685(self.i2c)
        self.pwm.frequency = 50

        # init drive motors on pins listed in constants.py
        self.frontLeft = self.pwm.PWMChannel(self.pwm, LF_PORT)
        self.centerLeft = self.pwm.PWMChannel(self.pwm, LC_PORT)
        self.rearLeft = self.pwm.PWMChannel(self.pwm, LR_PORT)

        self.frontRight = self.pwm.PWMChannel(self.pwm, RF_PORT)
        self.centerRight = self.pwm.PWMChannel(self.pwm, RC_PORT)
        self.rearRight = self.pwm.PWMChannel(self.pwm, RC_PORT)

        # init cornersteer servos on pins listed in constants.py
        # TODO: Verify and set servo pulse limits
        self.servoFrontLeft = servo.Servo(self.pwm.channels[CS_LF_PORT])
        self.servoRearLeft = servo.Servo(self.pwm.channels[CS_LR_PORT])

        self.servoFrontRight = servo.Servo(self.pwm.channels[CS_RF_PORT])
        self.servoRearRight = servo.Servo(self.pwm.channels[CS_RR_PORT])
示例#24
0
    def __init__(
            self,
            i2c,
            num_motor=8,
            motor_enable=(1, 1, 1, 1, 1, 1, 1, 1),
            motor_min_angle=(0, 0, 50, 0, 0, 0, 0, 0),
            motor_max_angle=(150, 150, 140, 60, 60, 0, 0, 0),
            motor_default_angle=(100, 100, 90, 30, 30, 0, 0, 0),
    ):

        # 0. arguments
        self.i2c = i2c
        self.num_motor = num_motor
        self.motor_enable = list(motor_enable)
        self.min_angle_limit = list(motor_min_angle)
        self.max_angle_limit = list(motor_max_angle)
        self.motor_default_angle = list(motor_default_angle)
        self.motor_direction = [-1, 1, 1, 1, -1, 0, 0, 0]

        # 1. Static Variables
        self.pwm_min = 580  # min pwm, sg-90 : -90,
        self.pwm_max = 2480  # max pwm, sg-90 : +90,
        self.min_trj_time = 0.3
        self.max_trj_time = 5
        self.control_time = 0.02

        # 2. variables
        self.servos = []
        self.cur_angles = self.motor_default_angle
        self.force_stop_flag = False
        self.sleep_mode_register = None
        self.operation_mode_register = 33

        # 3. Objects

        # 4. Init Functions
        self.pca = PCA9685(self.i2c)
        self.sleep_mode_register = (self.operation_mode_register & 0x7F) | 0x10
        self.pca.frequency = 50
        self.servos = []
        for i in range(8):
            self.servos.append(
                servo.Servo(
                    self.pca.channels[i],
                    min_pulse=self.pwm_min,
                    max_pulse=self.pwm_max,
                ))
        self.sleep()
def servo_init():
    i2c = busio.I2C(SCL, SDA)
    pca = PCA9685(i2c)
    pca.frequency = 50

    a = 800  #Pulso minimo
    b = 2700  #Pulso maximo
    pca_channels = [0, 8, 2, 3, 4, 5, 15]
    #home_degree = [140,30,140,50,150,60]
    global servos
    servos = []
    for i in range(7):
        servos.append(
            servo.Servo(pca.channels[pca_channels[i]],
                        min_pulse=a,
                        max_pulse=b))
示例#26
0
  def __init__(self, name, num, speed, min, max, initial_position):
    dev = '/dev/serial0'
    self.servo = servo.Servo(pca.channels[num], min_pulse=min, max_pulse=max)
    self.debug = False

    self.speed = speed
    self.name = name
    self.num = num
    self.min = min
    self.max = max
    print("Servo %s setup with min: %s and max: %s" % (num, min, max))
    self.target_position = None
    self.current_position = None
    self.last_time = None

    all_motors.update({name: self})
    self.setToPosition(initial_position, fastest=True)
示例#27
0
def on_message(client, userdata, message):
    channel = int(message.topic.split("/")[2])
    name = str(message.topic.split("/")[3])
    value = int(message.payload.decode("utf-8"))
    index = int(channel / 16)
    channel = channel % 16

    print(f"Device:{index} Channel:{channel} {name}:{value}")

    if (name == 'duty_cycle'):
        c = devices[index].channels[channel]
        # c = pca.channels[channel]
        c.duty_cycle = value
    elif (name == 'angle'):
        s = servo.Servo(devices[index].channels[channel],
                        min_pulse=600,
                        max_pulse=2600)
        s.angle = value
示例#28
0
    def __init__(self, addr, N_servos):

        # I don't want to deal with passing hex shit, so just pass addr
        # as an int.
        self.addr = addr
        self.N_servos = N_servos

        assert addr in [40, 41], 'Invalid I2C addr! : {}'.format(addr)
        assert (N_servos >= 1) and (N_servos <= 16), (
            'N_servos out of bds in DriverBoard.__init__!' +
            'Val is {}, must be >=1, <={}'.format(N_servos, N_servos))
        '''if addr == 40:
            self.dev = Device(0x40)
        if addr == 41:
            self.dev = Device(0x41)

        self.dev.set_pwm_frequency(50)'''
        i2c = busio.I2C(SCL, SDA)

        # Create a simple PCA9685 class instance.
        self.dev = PCA9685(i2c, address=65)
        self.dev.frequency = 50

        self.servos = [servo.Servo(self.dev.channels[i]) for i in range(16)]
 def __init__(self, container):
     i2c = busio.I2C(SCL, SDA)
     self.pca = PCA9685(i2c)
     self.pca.frequency = 50
     self.servo = servo.Servo(self.pca.channels[8])
import time
import board
import pulseio
import touchio
import neopixel
from adafruit_motor import servo

touch_1 = board.A0
#sets A0 to touch one
touch_2 = board.A1
#sets A1 to touch 2
pwm = pulseio.PWMOut(board.A2, duty_cycle=2**15, frequency=50)
#sets the frequency and sets up duty cicle to go out of A2 with pulsie io and PWM
dot = neopixel.NeoPixel(board.NEOPIXEL, 1)
my_servo = servo.Servo(pwm)
touch1 = touchio.TouchIn(touch_1)
touch2 = touchio.TouchIn(touch_2)
angle = 0

while True:
    if touch1.value:
        print("wow!")
        #for angle in range(0, 180, 5):
        if angle < 180:
            angle += 10
        my_servo.angle = angle
        time.sleep(0.05)
    if touch2.value:
        print("spicy!")
        if angle > 0:
            angle -= 10