In [1]:
%load_ext autoreload
%autoreload 2
%pylab inline


Populating the interactive namespace from numpy and matplotlib

In [2]:
import px4tools.ulog
import pandas
import os
import pickle
import scipy.interpolate
import px4tools.version


attempting to monkey patch pandas timedelta series plotting
monkey patch suceeded

In [3]:
pandas.__version__


Out[3]:
'0.19.2'

In [4]:
px4tools.version.git_revision


Out[4]:
'605ac5bce713b291735e5985495d567a6486a8c7'

In [5]:
d_gyro = px4tools.ulog.cached_log_processing(
    log='/home/jgoppert/.ros/rootfs/fs/microsd/log/2017-01-09/11_39_44.ulg',
    msg_filter='sensor_gyro',
    processing_func=lambda x: x['sensor_gyro_0'].resample('1 s').agg('mean'),
    save_path='./logs/01-09-17-sitl-gyro_0.ulg',
    force_processing=False)
px4tools.ulog.noise_analysis_sensor(d_gyro, 'sensor_gyro_0')


Out[5]:
{'sensor_gyro_0_randomwalk_correlation_time': [497.524067776989,
  341.17280940732462,
  310.2112931399671],
 'sensor_gyro_0_sig_bi': [0.00024548489539618029,
  0.00021836986760427653,
  0.00021215279618520583],
 'sensor_gyro_0_sig_rrw': [4.200662229478553e-05,
  3.1129222243218694e-05,
  2.5693903056078307e-05],
 'sensor_gyro_0_sig_rw': [0.00044528797171410349,
  0.00044417578975201167,
  0.00046116195337055977],
 'sensor_gyro_0_tau_0': [3.0280968202761174,
  3.5570525487281088,
  3.6882780618553483],
 'sensor_gyro_0_tau_1': [18.360471489369434,
  24.714238901683775,
  31.08737244054327],
 'sensor_gyro_0_tau_2': [111.32633245234501,
  171.71340488289968,
  262.02599398671668]}

In [6]:
d_accel = px4tools.ulog.cached_log_processing(
    log='/home/jgoppert/.ros/rootfs/fs/microsd/log/2017-01-09/11_39_44.ulg',
    msg_filter='sensor_accel',
    processing_func=lambda x: x['sensor_accel_0'].resample('100 ms').agg('mean'),
    save_path='./logs/01-09-17-sitl-accel_0.ulg',
    force_processing=False)
px4tools.ulog.noise_analysis_sensor(d_accel, 'sensor_accel_0')


Out[6]:
{'sensor_accel_0_randomwalk_correlation_time': [268.68139981595687,
  209.78425823185734,
  480.4206209430659],
 'sensor_accel_0_sig_bi': [0.011793571078171021,
  0.011316792920162785,
  0.011367329123655862],
 'sensor_accel_0_sig_rrw': [0.0052528103190016716,
  0.0046480979277521957,
  0.0043801939632010243],
 'sensor_accel_0_sig_rw': [0.0052322894123085443,
  0.0052827182792559184,
  0.005239359667007306],
 'sensor_accel_0_tau_0': [0.11532245572981317,
  0.12387462436860516,
  0.11187226898462557],
 'sensor_accel_0_tau_1': [1.7252842862495552,
  1.9685334956290301,
  2.0717888793563737],
 'sensor_accel_0_tau_2': [25.811155767905873,
  31.282630669236244,
  38.367945868824982]}

In [7]:
d_mag = px4tools.ulog.cached_log_processing(
    log='/home/jgoppert/.ros/rootfs/fs/microsd/log/2017-01-09/11_39_44.ulg',
    msg_filter='sensor_mag',
    processing_func=lambda x: x['sensor_mag_0'].resample('100 ms').agg('mean'),
    save_path='./logs/01-09-17-sitl-mag_0.ulg',
    force_processing=False)

In [8]:
B_b = np.array([
        d_mag.t_sensor_mag_0__f_x.ffill(), d_mag.t_sensor_mag_0__f_y.ffill(), d_mag.t_sensor_mag_0__f_z.ffill()]).T
B_b_mean = B_b.mean(axis=0)
B_b_mean[2] = 0
B_b[:,2] = 0
mag_heading_error = pandas.Series(
    np.arcsin(np.cross(B_b_mean, B_b)[:,2]/np.linalg.norm(B_b, axis=1)/np.linalg.norm(B_b_mean)),
    d_mag.index, name='heading error')
mag_heading_error.plot()
ylabel('heading error, rad')


Out[8]:
<matplotlib.text.Text at 0x7f3de986dbe0>

In [9]:
res_mag = px4tools.plot_allan_std_dev(mag_heading_error)
legend()
title('Magnetic Heading Allan Variance')
res_mag


Out[9]:
{'sig_bi': 0,
 'sig_rrw': 0,
 'sig_rw': 0.0047145171303446028,
 'tau_0': 0.82502646895725862,
 'tau_1': nan,
 'tau_2': nan}

In [10]:
px4tools.plot_autocorrelation(mag_heading_error)


Out[10]:
502.53172809553433

In [11]:
d_baro = px4tools.ulog.cached_log_processing(
    log='/home/jgoppert/.ros/rootfs/fs/microsd/log/2017-01-09/11_39_44.ulg',
    msg_filter='sensor_baro',
    processing_func=lambda x: x['sensor_baro_0'].resample('100 ms').agg('mean'),
    save_path='./logs/01-09-17-sitl-baro_0.pkl',
    force_processing=False)
res = px4tools.ulog.plot_allan_std_dev(d_baro.t_sensor_baro_0__f_altitude)
figure()
tau = px4tools.ulog.plot_autocorrelation(d_baro.t_sensor_baro_0__f_altitude)
res, tau


Out[11]:
({'sig_bi': 0,
  'sig_rrw': 0,
  'sig_rw': 0.011988200563997934,
  'tau_0': 1,
  'tau_1': nan,
  'tau_2': nan},
 1121.1864448826323)

In [12]:
d_baro_f = px4tools.ulog.cached_log_processing(
    log='/home/jgoppert/.ros/rootfs/fs/microsd/log/2017-01-09/11_39_44.ulg',
    msg_filter='sensor_baro',
    processing_func=lambda x: x['sensor_baro_0'],
    save_path='./logs/01-09-17-sitl-baro_0_full.pkl',
    force_processing=False)
res = px4tools.ulog.plot_allan_std_dev(d_baro_f.t_sensor_baro_0__f_pressure)
figure()
tau = px4tools.ulog.plot_autocorrelation(d_baro_f.t_sensor_baro_0__f_pressure)
res, tau


Out[12]:
({'sig_bi': 0,
  'sig_rrw': 0,
  'sig_rw': 0.0014896578493739576,
  'tau_0': 0.83410174142840465,
  'tau_1': nan,
  'tau_2': nan},
 1156.2443561384378)

In [13]:
d_gps = px4tools.ulog.cached_log_processing(
    log='/home/jgoppert/.ros/rootfs/fs/microsd/log/2017-01-09/11_39_44.ulg',
    msg_filter='vehicle_gps_position',
    processing_func=lambda x: x['vehicle_gps_position_0'],
    save_path='./logs/01-09-17-sitl-gps.pkl',
    force_processing=False)