SimHub ShakeIt Bass Shakers custom 4 corner tire slip

blekenbleu

SimHub+Arduino hacker
Premium
My sim driving is Assetto Corsa with an office chair and wheel stand.
Without a harness keeping one's back contacting them,
back transducers seem of arguable benefit.

Already using SimHub,
having unused motherboard 7.1 sound and obsolete Denon surround receiver,
a ShakeSeat pad (no longer available) was ordered because:
An equivalent can be made using Dayton pucks
with e.g. 40cm square zippered cushion covers and EVA foam floor tiles.
SimHub's ShakeIt tire slip effect does not consider tire loading.
For example, an inside tire may be fully unloaded during cornering,
with very high slippage, but no perceived sensation in actual driving.
Haptic slip effects ideally change frequency based on slip
but change amplitude based on load,
which was impossible using only earlier SimHub support.

This SimHub profile attempts to approximate track sensations from street tires,
when securely harnessed in a fitted racing seat.
Usefulness of such haptic feedback may vary widely among users:
This haptic wheel slip feedback was IMO less useful
than deceleration and cornering simulation from harness tensioners,
but reduced a sense of "something missing".

Unambiguously directional haptic cues
wants direct stimulation of body parts,
e.g. left and right thighs, lumbar and/or sit bones.

Original 4-puck SRS ShakeKit cushion is no longer available,
but equivalent DIY PuckSeat assembly is not very hard.
SRS_EVA.jpg

Sensations to be simulated here:
  • squeal for small slippage, transitioning to moaning with more slippage,
  • then shuddering near breakaway,
    with intensities proportional to tire loadings
Implementation augments SimHub Wheels SLIP effect
with Custom Effects
  1. latitudinal and longitudinal acceleration properties
  2. loaded tire slips, products of tire slip properties times accelerations
Again, because load modulates slip in telemetry,
heavily loaded small slip could not be generated
as strong high frequency tactile effect
until SimHub added Forced frequency option.

Accelerations were originally estimated from speed and yaw changes,
serving as G force proxies.
Earlier SimHub versions sampled speed and yaw
at a lower rate than Assetto Corsa telemetry waas updated,
resulting in some changes 2x others, which code here detects and mitigates.

Loaded tire slip corner effects use products of tire slips and G force proxies:

A complete SimHub ShakeIt profile is available on GitHub.
It is now IMO obsolete.

SimHub slip telemetry in this profile is not portable among all games;
specifically, iRacing provides no slip telemetry.

An upgraded ShakeIt profile based on slip/grip ratio is recommended:
  • requires less car/track/sim-specific tweaking
  • delivers haptics better correlated with tires reaching grip limit,
    based on slip/grip ratios.
  • Improved grip estimation combines lateral and longitudinal
    and is modulated by heave
 
Last edited:
what version you have is best to now use.
The version with which I was happy is from 6 May on GitHub,
which works for me in Assetto Corsa driving pucks for 4 corners of a ShakeSeat, but
  • It uses GameRawData.Physics.WheelLoad properties that are unavailable in other games
  • At that time, I did not appreciate how much telemetry signal values vary among cars and games
    • Most users are unlikely to experience the intended tactile effects without instructions for tuning those custom effects which generate proxy_G (really should be renamed proxyL) and proxyS properties.
  • ShakeIt profiles attached to racedepartment.com replies were experiments to address specific requests for tactile configurations other than mine and were largely untested.
  • I have learned quite a lot more about SimHub ShakeIt since May..
An updated profile, likely including under/oversteer and perhaps brake pedal and shifter effects,
would want to have been tested with at least some SimHub ACC recording that needs providing by someone,
ideally along with an iRacing recording.
It will also include documentation for tuning those telemetry property custom effects.
 
Upvote 0
Wheel slip considerations
WHEELS SLIP is a standard ShakeIt effect, while the property is game-specific.
Whether the effect is actually available and useful in all games is unknown to me;
how it could be available if/when the property is unavailable would be a mystery..
At least in Assetto Corsa, the default effect is IMO far too strong to be useful,
as shown here in comparison to my custom effect, derived from the property:
slip.gif

.. where those saturated Front signals occur during deliberate wheel lockup under braking.
To approximate signals from the ProxyS property generated by my custom effect
requires fairly drastic Response filter tweaking of the WHEELS SLIP effect:
  • Gamma 3.00
  • Threshold 2
  • Gain 1/100
Those values may want further tweaking, depending on game, car, tires, track
and a user's ability to e.g. maintain control and cornering speed
for varying amounts of slip.
IMO, the most expedient means for determining appropriate slip tweaks
involves a recorded skid pad session,
but it appears that many games lack a skid pad.


