Hi,
I’m a graduate student currently using Project Chrono, through PyChrono, for vehicle simulation and fatigue analysis.
The objective of my work is to obtain force and torque data from an HMMWV_Full simulation, performed on SCM terrain, and use these forces and torque as input for FEA analysis of the vehicle’s suspension components.
In my investigation of the double wishbone suspension model, I noticed that the Upper and Lower Control Arms (UCA/LCA) are defined with two hardpoints on the chassis side (front and rear locations). However, in the Chrono model, this is represented with a single revolute joint.
Currently, I am using the following code to obtain joint reaction forces:
reaction = hmmwv.GetSystem().SearchLink("FrontSusp_revoluteUCA_L").GetReaction2()
This provides the reaction force at a joint level, but I’m unsure how to interpret this in relation to the two physical hardpoint locations on the chassis.
For context, here is a snippet of my baseline vehicle setup:
vis_type = veh.VisualizationType_MESH
chassis_collision_type = veh.CollisionType_NONE
tire_model = veh.TireModelType_RIGID
drive_type = veh.DrivelineTypeWV_AWD
engine_model = veh.EngineModelType_SIMPLE
transmission_model = veh.TransmissionModelType_AUTOMATIC_SIMPLE_MAP
steering_type = veh.SteeringTypeWV_PITMAN_ARM
contact_method = chrono.ChContactMethod_SMC
step_size = 10e-3/2
tire_step_size = step_size
render_step_size = 1.0 / 20 # FPS = 50
hmmwv = veh.HMMWV_Full()
hmmwv.SetContactMethod(contact_method)
hmmwv.SetChassisCollisionType(chassis_collision_type)
hmmwv.SetChassisFixed(False)
hmmwv.SetEngineType(engine_model)
hmmwv.SetTransmissionType(transmission_model)
hmmwv.SetDriveType(drive_type)
hmmwv.SetSteeringType(steering_type)
hmmwv.SetInitPosition(chrono.ChCoordsysd(initLoc, initRot))
hmmwv.SetTireType(tire_model)
hmmwv.SetTireStepSize(tire_step_size)
hmmwv.Initialize()
hmmwv.SetChassisVisualizationType(0) # veh.VisualizationType_NONE
hmmwv.SetSuspensionVisualizationType(vis_type)
hmmwv.SetSteeringVisualizationType(vis_type)
hmmwv.SetWheelVisualizationType(vis_type)
hmmwv.SetTireVisualizationType(vis_type)
hmmwv.GetSystem().SetCollisionSystemType(chrono.ChCollisionSystem.Type_BULLET)
My questions are:
Best regards,
Yang Kang Chua
Yang Kang,
With the default vehicle model in Chrono where all bodies are rigid, the kinematic connection between the chassis and a suspension control arm is fully defined with a single revolute joint. The two hardpoints are provided so that we can define the direction of the axis of rotation of that revolute joint (and for purposes of visualizing the control arm). Using two (co-axial) revolute joints would result in a system with redundant constraints. While some of the Chrono solvers can deal with such systems, that would still not help you in extracting meaningful reaction forces, as these are non-unique in a system with redundant constraints.
Bottom line is that you cannot get meaningful reaction torques in such cases unless you model at least one of the connected bodies as deformable. You can do that with the Chrono::FEA capabilities, but this is not exposed in the Chrono::Vehicle templates.
--Radu
--
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
projectchron...@googlegroups.com.
To view this discussion visit
https://groups.google.com/d/msgid/projectchrono/d85dab3d-68b4-4b81-a800-045b206ebba0n%40googlegroups.com.
I forgot to mention the most straightforward approach: replacing the kinematic joints with bushings.
Now, while some of the Chrono::Vehicle templates (including ChDoubleWishbone) support using a bushing in place of the ideal revolute joint to connect a control arm to the chassis, they are still set up to use only one such element. However, using compliant bushings makes it possible to use 2 of them to connect a control arm to the chassis and allow extracting meaningful reactions at these 2 connection points.
The easiest way to do this in Chrono::Vehicle, that does not require writing a new suspension template, is to use the ChGenericWheeledSuspension template which allows you to define an arbitrary suspension mechanism specified via a JSON file. You can simply modify the sample HMMWV_DoubleWishboneFront_replica.json specification file provided as an example in the Chrono distribution.
--Radu