Refactored tyre slip calculations
This commit is contained in:
parent
01277823ba
commit
1bfe8c94ac
|
|
@ -43,22 +43,22 @@ int sounddev_tyreslip_update(SimDevice* this, SimData* simdata)
|
||||||
SoundDevice* sounddevice = (void *) this->derived;
|
SoundDevice* sounddevice = (void *) this->derived;
|
||||||
|
|
||||||
double play = 0;
|
double play = 0;
|
||||||
if (this->tyre == FRONTLEFT || this->tyre == FRONTS || this->tyre == ALLFOUR)
|
//if (this->tyre == FRONTLEFT || this->tyre == FRONTS || this->tyre == ALLFOUR)
|
||||||
{
|
//{
|
||||||
play += (1.0 - simdata->wheelslip[0]);
|
// play += (1.0 - simdata->wheelslip[0]);
|
||||||
}
|
//}
|
||||||
if (this->tyre == FRONTRIGHT || this->tyre == FRONTS || this->tyre == ALLFOUR)
|
//if (this->tyre == FRONTRIGHT || this->tyre == FRONTS || this->tyre == ALLFOUR)
|
||||||
{
|
//{
|
||||||
play += (1.0 - simdata->wheelslip[1]);
|
// play += (1.0 - simdata->wheelslip[1]);
|
||||||
}
|
//}
|
||||||
if (this->tyre == REARLEFT || this->tyre == REARS || this->tyre == ALLFOUR)
|
//if (this->tyre == REARLEFT || this->tyre == REARS || this->tyre == ALLFOUR)
|
||||||
{
|
//{
|
||||||
play += (1.0 - simdata->wheelslip[2]);
|
// play += (1.0 - simdata->wheelslip[2]);
|
||||||
}
|
//}
|
||||||
if (this->tyre == REARRIGHT || this->tyre == REARS || this->tyre == ALLFOUR)
|
//if (this->tyre == REARRIGHT || this->tyre == REARS || this->tyre == ALLFOUR)
|
||||||
{
|
//{
|
||||||
play += (1.0 - simdata->wheelslip[3]);
|
// play += (1.0 - simdata->wheelslip[3]);
|
||||||
}
|
//}
|
||||||
if (play > .40)
|
if (play > .40)
|
||||||
{
|
{
|
||||||
sounddevice->sounddata.curr_frequency = sounddevice->sounddata.frequency * play;
|
sounddevice->sounddata.curr_frequency = sounddevice->sounddata.frequency * play;
|
||||||
|
|
@ -76,39 +76,39 @@ int sounddev_tyrelock_update(SimDevice* this, SimData* simdata)
|
||||||
SoundDevice* sounddevice = (void *) this->derived;
|
SoundDevice* sounddevice = (void *) this->derived;
|
||||||
|
|
||||||
double play = 0;
|
double play = 0;
|
||||||
if (simdata->velocity > 0)
|
//if (simdata->velocity > 0)
|
||||||
{
|
//{
|
||||||
if (this->tyre == FRONTLEFT || this->tyre == FRONTS || this->tyre == ALLFOUR)
|
// if (this->tyre == FRONTLEFT || this->tyre == FRONTS || this->tyre == ALLFOUR)
|
||||||
{
|
// {
|
||||||
if(simdata->wheelspeed[0])
|
// if(simdata->wheelspeed[0])
|
||||||
{
|
// {
|
||||||
play++;
|
// play++;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if (this->tyre == FRONTRIGHT || this->tyre == FRONTS || this->tyre == ALLFOUR)
|
// if (this->tyre == FRONTRIGHT || this->tyre == FRONTS || this->tyre == ALLFOUR)
|
||||||
{
|
// {
|
||||||
if(simdata->wheelspeed[1])
|
// if(simdata->wheelspeed[1])
|
||||||
{
|
// {
|
||||||
play++;
|
// play++;
|
||||||
}
|
// }
|
||||||
play += simdata->wheelspeed[1];
|
// play += simdata->wheelspeed[1];
|
||||||
}
|
// }
|
||||||
if (this->tyre == REARLEFT || this->tyre == REARS || this->tyre == ALLFOUR)
|
// if (this->tyre == REARLEFT || this->tyre == REARS || this->tyre == ALLFOUR)
|
||||||
{
|
// {
|
||||||
if(simdata->wheelspeed[2])
|
// if(simdata->wheelspeed[2])
|
||||||
{
|
// {
|
||||||
play++;
|
// play++;
|
||||||
}
|
// }
|
||||||
play += simdata->wheelspeed[2];
|
// play += simdata->wheelspeed[2];
|
||||||
}
|
// }
|
||||||
if (this->tyre == REARRIGHT || this->tyre == REARS || this->tyre == ALLFOUR)
|
// if (this->tyre == REARRIGHT || this->tyre == REARS || this->tyre == ALLFOUR)
|
||||||
{
|
// {
|
||||||
if(simdata->wheelspeed[3])
|
// if(simdata->wheelspeed[3])
|
||||||
{
|
// {
|
||||||
play++;
|
// play++;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
if (play > 0)
|
if (play > 0)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -8,67 +8,144 @@
|
||||||
#include "../../simulatorapi/simapi/simapi/simdata.h"
|
#include "../../simulatorapi/simapi/simapi/simdata.h"
|
||||||
#include "../../slog/slog.h"
|
#include "../../slog/slog.h"
|
||||||
|
|
||||||
|
bool hasTyreDiameter(SimData* simdata)
|
||||||
|
{
|
||||||
|
if (simdata->tyrediameter[0] == -1 || simdata->tyrediameter[1] == -1 || simdata->tyrediameter[2] == -1 || simdata->tyrediameter[3] == -1)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void getTyreDiameter(SimData* simdata)
|
||||||
|
{
|
||||||
|
if(simdata->velocity > 50 && simdata->brake <= 0 && simdata->gas <= 0)
|
||||||
|
{
|
||||||
|
if (simdata->velocityX/simdata->velocity < 0.001)
|
||||||
|
{
|
||||||
|
double Speedms = 0.277778 * simdata->velocity;
|
||||||
|
for(int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
simdata->tyrediameter[i] = Speedms / simdata->tyreRPS[i] * 2;
|
||||||
|
}
|
||||||
|
slogi("Successfully set tyre diameters for wheel slip effects.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int usbhapticdev_update(USBGenericHapticDevice* usbhapticdevice, SimData* simdata)
|
int usbhapticdev_update(USBGenericHapticDevice* usbhapticdevice, SimData* simdata)
|
||||||
{
|
{
|
||||||
double play = 0;
|
double play = 0;
|
||||||
double playthreshhold = 0;
|
double playthreshhold = 0;
|
||||||
|
double wheelslip[4];
|
||||||
|
wheelslip[0] = 0;
|
||||||
|
wheelslip[1] = 0;
|
||||||
|
wheelslip[2] = 0;
|
||||||
|
wheelslip[3] = 0;
|
||||||
|
|
||||||
|
|
||||||
switch (usbhapticdevice->effecttype)
|
switch (usbhapticdevice->effecttype)
|
||||||
{
|
{
|
||||||
case (EFFECT_TYRESLIP):
|
case (EFFECT_TYRESLIP):
|
||||||
playthreshhold = .4;
|
case (EFFECT_TYRELOCK):
|
||||||
|
case (EFFECT_ABSBRAKES):
|
||||||
|
|
||||||
|
if(hasTyreDiameter(simdata)==false)
|
||||||
|
{
|
||||||
|
getTyreDiameter(simdata);
|
||||||
|
}
|
||||||
|
if(hasTyreDiameter(simdata)==true)
|
||||||
|
{
|
||||||
|
double Speedms = 0.277778 * simdata->velocity;
|
||||||
|
if (Speedms > 0.5)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
wheelslip[i] = (Speedms - simdata->tyrediameter[i] * simdata->tyreRPS[i] / 2) / Speedms;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
wheelslip[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (usbhapticdevice->effecttype)
|
||||||
|
{
|
||||||
|
case (EFFECT_TYRESLIP):
|
||||||
|
|
||||||
|
|
||||||
if (usbhapticdevice->tyre == FRONTLEFT || usbhapticdevice->tyre == FRONTS || usbhapticdevice->tyre == ALLFOUR)
|
if (usbhapticdevice->tyre == FRONTLEFT || usbhapticdevice->tyre == FRONTS || usbhapticdevice->tyre == ALLFOUR)
|
||||||
{
|
{
|
||||||
play += (1.0 - simdata->wheelslip[0]);
|
if(wheelslip[0] < -.5)
|
||||||
|
{
|
||||||
|
play++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (usbhapticdevice->tyre == FRONTRIGHT || usbhapticdevice->tyre == FRONTS || usbhapticdevice->tyre == ALLFOUR)
|
if (usbhapticdevice->tyre == FRONTRIGHT || usbhapticdevice->tyre == FRONTS || usbhapticdevice->tyre == ALLFOUR)
|
||||||
{
|
{
|
||||||
play += (1.0 - simdata->wheelslip[1]);
|
if(wheelslip[1] < -.5)
|
||||||
|
{
|
||||||
|
play++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (usbhapticdevice->tyre == REARLEFT || usbhapticdevice->tyre == REARS || usbhapticdevice->tyre == ALLFOUR)
|
if (usbhapticdevice->tyre == REARLEFT || usbhapticdevice->tyre == REARS || usbhapticdevice->tyre == ALLFOUR)
|
||||||
{
|
{
|
||||||
play += (1.0 - simdata->wheelslip[2]);
|
if(wheelslip[2] < -.5)
|
||||||
|
{
|
||||||
|
play++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (usbhapticdevice->tyre == REARRIGHT || usbhapticdevice->tyre == REARS || usbhapticdevice->tyre == ALLFOUR)
|
if (usbhapticdevice->tyre == REARRIGHT || usbhapticdevice->tyre == REARS || usbhapticdevice->tyre == ALLFOUR)
|
||||||
{
|
{
|
||||||
play += (1.0 - simdata->wheelslip[3]);
|
if(wheelslip[3] < -.5)
|
||||||
|
{
|
||||||
|
play++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case (EFFECT_TYRELOCK):
|
case (EFFECT_TYRELOCK):
|
||||||
|
|
||||||
if (simdata->velocity > 0)
|
|
||||||
{
|
|
||||||
if (usbhapticdevice->tyre == FRONTLEFT || usbhapticdevice->tyre == FRONTS || usbhapticdevice->tyre == ALLFOUR)
|
if (usbhapticdevice->tyre == FRONTLEFT || usbhapticdevice->tyre == FRONTS || usbhapticdevice->tyre == ALLFOUR)
|
||||||
{
|
{
|
||||||
if(simdata->wheelspeed[0])
|
if(wheelslip[0] > .75)
|
||||||
{
|
{
|
||||||
play++;
|
play++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (usbhapticdevice->tyre == FRONTRIGHT || usbhapticdevice->tyre == FRONTS || usbhapticdevice->tyre == ALLFOUR)
|
if (usbhapticdevice->tyre == FRONTRIGHT || usbhapticdevice->tyre == FRONTS || usbhapticdevice->tyre == ALLFOUR)
|
||||||
{
|
{
|
||||||
if(simdata->wheelspeed[1])
|
if(wheelslip[1] > .75)
|
||||||
{
|
{
|
||||||
play++;
|
play++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (usbhapticdevice->tyre == REARLEFT || usbhapticdevice->tyre == REARS || usbhapticdevice->tyre == ALLFOUR)
|
if (usbhapticdevice->tyre == REARLEFT || usbhapticdevice->tyre == REARS || usbhapticdevice->tyre == ALLFOUR)
|
||||||
{
|
{
|
||||||
if(simdata->wheelspeed[2])
|
if(wheelslip[2] > .75)
|
||||||
{
|
{
|
||||||
play++;
|
play++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (usbhapticdevice->tyre == REARRIGHT || usbhapticdevice->tyre == REARS || usbhapticdevice->tyre == ALLFOUR)
|
if (usbhapticdevice->tyre == REARRIGHT || usbhapticdevice->tyre == REARS || usbhapticdevice->tyre == ALLFOUR)
|
||||||
{
|
{
|
||||||
if(simdata->wheelspeed[3])
|
if(wheelslip[3] > .75)
|
||||||
{
|
{
|
||||||
play++;
|
play++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case (EFFECT_ABSBRAKES):
|
case (EFFECT_ABSBRAKES):
|
||||||
play += simdata->abs;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -200,6 +200,7 @@ int clilooper(SimDevice* devices, int numdevices, Parameters* p, SimData* simdat
|
||||||
{
|
{
|
||||||
simdata->rpms=100;
|
simdata->rpms=100;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int x = 0; x < numdevices; x++)
|
for (int x = 0; x < numdevices; x++)
|
||||||
{
|
{
|
||||||
devices[x].update(&devices[x], simdata);
|
devices[x].update(&devices[x], simdata);
|
||||||
|
|
@ -238,6 +239,10 @@ int looper(SimDevice* devices, int numdevices, Parameters* p)
|
||||||
|
|
||||||
SimData* simdata = malloc(sizeof(SimData));
|
SimData* simdata = malloc(sizeof(SimData));
|
||||||
SimMap* simmap = malloc(sizeof(SimMap));
|
SimMap* simmap = malloc(sizeof(SimMap));
|
||||||
|
simdata->tyrediameter[0] = -1;
|
||||||
|
simdata->tyrediameter[1] = -1;
|
||||||
|
simdata->tyrediameter[2] = -1;
|
||||||
|
simdata->tyrediameter[3] = -1;
|
||||||
|
|
||||||
struct termios newsettings, canonicalmode;
|
struct termios newsettings, canonicalmode;
|
||||||
tcgetattr(0, &canonicalmode);
|
tcgetattr(0, &canonicalmode);
|
||||||
|
|
@ -324,14 +329,6 @@ int tester(SimDevice* devices, int numdevices)
|
||||||
simdata->rpms = 100;
|
simdata->rpms = 100;
|
||||||
simdata->maxrpm = 8000;
|
simdata->maxrpm = 8000;
|
||||||
simdata->abs = 0;
|
simdata->abs = 0;
|
||||||
simdata->wheelslip[0] = 1;
|
|
||||||
simdata->wheelslip[1] = 1;
|
|
||||||
simdata->wheelslip[2] = 1;
|
|
||||||
simdata->wheelslip[3] = 1;
|
|
||||||
simdata->wheelspeed[0] = 100;
|
|
||||||
simdata->wheelspeed[1] = 100;
|
|
||||||
simdata->wheelspeed[2] = 100;
|
|
||||||
simdata->wheelspeed[3] = 100;
|
|
||||||
sleep(3);
|
sleep(3);
|
||||||
|
|
||||||
fprintf(stdout, "Setting rpms to 1000\n");
|
fprintf(stdout, "Setting rpms to 1000\n");
|
||||||
|
|
@ -342,30 +339,6 @@ int tester(SimDevice* devices, int numdevices)
|
||||||
}
|
}
|
||||||
sleep(3);
|
sleep(3);
|
||||||
|
|
||||||
fprintf(stdout, "Setting ABS to 1\n");
|
|
||||||
simdata->abs = 1;
|
|
||||||
for (int x = 0; x < numdevices; x++)
|
|
||||||
{
|
|
||||||
devices[x].update(&devices[x], simdata);
|
|
||||||
}
|
|
||||||
sleep(3);
|
|
||||||
simdata->abs = 0;
|
|
||||||
|
|
||||||
fprintf(stdout, "Setting Wheelslip to 0, no traction\n");
|
|
||||||
simdata->wheelslip[0] = 0;
|
|
||||||
simdata->wheelslip[1] = 0;
|
|
||||||
simdata->wheelslip[2] = 0;
|
|
||||||
simdata->wheelslip[3] = 0;
|
|
||||||
for (int x = 0; x < numdevices; x++)
|
|
||||||
{
|
|
||||||
devices[x].update(&devices[x], simdata);
|
|
||||||
}
|
|
||||||
sleep(3);
|
|
||||||
simdata->wheelslip[0] = 1;
|
|
||||||
simdata->wheelslip[1] = 1;
|
|
||||||
simdata->wheelslip[2] = 1;
|
|
||||||
simdata->wheelslip[3] = 1;
|
|
||||||
|
|
||||||
fprintf(stdout, "Shifting into first gear\n");
|
fprintf(stdout, "Shifting into first gear\n");
|
||||||
simdata->gear = 2;
|
simdata->gear = 2;
|
||||||
for (int x = 0; x < numdevices; x++)
|
for (int x = 0; x < numdevices; x++)
|
||||||
|
|
@ -398,22 +371,6 @@ int tester(SimDevice* devices, int numdevices)
|
||||||
}
|
}
|
||||||
sleep(3);
|
sleep(3);
|
||||||
|
|
||||||
fprintf(stdout, "Setting Wheelspeed to 0, wheels locked at speed.\n");
|
|
||||||
simdata->wheelspeed[0] = 0;
|
|
||||||
simdata->wheelspeed[1] = 0;
|
|
||||||
simdata->wheelspeed[2] = 0;
|
|
||||||
simdata->wheelspeed[3] = 0;
|
|
||||||
for (int x = 0; x < numdevices; x++)
|
|
||||||
{
|
|
||||||
devices[x].update(&devices[x], simdata);
|
|
||||||
}
|
|
||||||
sleep(3);
|
|
||||||
simdata->wheelspeed[0] = 100;
|
|
||||||
simdata->wheelspeed[1] = 100;
|
|
||||||
simdata->wheelspeed[2] = 100;
|
|
||||||
simdata->wheelspeed[3] = 100;
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(stdout, "Shifting into third gear\n");
|
fprintf(stdout, "Shifting into third gear\n");
|
||||||
simdata->gear = 4;
|
simdata->gear = 4;
|
||||||
for (int x = 0; x < numdevices; x++)
|
for (int x = 0; x < numdevices; x++)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue