@sh.add_function(dsp, outputs=['r_dynamic'], weight=10)
def identify_r_dynamic_v1(
velocities, gears, gear_box_speeds_in, gear_box_ratios,
final_drive_ratios, stop_velocity):
"""
Identifies the dynamic radius of the wheels [m].
:param velocities:
Vehicle velocity [km/h].
:type velocities: numpy.array
:param gears:
Gear vector [-].
:type gears: numpy.array
:param gear_box_speeds_in:
Gear box speed [RPM].
:type gear_box_speeds_in: numpy.array
:param gear_box_ratios:
Gear box ratios [-].
:type gear_box_ratios: dict[int, float | int]
:param final_drive_ratios:
Final drive ratios [-].
:type final_drive_ratios: dict[int, float | int]
:param stop_velocity:
Maximum velocity to consider the vehicle stopped [km/h].
:type stop_velocity: float
:return:
Dynamic radius of the wheels [m].
:rtype: float
"""
import numpy as np
from co2mpas.utils import reject_outliers
from .gear_box import mechanical as gb_mec
svr = gb_mec.calculate_speed_velocity_ratios(
gear_box_ratios, final_drive_ratios, 1.0
)
vsr = gb_mec.calculate_velocity_speed_ratios(svr)
speed_x_r_dyn_ratios = gb_mec.calculate_gear_box_speeds_in(
gears, velocities, vsr, stop_velocity
)
with np.errstate(divide='ignore', invalid='ignore'):
r_dynamic = speed_x_r_dyn_ratios / gear_box_speeds_in
r_dynamic = r_dynamic[np.isfinite(r_dynamic)]
r_dynamic = reject_outliers(r_dynamic)[0]
return r_dynamic