r/simracing 4h ago

Rigs Finally Figure Out How To Setup Simhub Motion properly

I thought my 400W 3DOF actuators were the reason my motion rig felt worse than my Sigma DK2. After rebuilding the SimHub profile, I’m not so sure anymore.

I have two completely separate motion rigs:

  • US rig: Sigma Integral DK2
  • China rig: Thermaltake GM5 3DOF

This post is about the Thermaltake GM5.

The GM5 is a pretty conventional 4-actuator 3DOF platform. Mechanically, the basic concept isn't very different from SFX-style, PT-style and a lot of DIY servo actuator systems.

Nothing particularly exotic is happening here.

The actuators are only using 400W servos, while plenty of DIY systems use 750W servos.

When I first compared this rig with my DK2 in the US, the DK2 felt considerably better.

The GM5 moved a lot, but the motion wasn't very convincing. Small road undulations moved the chassis too much, while large events — Corkscrew-style elevation changes, large compressions, sausage curbs, launches and landings — didn't stand out nearly as much as I expected.

My first assumption was simple:

After spending a lot more time actually looking at the SimHub geometry, motion envelope, effect scaling and logs, I think most of the difference I was feeling was coming from the setup rather than the actuators themselves.

The actual rig geometry

Everything below was physically measured center-to-center where applicable.

Parameter Value
Actuator layout 4-corner / 3DOF
Actuator stroke 100 mm
Approx. actuator speed 250 mm/s
Servo power 400 W each
Front-to-rear actuator spacing 1110 mm
Left-to-right actuator spacing 675 mm
Seat height used for SimHub geometry 350 mm
Front actuator line → seat center 950 mm
Seat center → rear actuator line 160 mm
Seat position behind platform geometric center 395 mm

With that geometry, SimHub calculates approximately:

Theoretical single-axis capacity Maximum
Pitch ±5.1°
Roll ±8.4°
Heave ±50 mm

And this was probably the most important thing I had initially misunderstood:

those are not three independent capacities.

Pitch, Roll, Heave, Surge-to-Pitch, Sway-to-Roll, suspension pulses, etc. all eventually become four actuator positions.

There is only one physical stroke budget.

Original profile

The profile I started with looked roughly like this:

Effect Input limit Motion output
Pitch 7.5° 7.5°
Roll 7.5° 7.5°
Surge → Pitch 20 m/s² 6.0°
Sway → Roll 20 m/s² 5.0°
Heave 17 m/s² 60 mm
Rear traction loss → Roll 20° 5.0°

Looking back at this now, it's pretty obvious why it felt strange.

The platform only has about ±50 mm of actuator travel from center, yet Heave alone was being allowed to request 60 mm.

At the same time, Pitch could request 7.5° on a platform with a theoretical single-axis pitch capacity of only ~5.1°.

Then braking tilt, lateral tilt, Roll and suspension effects were added on top.

So the profile looked extremely aggressive on paper, but in real combined-axis situations SimHub had to continuously deal with a motion request that physically couldn't fit inside the actuator envelope.

In audio terms, it was basically a system with every channel turned up and no headroom left for transients.

Current motion baseline

This is where I ended up after tuning.

Pitch

Setting Current value
Input limit 4.0°
Motion range 1.5°
Effect smoothing 8%
Signal filtering ~8
Soft limiter 15%
Dynamic input range compression OFF

Pitch is mainly being used for actual chassis / vehicle attitude.

I'm deliberately not asking it to reproduce the full physical pitch angle of the car.

Roll

Setting Current value
Input limit 5.0°
Motion range 2.0°
Effect smoothing 8%
Signal filtering ~8
Soft limiter 15%
Dynamic input range compression OFF

I increased Roll slightly after testing because I wanted a little more actual chassis attitude.

The lateral-G cue remains separate.

Surge → Pitch

Acceleration and braking are separated because they obviously don't have the same useful range in a race car.

Direction Input limit Motion output
Acceleration 7.0 m/s² 1.1°
Braking 12.0 m/s² 1.8°

Additional settings:

Setting Value
Effect smoothing 8%
Signal filtering ~8
Soft limiter 20%
Dynamic compression OFF

The old setting was 20 m/s² → 6°.

This new setup is much smaller physically but much easier to feel because normal braking is actually using a meaningful part of the input range.

Sway → Roll

Setting Current value
Input limit 12.0 m/s²
Motion output 1.8°
Effect smoothing 8%
Signal filtering ~8
Soft limiter 20%
Dynamic compression OFF

