Hi Developers,
We would like to ask about the calculations of tire forces in tire frame of
wheeled vehicle. The function ReportTireForce reports the tire forces in
global frame and we want to examine it in local frame. Here are our
calculations:
WheelState state0 = vehicle.GetWheel(0,
VehicleSide::LEFT)->GetState();
ChVector<> wheel_normal0 = state0.rot.GetYaxis();
ChVector<> contact_point = ChVector<>(state0.pos.x(),
state0.pos.y(), terrain.GetHeight(state0.pos));
ChVector<> Z_dir0 = terrain.GetNormal(contact_point);
ChVector<> X_dir0 = Vcross(wheel_normal0, Z_dir0);
X_dir0.Normalize();
ChVector<> Y_dir0 = Vcross(Z_dir0, X_dir0);
ChMatrix33<> rot0;
rot0.Set_A_axis(X_dir0, Y_dir0, Z_dir0);
ChMatrix33<> rot0inv = rot0.transpose();
double alpha_fl = vehicle.GetTire(0,
VehicleSide::LEFT)->GetSlipAngle();
double kappa_fl = vehicle.GetTire(0,
VehicleSide::LEFT)->GetLongitudinalSlip();
ChVector<> F_fl = rot0inv * (vehicle.GetTire(0,
VehicleSide::LEFT)->ReportTireForce(&terrain).force);
ChVector<> M_fl = rot0inv * (vehicle.GetTire(0,
VehicleSide::LEFT)->ReportTireForce(&terrain).moment);
This calculation meets our expectation to some extent. We reimplement the
exact same Pacejka tire force as used in Project Chrono. And we use the
exact tire force parameters. To make sure it's not the camber angle
problem, we override the camber angle in ChPac02tire.cpp and make it 0 all
the time. Our expectations are that they should behave the exactly the
same. But the calculation shows that there's an offset when we are using
our matlab calculation.
[image: tire_force.png]
It is not a big deviation in terms of tire force, but it does matter when
we are using this in yaw rate calculation.
The other one is to use the spindle's rotation to transform the tire
forces. That result huge deviations, so we suspect we got it wrong
somewhere. Here's the code:
ChQuaternion<> rot0inv = vehicle.GetSpindleRot(0,
VehicleSide::LEFT);
double alpha_fl = vehicle.GetTire(0,
VehicleSide::LEFT)->GetSlipAngle();
double kappa_fl = vehicle.GetTire(0,
VehicleSide::LEFT)->GetLongitudinalSlip();
ChVector<> F_fl = rot0inv.Rotate((vehicle.GetTire(0,
VehicleSide::LEFT)->ReportTireForce(&terrain).force));
ChVector<> M_fl = rot0inv.Rotate(vehicle.GetTire(0,
VehicleSide::LEFT)->ReportTireForce(&terrain).moment);
We are wondering what is the exact correct way to get the tire forces in
tire frame.
Thanks in advance!
Siyuan
--
You received this message because you are subscribed to the Google Groups
"ProjectChrono" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/projectchrono/8f4acfa4-81a7-411c-9490-cff47d94f77bn%40googlegroups.com.