Beispiel #1
0
    def __init__(self):
        """Constructs Arm class.
        """
        servo_info = {}
        servo_info['s1'] = {
            'function': 'waist',
            'default_value': 90.0,
            'min_value': 0.0,
            'max_value': 180.0
        }
        servo_info['s2'] = {
            'function': 'shoulder',
            'default_value': 150.0,
            'min_value': 0.0,
            'max_value': 180.0
        }
        servo_info['s3'] = {
            'function': 'elbow',
            'default_value': 35.0,
            'min_value': 0.0,
            'max_value': 180.0
        }
        servo_info['s4'] = {
            'function': 'wrist_roll',
            'default_value': 140.0,
            'min_value': 0.0,
            'max_value': 180.0
        }
        servo_info['s5'] = {
            'function': 'wrist_pitch',
            'default_value': 85.0,
            'min_value': 0.0,
            'max_value': 180.0
        }
        servo_info['s6'] = {
            'function': 'grip',
            'default_value': 80.0,
            'min_value': 0.0,
            'max_value': 180.0
        }
        self._servo_info = servo_info

        segment_info = {}
        segment_info['seg1'] = {
            'base_servo': 's1',
            'segment_length': 1.0,
            'axis_of_rotation': 'Z'
        }
        segment_info['seg2'] = {
            'base_servo': 's2',
            'segment_length': 120.0,
            'axis_of_rotation': 'Y'
        }
        segment_info['seg3'] = {
            'base_servo': 's3',
            'segment_length': 1.0,
            'axis_of_rotation': 'Y'
        }
        segment_info['seg4'] = {
            'base_servo': 's4',
            'segment_length': 1.0,
            'axis_of_rotation': 'X'
        }
        segment_info['seg5'] = {
            'base_servo': 's5',
            'segment_length': 1.0,
            'axis_of_rotation': 'Y'
        }
        self._segment_info = arm_info

        current_angles = {}
        current_angles['s1'] = 0.0
        current_angles['s2'] = 0.0
        current_angles['s3'] = 0.0
        current_angles['s4'] = 0.0
        current_angles['s5'] = 0.0
        current_angles['s6'] = 0.0
        self._current_angles = current_angles

        self._servo_speed = 1.0
        self._solver = Solver(servo_info, segment_info)
        self._kit = ServoKit(channels=16)
        self.configure_board()
Beispiel #2
0
import pygame

import sys
from adafruit_servokit import ServoKit
import os
# set path to current dir for csv file

sleep(1)

os.environ["SDL_VIDEODRIVER"] = "dummy"

#controller Disconnect
controller = ControllerInput()

# setting 16 channels for hat as well as i2c address to 60
kit = ServoKit(channels=16, address=96)

#Pinout map
'''
0 left motor
1 right motor
2 left motor 2
3 right motor 2

4 arm motor 1
5 arm motor 2
6 servo 1
7 servo 2test

'''
Beispiel #3
0
def configPWMBoard(pwmConfig):
    return ServoKit(channels=pwmConfig.channels,
                    address=pwmConfig.address,
                    frequency=pwmConfig.frequency)
Beispiel #4
0
"""
This is the test script and diary of getting the servo hat to work.

For starters we're following this tutorial.
https://learn.adafruit.com/adafruit-16-channel-pwm-servo-hat-for-raspberry-pi/using-the-python-library

2021-10-31, JDL: Retry after earlier setbacks.

"""

from adafruit_servokit import ServoKit
import time

kit = ServoKit(channels=16, address=0x41)  # Don't forget we moved the address.

servo_loop_quit = False

while servo_loop_quit != True:

    print('Want to move the arms? (y/n)')

    user_input = input()

    try:
        if user_input == 'y':

            user_input = input("0 or 1?")

            if int(user_input) == 0:
                ZeroArmAngle = int(input("Angle of servo 0?"))
                kit.servo[0].angle = ZeroArmAngle
Beispiel #5
0
 def init_kit(channels, pulse_width_range):
     kit = ServoKit(channels=channels)
     for i in range(channels):
         kit.servo[i].set_pulse_width_range(*pulse_width_range)
         kit.servo[i].throttle = 1
Beispiel #6
0
from time import sleep
from adafruit_servokit import ServoKit
from ultrasonic_sensors_driver import Ultrasonic_driver
kit = ServoKit(channels=8)  #we dont need 16

#BCM
gpio_list_trigger = [14, 18]
gpio_list_echo = [4, 17]
#BOARD
# gpio_list_trigger = [19,21]
# gpio_list_echo = [24,26]

positions = ["r_left", "r_right"]
sensors = Ultrasonic_driver(gpio_list_trigger, gpio_list_echo, positions)
for t in range(10):
    sleep(.5)
    for i in range(180):
        kit.servo[0].angle = i
        # print(sensors.distance_all())
        # sleep(.01)
    sleep(.5)
    for i in range(180, 0, -1):
        kit.servo[0].angle = i
        # print(sensors.distance_all())
        # sleep(.01)

