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()
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
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
# 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")
def main(): s = servos.Servos(serial.Serial('/dev/ttyACM0', 9600)) while True: play_morse('SOS ', s)
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