Пример #1
0
def main():
    try:
        s = servos.Servos(serial.Serial("/dev/ttyACM0", 9600))
        print("mounted ttyACM0")
    except SerialException:
        s = servos.Servos(serial.Serial("/dev/ttyACM1", 9600))
        print("mounted ttyACM1")

    wii = Wiimote(s)
    wii.run()
Пример #2
0
 def __init__(self, startPos, startDirection):
     self.cam = camera.Camera()
     self.sens = sensors.Sensors()
     self.enc = encoders.Encoders()
     self.serv = servos.Servos()
     self.centeredInSquareLength = 7.5
     self.sideDistance = 7.05
     self.distanceBetweenSquares = 18
     self.speed = 7
     self.detectWallDistance = 15
     self.nav = navigate.Navigate(startPos, startDirection)
     self.useColor = False
     self.colorList = []
     self.foundColorList = []
     self.foundColorNorth = False
     self.foundColorEast = False
     self.foundColorSouth = False
     self.foundColorWest = False
Пример #3
0
SERVO_CENTER = 200  # Center value for the servo, should be 0 degrees of rotation.

# Initialize flask app
app = Flask(__name__)
app.config.from_object(__name__)

# Setup the servo and laser model
servos = None
if len(sys.argv) > 1 and sys.argv[1] == "test":
    # Setup test servo for running outside a Raspberry Pi
    import modeltests
    servos = modeltests.TestServos()
else:
    # Setup the real servo when running on a Raspberry Pi
    import servos
    servos = servos.Servos(SERVO_I2C_ADDRESS, SERVO_XAXIS_CHANNEL,
                           SERVO_YAXIS_CHANNEL, SERVO_PWM_FREQ)

model = model.LaserModel(servos, SERVO_MIN, SERVO_MAX, SERVO_CENTER)


# Main view for rendering the web page
@app.route('/')
def main():
    return render_template('main.html', model=model)


# Error handler for API call failures
@app.errorhandler(ValueError)
def valueErrorHandler(error):
    return jsonify({'result': error.message}), 500
Пример #4
0
# This program demonstrates usage of the digital encoders.
# After executing the program, manually spin the wheels and observe the output.
# See https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/ for more details.
import encoders
import servos
import time
import RPi.GPIO as GPIO
import signal
# import pandas as pd

#objects for servos, encoders, sensors, and camera
enc = encoders.Encoders()
serv = servos.Servos()
# Pins that the encoders are connected to
LENCODER = 17
RENCODER = 18

def ctrlC(signum, frame):
    print("Exiting")
    serv.stopServos()
    GPIO.cleanup()
    exit()

def calibrateSpeeds(interval):
    freq = 1.3
    y = 1.3
    while freq <= 1.7 and y <= 1.7:
        serv.setSpeeds(freq, freq)
        time.sleep(1)
        speedTuple2 = enc.getSpeeds()
        print(str((speedTuple2[0] + speedTuple2[1]) / 2) + " RPS")
Пример #5
0
def main():
    s = servos.Servos(serial.Serial('/dev/ttyACM0', 9600))
    while True:
        play_morse('SOS ', s)
