Welcome to px4tools’s documentation!

Contents:

Module: logsysid

Analyze a PX4 log to perform sysid and control design.

px4tools.logsysid.attitude_control_design(name, y, u, rolling_mean_window=100, do_plot=False, verbose=False, d_tc=0.008)

Do sysid and control design for roll/pitch rate loops. :param name: :param y: output :param u: input :param rolling_mean_window: number of samples in rolling mean :param do_plot: controls plotting :param verbose: show debug output :param d_tc: derivative time constant :return: (gain, closed loop transfer function)

px4tools.logsysid.attitude_sysid(y_acc, u_mix, verbose=False)

roll/pitch system id assuming delay/gain model :param y_acc: (roll or pitch acceleration) :param u_mix: (roll or pitch acceleration command) :param verbose: show debug output :return: (G_ol, delay, k)

G_ol: open loop plant delay: time delay (sec) k: gain
px4tools.logsysid.calculate_fitness(k, delay, y, u, dt)

Find how well the function fits the data

px4tools.logsysid.control_design(raw_data, do_plot=False, rolling_mean_window=100, verbose=False)

Design a PID controller from log file. :param raw_data: data frame :param do_plot: controls plotting :param rolling_mean_window: number of rolling mean samples :param verbose: show debug output :return: (gain ordered dict, local variables)

px4tools.logsysid.control_design_ulog(raw_data, do_plot=False, rolling_mean_window=100, verbose=False)

Design a PID controller from log file. TODO, debug this :param raw_data: data frame :param do_plot: controls plotting :param rolling_mean_window: number of rolling mean samples :param verbose: show debug output :return: (gain ordered dict, local variables)

px4tools.logsysid.delay_and_gain_fit_fun(x, y, u, dt)

Fitness function for delay_and_gain_sysid :param x: state (k, delay) :param y: output :param u: input :param dt: period (sec) :return: the fitness cost

px4tools.logsysid.delay_and_gain_sysid(y, u, verbose=False)

Finds gain and time delay to best fit output y to input u :param y: output :param u: input :param verbose: show debug output :return: (k, delay)

px4tools.logsysid.lqr_ofb_con(K, R, Q, X, ss_o)

Constraint for LQR output feedback optimization. This asserts that all eigenvalues are negative so that the system is stable. @K gain matrix @Q process noise covariance matrix @X initial state covariance matrix @ss_o open loop state space system @return constraint

px4tools.logsysid.lqr_ofb_cost(K, R, Q, X, ss_o)

Cost for LQR output feedback optimization. @K gain matrix @Q process noise covariance matrix @X initial state covariance matrix @ss_o open loop state space system @return cost

px4tools.logsysid.lqr_ofb_design(K_guess, ss_o, verbose=False)

LQR output feedback controller design. @K_guess initial stabilizing gains @ss_o open loop state space system @return gain matrix

px4tools.logsysid.lqr_ofb_jac(K, R, Q, X, ss_o)

Jacobian for LQR Output feedback optimization. TODO: might be an error here, doesn’t not help optim

px4tools.logsysid.pid_design(G, K_guess, d_tc, verbose=False, use_P=True, use_I=True, use_D=True)
Parameters:
  • G – transfer function
  • K_guess – gain matrix guess
  • d_tc – time constant for derivative
  • verbose – show debug output
  • use_P – use p gain in design
  • use_I – use i gain in design
  • use_D – use d gain in design
Returns:

(K, G_comp, Gc_comp) K: gain matrix G_comp: open loop compensated plant Gc_comp: closed loop compensated plant

px4tools.logsysid.plot_delay_and_gain_fit(k, delay, y, u, dt=0.001)

Plot the delay and gain fit vs the actual output.

px4tools.logsysid.plot_loops(name, G_ol, G_cl)

Plot loops :param name: Name of axis :param G_ol: open loop transfer function :param G_cl: closed loop transfer function

px4tools.logsysid.setup_data(df)

Resample a dataframe at 1 ms to prep for sysid. :param df: pandas DataFrame of px4log :return: (df_rs, dt) resample dataframe and period (1 ms)

Module: analysis

Analysis of px4 logs

px4tools.analysis.all_new_sample(df)
px4tools.analysis.alt_analysis(data, min_alt=None, max_alt=None)

Altitude analysis.

px4tools.analysis.background_flight_modes(data)

Overlays a background color for each flight mode. Can be called to style a graph.

px4tools.analysis.filter_finite(data)
px4tools.analysis.find_lpe_gains(df, printing=False)
px4tools.analysis.find_meas_period(series)
px4tools.analysis.get_auto_data(data)

Extract auto data.

px4tools.analysis.get_float_data(dataframe)

Get float data out of dataframe.

px4tools.analysis.isfloatarray(cell)

Convert cell to float if possible.

px4tools.analysis.new_sample(series)
px4tools.analysis.octa_cox_data_to_ss(data)

Extracts state space model data from octa cox log.

px4tools.analysis.plot_attitude_loops(data)

Plot attitude loops.

px4tools.analysis.plot_attitude_rate_loops(data)

Plot attitude rate control loops.

px4tools.analysis.plot_control_loops(data)

Plot all control loops.

px4tools.analysis.plot_faults(data)
px4tools.analysis.plot_modes(data)
px4tools.analysis.plot_position_loops(data)

Plot position loops.

px4tools.analysis.plot_timeouts(data)
px4tools.analysis.plot_velocity_loops(data)

Plot velocity loops.

px4tools.analysis.pos_analysis(data)

Analyze position.

px4tools.analysis.process_all(data_frame, project_lat_lon=True, lpe_health=True)
px4tools.analysis.process_data(data)
px4tools.analysis.process_lpe_health(data)
px4tools.analysis.set_time_series(data)

Set data to use time series

px4tools.analysis.statistics(df, keys=None, plot=False)

Module: mapping

Indices and tables