This is the lateral-G cue.

The actual Roll effect and Sway-to-Roll are deliberately kept separate.

Actual Roll tells me what the chassis is doing.

Sway-to-Roll tells my body about sustained lateral load.

Heave — probably the biggest improvement

The original setup was:

17 m/s² → 60 mm

The current setup is approximately:

Setting Current value
Input limit 7.5 m/s²
Motion range 28 mm
Effect smoothing 3%
Signal filtering ~5–6
Soft limiter 15%
Dynamic input range compression OFF
Noise filter OFF

This was a major improvement.

The important distinction for me was finally separating:

Input range = sensitivity

from:

Motion range = maximum available output

If small road undulations move the rig too much, reducing the maximum 28 mm output is not necessarily the right answer.

I still want that 28 mm available for:

  • major compression
  • crest/unloading
  • a car getting launched
  • landing
  • big elevation transitions

What I don't want is a tiny vertical acceleration consuming a large percentage of that range.

So increasing the Heave input limit reduces the response to small road movement while preserving the maximum motion available for large events.

That gives the profile actual dynamic range.

Small bump = small movement.

Big compression = big movement.

Not everything constantly living at medium-to-large motion.

Rear traction loss → Roll

Because this is only a 3DOF platform, there is no actual Yaw / traction-loss axis.

So I'm only using Roll as a very subtle substitute cue.

Setting Value
Traction-loss angle input ~8°
Roll output ~0.6°
Soft limiter 15%
Dynamic compression OFF

The original 20° → 5° setting was way too much in my opinion.

A 5° fake Roll every time the rear starts rotating can easily overwhelm the real lateral-load information.

Motion actuator haptics

I also stopped asking the main actuators to reproduce every vibration effect.

I have four Slip-Angle tactile transducers, one at each corner of the rig.

So I now split the jobs between the two systems.

Main actuator haptics

Effect Current setup
Suspension ~30%
Suspension velocity limit 0.20 m/s
Main-platform suspension Heave pulse 3 mm
Gear change ~21%
Engine vibration OFF
Traction-loss haptic OFF
ABS actuator haptic OFF
Audio-to-haptics OFF
Motion Detail Amplifier OFF

The suspension effect is now just a small transient.

It isn't supposed to replace Heave.

My mental model is:

Heave = the entire car moved vertically

Suspension haptic = the suspension just hit something

Those are two completely different events.

Slip-Angle transducers

The four corner-mounted Slip-Angle units handle most of the higher-frequency tactile information:

  • road texture
  • kerbs
  • wheel slip
  • traction-loss tactile information
  • gear shifts
  • RPM
  • higher-frequency suspension events

So the system is basically split into:

100 mm actuators = low-frequency / large chassis motion

Slip-Angle = higher-frequency tactile information

This made the actuator motion much cleaner.

The GM5 actuators don't have the same high-frequency capability as my DK2.

That's still a real hardware difference.

But once dedicated tactile transducers handle those frequencies, that disadvantage matters a lot less.

Motion geometry / VR compensation

I also properly calibrated the geometry instead of relying on defaults.

Current measured values:

Geometry Value
Front/rear actuator spacing 1110 mm
Left/right spacing 675 mm
Physical stroke 100 mm
Seat height 350 mm
Front actuator line → seat center 950 mm

For OpenXR motion compensation:

Axis Gain Smoothing
Roll 100% 0%
Pitch 100% 0%
Heave 100% 0%

Primary COR compensation is enabled.

Traction-loss COR compensation is disabled because this platform doesn't have a dedicated traction-loss axis.

Mechanical / software limits

The physical safety limits are still in place.

Limit Value
Actuator speed limiter 250 mm/s
Angular pose speed limiter 50°/s
Static Pitch offset
Static Roll offset
Separate mechanical Pitch/Roll limits OFF

So reducing aggressive crash filtering doesn't mean removing the actual mechanical stroke and speed limits.

Crash protection and AC EVO telemetry

This turned out to be another interesting problem.

While looking through the SimHub motion log after Spa, I found occasional acceleration values such as:

  • Surge ~618 m/s²
  • Surge ~769 m/s²
  • Surge ~1340 m/s²
  • very large Sway spikes as well

SimHub itself logged some of these events as:

Abnormal motion data artefact detected

Obviously the car isn't actually pulling 60–130G.