Пример #6
0
 def calibrateSpeeds(self):
     calServ = servos.Servos()
     self.wheelTicksLeft = 0
     self.wheelTicksRight = 0
     self.calibrating = True
     print('Starting calibration...')
     if (self.graphing):
         excelDataRight = []  #data to plot in excel
         excelDataLeft = []
     else:
         calibrationData = {}  #dictionary containing calibration data
         calibrationData['left'] = {}
         calibrationData['right'] = {}
     rightStage = 1.2  #PWM freq for right
     leftStage = 1.8  #PWM freq for left
     print('CCW stage beginning...')
     while (rightStage < 1.5 and leftStage > 1.5):
         print('Collecting data for (' + str(leftStage) + ', ' +
               str(rightStage) + ')...')
         calServ.setSpeeds(leftStage, rightStage)
         print('Waiting for ticks...')
         while (self.wheelTicksLeft < self.accuracy + 1
                and self.wheelTicksRight < self.accuracy + 1
                ):  #while loop is just to wait for more ticks
             pass
         print('Got the ticks!')
         averageSpeedLeft = sum(
             self.calibrationArrayLeft[-self.accuracy:]
         ) / self.accuracy  #averages last x elements of left array, left out first because it may not be accurate
         averageSpeedRight = sum(
             self.calibrationArrayRight[-self.accuracy:]
         ) / self.accuracy  #averages last x elements of right array
         if (self.graphing):
             excelDataRight.append((rightStage, -averageSpeedRight))
             excelDataLeft.append((leftStage, averageSpeedLeft))
         else:
             calibrationData['left'][averageSpeedLeft] = leftStage
             calibrationData['right'][-averageSpeedRight] = rightStage
         print('Average speed left: ' + str(averageSpeedLeft))
         print('Average speed right: ' + str(averageSpeedRight))
         #empty everything and reset for next stage
         self.calibrationArrayLeft = []
         self.calibrationArrayRight = []
         self.wheelTicksLeft = 0
         self.wheelTicksRight = 0
         if leftStage > 1.6 and rightStage < 1.4:
             rightStage += 0.0025
             leftStage -= 0.0025
         elif (
                 leftStage > 1.505 and rightStage < 1.495
         ):  #would be miserable going slower than this, and this is the easy direction to spin so the requirements are closer to 1.5 than next stage
             rightStage += 0.001
             leftStage -= 0.001
         else:
             rightStage = 1.5
             leftStage = 1.5
     #reset for another run in the opposite direction
     print('CW stage beginning...')
     rightStage = 1.8  #PWM freq for right
     leftStage = 1.2  #PWM freq for left
     while (rightStage > 1.5 and leftStage < 1.5):
         print('Collecting data for (' + str(leftStage) + ', ' +
               str(rightStage) + ')...')
         calServ.setSpeeds(leftStage, rightStage)
         print('Waiting for ticks...')
         while (self.wheelTicksLeft < self.accuracy + 1
                and self.wheelTicksRight < self.accuracy + 1
                ):  #while loop is just to wait for more ticks
             pass
         print('Got the ticks!')
         averageSpeedLeft = sum(
             self.calibrationArrayLeft[-self.accuracy:]
         ) / self.accuracy  #averages last x elements of left array, left out first because it may not be accurate
         averageSpeedRight = sum(
             self.calibrationArrayRight[-self.accuracy:]
         ) / self.accuracy  #averages last x elements of right array
         if (self.graphing):
             excelDataRight.append((rightStage, averageSpeedRight))
             excelDataLeft.append((leftStage, -averageSpeedLeft))
         else:
             calibrationData['left'][-averageSpeedLeft] = leftStage
             calibrationData['right'][averageSpeedRight] = rightStage
         print('Average speed left: ' + str(averageSpeedLeft))
         print('Average speed right: ' + str(averageSpeedRight))
         #empty everything and reset for next stage
         self.calibrationArrayLeft = []
         self.calibrationArrayRight = []
         self.wheelTicksLeft = 0
         self.wheelTicksRight = 0
         if leftStage < 1.4 and rightStage > 1.6:
             rightStage -= 0.0025
             leftStage += 0.0025
         elif (leftStage < 1.493 and rightStage >
               1.507):  #would be miserable going slower than this
             rightStage -= 0.001
             leftStage += 0.001
         else:
             rightStage = 1.5
             leftStage = 1.5
     print('Turning off servos.')
     calServ.stopServos()
     #write to file
     if (self.graphing):
         workbook = xlsxwriter.Workbook('calibrationData.xlsx')
         worksheet = workbook.add_worksheet()
         col = 0
         row = 0
         for item in excelDataLeft:
             worksheet.write(row, col, item[0])
             worksheet.write(row, col + 1, item[1])
             row += 1
         col = 4
         row = 0
         for item in excelDataRight:
             worksheet.write(row, col, item[0])
             worksheet.write(row, col + 1, item[1])
             row += 1
         workbook.close()
     else:
         with open('calibration.json', 'w') as writeFile:
             json.dump(calibrationData,
                       writeFile,
                       indent=4,
                       separators=(',', ': '),
                       sort_keys=True)
     self.calibrating = False
     self.wheelTicksLeft = 0
     self.wheelTicksRight = 0
 def calibrateSpeeds(self):
     calServ = servos.Servos()
     self.calibrating = True
     print('Starting calibration...')
     calibrationData = {}  #dictionary containing calibration data
     calibrationData['left'] = {}
     calibrationData['right'] = {}
     rightStage = 1.2  #PWM freq for right
     leftStage = 1.8  #PWM freq for left
     print('CCW stage beginning...')
     while (rightStage < 1.5 and leftStage > 1.5):
         print('Collecting data for (' + str(leftStage) + ', ' +
               str(rightStage) + ')...')
         calServ.setSpeeds(leftStage, rightStage)
         print('Waiting for ticks...')
         while (self.wheelTicksLeft < self.accuracy + 1
                and self.wheelTicksRight < self.accuracy + 1
                ):  #while loop is just to wait for more ticks
             #speed = self.getSpeeds()
             #if speed[0] == 0 or speed[1] == 0 and rightStage > 1.4 and leftStage < 1.6:
             #rightStage = 1.5
             #leftStage = 1.5
             #break
             pass
         print('Got the ticks!')
         averageSpeedLeft = sum(
             self.calibrationArrayLeft[-self.accuracy:]
         ) / self.accuracy  #averages last x elements of left array, left out first because it may not be accurate
         averageSpeedRight = sum(
             self.calibrationArrayRight[-self.accuracy:]
         ) / self.accuracy  #averages last x elements of right array
         calibrationData['left'][averageSpeedLeft] = leftStage
         calibrationData['right'][-averageSpeedRight] = rightStage
         print('Average speed left: ' + str(averageSpeedLeft))
         print('Average speed right: ' + str(averageSpeedRight))
         #empty everything and reset for next stage
         self.calibrationArrayLeft = []
         self.calibrationArrayRight = []
         self.wheelTicksLeft = 0
         self.wheelTicksRight = 0
         # if (leftStage > 1.6 and rightStage < 1.4):
         #     rightStage += 0.01
         #     leftStage -= 0.01
         if (leftStage > 1.52 and rightStage <
                 1.48):  #would be miserable going slower than this
             rightStage += 0.005
             leftStage -= 0.005
         else:
             rightStage = 1.5
             leftStage = 1.5
     #reset for another run in the opposite direction
     print('CW stage beginning...')
     rightStage = 1.8  #PWM freq for right
     leftStage = 1.2  #PWM freq for left
     while (rightStage > 1.5 and leftStage < 1.5):
         print('Collecting data for (' + str(leftStage) + ', ' +
               str(rightStage) + ')(1.5, 1.5)...')
         calServ.setSpeeds(leftStage, rightStage)
         print('Waiting for ticks...')
         while (self.wheelTicksLeft < self.accuracy + 1
                and self.wheelTicksRight < self.accuracy + 1
                ):  #while loop is just to wait for more ticks
             #speed = self.getSpeeds()
             #if speed[0] == 0 or speed[1] == 0 and rightStage > 1.4 and leftStage < 1.6:
             #rightStage = 1.5
             #leftStage = 1.5
             #break
             pass
         print('Got the ticks!')
         averageSpeedLeft = sum(
             self.calibrationArrayLeft[-self.accuracy:]
         ) / self.accuracy  #averages last x elements of left array, left out first because it may not be accurate
         averageSpeedRight = sum(
             self.calibrationArrayRight[-self.accuracy:]
         ) / self.accuracy  #averages last x elements of right array
         calibrationData['left'][-averageSpeedLeft] = leftStage
         calibrationData['right'][averageSpeedRight] = rightStage
         print('Average speed left: ' + str(averageSpeedLeft))
         print('Average speed right: ' + str(averageSpeedRight))
         #empty everything and reset for next stage
         self.calibrationArrayLeft = []
         self.calibrationArrayRight = []
         self.wheelTicksLeft = 0
         self.wheelTicksRight = 0
         # if (leftStage < 1.4 and rightStage > 1.6):
         #     rightStage -= 0.01
         #     leftStage += 0.01
         if (leftStage < 1.48 and rightStage >
                 1.52):  #would be miserable going slower than this
             rightStage -= 0.005
             leftStage += 0.005
         else:
             rightStage = 1.5
             leftStage = 1.5
     print('Turning off servos.')
     calServ.stopServos()
     #write to file
     with open('calibration.json', 'w') as writeFile:
         json.dump(calibrationData,
                   writeFile,
                   indent=4,
                   separators=(',', ': '),
                   sort_keys=True)
     self.calibrating = False