From b2046ffd6b68a0cd0a0e2226957a6b866e211967 Mon Sep 17 00:00:00 2001 From: Paul Riseborough <p_riseborough@live.com.au> Date: Tue, 9 Jan 2018 09:44:01 +1100 Subject: [PATCH] Tools: fix errors in thermal calibration script --- Tools/process_sensor_caldata.py | 904 ++++++++++++++++---------------- 1 file changed, 452 insertions(+), 452 deletions(-) diff --git a/Tools/process_sensor_caldata.py b/Tools/process_sensor_caldata.py index d024cbaad2..b685e7c825 100644 --- a/Tools/process_sensor_caldata.py +++ b/Tools/process_sensor_caldata.py @@ -16,7 +16,7 @@ Data can be gathered using the following sequence: 1) Power up the board and set the TC_A_ENABLE, TC_B_ENABLE and TC_G_ENABLE parameters to 1 2) Set all CAL_GYR and CAL_ACC parameters to defaults 3) Set the SYS_LOGGER parameter to 1 to use the new system logger -4) Set the SDLOG_MODE parameter to 2, and SDLOG_PROFILE parameter to 2 to enable logging of sensor data for calibration and power off +4) Set the SDLOG_MODE parameter to 2, and SDLOG_PROFILE parameter to 4 to enable logging of sensor data for calibration and power off 5) Cold soak the board for 30 minutes 6) Move to a warm dry, still air, constant pressure environment. 7) Apply power for 45 minutes, keeping the board still. @@ -24,7 +24,7 @@ Data can be gathered using the following sequence: 9) Open a terminal window in the Firmware/Tools directory and run the python calibration script script file: 'python process_sensor_caldata.py <full path name to .ulog file> 10) Power the board, connect QGC and load the parameter from the generated .params file onto the board using QGC. Due to the number of parameters, loading them may take some time. 11) TODO - we need a way for user to reliably tell when parameters have all been changed and saved. -12) After parameters have finished loading, set SDLOG_MODE to 1 to re-enable normal logging and remove power. +12) After parameters have finished loading, set SDLOG_MODE and SDLOG_PROFILE to their respective values prior to step 4) and remove power. 13) Power the board and perform a normal gyro and accelerometer sensor calibration using QGC. The board must be repowered after this step before flying due to large parameter changes and the thermal compensation parameters only being read on startup. Outputs thermal compensation parameters in a file named <inputfilename>.params which can be loaded onto the board using QGroundControl @@ -56,16 +56,16 @@ for d in data: if sensor_instance == 0: sensor_gyro_0 = d.data print('found gyro 0 data') - num_gyros = 1 + num_gyros = 1 if sensor_instance == 1: sensor_gyro_1 = d.data print('found gyro 1 data') - num_gyros = 2 - if sensor_instance == 2: + num_gyros = 2 + if sensor_instance == 2: sensor_gyro_2 = d.data print('found gyro 2 data') - num_gyros = 3 - sensor_instance = sensor_instance +1 + num_gyros = 3 + sensor_instance = sensor_instance +1 # extract accel data sensor_instance = 0 @@ -75,15 +75,15 @@ for d in data: if sensor_instance == 0: sensor_accel_0 = d.data print('found accel 0 data') - num_accels = 1 + num_accels = 1 if sensor_instance == 1: sensor_accel_1 = d.data print('found accel 1 data') - num_accels = 2 + num_accels = 2 if sensor_instance == 2: sensor_accel_2 = d.data print('found accel 2 data') - num_accels = 3 + num_accels = 3 sensor_instance = sensor_instance +1 # extract baro data @@ -94,11 +94,11 @@ for d in data: if sensor_instance == 0: sensor_baro_0 = d.data print('found baro 0 data') - num_baros = 1 + num_baros = 1 if sensor_instance == 1: sensor_baro_1 = d.data print('found baro 1 data') - num_baros = 2 + num_baros = 2 sensor_instance = sensor_instance +1 # open file to save plots to PDF @@ -133,72 +133,72 @@ gyro_0_params = { # curve fit the data for gyro 0 corrections if num_gyros >= 1: - gyro_0_params['TC_G0_ID'] = int(np.median(sensor_gyro_0['device_id'])) - - # find the min, max and reference temperature - gyro_0_params['TC_G0_TMIN'] = np.amin(sensor_gyro_0['temperature']) - gyro_0_params['TC_G0_TMAX'] = np.amax(sensor_gyro_0['temperature']) - gyro_0_params['TC_G0_TREF'] = 0.5 * (gyro_0_params['TC_G0_TMIN'] + gyro_0_params['TC_G0_TMAX']) - temp_rel = sensor_gyro_0['temperature'] - gyro_0_params['TC_G0_TREF'] - temp_rel_resample = np.linspace(gyro_0_params['TC_G0_TMIN']-gyro_0_params['TC_G0_TREF'], gyro_0_params['TC_G0_TMAX']-gyro_0_params['TC_G0_TREF'], 100) - temp_resample = temp_rel_resample + gyro_0_params['TC_G0_TREF'] - - # fit X axis - coef_gyro_0_x = np.polyfit(temp_rel,sensor_gyro_0['x'],3) - gyro_0_params['TC_G0_X3_0'] = coef_gyro_0_x[0] - gyro_0_params['TC_G0_X2_0'] = coef_gyro_0_x[1] - gyro_0_params['TC_G0_X1_0'] = coef_gyro_0_x[2] - gyro_0_params['TC_G0_X0_0'] = coef_gyro_0_x[3] - fit_coef_gyro_0_x = np.poly1d(coef_gyro_0_x) - gyro_0_x_resample = fit_coef_gyro_0_x(temp_rel_resample) - - # fit Y axis - coef_gyro_0_y = np.polyfit(temp_rel,sensor_gyro_0['y'],3) - gyro_0_params['TC_G0_X3_1'] = coef_gyro_0_y[0] - gyro_0_params['TC_G0_X2_1'] = coef_gyro_0_y[1] - gyro_0_params['TC_G0_X1_1'] = coef_gyro_0_y[2] - gyro_0_params['TC_G0_X0_1'] = coef_gyro_0_y[3] - fit_coef_gyro_0_y = np.poly1d(coef_gyro_0_y) - gyro_0_y_resample = fit_coef_gyro_0_y(temp_rel_resample) - - # fit Z axis - coef_gyro_0_z = np.polyfit(temp_rel,sensor_gyro_0['z'],3) - gyro_0_params['TC_G0_X3_2'] = coef_gyro_0_z[0] - gyro_0_params['TC_G0_X2_2'] = coef_gyro_0_z[1] - gyro_0_params['TC_G0_X1_2'] = coef_gyro_0_z[2] - gyro_0_params['TC_G0_X0_2'] = coef_gyro_0_z[3] - fit_coef_gyro_0_z = np.poly1d(coef_gyro_0_z) - gyro_0_z_resample = fit_coef_gyro_0_z(temp_rel_resample) - - # gyro0 vs temperature - plt.figure(1,figsize=(20,13)) - - # draw plots - plt.subplot(3,1,1) - plt.plot(sensor_gyro_0['temperature'],sensor_gyro_0['x'],'b') - plt.plot(temp_resample,gyro_0_x_resample,'r') - plt.title('Gyro 0 Bias vs Temperature') - plt.ylabel('X bias (rad/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - # draw plots - plt.subplot(3,1,2) - plt.plot(sensor_gyro_0['temperature'],sensor_gyro_0['y'],'b') - plt.plot(temp_resample,gyro_0_y_resample,'r') - plt.ylabel('Y bias (rad/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - # draw plots - plt.subplot(3,1,3) - plt.plot(sensor_gyro_0['temperature'],sensor_gyro_0['z'],'b') - plt.plot(temp_resample,gyro_0_z_resample,'r') - plt.ylabel('Z bias (rad/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - pp.savefig() + gyro_0_params['TC_G0_ID'] = int(np.median(sensor_gyro_0['device_id'])) + + # find the min, max and reference temperature + gyro_0_params['TC_G0_TMIN'] = np.amin(sensor_gyro_0['temperature']) + gyro_0_params['TC_G0_TMAX'] = np.amax(sensor_gyro_0['temperature']) + gyro_0_params['TC_G0_TREF'] = 0.5 * (gyro_0_params['TC_G0_TMIN'] + gyro_0_params['TC_G0_TMAX']) + temp_rel = sensor_gyro_0['temperature'] - gyro_0_params['TC_G0_TREF'] + temp_rel_resample = np.linspace(gyro_0_params['TC_G0_TMIN']-gyro_0_params['TC_G0_TREF'], gyro_0_params['TC_G0_TMAX']-gyro_0_params['TC_G0_TREF'], 100) + temp_resample = temp_rel_resample + gyro_0_params['TC_G0_TREF'] + + # fit X axis + coef_gyro_0_x = np.polyfit(temp_rel,sensor_gyro_0['x'],3) + gyro_0_params['TC_G0_X3_0'] = coef_gyro_0_x[0] + gyro_0_params['TC_G0_X2_0'] = coef_gyro_0_x[1] + gyro_0_params['TC_G0_X1_0'] = coef_gyro_0_x[2] + gyro_0_params['TC_G0_X0_0'] = coef_gyro_0_x[3] + fit_coef_gyro_0_x = np.poly1d(coef_gyro_0_x) + gyro_0_x_resample = fit_coef_gyro_0_x(temp_rel_resample) + + # fit Y axis + coef_gyro_0_y = np.polyfit(temp_rel,sensor_gyro_0['y'],3) + gyro_0_params['TC_G0_X3_1'] = coef_gyro_0_y[0] + gyro_0_params['TC_G0_X2_1'] = coef_gyro_0_y[1] + gyro_0_params['TC_G0_X1_1'] = coef_gyro_0_y[2] + gyro_0_params['TC_G0_X0_1'] = coef_gyro_0_y[3] + fit_coef_gyro_0_y = np.poly1d(coef_gyro_0_y) + gyro_0_y_resample = fit_coef_gyro_0_y(temp_rel_resample) + + # fit Z axis + coef_gyro_0_z = np.polyfit(temp_rel,sensor_gyro_0['z'],3) + gyro_0_params['TC_G0_X3_2'] = coef_gyro_0_z[0] + gyro_0_params['TC_G0_X2_2'] = coef_gyro_0_z[1] + gyro_0_params['TC_G0_X1_2'] = coef_gyro_0_z[2] + gyro_0_params['TC_G0_X0_2'] = coef_gyro_0_z[3] + fit_coef_gyro_0_z = np.poly1d(coef_gyro_0_z) + gyro_0_z_resample = fit_coef_gyro_0_z(temp_rel_resample) + + # gyro0 vs temperature + plt.figure(1,figsize=(20,13)) + + # draw plots + plt.subplot(3,1,1) + plt.plot(sensor_gyro_0['temperature'],sensor_gyro_0['x'],'b') + plt.plot(temp_resample,gyro_0_x_resample,'r') + plt.title('Gyro 0 Bias vs Temperature') + plt.ylabel('X bias (rad/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + # draw plots + plt.subplot(3,1,2) + plt.plot(sensor_gyro_0['temperature'],sensor_gyro_0['y'],'b') + plt.plot(temp_resample,gyro_0_y_resample,'r') + plt.ylabel('Y bias (rad/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + # draw plots + plt.subplot(3,1,3) + plt.plot(sensor_gyro_0['temperature'],sensor_gyro_0['z'],'b') + plt.plot(temp_resample,gyro_0_z_resample,'r') + plt.ylabel('Z bias (rad/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + pp.savefig() ################################################################################# @@ -229,72 +229,72 @@ gyro_1_params = { # curve fit the data for gyro 1 corrections if num_gyros >= 2: - gyro_1_params['TC_G1_ID'] = int(np.median(sensor_gyro_1['device_id'])) - - # find the min, max and reference temperature - gyro_1_params['TC_G1_TMIN'] = np.amin(sensor_gyro_1['temperature']) - gyro_1_params['TC_G1_TMAX'] = np.amax(sensor_gyro_1['temperature']) - gyro_1_params['TC_G1_TREF'] = 0.5 * (gyro_1_params['TC_G1_TMIN'] + gyro_1_params['TC_G1_TMAX']) - temp_rel = sensor_gyro_1['temperature'] - gyro_1_params['TC_G1_TREF'] - temp_rel_resample = np.linspace(gyro_1_params['TC_G1_TMIN']-gyro_1_params['TC_G1_TREF'], gyro_1_params['TC_G1_TMAX']-gyro_1_params['TC_G1_TREF'], 100) - temp_resample = temp_rel_resample + gyro_1_params['TC_G1_TREF'] - - # fit X axis - coef_gyro_1_x = np.polyfit(temp_rel,sensor_gyro_1['x'],3) - gyro_1_params['TC_G1_X3_0'] = coef_gyro_1_x[0] - gyro_1_params['TC_G1_X2_0'] = coef_gyro_1_x[1] - gyro_1_params['TC_G1_X1_0'] = coef_gyro_1_x[2] - gyro_1_params['TC_G1_X0_0'] = coef_gyro_1_x[3] - fit_coef_gyro_1_x = np.poly1d(coef_gyro_1_x) - gyro_1_x_resample = fit_coef_gyro_1_x(temp_rel_resample) - - # fit Y axis - coef_gyro_1_y = np.polyfit(temp_rel,sensor_gyro_1['y'],3) - gyro_1_params['TC_G1_X3_1'] = coef_gyro_1_y[0] - gyro_1_params['TC_G1_X2_1'] = coef_gyro_1_y[1] - gyro_1_params['TC_G1_X1_1'] = coef_gyro_1_y[2] - gyro_1_params['TC_G1_X0_1'] = coef_gyro_1_y[3] - fit_coef_gyro_1_y = np.poly1d(coef_gyro_1_y) - gyro_1_y_resample = fit_coef_gyro_1_y(temp_rel_resample) - - # fit Z axis - coef_gyro_1_z = np.polyfit(temp_rel,sensor_gyro_1['z'],3) - gyro_1_params['TC_G1_X3_2'] = coef_gyro_1_z[0] - gyro_1_params['TC_G1_X2_2'] = coef_gyro_1_z[1] - gyro_1_params['TC_G1_X1_2'] = coef_gyro_1_z[2] - gyro_1_params['TC_G1_X0_2'] = coef_gyro_1_z[3] - fit_coef_gyro_1_z = np.poly1d(coef_gyro_1_z) - gyro_1_z_resample = fit_coef_gyro_1_z(temp_rel_resample) - - # gyro1 vs temperature - plt.figure(2,figsize=(20,13)) - - # draw plots - plt.subplot(3,1,1) - plt.plot(sensor_gyro_1['temperature'],sensor_gyro_1['x'],'b') - plt.plot(temp_resample,gyro_1_x_resample,'r') - plt.title('Gyro 1 Bias vs Temperature') - plt.ylabel('X bias (rad/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - # draw plots - plt.subplot(3,1,2) - plt.plot(sensor_gyro_1['temperature'],sensor_gyro_1['y'],'b') - plt.plot(temp_resample,gyro_1_y_resample,'r') - plt.ylabel('Y bias (rad/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - # draw plots - plt.subplot(3,1,3) - plt.plot(sensor_gyro_1['temperature'],sensor_gyro_1['z'],'b') - plt.plot(temp_resample,gyro_1_z_resample,'r') - plt.ylabel('Z bias (rad/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - pp.savefig() + gyro_1_params['TC_G1_ID'] = int(np.median(sensor_gyro_1['device_id'])) + + # find the min, max and reference temperature + gyro_1_params['TC_G1_TMIN'] = np.amin(sensor_gyro_1['temperature']) + gyro_1_params['TC_G1_TMAX'] = np.amax(sensor_gyro_1['temperature']) + gyro_1_params['TC_G1_TREF'] = 0.5 * (gyro_1_params['TC_G1_TMIN'] + gyro_1_params['TC_G1_TMAX']) + temp_rel = sensor_gyro_1['temperature'] - gyro_1_params['TC_G1_TREF'] + temp_rel_resample = np.linspace(gyro_1_params['TC_G1_TMIN']-gyro_1_params['TC_G1_TREF'], gyro_1_params['TC_G1_TMAX']-gyro_1_params['TC_G1_TREF'], 100) + temp_resample = temp_rel_resample + gyro_1_params['TC_G1_TREF'] + + # fit X axis + coef_gyro_1_x = np.polyfit(temp_rel,sensor_gyro_1['x'],3) + gyro_1_params['TC_G1_X3_0'] = coef_gyro_1_x[0] + gyro_1_params['TC_G1_X2_0'] = coef_gyro_1_x[1] + gyro_1_params['TC_G1_X1_0'] = coef_gyro_1_x[2] + gyro_1_params['TC_G1_X0_0'] = coef_gyro_1_x[3] + fit_coef_gyro_1_x = np.poly1d(coef_gyro_1_x) + gyro_1_x_resample = fit_coef_gyro_1_x(temp_rel_resample) + + # fit Y axis + coef_gyro_1_y = np.polyfit(temp_rel,sensor_gyro_1['y'],3) + gyro_1_params['TC_G1_X3_1'] = coef_gyro_1_y[0] + gyro_1_params['TC_G1_X2_1'] = coef_gyro_1_y[1] + gyro_1_params['TC_G1_X1_1'] = coef_gyro_1_y[2] + gyro_1_params['TC_G1_X0_1'] = coef_gyro_1_y[3] + fit_coef_gyro_1_y = np.poly1d(coef_gyro_1_y) + gyro_1_y_resample = fit_coef_gyro_1_y(temp_rel_resample) + + # fit Z axis + coef_gyro_1_z = np.polyfit(temp_rel,sensor_gyro_1['z'],3) + gyro_1_params['TC_G1_X3_2'] = coef_gyro_1_z[0] + gyro_1_params['TC_G1_X2_2'] = coef_gyro_1_z[1] + gyro_1_params['TC_G1_X1_2'] = coef_gyro_1_z[2] + gyro_1_params['TC_G1_X0_2'] = coef_gyro_1_z[3] + fit_coef_gyro_1_z = np.poly1d(coef_gyro_1_z) + gyro_1_z_resample = fit_coef_gyro_1_z(temp_rel_resample) + + # gyro1 vs temperature + plt.figure(2,figsize=(20,13)) + + # draw plots + plt.subplot(3,1,1) + plt.plot(sensor_gyro_1['temperature'],sensor_gyro_1['x'],'b') + plt.plot(temp_resample,gyro_1_x_resample,'r') + plt.title('Gyro 1 Bias vs Temperature') + plt.ylabel('X bias (rad/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + # draw plots + plt.subplot(3,1,2) + plt.plot(sensor_gyro_1['temperature'],sensor_gyro_1['y'],'b') + plt.plot(temp_resample,gyro_1_y_resample,'r') + plt.ylabel('Y bias (rad/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + # draw plots + plt.subplot(3,1,3) + plt.plot(sensor_gyro_1['temperature'],sensor_gyro_1['z'],'b') + plt.plot(temp_resample,gyro_1_z_resample,'r') + plt.ylabel('Z bias (rad/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + pp.savefig() ################################################################################# @@ -325,72 +325,72 @@ gyro_2_params = { # curve fit the data for gyro 2 corrections if num_gyros >= 3: - gyro_2_params['TC_G2_ID'] = int(np.median(sensor_gyro_2['device_id'])) - - # find the min, max and reference temperature - gyro_2_params['TC_G2_TMIN'] = np.amin(sensor_gyro_2['temperature']) - gyro_2_params['TC_G2_TMAX'] = np.amax(sensor_gyro_2['temperature']) - gyro_2_params['TC_G2_TREF'] = 0.5 * (gyro_2_params['TC_G2_TMIN'] + gyro_2_params['TC_G2_TMAX']) - temp_rel = sensor_gyro_2['temperature'] - gyro_2_params['TC_G2_TREF'] - temp_rel_resample = np.linspace(gyro_2_params['TC_G2_TMIN']-gyro_2_params['TC_G2_TREF'], gyro_2_params['TC_G2_TMAX']-gyro_2_params['TC_G2_TREF'], 100) - temp_resample = temp_rel_resample + gyro_2_params['TC_G2_TREF'] - - # fit X axis - coef_gyro_2_x = np.polyfit(temp_rel,sensor_gyro_2['x'],3) - gyro_2_params['TC_G2_X3_0'] = coef_gyro_2_x[0] - gyro_2_params['TC_G2_X2_0'] = coef_gyro_2_x[1] - gyro_2_params['TC_G2_X1_0'] = coef_gyro_2_x[2] - gyro_2_params['TC_G2_X0_0'] = coef_gyro_2_x[3] - fit_coef_gyro_2_x = np.poly1d(coef_gyro_2_x) - gyro_2_x_resample = fit_coef_gyro_2_x(temp_rel_resample) - - # fit Y axis - coef_gyro_2_y = np.polyfit(temp_rel,sensor_gyro_2['y'],3) - gyro_2_params['TC_G2_X3_1'] = coef_gyro_2_y[0] - gyro_2_params['TC_G2_X2_1'] = coef_gyro_2_y[1] - gyro_2_params['TC_G2_X1_1'] = coef_gyro_2_y[2] - gyro_2_params['TC_G2_X0_1'] = coef_gyro_2_y[3] - fit_coef_gyro_2_y = np.poly1d(coef_gyro_2_y) - gyro_2_y_resample = fit_coef_gyro_2_y(temp_rel_resample) - - # fit Z axis - coef_gyro_2_z = np.polyfit(temp_rel,sensor_gyro_2['z'],3) - gyro_2_params['TC_G2_X3_2'] = coef_gyro_2_z[0] - gyro_2_params['TC_G2_X2_2'] = coef_gyro_2_z[1] - gyro_2_params['TC_G2_X1_2'] = coef_gyro_2_z[2] - gyro_2_params['TC_G2_X0_2'] = coef_gyro_2_z[3] - fit_coef_gyro_2_z = np.poly1d(coef_gyro_2_z) - gyro_2_z_resample = fit_coef_gyro_2_z(temp_rel_resample) - - # gyro2 vs temperature - plt.figure(3,figsize=(20,13)) - - # draw plots - plt.subplot(3,1,1) - plt.plot(sensor_gyro_2['temperature'],sensor_gyro_2['x'],'b') - plt.plot(temp_resample,gyro_2_x_resample,'r') - plt.title('Gyro 2 Bias vs Temperature') - plt.ylabel('X bias (rad/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - # draw plots - plt.subplot(3,1,2) - plt.plot(sensor_gyro_2['temperature'],sensor_gyro_2['y'],'b') - plt.plot(temp_resample,gyro_2_y_resample,'r') - plt.ylabel('Y bias (rad/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - # draw plots - plt.subplot(3,1,3) - plt.plot(sensor_gyro_2['temperature'],sensor_gyro_2['z'],'b') - plt.plot(temp_resample,gyro_2_z_resample,'r') - plt.ylabel('Z bias (rad/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - pp.savefig() + gyro_2_params['TC_G2_ID'] = int(np.median(sensor_gyro_2['device_id'])) + + # find the min, max and reference temperature + gyro_2_params['TC_G2_TMIN'] = np.amin(sensor_gyro_2['temperature']) + gyro_2_params['TC_G2_TMAX'] = np.amax(sensor_gyro_2['temperature']) + gyro_2_params['TC_G2_TREF'] = 0.5 * (gyro_2_params['TC_G2_TMIN'] + gyro_2_params['TC_G2_TMAX']) + temp_rel = sensor_gyro_2['temperature'] - gyro_2_params['TC_G2_TREF'] + temp_rel_resample = np.linspace(gyro_2_params['TC_G2_TMIN']-gyro_2_params['TC_G2_TREF'], gyro_2_params['TC_G2_TMAX']-gyro_2_params['TC_G2_TREF'], 100) + temp_resample = temp_rel_resample + gyro_2_params['TC_G2_TREF'] + + # fit X axis + coef_gyro_2_x = np.polyfit(temp_rel,sensor_gyro_2['x'],3) + gyro_2_params['TC_G2_X3_0'] = coef_gyro_2_x[0] + gyro_2_params['TC_G2_X2_0'] = coef_gyro_2_x[1] + gyro_2_params['TC_G2_X1_0'] = coef_gyro_2_x[2] + gyro_2_params['TC_G2_X0_0'] = coef_gyro_2_x[3] + fit_coef_gyro_2_x = np.poly1d(coef_gyro_2_x) + gyro_2_x_resample = fit_coef_gyro_2_x(temp_rel_resample) + + # fit Y axis + coef_gyro_2_y = np.polyfit(temp_rel,sensor_gyro_2['y'],3) + gyro_2_params['TC_G2_X3_1'] = coef_gyro_2_y[0] + gyro_2_params['TC_G2_X2_1'] = coef_gyro_2_y[1] + gyro_2_params['TC_G2_X1_1'] = coef_gyro_2_y[2] + gyro_2_params['TC_G2_X0_1'] = coef_gyro_2_y[3] + fit_coef_gyro_2_y = np.poly1d(coef_gyro_2_y) + gyro_2_y_resample = fit_coef_gyro_2_y(temp_rel_resample) + + # fit Z axis + coef_gyro_2_z = np.polyfit(temp_rel,sensor_gyro_2['z'],3) + gyro_2_params['TC_G2_X3_2'] = coef_gyro_2_z[0] + gyro_2_params['TC_G2_X2_2'] = coef_gyro_2_z[1] + gyro_2_params['TC_G2_X1_2'] = coef_gyro_2_z[2] + gyro_2_params['TC_G2_X0_2'] = coef_gyro_2_z[3] + fit_coef_gyro_2_z = np.poly1d(coef_gyro_2_z) + gyro_2_z_resample = fit_coef_gyro_2_z(temp_rel_resample) + + # gyro2 vs temperature + plt.figure(3,figsize=(20,13)) + + # draw plots + plt.subplot(3,1,1) + plt.plot(sensor_gyro_2['temperature'],sensor_gyro_2['x'],'b') + plt.plot(temp_resample,gyro_2_x_resample,'r') + plt.title('Gyro 2 Bias vs Temperature') + plt.ylabel('X bias (rad/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + # draw plots + plt.subplot(3,1,2) + plt.plot(sensor_gyro_2['temperature'],sensor_gyro_2['y'],'b') + plt.plot(temp_resample,gyro_2_y_resample,'r') + plt.ylabel('Y bias (rad/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + # draw plots + plt.subplot(3,1,3) + plt.plot(sensor_gyro_2['temperature'],sensor_gyro_2['z'],'b') + plt.plot(temp_resample,gyro_2_z_resample,'r') + plt.ylabel('Z bias (rad/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + pp.savefig() ################################################################################# @@ -421,75 +421,75 @@ accel_0_params = { # curve fit the data for accel 0 corrections if num_accels >= 1: - accel_0_params['TC_A0_ID'] = int(np.median(sensor_accel_0['device_id'])) - - # find the min, max and reference temperature - accel_0_params['TC_A0_TMIN'] = np.amin(sensor_accel_0['temperature']) - accel_0_params['TC_A0_TMAX'] = np.amax(sensor_accel_0['temperature']) - accel_0_params['TC_A0_TREF'] = 0.5 * (accel_0_params['TC_A0_TMIN'] + accel_0_params['TC_A0_TMAX']) - temp_rel = sensor_accel_0['temperature'] - accel_0_params['TC_A0_TREF'] - temp_rel_resample = np.linspace(accel_0_params['TC_A0_TMIN']-accel_0_params['TC_A0_TREF'], accel_0_params['TC_A0_TMAX']-accel_0_params['TC_A0_TREF'], 100) - temp_resample = temp_rel_resample + accel_0_params['TC_A0_TREF'] - - # fit X axis - correction_x = sensor_accel_0['x'] - np.median(sensor_accel_0['x']) - coef_accel_0_x = np.polyfit(temp_rel,correction_x,3) - accel_0_params['TC_A0_X3_0'] = coef_accel_0_x[0] - accel_0_params['TC_A0_X2_0'] = coef_accel_0_x[1] - accel_0_params['TC_A0_X1_0'] = coef_accel_0_x[2] - accel_0_params['TC_A0_X0_0'] = coef_accel_0_x[3] - fit_coef_accel_0_x = np.poly1d(coef_accel_0_x) - correction_x_resample = fit_coef_accel_0_x(temp_rel_resample) - - # fit Y axis - correction_y = sensor_accel_0['y']-np.median(sensor_accel_0['y']) - coef_accel_0_y = np.polyfit(temp_rel,correction_y,3) - accel_0_params['TC_A0_X3_1'] = coef_accel_0_y[0] - accel_0_params['TC_A0_X2_1'] = coef_accel_0_y[1] - accel_0_params['TC_A0_X1_1'] = coef_accel_0_y[2] - accel_0_params['TC_A0_X0_1'] = coef_accel_0_y[3] - fit_coef_accel_0_y = np.poly1d(coef_accel_0_y) - correction_y_resample = fit_coef_accel_0_y(temp_rel_resample) - - # fit Z axis - correction_z = sensor_accel_0['z']-np.median(sensor_accel_0['z']) - coef_accel_0_z = np.polyfit(temp_rel,correction_z,3) - accel_0_params['TC_A0_X3_2'] = coef_accel_0_z[0] - accel_0_params['TC_A0_X2_2'] = coef_accel_0_z[1] - accel_0_params['TC_A0_X1_2'] = coef_accel_0_z[2] - accel_0_params['TC_A0_X0_2'] = coef_accel_0_z[3] - fit_coef_accel_0_z = np.poly1d(coef_accel_0_z) - correction_z_resample = fit_coef_accel_0_z(temp_rel_resample) - - # accel 0 vs temperature - plt.figure(4,figsize=(20,13)) - - # draw plots - plt.subplot(3,1,1) - plt.plot(sensor_accel_0['temperature'],correction_x,'b') - plt.plot(temp_resample,correction_x_resample,'r') - plt.title('Accel 0 Bias vs Temperature') - plt.ylabel('X bias (m/s/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - # draw plots - plt.subplot(3,1,2) - plt.plot(sensor_accel_0['temperature'],correction_y,'b') - plt.plot(temp_resample,correction_y_resample,'r') - plt.ylabel('Y bias (m/s/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - # draw plots - plt.subplot(3,1,3) - plt.plot(sensor_accel_0['temperature'],correction_z,'b') - plt.plot(temp_resample,correction_z_resample,'r') - plt.ylabel('Z bias (m/s/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - pp.savefig() + accel_0_params['TC_A0_ID'] = int(np.median(sensor_accel_0['device_id'])) + + # find the min, max and reference temperature + accel_0_params['TC_A0_TMIN'] = np.amin(sensor_accel_0['temperature']) + accel_0_params['TC_A0_TMAX'] = np.amax(sensor_accel_0['temperature']) + accel_0_params['TC_A0_TREF'] = 0.5 * (accel_0_params['TC_A0_TMIN'] + accel_0_params['TC_A0_TMAX']) + temp_rel = sensor_accel_0['temperature'] - accel_0_params['TC_A0_TREF'] + temp_rel_resample = np.linspace(accel_0_params['TC_A0_TMIN']-accel_0_params['TC_A0_TREF'], accel_0_params['TC_A0_TMAX']-accel_0_params['TC_A0_TREF'], 100) + temp_resample = temp_rel_resample + accel_0_params['TC_A0_TREF'] + + # fit X axis + correction_x = sensor_accel_0['x'] - np.median(sensor_accel_0['x']) + coef_accel_0_x = np.polyfit(temp_rel,correction_x,3) + accel_0_params['TC_A0_X3_0'] = coef_accel_0_x[0] + accel_0_params['TC_A0_X2_0'] = coef_accel_0_x[1] + accel_0_params['TC_A0_X1_0'] = coef_accel_0_x[2] + accel_0_params['TC_A0_X0_0'] = coef_accel_0_x[3] + fit_coef_accel_0_x = np.poly1d(coef_accel_0_x) + correction_x_resample = fit_coef_accel_0_x(temp_rel_resample) + + # fit Y axis + correction_y = sensor_accel_0['y']-np.median(sensor_accel_0['y']) + coef_accel_0_y = np.polyfit(temp_rel,correction_y,3) + accel_0_params['TC_A0_X3_1'] = coef_accel_0_y[0] + accel_0_params['TC_A0_X2_1'] = coef_accel_0_y[1] + accel_0_params['TC_A0_X1_1'] = coef_accel_0_y[2] + accel_0_params['TC_A0_X0_1'] = coef_accel_0_y[3] + fit_coef_accel_0_y = np.poly1d(coef_accel_0_y) + correction_y_resample = fit_coef_accel_0_y(temp_rel_resample) + + # fit Z axis + correction_z = sensor_accel_0['z']-np.median(sensor_accel_0['z']) + coef_accel_0_z = np.polyfit(temp_rel,correction_z,3) + accel_0_params['TC_A0_X3_2'] = coef_accel_0_z[0] + accel_0_params['TC_A0_X2_2'] = coef_accel_0_z[1] + accel_0_params['TC_A0_X1_2'] = coef_accel_0_z[2] + accel_0_params['TC_A0_X0_2'] = coef_accel_0_z[3] + fit_coef_accel_0_z = np.poly1d(coef_accel_0_z) + correction_z_resample = fit_coef_accel_0_z(temp_rel_resample) + + # accel 0 vs temperature + plt.figure(4,figsize=(20,13)) + + # draw plots + plt.subplot(3,1,1) + plt.plot(sensor_accel_0['temperature'],correction_x,'b') + plt.plot(temp_resample,correction_x_resample,'r') + plt.title('Accel 0 Bias vs Temperature') + plt.ylabel('X bias (m/s/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + # draw plots + plt.subplot(3,1,2) + plt.plot(sensor_accel_0['temperature'],correction_y,'b') + plt.plot(temp_resample,correction_y_resample,'r') + plt.ylabel('Y bias (m/s/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + # draw plots + plt.subplot(3,1,3) + plt.plot(sensor_accel_0['temperature'],correction_z,'b') + plt.plot(temp_resample,correction_z_resample,'r') + plt.ylabel('Z bias (m/s/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + pp.savefig() ################################################################################# @@ -520,75 +520,75 @@ accel_1_params = { # curve fit the data for accel 1 corrections if num_accels >= 2: - accel_1_params['TC_A1_ID'] = int(np.median(sensor_accel_1['device_id'])) - - # find the min, max and reference temperature - accel_1_params['TC_A1_TMIN'] = np.amin(sensor_accel_1['temperature']) - accel_1_params['TC_A1_TMAX'] = np.amax(sensor_accel_1['temperature']) - accel_1_params['TC_A1_TREF'] = 0.5 * (accel_1_params['TC_A1_TMIN'] + accel_1_params['TC_A1_TMAX']) - temp_rel = sensor_accel_1['temperature'] - accel_1_params['TC_A1_TREF'] - temp_rel_resample = np.linspace(accel_1_params['TC_A1_TMIN']-accel_1_params['TC_A1_TREF'], accel_1_params['TC_A1_TMAX']-accel_1_params['TC_A1_TREF'], 100) - temp_resample = temp_rel_resample + accel_1_params['TC_A1_TREF'] - - # fit X axis - correction_x = sensor_accel_1['x']-np.median(sensor_accel_1['x']) - coef_accel_1_x = np.polyfit(temp_rel,correction_x,3) - accel_1_params['TC_A1_X3_0'] = coef_accel_1_x[0] - accel_1_params['TC_A1_X2_0'] = coef_accel_1_x[1] - accel_1_params['TC_A1_X1_0'] = coef_accel_1_x[2] - accel_1_params['TC_A1_X0_0'] = coef_accel_1_x[3] - fit_coef_accel_1_x = np.poly1d(coef_accel_1_x) - correction_x_resample = fit_coef_accel_1_x(temp_rel_resample) - - # fit Y axis - correction_y = sensor_accel_1['y']-np.median(sensor_accel_1['y']) - coef_accel_1_y = np.polyfit(temp_rel,correction_y,3) - accel_1_params['TC_A1_X3_1'] = coef_accel_1_y[0] - accel_1_params['TC_A1_X2_1'] = coef_accel_1_y[1] - accel_1_params['TC_A1_X1_1'] = coef_accel_1_y[2] - accel_1_params['TC_A1_X0_1'] = coef_accel_1_y[3] - fit_coef_accel_1_y = np.poly1d(coef_accel_1_y) - correction_y_resample = fit_coef_accel_1_y(temp_rel_resample) - - # fit Z axis - correction_z = (sensor_accel_1['z'])-np.median(sensor_accel_1['z']) - coef_accel_1_z = np.polyfit(temp_rel,correction_z,3) - accel_1_params['TC_A1_X3_2'] = coef_accel_1_z[0] - accel_1_params['TC_A1_X2_2'] = coef_accel_1_z[1] - accel_1_params['TC_A1_X1_2'] = coef_accel_1_z[2] - accel_1_params['TC_A1_X0_2'] = coef_accel_1_z[3] - fit_coef_accel_1_z = np.poly1d(coef_accel_1_z) - correction_z_resample = fit_coef_accel_1_z(temp_rel_resample) - - # accel 1 vs temperature - plt.figure(5,figsize=(20,13)) - - # draw plots - plt.subplot(3,1,1) - plt.plot(sensor_accel_1['temperature'],correction_x,'b') - plt.plot(temp_resample,correction_x_resample,'r') - plt.title('Accel 1 Bias vs Temperature') - plt.ylabel('X bias (m/s/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - # draw plots - plt.subplot(3,1,2) - plt.plot(sensor_accel_1['temperature'],correction_y,'b') - plt.plot(temp_resample,correction_y_resample,'r') - plt.ylabel('Y bias (m/s/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - # draw plots - plt.subplot(3,1,3) - plt.plot(sensor_accel_1['temperature'],correction_z,'b') - plt.plot(temp_resample,correction_z_resample,'r') - plt.ylabel('Z bias (m/s/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - pp.savefig() + accel_1_params['TC_A1_ID'] = int(np.median(sensor_accel_1['device_id'])) + + # find the min, max and reference temperature + accel_1_params['TC_A1_TMIN'] = np.amin(sensor_accel_1['temperature']) + accel_1_params['TC_A1_TMAX'] = np.amax(sensor_accel_1['temperature']) + accel_1_params['TC_A1_TREF'] = 0.5 * (accel_1_params['TC_A1_TMIN'] + accel_1_params['TC_A1_TMAX']) + temp_rel = sensor_accel_1['temperature'] - accel_1_params['TC_A1_TREF'] + temp_rel_resample = np.linspace(accel_1_params['TC_A1_TMIN']-accel_1_params['TC_A1_TREF'], accel_1_params['TC_A1_TMAX']-accel_1_params['TC_A1_TREF'], 100) + temp_resample = temp_rel_resample + accel_1_params['TC_A1_TREF'] + + # fit X axis + correction_x = sensor_accel_1['x']-np.median(sensor_accel_1['x']) + coef_accel_1_x = np.polyfit(temp_rel,correction_x,3) + accel_1_params['TC_A1_X3_0'] = coef_accel_1_x[0] + accel_1_params['TC_A1_X2_0'] = coef_accel_1_x[1] + accel_1_params['TC_A1_X1_0'] = coef_accel_1_x[2] + accel_1_params['TC_A1_X0_0'] = coef_accel_1_x[3] + fit_coef_accel_1_x = np.poly1d(coef_accel_1_x) + correction_x_resample = fit_coef_accel_1_x(temp_rel_resample) + + # fit Y axis + correction_y = sensor_accel_1['y']-np.median(sensor_accel_1['y']) + coef_accel_1_y = np.polyfit(temp_rel,correction_y,3) + accel_1_params['TC_A1_X3_1'] = coef_accel_1_y[0] + accel_1_params['TC_A1_X2_1'] = coef_accel_1_y[1] + accel_1_params['TC_A1_X1_1'] = coef_accel_1_y[2] + accel_1_params['TC_A1_X0_1'] = coef_accel_1_y[3] + fit_coef_accel_1_y = np.poly1d(coef_accel_1_y) + correction_y_resample = fit_coef_accel_1_y(temp_rel_resample) + + # fit Z axis + correction_z = (sensor_accel_1['z'])-np.median(sensor_accel_1['z']) + coef_accel_1_z = np.polyfit(temp_rel,correction_z,3) + accel_1_params['TC_A1_X3_2'] = coef_accel_1_z[0] + accel_1_params['TC_A1_X2_2'] = coef_accel_1_z[1] + accel_1_params['TC_A1_X1_2'] = coef_accel_1_z[2] + accel_1_params['TC_A1_X0_2'] = coef_accel_1_z[3] + fit_coef_accel_1_z = np.poly1d(coef_accel_1_z) + correction_z_resample = fit_coef_accel_1_z(temp_rel_resample) + + # accel 1 vs temperature + plt.figure(5,figsize=(20,13)) + + # draw plots + plt.subplot(3,1,1) + plt.plot(sensor_accel_1['temperature'],correction_x,'b') + plt.plot(temp_resample,correction_x_resample,'r') + plt.title('Accel 1 Bias vs Temperature') + plt.ylabel('X bias (m/s/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + # draw plots + plt.subplot(3,1,2) + plt.plot(sensor_accel_1['temperature'],correction_y,'b') + plt.plot(temp_resample,correction_y_resample,'r') + plt.ylabel('Y bias (m/s/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + # draw plots + plt.subplot(3,1,3) + plt.plot(sensor_accel_1['temperature'],correction_z,'b') + plt.plot(temp_resample,correction_z_resample,'r') + plt.ylabel('Z bias (m/s/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + pp.savefig() ################################################################################# @@ -619,75 +619,75 @@ accel_2_params = { # curve fit the data for accel 2 corrections if num_accels >= 3: - accel_2_params['TC_A2_ID'] = int(np.median(sensor_accel_2['device_id'])) - - # find the min, max and reference temperature - accel_2_params['TC_A2_TMIN'] = np.amin(sensor_accel_2['temperature']) - accel_2_params['TC_A2_TMAX'] = np.amax(sensor_accel_2['temperature']) - accel_2_params['TC_A2_TREF'] = 0.5 * (accel_2_params['TC_A2_TMIN'] + accel_2_params['TC_A2_TMAX']) - temp_rel = sensor_accel_2['temperature'] - accel_2_params['TC_A2_TREF'] - temp_rel_resample = np.linspace(accel_2_params['TC_A2_TMIN']-accel_2_params['TC_A2_TREF'], accel_2_params['TC_A2_TMAX']-accel_2_params['TC_A2_TREF'], 100) - temp_resample = temp_rel_resample + accel_2_params['TC_A2_TREF'] - - # fit X axis - correction_x = sensor_accel_2['x']-np.median(sensor_accel_2['x']) - coef_accel_2_x = np.polyfit(temp_rel,correction_x,3) - accel_2_params['TC_A2_X3_0'] = coef_accel_2_x[0] - accel_2_params['TC_A2_X2_0'] = coef_accel_2_x[1] - accel_2_params['TC_A2_X1_0'] = coef_accel_2_x[2] - accel_2_params['TC_A2_X0_0'] = coef_accel_2_x[3] - fit_coef_accel_2_x = np.poly1d(coef_accel_2_x) - correction_x_resample = fit_coef_accel_2_x(temp_rel_resample) - - # fit Y axis - correction_y = sensor_accel_2['y']-np.median(sensor_accel_2['y']) - coef_accel_2_y = np.polyfit(temp_rel,correction_y,3) - accel_2_params['TC_A2_X3_1'] = coef_accel_2_y[0] - accel_2_params['TC_A2_X2_1'] = coef_accel_2_y[1] - accel_2_params['TC_A2_X1_1'] = coef_accel_2_y[2] - accel_2_params['TC_A2_X0_1'] = coef_accel_2_y[3] - fit_coef_accel_2_y = np.poly1d(coef_accel_2_y) - correction_y_resample = fit_coef_accel_2_y(temp_rel_resample) - - # fit Z axis - correction_z = sensor_accel_2['z']-np.median(sensor_accel_2['z']) - coef_accel_2_z = np.polyfit(temp_rel,correction_z,3) - accel_2_params['TC_A2_X3_2'] = coef_accel_2_z[0] - accel_2_params['TC_A2_X2_2'] = coef_accel_2_z[1] - accel_2_params['TC_A2_X1_2'] = coef_accel_2_z[2] - accel_2_params['TC_A2_X0_2'] = coef_accel_2_z[3] - fit_coef_accel_2_z = np.poly1d(coef_accel_2_z) - correction_z_resample = fit_coef_accel_2_z(temp_rel_resample) - - # accel 2 vs temperature - plt.figure(6,figsize=(20,13)) - - # draw plots - plt.subplot(3,1,1) - plt.plot(sensor_accel_2['temperature'],correction_x,'b') - plt.plot(temp_resample,correction_x_resample,'r') - plt.title('Accel 2 Bias vs Temperature') - plt.ylabel('X bias (m/s/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - # draw plots - plt.subplot(3,1,2) - plt.plot(sensor_accel_2['temperature'],correction_y,'b') - plt.plot(temp_resample,correction_y_resample,'r') - plt.ylabel('Y bias (m/s/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - # draw plots - plt.subplot(3,1,3) - plt.plot(sensor_accel_2['temperature'],correction_z,'b') - plt.plot(temp_resample,correction_z_resample,'r') - plt.ylabel('Z bias (m/s/s)') - plt.xlabel('temperature (degC)') - plt.grid() - - pp.savefig() + accel_2_params['TC_A2_ID'] = int(np.median(sensor_accel_2['device_id'])) + + # find the min, max and reference temperature + accel_2_params['TC_A2_TMIN'] = np.amin(sensor_accel_2['temperature']) + accel_2_params['TC_A2_TMAX'] = np.amax(sensor_accel_2['temperature']) + accel_2_params['TC_A2_TREF'] = 0.5 * (accel_2_params['TC_A2_TMIN'] + accel_2_params['TC_A2_TMAX']) + temp_rel = sensor_accel_2['temperature'] - accel_2_params['TC_A2_TREF'] + temp_rel_resample = np.linspace(accel_2_params['TC_A2_TMIN']-accel_2_params['TC_A2_TREF'], accel_2_params['TC_A2_TMAX']-accel_2_params['TC_A2_TREF'], 100) + temp_resample = temp_rel_resample + accel_2_params['TC_A2_TREF'] + + # fit X axis + correction_x = sensor_accel_2['x']-np.median(sensor_accel_2['x']) + coef_accel_2_x = np.polyfit(temp_rel,correction_x,3) + accel_2_params['TC_A2_X3_0'] = coef_accel_2_x[0] + accel_2_params['TC_A2_X2_0'] = coef_accel_2_x[1] + accel_2_params['TC_A2_X1_0'] = coef_accel_2_x[2] + accel_2_params['TC_A2_X0_0'] = coef_accel_2_x[3] + fit_coef_accel_2_x = np.poly1d(coef_accel_2_x) + correction_x_resample = fit_coef_accel_2_x(temp_rel_resample) + + # fit Y axis + correction_y = sensor_accel_2['y']-np.median(sensor_accel_2['y']) + coef_accel_2_y = np.polyfit(temp_rel,correction_y,3) + accel_2_params['TC_A2_X3_1'] = coef_accel_2_y[0] + accel_2_params['TC_A2_X2_1'] = coef_accel_2_y[1] + accel_2_params['TC_A2_X1_1'] = coef_accel_2_y[2] + accel_2_params['TC_A2_X0_1'] = coef_accel_2_y[3] + fit_coef_accel_2_y = np.poly1d(coef_accel_2_y) + correction_y_resample = fit_coef_accel_2_y(temp_rel_resample) + + # fit Z axis + correction_z = sensor_accel_2['z']-np.median(sensor_accel_2['z']) + coef_accel_2_z = np.polyfit(temp_rel,correction_z,3) + accel_2_params['TC_A2_X3_2'] = coef_accel_2_z[0] + accel_2_params['TC_A2_X2_2'] = coef_accel_2_z[1] + accel_2_params['TC_A2_X1_2'] = coef_accel_2_z[2] + accel_2_params['TC_A2_X0_2'] = coef_accel_2_z[3] + fit_coef_accel_2_z = np.poly1d(coef_accel_2_z) + correction_z_resample = fit_coef_accel_2_z(temp_rel_resample) + + # accel 2 vs temperature + plt.figure(6,figsize=(20,13)) + + # draw plots + plt.subplot(3,1,1) + plt.plot(sensor_accel_2['temperature'],correction_x,'b') + plt.plot(temp_resample,correction_x_resample,'r') + plt.title('Accel 2 Bias vs Temperature') + plt.ylabel('X bias (m/s/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + # draw plots + plt.subplot(3,1,2) + plt.plot(sensor_accel_2['temperature'],correction_y,'b') + plt.plot(temp_resample,correction_y_resample,'r') + plt.ylabel('Y bias (m/s/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + # draw plots + plt.subplot(3,1,3) + plt.plot(sensor_accel_2['temperature'],correction_z,'b') + plt.plot(temp_resample,correction_z_resample,'r') + plt.ylabel('Z bias (m/s/s)') + plt.xlabel('temperature (degC)') + plt.grid() + + pp.savefig() ################################################################################# @@ -761,41 +761,41 @@ baro_1_params = { if num_baros >= 2: - # curve fit the data for baro 0 corrections - baro_1_params['TC_B1_ID'] = int(np.median(sensor_baro_1['device_id'])) - - # find the min, max and reference temperature - baro_1_params['TC_B1_TMIN'] = np.amin(sensor_baro_1['temperature']) - baro_1_params['TC_B1_TMAX'] = np.amax(sensor_baro_1['temperature']) - baro_1_params['TC_B1_TREF'] = 0.5 * (baro_1_params['TC_B1_TMIN'] + baro_1_params['TC_B1_TMAX']) - temp_rel = sensor_baro_1['temperature'] - baro_1_params['TC_B1_TREF'] - temp_rel_resample = np.linspace(baro_1_params['TC_B1_TMIN']-baro_1_params['TC_B1_TREF'], baro_1_params['TC_B1_TMAX']-baro_1_params['TC_B1_TREF'], 100) - temp_resample = temp_rel_resample + baro_1_params['TC_B1_TREF'] - - # fit data - median_pressure = np.median(sensor_baro_1['pressure']); - coef_baro_1_x = np.polyfit(temp_rel,100*(sensor_baro_1['pressure']-median_pressure),5) # convert from hPa to Pa - baro_1_params['TC_B1_X5'] = coef_baro_1_x[0] - baro_1_params['TC_B1_X4'] = coef_baro_1_x[1] - baro_1_params['TC_B1_X3'] = coef_baro_1_x[2] - baro_1_params['TC_B1_X2'] = coef_baro_1_x[3] - baro_1_params['TC_B1_X1'] = coef_baro_1_x[4] - baro_1_params['TC_B1_X0'] = coef_baro_1_x[5] - fit_coef_baro_1_x = np.poly1d(coef_baro_1_x) - baro_1_x_resample = fit_coef_baro_1_x(temp_rel_resample) - - # baro 1 vs temperature - plt.figure(8,figsize=(20,13)) - - # draw plots - plt.plot(sensor_baro_1['temperature'],100*sensor_baro_1['pressure']-100*median_pressure,'b') - plt.plot(temp_resample,baro_1_x_resample,'r') - plt.title('Baro 1 Bias vs Temperature') - plt.ylabel('Z bias (Pa)') - plt.xlabel('temperature (degC)') - plt.grid() - - pp.savefig() + # curve fit the data for baro 0 corrections + baro_1_params['TC_B1_ID'] = int(np.median(sensor_baro_1['device_id'])) + + # find the min, max and reference temperature + baro_1_params['TC_B1_TMIN'] = np.amin(sensor_baro_1['temperature']) + baro_1_params['TC_B1_TMAX'] = np.amax(sensor_baro_1['temperature']) + baro_1_params['TC_B1_TREF'] = 0.5 * (baro_1_params['TC_B1_TMIN'] + baro_1_params['TC_B1_TMAX']) + temp_rel = sensor_baro_1['temperature'] - baro_1_params['TC_B1_TREF'] + temp_rel_resample = np.linspace(baro_1_params['TC_B1_TMIN']-baro_1_params['TC_B1_TREF'], baro_1_params['TC_B1_TMAX']-baro_1_params['TC_B1_TREF'], 100) + temp_resample = temp_rel_resample + baro_1_params['TC_B1_TREF'] + + # fit data + median_pressure = np.median(sensor_baro_1['pressure']); + coef_baro_1_x = np.polyfit(temp_rel,100*(sensor_baro_1['pressure']-median_pressure),5) # convert from hPa to Pa + baro_1_params['TC_B1_X5'] = coef_baro_1_x[0] + baro_1_params['TC_B1_X4'] = coef_baro_1_x[1] + baro_1_params['TC_B1_X3'] = coef_baro_1_x[2] + baro_1_params['TC_B1_X2'] = coef_baro_1_x[3] + baro_1_params['TC_B1_X1'] = coef_baro_1_x[4] + baro_1_params['TC_B1_X0'] = coef_baro_1_x[5] + fit_coef_baro_1_x = np.poly1d(coef_baro_1_x) + baro_1_x_resample = fit_coef_baro_1_x(temp_rel_resample) + + # baro 1 vs temperature + plt.figure(8,figsize=(20,13)) + + # draw plots + plt.plot(sensor_baro_1['temperature'],100*sensor_baro_1['pressure']-100*median_pressure,'b') + plt.plot(temp_resample,baro_1_x_resample,'r') + plt.title('Baro 1 Bias vs Temperature') + plt.ylabel('Z bias (Pa)') + plt.xlabel('temperature (degC)') + plt.grid() + + pp.savefig() ################################################################################# -- GitLab