Front / rear slip
Rather than separately sensible tactile effects per corner (my preference),
many users seem to prefer only front vs rear tactile effects,
employing more/bigger transducers for greater dynamic and frequency range.
Since slip is provided as a per-corner property (or effect), the question arises:
  • How to reduce corner signals to a pair of signals with minimal information loss?
    • averaging?
    • correlating?
    • weighted average or correlation?
.. where averaged is half the sum of left and right,
while correlated is square root of product of left and right,
and correlated will never be greater than averaged.
For braking in a straight line, one can imagine that total
front grip is the sum of left and right grips, so average slip is a more useful signal. Alternatively, useful slip during cornering will be correlated left and right slips.
Here, Front left is averaged slip, Rear left is correlated slip,
and Front right is the difference between average and correlated:
frontSlip.gif


I hope most will agree that loaded wheel slip is
more important than slip of a single unloaded wheel.
  • only wheels in contact with the ground will be providing grip
  • loading should be applied to slips before averaging or correlating
 
Last edited:
Upvote 0
Whether the effect is actually available and useful in all games is unknown to me;
I found this Dec 5, 2020 post at Sim Racing Studio:
Code:
Q: How about other games such as iracing, Dirt Rally, RRE, RF2 and others?
A: We analyzed thousands of telemetry data from multiple cars on the games above.
   Unfortunately, either the variable doesn't exist or the data came empty
   or data was not consistent enough to apply our formula.
"You will be able to feel on your motion or multidimensional shakers
each individual wheel Slip or Lock in the following Games:"
  • AC
  • ACC
  • Pcars 1 & 2 (PC only)
  • AMS2
  • F1 2018, 19, 20
  • Forza Horizon 4
  • Forza Motosports 7
  • KartKraft

Thanks to @sierses on the SimHub discord, I now have some AMS2 and iRacing SimHub recordings.
iRacing evidently provides only a single wheel slip telemetry channel, which SimHub duplicates for 4 corners.
It should be possible to sort wheel slip from e.g. straight line acceleration vs braking to front or rear channels
using SimHub's DataCorePlugin.GameData.GlobalAccelerationG,
but sorting understeer vs oversteer based on that plus DataCorePlugin.GameData.AccelerationSway
in some cases would be at best a guess, with wrong guesses being far from useful.
 
Upvote 0
iRacing evidently provides only a single wheel slip telemetry channel
On the SimHubDash.com forum, @Schnirbus addressed this, linking his SimHub profile for it.
  • It is configured specifically for iRacing with full Automatic calibration.
  • It exports slip property from WHEELS SLIP effect, after applying 0.6 gamma and 10 Minimum force in Response filter
  • It exports sideways property from SPEED WITH CURVING effect using 5 low, 90 high force and 100 Curving sensibility. This effect is typically used to drive fans for wind simulation.
  • A CUSTOM EFFECT exports longitudinal acceleration and deceleration as long shift property
  • A second CUSTOM EFFECT generates 4-corner tactile with +/- 5Hz white noise on 130Hz base effect down to 80Hz for high effect, which subtracts sideways and long shift properties from slip property.
 
Upvote 0
I get a VERY DISTINCT front separate from back wheel slip effect in iRacing just using a front/rear split in SimHub. I've not tried 4 wheel yet, but I've been told it works. Not sure where you heard that it only has one channel.
 
Last edited:
Upvote 0
Blasphemy
SimHub WHEELS SLIP effect offers 4 channels, but all 4 are always identical for SimHub iRacing replays made available to me.
iRacing may not make 4 channels available, to avoid advantaging competitors using tactile feedback.
I fail to imagine how/when/why a single channel of wheel slip telemetry would be useful.

When matched for lockup, iRacing wheel slip values seem higher than those from other games.
@Wotever reportedly estimates iRacing wheel slip from differences between RPM and vehicle speed, so presumably only driven wheel slip.

I just reconfigured WHEELS SLIP for Front/Rear, and iRacing outputs remain identical:
IRacingSchnirbusFR.jpg

IMO, @Schnirbus and default SimHub WHEELS SLIP effect Input gain is about 100x too strong
 
Last edited:
Upvote 0
I've been running a 2 stage wheel slip in back that I'll be setting up in front now. I get nice gradual wheel slip from both front and back. I start with the TST's and move to the BK-CT's when it gets more pronounced.

I've used this with many cars including the Mx-5, Ferrari 488 GT3, BMW GT4, BMW M8 GTE. It's very distinct.
 