kit.servo[0].angle = 0
Beispiel #7
0
from adafruit_servokit import ServoKit
kit = ServoKit(channels = 8)

import adafruit_motor.servo

#   sudo pip3 install adafruit-circuitpython-pca9685
#   sudo pip3 install adafruit-circuitpython-servokit


class ServoModel():
    '''
    Class to contain servo model and presets and to move servo.
    '''

    def __init__(self,name,channel,presetDict={'home':0},minAngle=0,maxAngle=180):
        #self.servo = kit.servo[channel]
        self.servo = adafruit_motor.servo.Servo(channel)
        self.name = name
        self.presetDict = presetDict
        self.minAngle = minAngle
        self.maxAngle = maxAngle

        self.servo.actuation_angle = maxAngle   #set max angle in the kit.servo controller
    
    def updateAbsoluteAngle(self,angle):
        #Ensure angle remains in the range
        if angle < self.minAngle:
            angle = self.minAngle
        elif angle > self.maxAngle:
            angle = self.maxAngle
Beispiel #8
0
from adafruit_servokit import ServoKit
import time
import RPi.GPIO as GPIO

ledPin = 'GPIO_PZ0'  #31
GPIO.setup(ledPin, GPIO.OUT)  #Led

perchPin = 'GPIO_PE6'  #32
GPIO.setup(perchPin, GPIO.IN)  #Perch

buttonPhasePin = 'LCD_TE'  #15
GPIO.setup(buttonPhasePin, GPIO.IN)  #buttonPhase

kit = ServoKit(channels=16)  #3 SDA, 5 SCL

phase = 1

INITIALSERVOPOSITION = 0
FINALSERVOPOSITION = 90
currentServoPosition = 0
step = 15


def IsBirdOnPerch(perch):
    if perch == True:
        return True
    else:
        return False


def OpenServo():
Beispiel #9
0
import RPi.GPIO as GPIO
import time
from adafruit_servokit import ServoKit

kit = ServoKit(channels=16, address=65)  #i2c address 1x41

count = 0

#Hat pins for Servos
#0-Bread Pusher
#1-Left Condiment Holder
#2-Right Condiment Holder
#3-Condiment Spreader
#4-Toaster Primer
#5-Toater Rotation
#6-Top Bread Chute
#7-Botton Bread Chute

#GPIO pins of the buttons (in BCM)
button1 = 5
button2 = 6
button3 = 13
button4 = 19
button5 = 26
button6 = 20

#list of all buttons
button_list = [button1, button2, button3, button4, button5, button6]

#breakfast choices
choiceA = ""
Beispiel #10
0
 def __init__(self):
     # self.i2c = busio.I2C(board.SCL, board.SDA)
     # self.pca = adafruit_pca9685.PCA9685(self.i2c)
     self.kit = ServoKit(channels=16)
     for i in range(4):
         self.kit.servo[i].set_pulse_width_range(1000, 2000)
Beispiel #11
0
import time
from adafruit_servokit import ServoKit
board1 = ServoKit(channels=16)
#board2 = ServoKit(channels=16, address=0x40)

board1.servo[0].angle = 90
Beispiel #12
0
#!/usr/bin/env python3
# Rasitha Fernando
# 12/05/2019

import rospy
from std_msgs.msg import String
import time
import signal
from adafruit_servokit import ServoKit
import board
import busio
i2c_bus0 = (busio.I2C(board.SCL_1, board.SDA_1))
kit = ServoKit(channels=16, i2c=i2c_bus0)

kit.continuous_servo[3].throttle = 0.0
time.sleep(1)
kit.continuous_servo[3].throttle = 0.1
time.sleep(1)
kit.continuous_servo[3].throttle = 0.15
time.sleep(1)
kit.continuous_servo[3].throttle = 0.2
time.sleep(1)
kit.continuous_servo[3].throttle = 0.0
#------------------------------------------------------


def callback(data):
    flag = 0
    dec = int(data.data)
    kit.servo[4].angle = dec
Beispiel #13
0
 def __init__(self, IOConfig):
     self.controller = ServoKit(channels=16)
     self.IOConfig = IOConfig
     self.servoList = dict()
     for i in range(len(self.IOConfig.servoDict)):
         self.servoList[i] = self.IOConfig.servoDict[i]['channel']
Beispiel #14
0
from adafruit_servokit import ServoKit
import board
import busio
import time

# On the Jetson Nano
# Bus 0 (pins 28,27) is board SCL_1, SDA_1 in the jetson board definition file
# Bus 1 (pins 5, 3) is board SCL, SDA in the jetson definition file
# Default is to Bus 1; We are using Bus 0, so we need to construct the busio first ...
print("Initializing Servos")
i2c_bus0 = (busio.I2C(board.SCL_1, board.SDA_1))
print("Initializing ServoKit")

