[OPEN-SOURCE] Machinery Modelling Toolkit

I added a log message to the suspension force calculation and set debug mode on the SuspL01 wheel

in the function: void UMMTSuspensionStack::CalculateAndApplySuspensionForce(const float& DeltaTime)



if (SuspensionSettings.bEnableDebugMode)
    {
        UE_LOG(MMT_Log, Error, TEXT("delta time:	%s Spring Force	%s Damping:	%s Spring delta:	%s SuspensionForceMagnitude	%s Suspension Force:	%s"),
            *FString::SanitizeFloat(DeltaTime, 6),
            *FString::SanitizeFloat(SpringForce, 6),
            *FString::SanitizeFloat(SpringDamping, 6),
            *FString::SanitizeFloat(SpringDelta, 6),
            *FString::SanitizeFloat(SuspensionForceMagnitude, 6),
            *FString::SanitizeFloat(SuspensionForceWS.Size(), 6)
        );

        DrawDebugLine(ParentComponentRef->GetWorld(), ReferenceFrameTransform.GetLocation(), ReferenceFrameTransform.GetLocation() + SuspensionForceWS * 0.0001f, FColor::Blue, false, 0.0f, 50, 1.0f);
        DrawDebugString(ParentComponentRef->GetWorld(), ReferenceFrameTransform.GetLocation(), FString::SanitizeFloat(SuspensionForceMagnitude), 0, FColor::Blue, 0.0f, false);
    }

Looking at the output I can see a significant difference in the final forces being calculated.

In this set of entries from around first contact with the ground: (debug “stable” first, non-debug “unstable” second)



MMT_Log: Error: delta time: 0.011111 Spring Force   0.000000 Damping:   0.000000 Spring delta:  0.000000 Suspension Force:  0.000000
MMT_Log: Error: delta time: 0.011111 Spring Force   0.000000 Damping:   0.000000 Spring delta:  0.000000 Suspension Force:  0.000000
MMT_Log: Error: delta time: 0.011111 Spring Force   546858.000000 Damping:  -546858.000000 Spring delta:    0.841320 Suspension Force:  1093715.875000
MMT_Log: Error: delta time: 0.011111 Spring Force   713410.187500 Damping:  -713410.187500 Spring delta:    2.121735 Suspension Force:  1426820.250000
MMT_Log: Error: delta time: 0.011111 Spring Force   738128.000000 Damping:  -738128.000000 Spring delta:    3.338608 Suspension Force:  1476255.875000

MMT_Log: Error: delta time: 0.011111 Spring Force   0.000000 Damping:   0.000000 Spring delta:  0.000000 Suspension Force:  0.000000
MMT_Log: Error: delta time: 0.011111 Spring Force   0.000000 Damping:   0.000000 Spring delta:  0.000000 Suspension Force:  0.000000
MMT_Log: Error: delta time: 0.011111 Spring Force   546855.562500 Damping:  -546855.562500 Spring delta:    0.841316 Suspension Force:  217897360.000000
MMT_Log: Error: delta time: 0.011111 Spring Force   1462500.000000 Damping: -1462500.000000 Spring delta:   39.998283 Suspension Force: 582740480.000000
MMT_Log: Error: delta time: 0.011111 Spring Force   1462500.000000 Damping: -481.977570 Spring delta:   39.998821 Suspension Force: 291466272.000000


Comparing the two lines:



MMT_Log: Error: delta time: 0.011111 Spring Force   546858.000000 Damping:  -546858.000000 Spring delta:    0.841320 Suspension Force:  1093715.875000
MMT_Log: Error: delta time: 0.011111 Spring Force   546855.562500 Damping:  -546855.562500 Spring delta:    0.841316 Suspension Force:  217897360.000000


The spring movement, force and damping calculations are almost identical, but the final vector magnitude differs wildly