Last edited:
Upvote 0
On the SimHubDash.com forum, @Schnirbus addressed this, linking his SimHub profile for it.
FWIW, estimating 4-corner slip from iRacing mono slip and other available telemetry,
is IMO an interesting, if ultimately doomed, exercise.
Like the scout who lost his knife in dark woods but searched for it near firelight because easier,
here is an evaluation of @Schnirbus' profile run in AC, which provides 4-wheel slip.
  • 4-wheel slip from AC, using @Schnirbus' gain 100 and gamma 0.6:
    • SchnirbusACslip.gif
  • converted to mono by SimHub:
    • SchnirbusACmono.gif
  • processed back to 4-wheel by Schnirbus profile:
    • SchnirbusACmonoOut.gif
  • FWIW, AC wheel slip using (my preferred) gamma 3.0 and gain 1/100:
    • ACgamma3Schnirbus.gif
    • note that, at least for this sample. front and rear slips are more correlated than are left and right..
At the risk of being tedious, it is my contention that default SimHub slip applies far too much gain and too little gamma for useful feedback.

Is it possible, for at least some cases, to better estimate 4-corner slip from mono telemetry?
 
Last edited:
Upvote 0
At the risk of being tedious, it is my contention that default SimHub slip applies far too much gain and too little gamma for useful feedback.
I do not have slip kick in until there is some slip going.
Then I have 2 stages for both front and back. I have enough initial gain so I can feel it when it starts and then ramps up until the 2nd stage kicks in.

The first stage is what I would call easily controllable slip and I have that coming from my TST's. That's when I'm in the sweet zone on the edge of adhesion. The second stage kicks in when things are at the edge of losing control and past it. That's when the BK's kick in.

To be fair it takes tinkering for each car and sometimes each track. I have had less success coming up with "all around" use effects.

I'm not sure I would know what to do with 4 corner information and that may very well be a limitation of my driving ability.
 
Last edited:
Upvote 0
I'm not sure I would know what to do with 4 corner information
Without claiming that is their best possible implementation
4 Dayton pucks in a seat cushion relatively expediently offer some notion of their usefulness,
e.g. in instances where front-rear slip is more correlated than is left-right slip (under/oversteer).
and that may very well be a limitation of my driving ability.
IMO, ShakeSeat feedback nicely supplements active harness tensioning.
When younger, my driving ability was constrained by esotropia (double vision & lack of depth perception),
which I learned to partially compensate by focusing on triangulating visual cues, G forces and other motion cues.
Slowing reflexes subsequently came to dominate real driving limitations;
given lack of real G force cues, alternative feedback is wanted for approaching sim driving traction limits.

Just as you have come to appreciate wider frequency and dynamic range tactile effects,
keep an open mind about potential benefits of distinctly-sensed directional tactile effects.

I do not have slip kick in until there is some slip going.
Without some slip, there are no accelerations.
 
Last edited:
Upvote 0
It’s been a while since I posted apologies for the delay.

Shaker profiles

Shaker Profiles with RRE replay for F4, M3 @ Zolder

Just want to remind everybody of my rig setup so we can discuss or appreciate perhaps any differences in the Shaker setups and formulas for derivation of information coming from the telemetry.

My primary sim is RaceRoom racing experience. The replays that I link and the shaker outputs profiles, and overlays that are also in the link are all relevant to RaceRoom racing experience. I haven’t tried them on any other Sims and your mileage may vary if you try to. 1 of the profiles that was linked by blekenbleu earlier did not work for me because it was referencing values that were only available Assetto Corsa.

Also don’t use RaceRoom Replays as a setup tool, I’ve discovered all of the data is not available in the replay. Always record a live lap for use later to tune the shaker output.

My rig setup is similar to a GT1 EVO 8020 rig, shaker setup is 4 x Dayton BST-1, 1 in each corner, 2 under the pedals either side, 2 under my seat either side, driven by a Clarion 12v Car amplifier powered by an ATX power supply.

I wouldn’t be anywhere near the shaker configuration I have today with the really positive feedback I get from the shaker system without the excellent work shared by blekenbleu earlier.

I do have some differences in philosophy though, in particular about the use of load in the slip calculations.

If we look at a practical example in the link

RRE F4 at Zolder.
loaded.jpg


This is a busy picture. 4 Graphs showing FL,FR on top, RL,RR on bottom. Blue is tyre grip per corner from RRE $prop('GameRawData.TireGrip.RearRight'), Yellow is Tyre load per corner from RRE $prop('ShakeITBSV3Plugin.Export.proxyL.FrontLeft'); TL red is Math.abs ($prop('AccelerationSway')); TR red is Math.abs ($prop('AccelerationSurge')); RL red is Math.abs ($prop('AccelerationSway')+$prop('AccelerationSurge'));
shakers.jpg

At frame 2476 you can see the shaker output. The 4 traces equate to FL, FR on top, RL, RR on bottom.