kit = list()
kit.append(ServoKit(channels=16, i2c=i2c_bus0, address=0x40))
# kit.append(ServoKit(channels=16, i2c=i2c_bus0, address=0x41))

# kit[0] is the front servos
# kit[1] is the rear servos
print("Done initializing")

# [0]~[2] : FL // [3]~[5] : FR // [6]~[8] : RL // [9]~[11] : RR
val_list = [90]
# val_list = [90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90]

if __name__ == '__main__':
    for x in range(len(val_list)):
        kit[int(x / 6)].servo[int(x % 6)].angle = val_list[x]

    while True:
        # num is index of motor to rotate
Beispiel #15
0
 def __init__(self, name, channel, default_angle):
     self.name = name
     self.channel = channel
     self.angle = default_angle
     self.kit = ServoKit(channels=16)
#sudo apt-get install python.smbus
#sudo apt-get install i2c-tools
#sudo pip3 install adafruit-circuitpython-servokit

import time
import random
from adafruit_servokit import ServoKit
import board
import busio
import adafruit_pca9685
i2c = busio.I2C(board.SCL, board.SDA)
hat = adafruit_pca9685.PCA9685(i2c)

kit = ServoKit(channels=16) #, address=0x40, reference_clock_speed=25000000)

kit.servo[0].angle = 0
kit.servo[1].angle = 0
time.sleep(5)

time.sleep(1)
kit.servo[0].angle = 10
kit.servo[1].angle = 15
time.sleep(1)
kit.servo[0].angle = 20
kit.servo[1].angle = 25
time.sleep(1)
kit.servo[0].angle = 30
kit.servo[1].angle = 45
time.sleep(1)
kit.servo[0].angle = 40
kit.servo[1].angle = 65
Beispiel #17
0
# 172.20.10.2 on iPhone

from xbox_controller import XboxController
from debounce import debounce
from robot2 import Robot
import actuation
import time
from adafruit_servokit import ServoKit

boards = [
    ServoKit(channels=16, address=0x40),
    ServoKit(channels=16, address=0x41)
]


def setup(legs):
    for leg in legs:
        for joint in leg.joints:
            boards[joint.board].servo[joint.channel].set_pulse_width_range(
                joint.minPulse, joint.maxPulse)
            boards[joint.board].servo[joint.channel].angle = joint.startAngle


def actuate(legs):
    for leg in legs:
        for joint in leg.joints:
            boards[joint.board].servo[joint.channel].angle = joint.currAngle


moveTimeout = 1
raiseLowerTimeout = 0.5
Beispiel #18
0
 def __init__(self):
    self.kit = ServoKit(channels = 16)
    self.kit.servo[0].set_pulse_width_range(660, 2300)
    self.kit.servo[1].set_pulse_width_range(610, 2250)
    self.kit.servo[3].set_pulse_width_range(400, 2450)
    self.kit.servo[2].set_pulse_width_range(550, 2250)
Beispiel #19
0
#!/usr/bin/env python3

# Python ROS
import rospy

from dimos_test.msg import Sonars

from time import sleep
from adafruit_servokit import ServoKit

kit1 = ServoKit(channels=16, address=0x40)
kit2 = ServoKit(channels=16, address=0x41)