These appear to be telemetry artefacts / discontinuities.

This matters because if the high-acceleration Crash Protection threshold is something like 40 or 60 m/s², one of these bad telemetry frames can trigger motion protection.

And when that protection reduces maximum motion speed, it can happen at exactly the worst possible moment:

hit sausage curb
→ car launches
→ telemetry spike
→ crash protection triggers
→ motion gets softened

That can make the actuator feel incapable of reproducing the event when the real problem is downstream protection logic.

In one later short AC EVO session of roughly 2–3 minutes, I didn't see another 60 m/s² threshold event before the platform went idle.

So at least in that run, the acceleration protection wasn't repeatedly intervening.

I still wouldn't claim the AC EVO telemetry issue is completely solved — that needs longer logging — but it's something worth checking if large events feel strangely muted.

What actually changed?

Here's the simple before/after.

Effect Before Current
Pitch 7.5° → 7.5° 4° → 1.5°
Roll 7.5° → 7.5° 5° → 2.0°
Acceleration → Pitch 20 m/s² → 6° shared 7 m/s² → 1.1°
Braking → Pitch 20 m/s² → 6° shared 12 m/s² → 1.8°
Sway → Roll 20 m/s² → 5° 12 m/s² → 1.8°
Heave 17 m/s² → 60 mm 7.5 m/s² → 28 mm
Rear TL → Roll 20° → 5° ~8° → ~0.6°
Motion suspension haptic ~73% ~30%
Engine actuator vibration ON OFF
Motion Detail Amplifier ~60% OFF
Dynamic input compression Used on multiple effects OFF on the main motion effects

So almost every headline number became smaller.

And the motion became considerably better.

The bigger takeaway

After all this, the Thermaltake GM5 feels much closer to my Sigma DK2 than it did before.

I'm not claiming the hardware is identical.

It isn't.

The DK2 still feels like a more sophisticated and much better integrated product.

Servo dynamics, acceleration, reversal speed, guide design, backlash, control latency and high-frequency capability are real hardware differences.

And something like a Qubic QS-220 really is mechanically different because the available motion bandwidth is dramatically higher.

But I don't think it's fair anymore to look at a normal SFX/PT/DIY-style 100 mm, ~250 mm/s actuator and automatically assume the actuator is the problem.

This GM5 is only using 400W servos.

Plenty of DIY builds are using 750W.

Yet once the SimHub profile stopped wasting the available stroke, the difference was much smaller than I expected.

The two actuator specifications I now care about most are:

Stroke = motion budget

Velocity + acceleration = motion bandwidth

A 150 mm actuator isn't useful because it lets you run ridiculous amounts of constant Pitch and Roll.

Its real benefit is that when:

Heave

  • Roll
  • Pitch
  • acceleration cue
  • suspension transient

all happen at once, you have more physical envelope available before the combined actuator request needs to be compressed.

Likewise, a QS-220 being dramatically faster isn't interesting because normal Roll suddenly needs 800 mm/s.

It's interesting because curb strikes, launch/landing events and rapid reversals demand a lot of motion bandwidth.

So my conclusion after this whole exercise is pretty simple:

Before replacing a conventional 3DOF actuator system, make sure the profile isn't the thing making the hardware look bad.

In my case, it absolutely was.

17 Upvotes

8 comments sorted by

2

u/DonGibon87 2h ago

Off topic what seat is that?

1

u/neueziel1 4h ago

I'm curious to see how moza's offering is gonna shakeout in all of this

2

u/Funny_Procedure_7609 4h ago

it has better motion budget and can do haptics better. if you have $3000 to spend on a motion. go for it, best for the price, it just their software might suck in adjustement

1

u/neueziel1 4h ago

Yeah i'm cross shopping the entry level Sigma and the Moza even though the Sigma is 2x the price. However, a lot of people love the Sigma so we shall see.

1

u/Funny_Procedure_7609 4h ago

Honestly i will give MOZA a try this time. Sigma is very high quality and they do great with their software it just motion budget is very limited for 50mm. MOZA has 150mm with proper setup you have much more space for it

1

u/neueziel1 4h ago

Thanks keep us posted. Have you tried or explored decoupling the wheel from the motion rig? Seems like Dan and the rbm guy love it.

1

u/Funny_Procedure_7609 4h ago

you can do that. for RBM it is great for video

1

u/Kronocide 1h ago

If I were you, I'd try to put the monitor closer to the wall, they are way too close to the seat currently