Note that the unloaded tyres are giving the most shaker feedback. Dynamically, I agree with blekenbleu that the most important tyre is the one loaded up. So we should be looking at front left, rear left for feedback about the most dynamically important grip at this point.

My shaker output gives the opposite of this. I want to talk a bit about why I am ok with this, and why I have omitted load for an importance factor, which would work to suppress the shake response on the unloaded tyres, in this case FR, RR. I get earlier warning of grip loss from an unloaded tyre. You can see that rear right output is warning me I’m losing grip on the rear, a precursor to losing grip rear left, which is much more important to me. You can see the rear transition from RR having no grip left to RL having no grip either. I’m much happier to receive that feedback earlier, than to reduce rear right feedback with load reduction.

A secondary effect of this is I also get warning of rear brake locking when the rears are lightly loaded, which is masked if load is included as a factor to shake.

I should also talk about using sway and surge as "importance factors" and why I use them as multipliers for shaker feedback. If the tyres are not under stress, during braking (surge) or cornering (sway) I'm not interested in any feedback from the shakers. When the tyres comes under stress, losing grip, I want the effect to be amplified based on the amount of cornering or braking being undertaken at that moment.

My grip or slip detection is based against actual car speed vs actual tyre speed, and the difference expressed as a fraction of car speed. difference/car speed

I’ve also found this has to be tuned per car, which gets a bit…. wearing. I’ve included a comparison to this F4, which does under & oversteer but has downforce, to a 92 DTM M3 on the same course, which is very tail happy, and would need more work to give a reduced output.

An explanation of what I have in the code for the shaker is below.

Code:
//tire speed per wheel -ve value, don’t know why!
var ts = $prop('GameRawData.TireSpeed.RearRight')
//Car Speed
var cs = $prop('GameRawData.CarSpeed')
//Tyre grip, not used but was considered. Values of grip loss were too high
var grip = 1-$prop('GameRawData.TireGrip.RearRight')
//sway acceleration value squared (attempt to reduce v low signal noise) and made positive
var sway = Math.pow (Math.abs ($prop('AccelerationSway')),2)
//surge acceleration value squared (attempt to reduce v low signal noise) and made positive
var surge = Math.pow (Math.abs ($prop('AccelerationSurge')),2)
// find difference in tyre speed to true car speed, if slipping a value will be present.
//Use the sway & surge as an importance factor for shaking this corner.
//Square root to bring the sway and surge values back to normal from earlier filtering attempt.
return Math.abs((ts+cs)/cs)*(Math.sqrt(sway+surge))*100

All this is me trying to explain how I ended up here!

Thanks again all. I’d really appreciate your feedback. I’m not trying to be contrary here, this journey has really helped me with my times. I’m 3rd overall on the leaderboard for the F4 at Zolder with some known fast folks just behind me. This work has shown me the importance of feedback for the state of the car.

I should also note I put LFE sound from the game through my shakers, and find that very rewarding as well. This was all tested without that feedback present.
 
Last edited:
Upvote 0
I’d really appreciate your feedback
Bottom line: whatever works for you is great, and while earlier warning from arguably wrong tires
could seemingly be confusing, I cannot knock it without trying it.

this has to be tuned per car, which gets a bit…. wearing
I already tune per car, cannot imagine doing otherwise and sometimes per track.
Rather than going back into formulae, I create separate custom effects per tunable property,
then tweak Response filters' Gamma and Gain.

var surge = Math.pow (Math.abs ($prop('AccelerationSurge')),2)
Since squared values will always be positive, Math.abs is redundant.
Probably more efficient: var surge = $prop('AccelerationSurge');
var sway = $prop('AccelerationSway');
return Math.abs(1+ts/cs)*Math.sqrt(sway*sway+surge*surge)*100;

If the tyres are not under stress, during braking (surge) or cornering (sway)
I'm not interested in any feedback from the shakers.
Trailing oversteer occurs with rear tires not under stress; I feed that to separate exciters.
 
Upvote 0
var surge = Math.pow (Math.abs ($prop('AccelerationSurge')),2)
Since squared values will always be positive, Math.abs is redundant.
Probably more efficient: var surge = $prop('AccelerationSurge');
var sway = $prop('AccelerationSway');
return Math.abs(1+ts/cs)*Math.sqrt(sway*sway+surge*surge)*100;
Thanks, implemented.
 
Upvote 0
I’d love to do a 3 way comparison of both your options compared to standard effects to see exactly how each wheel is operating based on its amplitude and output.
Think this is possible but for me if you both can apply your methods for a chosen car in ACC I can certainly demonstrate the tactile being generated.
Please consider a car / track combo for making such possible
 
Upvote 0
Back
Top