def getData(): #connect with IMU imu = lib.lsm9ds1_create() lib.lsm9ds1_begin(imu) if lib.lsm9ds1_begin(imu) == 0: print("Failed to communicate with LSM9DS1.") quit() lib.lsm9ds1_calibrate(imu) while True: #get IMU accel data global lasttime #new structure testing if lib.lsm9ds1_accelAvailable(imu) > 0 and ser.in_waiting > 8: lib.lsm9ds1_readAccel(imu) ax = lib.lsm9ds1_getAccelX(imu) ay = lib.lsm9ds1_getAccelY(imu) cax = lib.lsm9ds1_calcAccel(imu, ax) cay = lib.lsm9ds1_calcAccel(imu, ay) #TFmini data recv = ser.read(9) ser.reset_input_buffer() if recv[0] == 0x59 and recv[1] == 0x59: distance = recv[2] + recv[3] * 256 ser.reset_input_buffer() currentTime = str(datetime.datetime.now()) #timestamp data row = [ currentTime, distance, cax, cay ] #the row being written to csv file, just x and y accel diff = time.time() - lasttime print(diff) lasttime = time.time() print(row)
def getData(): global lasttime #connect with IMU imu = lib.lsm9ds1_create() lib.lsm9ds1_begin(imu) if lib.lsm9ds1_begin(imu) == 0: print("Failed to communicate with LSM9DS1.") quit() lib.lsm9ds1_calibrate(imu) current = time.time() while current - startTime < 10: current = time.time() if lib.lsm9ds1_accelAvailable(imu) > 0 and ser.in_waiting > 8: lib.lsm9ds1_readAccel(imu) ax = lib.lsm9ds1_getAccelX(imu) ay = lib.lsm9ds1_getAccelY(imu) az = lib.lsm9ds1_getAccelZ(imu) cax = lib.lsm9ds1_calcAccel(imu, ax) cay = lib.lsm9ds1_calcAccel(imu, ay) caz = lib.lsm9ds1_calcAccel(imu, az) gx = lib.lsm9ds1_getGyroX(imu) gy = lib.lsm9ds1_getGyroY(imu) gz = lib.lsm9ds1_getGyroZ(imu) cgx = lib.lsm9ds1_calcGyro(imu, gx) cgy = lib.lsm9ds1_calcGyro(imu, gy) cgz = lib.lsm9ds1_calcGyro(imu, gz) #TFmini data recv = ser.read(9) ser.reset_input_buffer() if recv[0] == 0x59 and recv[1] == 0x59: distance = recv[2] + recv[3] * 256 ser.reset_input_buffer() currentTime = str(datetime.datetime.now()); #timestamp data row = [currentTime,distance,cax,cay,caz,cgx,cgy,cgz] #the row being written to csv file, just x and y accel rowList.append(row) diff = time.time() - lasttime timeDiffer.append(diff) #print(diff) lasttime = time.time() #print(row) print("start writing data") with open(datafile,"a",newline = '') as csvfile: spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_MINIMAL) for i in range(len(rowList)): row = [rowList[i]] spamwriter.writerow(row) print("start writing frequency") with open(filename,"a",newline = '') as csvfile: spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_MINIMAL) for i in range(len(timeDiffer)): row = [timeDiffer[i]] spamwriter.writerow(row)
def __init__(self, name="I"): """ Constructor of IMU object: Usage: IMU(self, name = "I") It initializes an IMU object using lsm9ds1 library """ self.name = name self.type = "IMU" self.__conn = lib.lsm9ds1_create() if lib.lsm9ds1_begin(self.__conn)==0: self.__conn = None print("Connection failed") quit()
def getData(): global lasttime #connect with IMU imu = lib.lsm9ds1_create() lib.lsm9ds1_begin(imu) if lib.lsm9ds1_begin(imu) == 0: print("Failed to communicate with LSM9DS1.") quit() lib.lsm9ds1_calibrate(imu) while True: #beforeIf = time.time() time.sleep(0.2) if lib.lsm9ds1_accelAvailable(imu) > 0: afterIf = time.time() lib.lsm9ds1_readAccel(imu) ax = lib.lsm9ds1_getAccelX(imu) ay = lib.lsm9ds1_getAccelY(imu) az = lib.lsm9ds1_getAccelZ(imu) cax = lib.lsm9ds1_calcAccel(imu, ax) cay = lib.lsm9ds1_calcAccel(imu, ay) caz = lib.lsm9ds1_calcAccel(imu, az) gx = lib.lsm9ds1_getGyroX(imu) gy = lib.lsm9ds1_getGyroY(imu) gz = lib.lsm9ds1_getGyroZ(imu) cgx = lib.lsm9ds1_calcGyro(imu, gx) cgy = lib.lsm9ds1_calcGyro(imu, gy) cgz = lib.lsm9ds1_calcGyro(imu, gz) ## #add to list ## caxl.append(cax) ## cayl.append(cay) ## cazl.append(caz) ## cgxl.append(cgx) ## cgyl.append(cgy) ## cgzl.append(cgz) print(cax, cay, caz, cgx, cgy, cgz)
#rapidly capturing photos, number is frames def capture(): startC = time.time() print("pid for camera %i" % os.getpid()) while time.time() - startC < 10: with picamera.PiCamera(resolution=(480, 480), framerate=40) as camera: camera.start_preview() # Give the camera some warm-up time time.sleep(3) camera.capture_sequence(filenames(), use_video_port=True) return 1 #IMU setup imu = lib.lsm9ds1_create() lib.lsm9ds1_begin(imu) #main, which parallelizes sensors and camera reading if __name__ == '__main__': if lib.lsm9ds1_begin(imu) == 0: print("Failed to communicate with LSM9DS1.") quit() lib.lsm9ds1_calibrate(imu) if ser.is_open == False: ser.open() start = time.time() lasttime = time.time() pool = Pool() sensors = pool.apply_async(getData)