# kit1 3 left legs : front leg ch 0 , 1, 2 , middle ch :3 ,4 ,5  back ch 6 ,7 ,8
# kit2 3 right legs : front leg ch 0 , 1, 2 , middle ch :3 ,4 ,5  back ch 6 ,7 ,8
#
#
joint_properties = {
    'LFH': (0, 100, 0, -1),
    'LFK': (1, 70, 0, -1),
    'LFA': (2, 180, 0, 1),
    'RFH': (3, 90, 0, 1),
    'RFK': (4, 120, 0, 1),
    'RFA': (5, 130, 610, -1),
    'LMH': (6, 320, 470, -1),
    'LMK': (7, 251, 531, -1),
    'LMA': (8, 130, 610, 1),
    'RMH': (0, 380, 530, 1),
    'RMK': (1, 290, 605, 1),
    'RMA': (2, 150, 630, -1),
    'LBH': (6, 350, 500, -1),
Beispiel #20
0
def turn_on_robot_locomotion():

    kit = ServoKit(channels=16)

    number_of_servos = 12

    global robot_is_walking
    robot_is_walking = False
    global robot_is_stopping
    robot_is_stopping = False

    # Define hip positions
    hip_center = 90
    hip_forwards = 60
    hip_backwards = 120

    # Define knee positions
    knee_center = 85
    knee_up = 40
    knee_down = 100

    # Center the legs
    robot_leg_functions.center_servos(hip_center, knee_center, kit)

    # Pause before starting walk
    # time.sleep(2)

    # Phases
    phase_duration = 0.5
    phase_duration_max = 0.8
    phase_duration_min = 0.2
    phase = 0

    # Walk forwards gait
    walk_forwards_hip_phase_order = [
        hip_center, hip_forwards, hip_center, hip_backwards
    ]
    walk_forwards_knee_phase_order = [
        knee_up, knee_center, knee_down, knee_center
    ]
    # Smoothing 0 - ease both, 1 - ease out from current, 2 = ease in to next, 3 = linear
    walk_forwards_hip_smooth = [2, 1, 2, 1]
    walk_forwards_knee_smooth = [0, 0, 0, 0]

    # Stopping gait raised leg
    stop_raised_hip_phase_order = [-1, hip_center, hip_center, hip_center]
    stop_raised_knee_phase_order = [knee_up, knee_up, knee_down, knee_center]
    # Smoothing 0 - ease both, 1 - ease out from current, 2 = ease in to next, 3 = linear
    stop_raised_hip_smooth = [2, 1, 0, 0]
    stop_raised_knee_smooth = [2, 1, 0, 0]

    # Stopping gait down leg
    stop_down_hip_phase_order = [-1, -1, -1, hip_center]
    stop_down_knee_phase_order = [-1, -1, knee_up, knee_center]
    # Smoothing 0 - ease both, 1 - ease out from current, 2 = ease in to next, 3 = linear
    stop_down_hip_smooth = [0, 0, 0, 0]
    stop_down_knee_smooth = [0, 1, 2, 0]

    # Set each servo parameters
    servo_params = []

    for servo in range(0, number_of_servos):
        servo_params.append(0)

    # Hip = True /// Set A = True /// Right = True
    servo_params[0] = [True, True, True]
    servo_params[1] = [True, False, True]
    servo_params[2] = [True, True, True]
    servo_params[3] = [True, False, False]
    servo_params[4] = [True, True, False]
    servo_params[5] = [True, False, False]
    servo_params[6] = [False, True, True]
    servo_params[7] = [False, False, True]
    servo_params[8] = [False, True, True]
    servo_params[9] = [False, False, False]
    servo_params[10] = [False, True, False]
    servo_params[11] = [False, False, False]

    # Initialise the list of servo current angles
    servo_current_position = []

    for servo in range(0, number_of_servos):
        servo_current_position.append(0)

    # Set the starting angle for all of the hips
    for hip in range(0, 6):
        servo_current_position[hip] = hip_center

    # Set the starting angle for all of the knees
    for knee in range(6, 12):
        servo_current_position[knee] = knee_center

    # Initialise our list which stores the servo curves
    servo_curves = []
    for servo in range(0, number_of_servos):
        servo_curves.append(0)

    use_current_position = False

    turning_speed_smooth = 0

    print("Starting our loop!")
    while True:
        if robot_is_walking:
            # Set our timer for the first loop
            phase_start_time = time.time()
            # Calculate the phase duration based on input
            phase_range = phase_duration_max - phase_duration_min
            phase_duration = (moving_speed * phase_range) + phase_duration_min

            global turning_speed

            for servo in range(
                    0, number_of_servos):  # Generate curve for each servo
                this_servo_current_position = servo_current_position[servo]
                this_servo_params = servo_params[servo]
                # servo number | start position | servo parameters | phase
                servo_curves[
                    servo] = robot_leg_functions.generate_servo_movement_curve(
                        this_servo_current_position, this_servo_params, phase,
                        walk_forwards_hip_phase_order,
                        walk_forwards_hip_smooth,
                        walk_forwards_knee_phase_order,
                        walk_forwards_knee_smooth, phase_duration, hip_center,
                        knee_center, 2, turning_speed, use_current_position)

            use_current_position = False

            while True:  # This loop cycles through each servo and moves it towards the target until the phase ends

                # Sleep a bit so that we don't hammer the processor
                time.sleep(0.005)

                # Start a timer for the phase
                current_time_from_zero = time.time() - phase_start_time

                # Go through each servo
                for servo in range(0, number_of_servos):

                    # Calculate how much we need to move based on time
                    angle_for_this_servo = servo_curves[servo].ease(
                        current_time_from_zero)

                    # Move the servo
                    kit.servo[servo].angle = angle_for_this_servo

                    # Record the current angle for each servo
                    servo_current_position[servo] = angle_for_this_servo

                # When the phase ends
                if phase_duration < current_time_from_zero:

                    # Reset the timer
                    phase_start_time = time.time()

                    # Move to the next phase
                    phase += 1
                    phase = phase % 4

                    # Break out and go to the next phase
                    break

                if not robot_is_walking:

                    # Stop the robot
                    robot_is_stopping = True

                    break

        if robot_is_stopping:

            current_walking_phase = phase
            phase = 0
            use_current_position = True

            # Check which phase we're in and which legs are up or down
            if current_walking_phase == 0 or current_walking_phase == 1:
                LegsWhichAreUp = True
                LegsWhichAreDown = False

            if current_walking_phase == 2 or current_walking_phase == 3:
                LegsWhichAreUp = False
                LegsWhichAreDown = True

            # This is used to stop the steering
            # turning_while_stopping = turning_speed

            while True:  # Cycle through each phase until the robot has finished stopping

                if not robot_is_stopping:
                    break

                # Set our timer for the first loop
                phase_start_time = time.time()

                for servo in range(
                        0, number_of_servos):  # Generate curve for each servo
                    # If this servo is part of a set which is raised, used the raised stop gait
                    if servo_params[servo][1] == LegsWhichAreUp:
                        hip_phase_order = stop_raised_hip_phase_order
                        hip_smooth = stop_raised_hip_smooth
                        knee_phase_order = stop_raised_knee_phase_order
                        knee_smooth = stop_raised_knee_smooth

                    # If this servo is part of a set which is down, use the down stop gait

                    if servo_params[servo][1] == LegsWhichAreDown:
                        hip_phase_order = stop_down_hip_phase_order
                        hip_smooth = stop_down_hip_smooth
                        knee_phase_order = stop_down_knee_phase_order
                        knee_smooth = stop_down_knee_smooth

                    this_servo_current_position = servo_current_position[servo]
                    this_servo_params = servo_params[servo]

                    # servo number | start position | servo parameters | phase
                    servo_curves[
                        servo] = robot_leg_functions.generate_servo_movement_curve(
                            this_servo_current_position, this_servo_params,
                            phase, hip_phase_order, hip_smooth,
                            knee_phase_order, knee_smooth, phase_duration,
                            hip_center, knee_center, 0, 0,
                            use_current_position)

                use_current_position = False

                while True:  # This loop cycles through each servo and moves it towards the target until the phase ends

                    # Sleep a bit so that we don't hammer the processor
                    time.sleep(0.005)

                    # Start a timer for the phase
                    current_time_from_zero = time.time() - phase_start_time

                    # Go through each servo
                    for servo in range(0, number_of_servos):

                        # Calculate how much we need to move based on time
                        angle_for_this_servo = servo_curves[servo].ease(
                            current_time_from_zero)
                        # Move the servo
                        kit.servo[servo].angle = angle_for_this_servo

                        # Record the current angle for each servo
                        servo_current_position[servo] = angle_for_this_servo

                    # When the phase ends
                    if phase_duration < current_time_from_zero:

                        # Reset the timer
                        phase_start_time = time.time()

                        if phase == 3:
                            robot_is_stopping = False
                            use_current_position = True
                            for servo in range(0, number_of_servos
                                               ):  # Turn off all the servos
                                kit.servo[servo].angle = None
                            break
                        # Move to the next phase
                        phase += 1

                        break
Beispiel #21
0
 def __init__(self, type, *args, **kwargs):
     super(NvidiaRacecar, self).__init__(*args, **kwargs)
     self.type = type
     self.kit = ServoKit(channels=16, address=self.i2c_address)
     self.steering_motor = self.kit.continuous_servo[self.steering_channel]
     self.throttle_motor = self.kit.continuous_servo[self.throttle_channel]
"""Hi or Hola"""
import time
from adafruit_servokit import ServoKit
import os

# Set channels to the number of servo channels on your kit.
# 8 for FeatherWing, 16 for Shield/HAT/Bonnet.
kit = ServoKit(channels=16)

kit = ServoKit(channels=16)
kit.servo[12].angle = 0  #Servo right elbow initial position

time.sleep(0.5)

kit.servo[12].angle = 30  #Servo right shoulder up
time.sleep(0.5)
kit.servo[12].angle = 60
time.sleep(0.5)
kit.servo[12].angle = 180
time.sleep(1)
kit.servo[15].angle = 120
time.sleep(1)
kit.servo[15].angle = 145
time.sleep(1)

kit.servo[12].angle = 90
time.sleep(0.5)
kit.servo[12].angle = 60
time.sleep(0.5)
kit.servo[12].angle = 30
kit.servo[12].angle = 15  #Servo right elbow initial position
Beispiel #23
0
    'LBK': (7, 110),
    'LBA': (8, 0),
    'RFH': (0, 100),
    'RFK': (1, 70),
    'RFA': (2, 180),
    'RMH': (3, 100),
    'RMK': (4, 70),
    'RMA': (5, 180),
    'RBH': (6, 100),
    'RBK': (7, 70),
    'RBA': (8, 180)
}

