4 const Eigen::VectorXd& dynamic_state)
const {
5 if (dynamic_state.size() != 2) {
6 throw std::invalid_argument(
7 "Dynamic state for Rigid Body Load Transfer Model must contain exactly two elements: "
8 "lateral and longitudinal accelerations.");
12 double longitudinal_acceleration = dynamic_state(0);
13 double lateral_acceleration = dynamic_state(1);
19 double front_weight_distribution =
21 double rear_weight_distribution = 1.0 - front_weight_distribution;
25 double Fz_total = mass * g;
26 double front_wheel_static_load = front_weight_distribution * Fz_total / 2.0;
27 double rear_wheel_static_load = rear_weight_distribution * Fz_total / 2.0;
30 double longitudinal_transfer = (mass * longitudinal_acceleration * cog_height) / wheelbase;
31 double lateral_transfer = (mass * lateral_acceleration * cog_height) / track_width;
33 Eigen::Vector4d loads;
35 loads(0) = front_wheel_static_load - longitudinal_transfer / 2.0 - lateral_transfer / 2.0;
36 loads(1) = front_wheel_static_load - longitudinal_transfer / 2.0 + lateral_transfer / 2.0;
37 loads(2) = rear_wheel_static_load + longitudinal_transfer / 2.0 - lateral_transfer / 2.0;
38 loads(3) = rear_wheel_static_load + longitudinal_transfer / 2.0 + lateral_transfer / 2.0;
Eigen::Vector4d compute_loads(const Eigen::VectorXd &dynamic_state) const override
Computes loads on the tires based on the dynamic state of the vehicle.