Example #1
0
def suspension_vel_der_diff_l_r_f_r_over_time(ax, session_data):

    race_time = data_processing.get_run_time_cleaned(session_data=session_data)
    susp_fl = session_data[networking.Fields.susp_fl.value]
    susp_fr = session_data[networking.Fields.susp_fr.value]
    susp_rl = session_data[networking.Fields.susp_rl.value]
    susp_rr = session_data[networking.Fields.susp_rr.value]
    susp_data = [susp_fl, susp_fr, susp_rl, susp_rr]
    susp_data = [
        data_processing.derive_no_nan(susp, race_time) for susp in susp_data
    ]

    susp_vel_fl = session_data[networking.Fields.susp_vel_fl.value]
    susp_vel_fr = session_data[networking.Fields.susp_vel_fr.value]
    susp_vel_rl = session_data[networking.Fields.susp_vel_rl.value]
    susp_vel_rr = session_data[networking.Fields.susp_vel_rr.value]
    susp_vel = [susp_vel_fl, susp_vel_fr, susp_vel_rl, susp_vel_rr]

    susp_data = np.array(susp_data) - np.array(susp_vel)

    labels = ['susp_fl', 'susp_fr', 'susp_rl', 'susp_rr']
    x_points = np.array([race_time] * len(susp_data))
    y_points = np.array(susp_data)

    line_plot(ax,
              x_points=x_points,
              y_points=y_points,
              title='Suspension velocity derived over time',
              labels=labels,
              alpha=0.5,
              x_label='Time (s)',
              y_label='Suspension velocity derived - given (mm/s)',
              flip_y=True,
              min_max_annotations=True)
Example #2
0
def drift_angle_change_bars(ax, session_data):

    race_time = data_processing.get_run_time_cleaned(session_data=session_data)
    time_differences = data_processing.differences(race_time)
    # prevent negative times due to next lap
    time_differences[time_differences < 0.0] = np.finfo(
        time_differences.dtype).eps
    speed_ms = session_data[networking.Fields.speed_ms.value]
    drift_angle_deg = data_processing.get_drift_angle(session_data)
    drift_angle_deg_der = data_processing.derive_no_nan(drift_angle_deg,
                                                        time_steps=race_time)

    # filter very slow parts
    fast_enough = speed_ms > 1.0  # m/s
    drift_angle_deg_der = drift_angle_deg_der[fast_enough]
    drift_angle_deg_der = np.abs(drift_angle_deg_der)

    # filter out rare extreme values
    outlier_threshold = np.nanpercentile(drift_angle_deg_der, 99)
    usual_values = drift_angle_deg_der < outlier_threshold
    drift_angle_deg_der = drift_angle_deg_der[usual_values]

    time_differences = time_differences[fast_enough]
    time_differences = time_differences[usual_values]
    series_labels = ['']

    bar_plot(ax,
             data=[drift_angle_deg_der],
             weights=[time_differences],
             num_bins=10,
             title='Drift Angle Change Histogram',
             x_label='Drift Angle Change (deg/s)',
             y_label='Accumulated Time (s)',
             series_labels=series_labels)
Example #3
0
def power_over_time(ax, session_data):
    race_time = data_processing.get_run_time_cleaned(session_data=session_data)
    energy, kinetic_energy, potential_energy = data_processing.get_energy(
        session_data=session_data)
    power = data_processing.derive_no_nan(energy, race_time)
    full_acceleration = data_processing.get_full_acceleration_mask(
        session_data=session_data)
    not_full_acceleration = np.logical_not(full_acceleration)
    power_full_acceleration = power.copy()
    power_full_acceleration[not_full_acceleration] = 0.0
    power_not_full_acceleration = power.copy()
    power_not_full_acceleration[full_acceleration] = 0.0
    power_data = np.array(
        [power_full_acceleration, power_not_full_acceleration])

    labels = ['Power at full throttle (kW)', 'Power otherwise (kW)']
    y_points = power_data
    x_points = np.array([race_time] * y_points.shape[0])

    line_plot(ax,
              x_points=x_points,
              y_points=y_points,
              title='Power over time',
              labels=labels,
              alpha=0.5,
              x_label='Time (s)',
              y_label='Power (kW)',
              min_max_annotations=False)
Example #4
0
def drift_over_speed(ax, session_data):

    steering = np.abs(session_data[networking.Fields.steering.value])
    speed_ms = session_data[networking.Fields.speed_ms.value]
    drift_angle_deg = data_processing.get_drift_angle(session_data)
    race_time = data_processing.get_run_time_cleaned(session_data=session_data)
    drift_angle_deg_der = data_processing.derive_no_nan(drift_angle_deg,
                                                        time_steps=race_time)

    # filter very slow parts
    fast_enough = speed_ms > 1.0  # m/s
    steering = steering[fast_enough]
    speed_ms = speed_ms[fast_enough]
    # drift_angle_deg = drift_angle_deg[fast_enough]
    drift_angle_deg_der = drift_angle_deg_der[fast_enough]

    colors = [steering]
    scales = [25]
    alphas = [0.5]
    labels = ['drift over steer']

    # scatter_plot(ax, x_points=[speed_ms], y_points=[drift_angle_deg],
    #              title='Drift over speed (steering as color)',
    #              labels=labels, colors=colors, scales=scales, alphas=alphas,
    #              x_label='Speed (m/s)', y_label='Drift angle (deg)')
    scatter_plot(ax,
                 x_points=[speed_ms],
                 y_points=[drift_angle_deg_der],
                 title='Drift change over speed (steering as color)',
                 labels=labels,
                 colors=colors,
                 scales=scales,
                 alphas=alphas,
                 x_label='Speed (m/s)',
                 y_label='Drift angle (deg/s)')
Example #5
0
def plot_p_over_vel(ax, session_data):

    data_gear = session_data[networking.Fields.gear.value]
    range_gears = list(set(data_gear))
    range_gears.sort()

    labels = ['Gear {}'.format(str(g)) for g in range_gears]
    scale = 50.0
    alphas = [0.5] * len(labels)
    colors = [static_colors[i] for i, g in enumerate(range_gears)]
    full_acceleration_mask = data_processing.get_full_acceleration_mask(
        session_data=session_data)

    energy, kinetic_energy, potential_energy = data_processing.get_energy(
        session_data=session_data)
    times_steps = data_processing.get_run_time_cleaned(
        session_data=session_data)
    power = data_processing.derive_no_nan(x=energy,
                                          time_steps=times_steps) / 1000.0

    x_points = []
    y_points = []
    scales = []
    for gear in range_gears:
        current_gear = session_data[networking.Fields.gear.value] == gear
        interesting = np.logical_and(current_gear, full_acceleration_mask)

        speed_ms = session_data[networking.Fields.speed_ms.value]
        x_points += [speed_ms[interesting]]
        y_points += [power[interesting]]
        scales += [np.ones_like(speed_ms[interesting]) * scale]

    scatter_plot(ax,
                 x_points=x_points,
                 y_points=y_points,
                 title='Power over velocity (full throttle)',
                 labels=labels,
                 colors=colors,
                 scales=scales,
                 alphas=alphas,
                 x_label='Velocity (m/s)',
                 y_label='Power (kW)')