left_j = ['LFH', 'LFK', 'LFA', 'LMH', 'LMK', 'LMA', 'LBH', 'LBK', 'LBA']

kitL = ServoKit(channels=16, address=0x41)
kitR = ServoKit(channels=16, address=0x40)


class Hexapod:
    def __init__(self):
        self.left_front = Leg('left front', 'LFH', 'LFK', 'LFA')
        self.right_front = Leg('right front', 'RFH', 'RFK', 'RFA')
        self.left_middle = Leg('left middle', 'LMH', 'LMK', 'LMA')
        self.right_middle = Leg('right middle', 'RMH', 'RMK', 'RMA')
        self.left_back = Leg('left back', 'LBH', 'LBK', 'LBA')
        self.right_back = Leg('right back', 'RBH', 'RBK', 'RBA')

        self.legs = [
            self.left_front, self.right_front, self.left_middle,
            self.right_middle, self.left_back, self.right_back
from adafruit_servokit import ServoKit
import board
from adafruit_motor import servo, stepper, motor

_kit = ServoKit(channels=16, i2c=board.I2C())

# Thrusters are defined in Components.Drive

# MANIPULATOR
MANIP_ELBOW_SERVO_2 = _kit._items[8] = servo.Servo(_kit._pca.channels[8])
MANIP_ELBOW_SERVO = _kit._items[9] = servo.Servo(_kit._pca.channels[9])
MANIP_WRIST_SERVO = _kit._items[10] = servo.Servo(_kit._pca.channels[10])
MANIP_LEVEL_SERVO = _kit._items[11] = servo.Servo(_kit._pca.channels[11])
MANIP_CLAMP_SERVO = _kit._items[12] = servo.Servo(_kit._pca.channels[12])
MANIP_SERVOS = {
    "MANIP_ELBOW_SERVO": MANIP_ELBOW_SERVO, 
    "MANIP_ELBOW_SERVO_2": MANIP_ELBOW_SERVO_2, 
    "MANIP_WRIST_SERVO": MANIP_WRIST_SERVO, 
    "MANIP_LEVEL_SERVO": MANIP_LEVEL_SERVO, 
    "MANIP_CLAMP_SERVO": MANIP_CLAMP_SERVO
}

# Manip Servo Mods (Rated pulse width) with modifications to fit our wanted sensitivity
MANIP_ELBOW_SERVO.set_pulse_width_range(500,2500)
MANIP_ELBOW_SERVO_2.set_pulse_width_range(500,2500)
MANIP_WRIST_SERVO.set_pulse_width_range(600,2400)
MANIP_LEVEL_SERVO.set_pulse_width_range(500,2500)
MANIP_CLAMP_SERVO.set_pulse_width_range(500,2500)

# Thruster Mods (Experimentally found pulse width because specs lied to us :) (1100->1900 base)) 
# (in reality its probably a library thing but i dont want to debug/rewrite servo.continuous_servo :P )
Beispiel #25
0
	def __init__(self, num=16, mimimum_pulse=450, maximum_pulse=2450, kill_angle=90):
		self.kill_angle = kill_angle
		self.kit = ServoKit(channels=16)
		self.servos = [Servo(self.kit.servo[x], x) for x in range(16)]
		for servo in self.servos:
			servo.kit_servo.set_pulse_width_range(mimimum_pulse, maximum_pulse)
Beispiel #26
0
    def __init__(self):
        super().__init__()
        '''
            deeptcar module initialize
        '''
        self.flag = False
        self.cv_mode = 0
        self.motor = CobitCarMotorL9110()
        self.servo = ServoKit(channels=16)
        self.servo_offset = 0
        self.cv_throttle = 0
        self.dp_throttle = 0
        self.driveFlag = False
        '''
            Window layout 
        '''
        #elf.setGeometry(100,100, 800, 800)
        self.setWindowTitle("Deeptcar Operation Demo")

        # buttons - DC motor test
        self.motor_test_btn = QPushButton(self)
        self.motor_test_btn.setText("DC motor test")
        self.motor_test_btn.clicked.connect(self.test_DC_motor)
        self.motor_test_btn.setToolTip(
            "Testing DC geared motor on-off 3 times")

        # buttons - set steering servo at center
        self.servo_center_btn = QPushButton(self)
        self.servo_center_btn.setText("steering wheel center")
        self.servo_center_btn.clicked.connect(self.servo_to_center)
        self.servo_center_btn.setToolTip("Adjusting steering wheel to center")

        # buttons - servo motor test
        self.servo_test_btn = QPushButton(self)
        self.servo_test_btn.setText("servo motor test")
        self.servo_test_btn.clicked.connect(self.test_servo_motor)
        self.servo_test_btn.setToolTip("Testing servo motor on-off 3 times")

        # servo trim control
        self.servo_trim_label = QLabel('0', self)
        self.servo_trim_label.setAlignment(Qt.AlignCenter)
        self.servo_trim_label.setMinimumWidth(100)
        self.servo_trim_label.setText("0")
        self.servo_trim_sld = QSlider(Qt.Horizontal, self)
        self.servo_trim_sld.setRange(-20, 20)
        self.servo_trim_sld.valueChanged[int].connect(self.sld_change_value)

        # radio botton
        self.radio_normal = QRadioButton("Normal camera view", self)
        self.radio_normal.setChecked(True)
        self.radio_normal.clicked.connect(self.cv_normal)
        self.radio_mask = QRadioButton("Red color masking", self)
        self.radio_mask.setChecked(False)
        self.radio_mask.clicked.connect(self.cv_mask)
        self.radio_edge = QRadioButton("Canny edge detect", self)
        self.radio_edge.setChecked(False)
        self.radio_edge.clicked.connect(self.cv_canny)
        self.radio_crop = QRadioButton("Crop necessary region")
        self.radio_crop.setChecked(False)
        self.radio_crop.clicked.connect(self.cv_crop)
        self.radio_detect_line = QRadioButton("Detect line segments")
        self.radio_detect_line.setChecked(False)
        self.radio_detect_line.clicked.connect(self.cv_detect)
        self.radio_slope_lane = QRadioButton("Get lane slope")
        self.radio_slope_lane.setChecked(False)
        self.radio_slope_lane.clicked.connect(self.cv_slope)
        self.radio_draw_steering = QRadioButton("Draw steering angle")
        self.radio_draw_steering.setChecked(False)
        self.radio_draw_steering.clicked.connect(self.cv_steering)
        self.radio_deep_steering = QRadioButton("Draw deep steering angle")
        self.radio_deep_steering.setChecked(False)
        self.radio_deep_steering.clicked.connect(self.cv_deep_steering)
        # create the label that holds the image
        self.disply_width = 320
        self.display_height = 240
        self.image_label = QLabel(self)
        self.image_label.move(0, 0)
        self.image_label.resize(self.disply_width, self.display_height)

        # buttons - OpenCV lane driving
        self.cv_lane_drive_start_btn = QPushButton(self)
        self.cv_lane_drive_start_btn.setText(
            "OpenCV lane detect driving start")
        self.cv_lane_drive_start_btn.clicked.connect(
            self.opencv_lane_drive_start)
        self.cv_lane_drive_start_btn.setToolTip(
            "OpenCV lane detecting driving start")

        # buttons - OpenCV lane driving
        self.cv_lane_drive_stop_btn = QPushButton(self)
        self.cv_lane_drive_stop_btn.setText("OpenCV lane detect driving stop")
        self.cv_lane_drive_stop_btn.clicked.connect(
            self.opencv_lane_drive_stop)
        self.cv_lane_drive_stop_btn.setToolTip(
            "OpenCV lane detecting driving stop")

        # buttons - Deep lane driving
        self.dp_lane_drive_start_btn = QPushButton(self)
        self.dp_lane_drive_start_btn.setText(
            "Deep learning lane detect driving start")
        self.dp_lane_drive_start_btn.clicked.connect(
            self.deep_lane_drive_start)
        self.dp_lane_drive_start_btn.setToolTip(
            "Deep leanring lane detecting driving start")

        # buttons - Deep lane driving
        self.dp_lane_drive_stop_btn = QPushButton(self)
        self.dp_lane_drive_stop_btn.setText(
            "Deep learning lane detect driving stop")
        self.dp_lane_drive_stop_btn.clicked.connect(self.deep_lane_drive_stop)
        self.dp_lane_drive_stop_btn.setToolTip(
            "Deep learning lane detecting driving stop")

        # cv throttle control
        self.sld_cv_throttle = QSlider(Qt.Horizontal, self)
        self.sld_cv_throttle.setRange(0, 50)
        self.sld_cv_throttle.valueChanged[int].connect(
            self.sld_cv_throttle_value)

        # deep throttle label
        self.cv_throttle_label = QLabel('0', self)
        self.cv_throttle_label.setAlignment(Qt.AlignCenter)
        self.cv_throttle_label.setMinimumWidth(100)
        self.cv_throttle_label.setText("0")

        # dp throttle control
        self.sld_dp_throttle = QSlider(Qt.Horizontal, self)
        self.sld_dp_throttle.setRange(0, 50)
        self.sld_dp_throttle.valueChanged[int].connect(
            self.sld_dp_throttle_value)

        # deep throttle label
        self.deep_throttle_label = QLabel('0', self)
        self.deep_throttle_label.setAlignment(Qt.AlignCenter)
        self.deep_throttle_label.setMinimumWidth(100)
        self.deep_throttle_label.setText("0")

        # create a vertical box layout and add the two labels
        vbox = QVBoxLayout()
        hbox = QHBoxLayout()
        h_cv_box = QHBoxLayout()
        v_cv_radio_box = QVBoxLayout()
        v_cv_motor_box = QVBoxLayout()
        v_cv_throttle_box = QVBoxLayout()
        h_cv_motor_throttle_box = QHBoxLayout()
        v_dp_motor_box = QVBoxLayout()
        v_dp_throttle_box = QVBoxLayout()
        h_dp_motor_throttle_box = QHBoxLayout()
        vbox.addWidget(self.motor_test_btn)
        vbox.addWidget(self.servo_center_btn)
        hbox.addWidget(self.servo_trim_label)
        hbox.addWidget(self.servo_trim_sld)
        vbox.addLayout(hbox)
        vbox.addWidget(self.servo_trim_sld)
        vbox.addWidget(self.servo_test_btn)
        v_cv_radio_box.addWidget(self.radio_normal)
        v_cv_radio_box.addWidget(self.radio_mask)
        v_cv_radio_box.addWidget(self.radio_edge)
        v_cv_radio_box.addWidget(self.radio_crop)
        v_cv_radio_box.addWidget(self.radio_detect_line)
        v_cv_radio_box.addWidget(self.radio_slope_lane)
        v_cv_radio_box.addWidget(self.radio_draw_steering)
        v_cv_radio_box.addWidget(self.radio_deep_steering)
        h_cv_box.addLayout(v_cv_radio_box)
        h_cv_box.addWidget(self.image_label)
        vbox.addLayout(h_cv_box)
        v_cv_motor_box.addWidget(self.cv_lane_drive_start_btn)
        v_cv_motor_box.addWidget(self.cv_lane_drive_stop_btn)
        v_cv_throttle_box.addWidget(self.sld_cv_throttle)
        v_cv_throttle_box.addWidget(self.cv_throttle_label)
        h_cv_motor_throttle_box.addLayout(v_cv_motor_box)
        h_cv_motor_throttle_box.addLayout(v_cv_throttle_box)
        v_dp_motor_box.addWidget(self.dp_lane_drive_start_btn)
        v_dp_motor_box.addWidget(self.dp_lane_drive_stop_btn)
        v_dp_throttle_box.addWidget(self.sld_dp_throttle)
        v_dp_throttle_box.addWidget(self.deep_throttle_label)
        h_dp_motor_throttle_box.addLayout(v_dp_motor_box)
        h_dp_motor_throttle_box.addLayout(v_dp_throttle_box)
        vbox.addLayout(h_cv_motor_throttle_box)
        vbox.addLayout(h_dp_motor_throttle_box)
        vbox.addWidget(self.dp_lane_drive_start_btn)
        vbox.addWidget(self.dp_lane_drive_stop_btn)

        # set the vbox layout as the widgets layout
        self.setLayout(vbox)

        # create the video capture thread
        self.thread = VideoThread()
        # connect its signal to the update_image slot
        self.thread.change_pixmap_signal.connect(self.update_image)
        # start the thread
        self.thread.start()
Beispiel #27
0
import time
import RPi.GPIO as GPIO
from adafruit_servokit import ServoKit
'''GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.OUT)
servo1=GPIO.PWM(11,50)
servo1.start(2)'''

h = ServoKit(channels=16)

#servo1.ChangeDutyCycle(12)
#kit.servo[0].angle

init = [0, 90, 20, 0, 180, 160, 170, 180, 60, 0, 0, 150]
limitLo = [0, 0, 20, 0, 0, 40, 0, 0, 60, 0, 0, 30]
limitHi = [35, 180, 180, 180, 180, 160, 170, 180, 180, 180, 180, 150]

cur = init


def changeDeg(pin, newDegree):
    maxChange = 0
    pinSize = len(pin)
    for i in range(0, pinSize):
        maxChange = max(abs(cur[pin[i]] - newDegree[i]), maxChange)
    for deg in range(0, maxChange, 5):
        for i in range(0, pinSize):
            if cur[pin[i]] < newDegree[i]:
                cur[pin[i]] += 5
            elif cur[pin[i]] > newDegree[i]:
                cur[pin[i]] -= 5
# import libraries
import board  # stepper
import RPi.GPIO as GPIO
import time
import random
from pygame import mixer  # sound
# from adafruit_motor import stepper # stepper
# from adafruit_motorkit import MotorKit # stepper
from adafruit_servokit import ServoKit  # servo

# Set channels to the number of servo channels on your kit.
# 8 for FeatherWing, 16 for Shield/HAT/Bonnet.
# address = siehe Nummer auf Servo Hat => 0x[Nummer]
# kit = ServoKit(channels=16)
kit46 = ServoKit(address=0x46, channels=16)
kit47 = ServoKit(address=0x47, channels=16)

# servo kit 0x47 Pins:
# 0-2 -> Rumpf
# 3 -> Arm
# 4 -> Hand
# 5 -> Kopf

#servo kit 0x46 PINs:
# 0/2/4 -> Rumpf
# 6 -> Arm
# 8 -> Kopf

# Parameter Rumpf47
Rumpf47_sek = .05  # Wartezeit nach Winkel anfahren defnieren
Rumpf47_maxValue = 28  # max value for range