forked from speed-dreams/speed-dreams-code
- added usr for mpa11 et mpa12
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@6055 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: d0a4ef3656e8b4c90b54b11b6984189bd51aea3f Former-commit-id: 8d45856e8005f6dde614aaeb499cf267f4a004a7
This commit is contained in:
parent
1e31db3d2a
commit
3e28141da7
6 changed files with 2886 additions and 2830 deletions
|
@ -36,7 +36,7 @@ SET(ROBOT_SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
# Official-only dandroid instances.
|
# Official-only dandroid instances.
|
||||||
SET(ROBOT_CLONES dandroid_36GP)
|
SET(ROBOT_CLONES dandroid_36GP dandroid_mpa12)
|
||||||
|
|
||||||
# The ubiquitous robot module and its clones.
|
# The ubiquitous robot module and its clones.
|
||||||
ROBOT_MODULE(NAME ${ROBOT_NAME} VERSION 2.0.0 SOVERSION 1.0.0
|
ROBOT_MODULE(NAME ${ROBOT_NAME} VERSION 2.0.0 SOVERSION 1.0.0
|
||||||
|
|
|
@ -78,7 +78,8 @@ const char *sUndefined = "undefined";
|
||||||
#ifdef TARGET_SPEEDDREAMS
|
#ifdef TARGET_SPEEDDREAMS
|
||||||
|
|
||||||
// Set robots's name and xml file pathname
|
// Set robots's name and xml file pathname
|
||||||
static void setRobotName(const string name) {
|
static void setRobotName(const string name)
|
||||||
|
{
|
||||||
char buffer[BUFSIZE];
|
char buffer[BUFSIZE];
|
||||||
snprintf(buffer, BUFSIZE, "drivers/%s/%s.xml", name.c_str(), name.c_str());
|
snprintf(buffer, BUFSIZE, "drivers/%s/%s.xml", name.c_str(), name.c_str());
|
||||||
nameBuffer = name;
|
nameBuffer = name;
|
||||||
|
|
|
@ -11,6 +11,8 @@ SET(ROBOT_INTERFACE LEGACY WELCOME
|
||||||
usr_ls1
|
usr_ls1
|
||||||
usr_ls2
|
usr_ls2
|
||||||
usr_mpa1
|
usr_mpa1
|
||||||
|
usr_mpa11
|
||||||
|
usr_mpa12
|
||||||
usr_36GP
|
usr_36GP
|
||||||
usr_rs
|
usr_rs
|
||||||
usr_lp1
|
usr_lp1
|
||||||
|
@ -38,7 +40,7 @@ SET(ROBOT_SOURCES
|
||||||
src/xmldefs.h)
|
src/xmldefs.h)
|
||||||
|
|
||||||
# Official-only USR instances.
|
# Official-only USR instances.
|
||||||
SET(ROBOT_CLONES usr_trb1 usr_sc usr_ls1 usr_ls2 usr_mpa1 usr_36GP usr_rs usr_lp1)
|
SET(ROBOT_CLONES usr_trb1 usr_sc usr_ls1 usr_ls2 usr_mpa1 usr_mpa11 usr_mpa12 usr_36GP usr_rs usr_lp1)
|
||||||
|
|
||||||
ROBOT_MODULE(NAME ${ROBOT_NAME} VERSION 3.0.0 SOVERSION 1.0.0
|
ROBOT_MODULE(NAME ${ROBOT_NAME} VERSION 3.0.0 SOVERSION 1.0.0
|
||||||
INTERFACE ${ROBOT_INTERFACE}
|
INTERFACE ${ROBOT_INTERFACE}
|
||||||
|
|
|
@ -63,6 +63,11 @@ Cardata *Driver::cardata = NULL;
|
||||||
static int current_light = RM_LIGHT_HEAD1 | RM_LIGHT_HEAD2;
|
static int current_light = RM_LIGHT_HEAD1 | RM_LIGHT_HEAD2;
|
||||||
|
|
||||||
Driver::Driver(int index, const int robot_type) :
|
Driver::Driver(int index, const int robot_type) :
|
||||||
|
HasABS(false),
|
||||||
|
HasESP(false),
|
||||||
|
HasTCL(false),
|
||||||
|
HasTYC(false),
|
||||||
|
|
||||||
NoTeamWaiting(0),
|
NoTeamWaiting(0),
|
||||||
TeamWaitTime(0.0f),
|
TeamWaitTime(0.0f),
|
||||||
truespeed(0.0f),
|
truespeed(0.0f),
|
||||||
|
@ -91,11 +96,6 @@ Driver::Driver(int index, const int robot_type) :
|
||||||
allowcorrecting(0),
|
allowcorrecting(0),
|
||||||
pitpos(0),
|
pitpos(0),
|
||||||
|
|
||||||
HasABS(false),
|
|
||||||
HasESP(false),
|
|
||||||
HasTCL(false),
|
|
||||||
HasTYC(false),
|
|
||||||
|
|
||||||
prevspeedangle(0.0f),
|
prevspeedangle(0.0f),
|
||||||
speedangle(0.0f),
|
speedangle(0.0f),
|
||||||
angle(0.0f),
|
angle(0.0f),
|
||||||
|
@ -188,10 +188,10 @@ Driver::Driver(int index, const int robot_type) :
|
||||||
brake_adjust_targ(1.0),
|
brake_adjust_targ(1.0),
|
||||||
brake_adjust_perc(1.0),
|
brake_adjust_perc(1.0),
|
||||||
fuelperlap(5.0f),
|
fuelperlap(5.0f),
|
||||||
#ifdef SPEED_DREAMS
|
#ifdef SPEED_DREAMS
|
||||||
teamIndex(0),
|
teamIndex(0),
|
||||||
pitStopChecked(false),
|
pitStopChecked(false),
|
||||||
#endif
|
#endif
|
||||||
MAX_UNSTUCK_COUNT(0),
|
MAX_UNSTUCK_COUNT(0),
|
||||||
INDEX(0),
|
INDEX(0),
|
||||||
CARMASS(0.0f),
|
CARMASS(0.0f),
|
||||||
|
@ -244,6 +244,14 @@ Driver::Driver(int index, const int robot_type) :
|
||||||
case USR_MPA1:
|
case USR_MPA1:
|
||||||
robot_name = "usr_mpa1";
|
robot_name = "usr_mpa1";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case USR_MPA11:
|
||||||
|
robot_name = "usr_mpa11";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USR_MPA12:
|
||||||
|
robot_name = "usr_mpa12";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1398,7 +1406,7 @@ void Driver::calcSkill()
|
||||||
// how long this skill mode to last for
|
// how long this skill mode to last for
|
||||||
skill_adjust_limit = 5.0 + rand3 * 50.0;
|
skill_adjust_limit = 5.0 + rand3 * 50.0;
|
||||||
skill_adjust_timer = simtime;
|
skill_adjust_timer = simtime;
|
||||||
//fprintf(stderr,"SKILL: New Targets: Decel=%.3f Brake=%.3f Time=%.3f\n",decel_adjust_targ,brake_adjust_targ,skill_adjust_limit);
|
//fprintf(stderr,"SKILL: New Targets: Decel=%.3f Brake=%.3f Time=%.3f\n",decel_adjust_targ,brake_adjust_targ,skill_adjust_limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (decel_adjust_perc < decel_adjust_targ)
|
if (decel_adjust_perc < decel_adjust_targ)
|
||||||
|
@ -1789,7 +1797,7 @@ float Driver::correctSteering( float avoidsteer, float racesteer )
|
||||||
|
|
||||||
double climit = fabs(correctlimit * changelimit);
|
double climit = fabs(correctlimit * changelimit);
|
||||||
|
|
||||||
if (DebugMsg & debug_steer)
|
if (DebugMsg & debug_steer)
|
||||||
LogUSR.debug("CORRECT: cl=%.3f/%.3f=%.3f as=%.3f rs=%.3f NS=%.3f",correctlimit,changelimit,climit,avoidsteer,racesteer,lastNSasteer);
|
LogUSR.debug("CORRECT: cl=%.3f/%.3f=%.3f as=%.3f rs=%.3f NS=%.3f",correctlimit,changelimit,climit,avoidsteer,racesteer,lastNSasteer);
|
||||||
if (/*mode == mode_correcting &&*/ simtime > 2.0f)
|
if (/*mode == mode_correcting &&*/ simtime > 2.0f)
|
||||||
{
|
{
|
||||||
|
@ -1801,7 +1809,7 @@ if (DebugMsg & debug_steer)
|
||||||
if (fabs(steer-racesteer) <= car->_speed_x / 2000)
|
if (fabs(steer-racesteer) <= car->_speed_x / 2000)
|
||||||
{
|
{
|
||||||
//steer = (float) MIN(racesteer, steer + correctlimit);
|
//steer = (float) MIN(racesteer, steer + correctlimit);
|
||||||
if (DebugMsg & debug_steer) LogUSR.debug(" RA%.3f", racesteer);
|
if (DebugMsg & debug_steer) LogUSR.debug(" RA%.3f", racesteer);
|
||||||
steer = racesteer;
|
steer = racesteer;
|
||||||
lastNSasteer = (float)rldata->NSsteer;
|
lastNSasteer = (float)rldata->NSsteer;
|
||||||
}
|
}
|
||||||
|
@ -1809,7 +1817,7 @@ if (DebugMsg & debug_steer) LogUSR.debug(" RA%.3f", racesteer);
|
||||||
{
|
{
|
||||||
steer = (float) MIN(racesteer, MAX(steer + climit, racesteer - fabs(correctlimit) + climit));
|
steer = (float) MIN(racesteer, MAX(steer + climit, racesteer - fabs(correctlimit) + climit));
|
||||||
lastNSasteer = (float) MIN(rldata->NSsteer, MAX(lastNSasteer, rldata->NSsteer + climit));
|
lastNSasteer = (float) MIN(rldata->NSsteer, MAX(lastNSasteer, rldata->NSsteer + climit));
|
||||||
if (DebugMsg & debug_steer) LogUSR.debug(" MA%.3f", steer);
|
if (DebugMsg & debug_steer) LogUSR.debug(" MA%.3f", steer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1819,13 +1827,13 @@ if (DebugMsg & debug_steer) LogUSR.debug(" MA%.3f", steer);
|
||||||
//steer = (float) MAX(racesteer, steer-climit);
|
//steer = (float) MAX(racesteer, steer-climit);
|
||||||
steer = racesteer;
|
steer = racesteer;
|
||||||
lastNSasteer = (float)rldata->NSsteer;
|
lastNSasteer = (float)rldata->NSsteer;
|
||||||
if (DebugMsg & debug_steer) LogUSR.debug(" RB%.3f", racesteer);
|
if (DebugMsg & debug_steer) LogUSR.debug(" RB%.3f", racesteer);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
steer = (float) MAX(racesteer, MIN(steer - fabs(climit), racesteer + fabs(correctlimit) + climit));
|
steer = (float) MAX(racesteer, MIN(steer - fabs(climit), racesteer + fabs(correctlimit) + climit));
|
||||||
lastNSasteer = (float) MAX(rldata->NSsteer, MIN(lastNSasteer, rldata->NSsteer + climit));
|
lastNSasteer = (float) MAX(rldata->NSsteer, MIN(lastNSasteer, rldata->NSsteer + climit));
|
||||||
if (DebugMsg & debug_steer) LogUSR.debug(" MB%.3f", steer);
|
if (DebugMsg & debug_steer) LogUSR.debug(" MB%.3f", steer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1858,12 +1866,12 @@ if (DebugMsg & debug_steer) LogUSR.debug(" MB%.3f", steer);
|
||||||
else
|
else
|
||||||
//lastNSasteer = (float) MAX(rldata->NSsteer, lastNSasteer - (((155.0-speed)/10000) * correctspeed));
|
//lastNSasteer = (float) MAX(rldata->NSsteer, lastNSasteer - (((155.0-speed)/10000) * correctspeed));
|
||||||
lastNSasteer = (float) MAX(rldata->NSsteer, lastNSasteer - changelimit);
|
lastNSasteer = (float) MAX(rldata->NSsteer, lastNSasteer - changelimit);
|
||||||
if (DebugMsg & debug_steer) LogUSR.debug(" I%.3f", steer);
|
if (DebugMsg & debug_steer) LogUSR.debug(" I%.3f", steer);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DebugMsg & debug_steer) LogUSR.debug(" %.3f NS=%.3f\n", steer, lastNSasteer);
|
if (DebugMsg & debug_steer) LogUSR.debug(" %.3f NS=%.3f\n", steer, lastNSasteer);
|
||||||
|
|
||||||
return steer;
|
return steer;
|
||||||
}
|
}
|
||||||
|
@ -2414,7 +2422,7 @@ float Driver::getOffset()
|
||||||
if ((opponent[i].getState() & OPP_SIDE))
|
if ((opponent[i].getState() & OPP_SIDE))
|
||||||
{
|
{
|
||||||
o = &opponent[i];
|
o = &opponent[i];
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s SIDE %s\n", car->_name, ocar->_name);
|
LogUSR.debug("%s SIDE %s\n", car->_name, ocar->_name);
|
||||||
|
|
||||||
double sidedist = fabs(ocar->_trkPos.toLeft - car->_trkPos.toLeft);
|
double sidedist = fabs(ocar->_trkPos.toLeft - car->_trkPos.toLeft);
|
||||||
|
@ -2449,7 +2457,7 @@ if (DebugMsg & debug_overtake)
|
||||||
//if (rldata->rInverse < 0.0)
|
//if (rldata->rInverse < 0.0)
|
||||||
// myoffset -= rldata->rInverse * 500 * IncFactor;
|
// myoffset -= rldata->rInverse * 500 * IncFactor;
|
||||||
avoidmovt = 1;
|
avoidmovt = 1;
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s SIDE to Rgt %s, MOVING LEFT by %.3f, sm=%.3f sd=%.3f/%.3f sm-sd=%.3f mInv=%.3f\n",car->_name,ocar->_name,(float) (OVERTAKE_OFFSET_INC*lftinc*MAX(0.2f, MIN(1.5f, sdiff))),sidemargin,sidedist,sidedist2,sdiff,rldata->mInverse);
|
LogUSR.debug("%s SIDE to Rgt %s, MOVING LEFT by %.3f, sm=%.3f sd=%.3f/%.3f sm-sd=%.3f mInv=%.3f\n",car->_name,ocar->_name,(float) (OVERTAKE_OFFSET_INC*lftinc*MAX(0.2f, MIN(1.5f, sdiff))),sidemargin,sidedist,sidedist2,sdiff,rldata->mInverse);
|
||||||
} else if (side <= 0.0) {
|
} else if (side <= 0.0) {
|
||||||
double rinc = OVERTAKE_OFFSET_INC * (rgtinc * MAX(0.2, MIN(1.1, sdiff/4)) * 1.5);
|
double rinc = OVERTAKE_OFFSET_INC * (rgtinc * MAX(0.2, MIN(1.1, sdiff/4)) * 1.5);
|
||||||
|
@ -2459,14 +2467,14 @@ if (DebugMsg & debug_overtake)
|
||||||
//if (rldata->rInverse > 0.0)
|
//if (rldata->rInverse > 0.0)
|
||||||
// myoffset -= rldata->rInverse * 500 * IncFactor;
|
// myoffset -= rldata->rInverse * 500 * IncFactor;
|
||||||
avoidmovt = 1;
|
avoidmovt = 1;
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s SIDE to Lft %s, MOVING RIGHT by %.3f sm-sd=%.2f mo=%.3f\n",car->_name,ocar->_name,(OVERTAKE_OFFSET_INC*lftinc*MAX(1.0f, MIN(2.0f, sdiff))),sdiff,myoffset);
|
LogUSR.debug("%s SIDE to Lft %s, MOVING RIGHT by %.3f sm-sd=%.2f mo=%.3f\n",car->_name,ocar->_name,(OVERTAKE_OFFSET_INC*lftinc*MAX(1.0f, MIN(2.0f, sdiff))),sdiff,myoffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (avoidmovt)
|
if (avoidmovt)
|
||||||
sideratio = MIN(sidedist,sidedist2)/sidemargin;
|
sideratio = MIN(sidedist,sidedist2)/sidemargin;
|
||||||
else if (DebugMsg & debug_overtake)
|
else if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s SIDE %s, NO MOVE %.1f\n", car->_name, ocar->_name, myoffset);
|
LogUSR.debug("%s SIDE %s, NO MOVE %.1f\n", car->_name, ocar->_name, myoffset);
|
||||||
}
|
}
|
||||||
else if (sidedist > sidemargin+3.0)
|
else if (sidedist > sidemargin+3.0)
|
||||||
{
|
{
|
||||||
|
@ -2478,7 +2486,7 @@ LogUSR.debug("%s SIDE %s, NO MOVE %.1f\n", car->_name, ocar->_name, myoffset);
|
||||||
car->_trkPos.toLeft < MIN(lane2left, 4.0 + fabs(nextCRinverse)*1000))
|
car->_trkPos.toLeft < MIN(lane2left, 4.0 + fabs(nextCRinverse)*1000))
|
||||||
{
|
{
|
||||||
myoffset -= (float) (OVERTAKE_OFFSET_INC*lftinc/4);
|
myoffset -= (float) (OVERTAKE_OFFSET_INC*lftinc/4);
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s SIDE to Rgt %s, MOVING BACK TO RIGHT\n", car->_name, ocar->_name);
|
LogUSR.debug("%s SIDE to Rgt %s, MOVING BACK TO RIGHT\n", car->_name, ocar->_name);
|
||||||
if (!avoidmode)
|
if (!avoidmode)
|
||||||
avoidtime = MIN(simtime, avoidtime+deltaTime*0.5);
|
avoidtime = MIN(simtime, avoidtime+deltaTime*0.5);
|
||||||
|
@ -2487,15 +2495,15 @@ if (DebugMsg & debug_overtake)
|
||||||
car->_trkPos.toRight < MIN(lane2right, 4.0 + fabs(nextCRinverse)*1000))
|
car->_trkPos.toRight < MIN(lane2right, 4.0 + fabs(nextCRinverse)*1000))
|
||||||
{
|
{
|
||||||
myoffset += (float) (OVERTAKE_OFFSET_INC*rgtinc/4);
|
myoffset += (float) (OVERTAKE_OFFSET_INC*rgtinc/4);
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s SIDE to Lft %s, MOVING BACK TO LEFT\n", car->_name, ocar->_name);
|
LogUSR.debug("%s SIDE to Lft %s, MOVING BACK TO LEFT\n", car->_name, ocar->_name);
|
||||||
if (!avoidmode)
|
if (!avoidmode)
|
||||||
avoidtime = MIN(simtime, avoidtime+deltaTime*0.5);
|
avoidtime = MIN(simtime, avoidtime+deltaTime*0.5);
|
||||||
}
|
}
|
||||||
else if (DebugMsg & debug_overtake)
|
else if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s SIDE %s, NO MOVE %.1f\n", car->_name, ocar->_name, myoffset);
|
LogUSR.debug("%s SIDE %s, NO MOVE %.1f\n", car->_name, ocar->_name, myoffset);
|
||||||
}
|
}
|
||||||
else if (DebugMsg & debug_overtake)
|
else if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s SIDE %s, NO MOVE AT ALL! %.1f\n", car->_name, ocar->_name, myoffset);
|
LogUSR.debug("%s SIDE %s, NO MOVE AT ALL! %.1f\n", car->_name, ocar->_name, myoffset);
|
||||||
|
|
||||||
if (ocar->_trkPos.toLeft > car->_trkPos.toLeft)
|
if (ocar->_trkPos.toLeft > car->_trkPos.toLeft)
|
||||||
|
@ -2593,11 +2601,11 @@ else if (DebugMsg & debug_overtake)
|
||||||
if (avoidingside != TR_STR)
|
if (avoidingside != TR_STR)
|
||||||
{
|
{
|
||||||
int newside = checkSwitch(avoidingside, o, ocar);
|
int newside = checkSwitch(avoidingside, o, ocar);
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug(" AVOIDING A %c\n", (avoidingside==TR_LFT?'L':'R'));
|
LogUSR.debug(" AVOIDING A %c\n", (avoidingside==TR_LFT?'L':'R'));
|
||||||
if (newside != avoidingside)
|
if (newside != avoidingside)
|
||||||
{
|
{
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug(" SWITCH 1 from %c to %c\n", (avoidingside==TR_LFT?'L':'R'),(newside==TR_LFT?'L':'R'));
|
LogUSR.debug(" SWITCH 1 from %c to %c\n", (avoidingside==TR_LFT?'L':'R'),(newside==TR_LFT?'L':'R'));
|
||||||
avoidingside = newside;
|
avoidingside = newside;
|
||||||
thismustmove = true;
|
thismustmove = true;
|
||||||
|
@ -2641,20 +2649,20 @@ if (DebugMsg & debug_overtake)
|
||||||
if (rInverse > 0.0)
|
if (rInverse > 0.0)
|
||||||
rinc += rInverse * 200 * IncFactor;
|
rinc += rInverse * 200 * IncFactor;
|
||||||
myoffset -= (float) rinc;
|
myoffset -= (float) rinc;
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s LFT %s, MOVING RIGHT %.3f/%.3f -> %.3f (rgtinc=%.2f (%.2f) rinc=%.2f)\n", car->_name, ocar->_name, (float) (OVERTAKE_OFFSET_INC*rgtinc),rinc,myoffset,rgtinc,lftinc,rinc);
|
LogUSR.debug("%s LFT %s, MOVING RIGHT %.3f/%.3f -> %.3f (rgtinc=%.2f (%.2f) rinc=%.2f)\n", car->_name, ocar->_name, (float) (OVERTAKE_OFFSET_INC*rgtinc),rinc,myoffset,rgtinc,lftinc,rinc);
|
||||||
avoidmovt = 1;
|
avoidmovt = 1;
|
||||||
}
|
}
|
||||||
else if (sidedist > car->_dimension_y + ocar->_dimension_y + 4.0 &&
|
else if (sidedist > car->_dimension_y + ocar->_dimension_y + 4.0 &&
|
||||||
car->_trkPos.toRight < MIN(lane2right-1.0, 4.0 + fabs(nextCRinverse)*1000))
|
car->_trkPos.toRight < MIN(lane2right-1.0, 4.0 + fabs(nextCRinverse)*1000))
|
||||||
{
|
{
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s LFT %s, MOVING BACK TO LEFT %.3f\n",car->_name,ocar->_name,(float) (OVERTAKE_OFFSET_INC*lftinc/2));
|
LogUSR.debug("%s LFT %s, MOVING BACK TO LEFT %.3f\n",car->_name,ocar->_name,(float) (OVERTAKE_OFFSET_INC*lftinc/2));
|
||||||
myoffset += (float) (OVERTAKE_OFFSET_INC*lftinc)/2;
|
myoffset += (float) (OVERTAKE_OFFSET_INC*lftinc)/2;
|
||||||
if (!avoidmode)
|
if (!avoidmode)
|
||||||
avoidtime = MIN(simtime, avoidtime+deltaTime);
|
avoidtime = MIN(simtime, avoidtime+deltaTime);
|
||||||
}
|
}
|
||||||
else if (DebugMsg & debug_overtake)
|
else if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s LFT %s, HOLDING LINE\n",car->_name,ocar->_name);
|
LogUSR.debug("%s LFT %s, HOLDING LINE\n",car->_name,ocar->_name);
|
||||||
}
|
}
|
||||||
else // if (avoidingside == TR_RGT)
|
else // if (avoidingside == TR_RGT)
|
||||||
|
@ -2665,7 +2673,7 @@ else if (DebugMsg & debug_overtake)
|
||||||
(o->getState() & OPP_COLL) ||
|
(o->getState() & OPP_COLL) ||
|
||||||
(prefer_side == TR_LFT && car->_trkPos.toLeft > MIN(lane2left, 3.0 + nextCRinverse*1000)))
|
(prefer_side == TR_LFT && car->_trkPos.toLeft > MIN(lane2left, 3.0 + nextCRinverse*1000)))
|
||||||
{
|
{
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s RGT %s, MOVING LEFT %.3f\n",car->_name,ocar->_name,(float) (OVERTAKE_OFFSET_INC*lftinc));
|
LogUSR.debug("%s RGT %s, MOVING LEFT %.3f\n",car->_name,ocar->_name,(float) (OVERTAKE_OFFSET_INC*lftinc));
|
||||||
double linc = OVERTAKE_OFFSET_INC * lftinc;
|
double linc = OVERTAKE_OFFSET_INC * lftinc;
|
||||||
if (rInverse < 0.0)
|
if (rInverse < 0.0)
|
||||||
|
@ -2676,13 +2684,13 @@ if (DebugMsg & debug_overtake)
|
||||||
else if (sidedist > car->_dimension_y + ocar->_dimension_y + 4.0 &&
|
else if (sidedist > car->_dimension_y + ocar->_dimension_y + 4.0 &&
|
||||||
car->_trkPos.toLeft < MIN(lane2left-1.0, 4.0 + fabs(nextCRinverse)*1000))
|
car->_trkPos.toLeft < MIN(lane2left-1.0, 4.0 + fabs(nextCRinverse)*1000))
|
||||||
{
|
{
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s RGT %s, MOVING BACK TO RIGHT %.3f\n", car->_name, ocar->_name,(float) (OVERTAKE_OFFSET_INC*rgtinc/2));
|
LogUSR.debug("%s RGT %s, MOVING BACK TO RIGHT %.3f\n", car->_name, ocar->_name,(float) (OVERTAKE_OFFSET_INC*rgtinc/2));
|
||||||
myoffset -= (float) (OVERTAKE_OFFSET_INC*rgtinc)/2;
|
myoffset -= (float) (OVERTAKE_OFFSET_INC*rgtinc)/2;
|
||||||
if (!avoidmode)
|
if (!avoidmode)
|
||||||
avoidtime = MIN(simtime, avoidtime+deltaTime);
|
avoidtime = MIN(simtime, avoidtime+deltaTime);
|
||||||
}
|
}
|
||||||
else if (DebugMsg & debug_overtake)
|
else if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s RGT %s, HOLDING LINE\n", car->_name, ocar->_name);
|
LogUSR.debug("%s RGT %s, HOLDING LINE\n", car->_name, ocar->_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2736,7 +2744,7 @@ else if (DebugMsg & debug_overtake)
|
||||||
tCarElt *ocar = o->getCarPtr();
|
tCarElt *ocar = o->getCarPtr();
|
||||||
float side = car->_trkPos.toMiddle - ocar->_trkPos.toMiddle;
|
float side = car->_trkPos.toMiddle - ocar->_trkPos.toMiddle;
|
||||||
float w = car->_trkPos.seg->width/WIDTHDIV-BORDER_OVERTAKE_MARGIN;
|
float w = car->_trkPos.seg->width/WIDTHDIV-BORDER_OVERTAKE_MARGIN;
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s BEHIND %s (%d %d %d %d)\n", car->_name, ocar->_name,((o->getState() & OPP_LETPASS) && !o->isTeamMate()),(o->isTeamMate() && (car->_dammage - o->getDamage() > TEAM_DAMAGE_CHANGE_LEAD)),((o->getDistance() > -TEAM_REAR_DIST) && (o->getDistance() < -car->_dimension_x)),(car->race.laps == o->getCarPtr()->race.laps));
|
LogUSR.debug("%s BEHIND %s (%d %d %d %d)\n", car->_name, ocar->_name,((o->getState() & OPP_LETPASS) && !o->isTeamMate()),(o->isTeamMate() && (car->_dammage - o->getDamage() > TEAM_DAMAGE_CHANGE_LEAD)),((o->getDistance() > -TEAM_REAR_DIST) && (o->getDistance() < -car->_dimension_x)),(car->race.laps == o->getCarPtr()->race.laps));
|
||||||
if (side > 0.0f) {
|
if (side > 0.0f) {
|
||||||
if (myoffset < w) {
|
if (myoffset < w) {
|
||||||
|
@ -2764,8 +2772,8 @@ if (DebugMsg & debug_overtake)
|
||||||
}
|
}
|
||||||
|
|
||||||
myoffset = (float) (MAX(minoffset, MIN(maxoffset, myoffset)));
|
myoffset = (float) (MAX(minoffset, MIN(maxoffset, myoffset)));
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("%s BEHIND %s (%g)\n", car->_name, ocar->_name, myoffset);
|
LogUSR.debug("%s BEHIND %s (%g)\n", car->_name, ocar->_name, myoffset);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2802,8 +2810,8 @@ end_getoffset:
|
||||||
if (mode == mode_avoiding && !avoidmovt)
|
if (mode == mode_avoiding && !avoidmovt)
|
||||||
avoidtime = MIN(simtime, avoidtime+deltaTime*1.5);
|
avoidtime = MIN(simtime, avoidtime+deltaTime*1.5);
|
||||||
|
|
||||||
// minoffset = MAX(minoffset, MIN(1.5, rldata->offset));
|
// minoffset = MAX(minoffset, MIN(1.5, rldata->offset));
|
||||||
// maxoffset = MIN(maxoffset, MAX(track->width - 1.5, rldata->offset));
|
// maxoffset = MIN(maxoffset, MAX(track->width - 1.5, rldata->offset));
|
||||||
{
|
{
|
||||||
double mo = myoffset;
|
double mo = myoffset;
|
||||||
myoffset = (float) (MAX(minoffset, MIN(maxoffset, myoffset)));
|
myoffset = (float) (MAX(minoffset, MIN(maxoffset, myoffset)));
|
||||||
|
@ -2846,7 +2854,7 @@ int Driver::checkSwitch( int side, Opponent *o, tCarElt *ocar )
|
||||||
switch (side)
|
switch (side)
|
||||||
{
|
{
|
||||||
case TR_RGT:
|
case TR_RGT:
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("CHECKSWITCH: Rgt - ti=%.2f dm=%.1f o=%.2f->%.2f m=%.2f->%.2f\n",t_impact,deltamult,ocar->_trkPos.toLeft,ocatchleft,car->_trkPos.toLeft,mcatchleft);
|
LogUSR.debug("CHECKSWITCH: Rgt - ti=%.2f dm=%.1f o=%.2f->%.2f m=%.2f->%.2f\n",t_impact,deltamult,ocar->_trkPos.toLeft,ocatchleft,car->_trkPos.toLeft,mcatchleft);
|
||||||
if (nextCRinverse > 0.0)
|
if (nextCRinverse > 0.0)
|
||||||
radius = 0.0;
|
radius = 0.0;
|
||||||
|
@ -2856,7 +2864,7 @@ if (DebugMsg & debug_overtake)
|
||||||
xdist > sdiff + ydist + MAX(0.0, angle*10) &&
|
xdist > sdiff + ydist + MAX(0.0, angle*10) &&
|
||||||
track->width - ocatchleft > (car->_dimension_y + 3.0 + radius + speedchange))
|
track->width - ocatchleft > (car->_dimension_y + 3.0 + radius + speedchange))
|
||||||
{
|
{
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug(" Switch to his right (side=lft) - %d %d %d %d\n",(side==prefer_side),(ocatchleft<mcatchleft-1.5),(xdist>sdiff+ydist+MAX(0.0, angle*10)),(track->width-ocatchleft>(car->_dimension_y+3+radius+speedchange)));
|
LogUSR.debug(" Switch to his right (side=lft) - %d %d %d %d\n",(side==prefer_side),(ocatchleft<mcatchleft-1.5),(xdist>sdiff+ydist+MAX(0.0, angle*10)),(track->width-ocatchleft>(car->_dimension_y+3+radius+speedchange)));
|
||||||
side = TR_LFT;
|
side = TR_LFT;
|
||||||
}
|
}
|
||||||
|
@ -2864,8 +2872,8 @@ if (DebugMsg & debug_overtake)
|
||||||
|
|
||||||
case TR_LFT:
|
case TR_LFT:
|
||||||
default:
|
default:
|
||||||
if (DebugMsg & debug_overtake)
|
if (DebugMsg & debug_overtake)
|
||||||
LogUSR.debug("CHECKSWITCH: Lft - ti=%.2f dm=%.1f o=%.2f->%.2f m=%.2f->%.2f\n",t_impact,deltamult,ocar->_trkPos.toLeft,ocatchleft,car->_trkPos.toLeft,mcatchleft);
|
LogUSR.debug("CHECKSWITCH: Lft - ti=%.2f dm=%.1f o=%.2f->%.2f m=%.2f->%.2f\n",t_impact,deltamult,ocar->_trkPos.toLeft,ocatchleft,car->_trkPos.toLeft,mcatchleft);
|
||||||
if (nextCRinverse < 0.0)
|
if (nextCRinverse < 0.0)
|
||||||
radius = 0.0;
|
radius = 0.0;
|
||||||
if ((side == prefer_side ||
|
if ((side == prefer_side ||
|
||||||
|
@ -3462,7 +3470,7 @@ float Driver::filterBPit(float brake)
|
||||||
pit->setPitstop(false);
|
pit->setPitstop(false);
|
||||||
return 0.0f;
|
return 0.0f;
|
||||||
} else {
|
} else {
|
||||||
// if (brakedist(0.0f, mu) > dist) {
|
// if (brakedist(0.0f, mu) > dist) {
|
||||||
if (brakedist(0.0f, 0.5f*mu) > dist) {
|
if (brakedist(0.0f, 0.5f*mu) > dist) {
|
||||||
return 2.0f;
|
return 2.0f;
|
||||||
} else if (s > pit->getNPitLoc(pitpos)) {
|
} else if (s > pit->getNPitLoc(pitpos)) {
|
||||||
|
@ -3514,8 +3522,8 @@ float Driver::filterBColl(float brake)
|
||||||
else
|
else
|
||||||
collision = thiscollision;
|
collision = thiscollision;
|
||||||
thisbrake = (float)MAX(thisbrake, (0.3f + (5.0 - collision)/4) * brakeratio);
|
thisbrake = (float)MAX(thisbrake, (0.3f + (5.0 - collision)/4) * brakeratio);
|
||||||
if (DebugMsg & debug_brake)
|
if (DebugMsg & debug_brake)
|
||||||
fprintf(stderr,"%s - %s BRAKE: ti=%.3f\n",car->_name,opponent[i].getCarPtr()->_name,opponent[i].getTimeImpact());
|
fprintf(stderr,"%s - %s BRAKE: ti=%.3f\n",car->_name,opponent[i].getCarPtr()->_name,opponent[i].getTimeImpact());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@ class SimpleStrategy;
|
||||||
enum { TEAM_FRIEND=1, TEAM_FOE };
|
enum { TEAM_FRIEND=1, TEAM_FOE };
|
||||||
enum { avoidleft=1, avoidright=2, avoidside=4, avoidsideclosing=8, avoidback=16 };
|
enum { avoidleft=1, avoidright=2, avoidside=4, avoidsideclosing=8, avoidback=16 };
|
||||||
enum { debug_steer=1, debug_overtake=2, debug_brake=4 };
|
enum { debug_steer=1, debug_overtake=2, debug_brake=4 };
|
||||||
enum { USR_TRB1=1, USR_SC, USR_LS1, USR_LS2, USR_36GP, USR_RS, USR_LP1, USR_MPA1 };
|
enum { USR_TRB1=1, USR_SC, USR_LS1, USR_LS2, USR_36GP, USR_RS, USR_LP1, USR_MPA1, USR_MPA11, USR_MPA12 };
|
||||||
|
|
||||||
class Driver {
|
class Driver {
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -139,37 +139,6 @@ void* getFileHandle()
|
||||||
// Carset specific init functions
|
// Carset specific init functions
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// Schismatic init for usr_trb1
|
|
||||||
void SetupUSR_trb1()
|
|
||||||
{
|
|
||||||
// Add usr_trb1 specific initialization here
|
|
||||||
robot_type = USR_TRB1;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Schismatic init for usr_ls2
|
|
||||||
void SetupUSR_ls2()
|
|
||||||
{
|
|
||||||
// Add usr_ls2 specific initialization here
|
|
||||||
robot_type = USR_LS2;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// Schismatic init for usr_sc
|
|
||||||
void SetupUSR_sc()
|
|
||||||
{
|
|
||||||
// Add usr_sc specific initialization here
|
|
||||||
robot_type = USR_SC;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// Schismatic init for usr_ls1
|
|
||||||
void SetupUSR_ls1()
|
|
||||||
{
|
|
||||||
// Add usr_ls1 specific initialization here
|
|
||||||
robot_type = USR_LS1;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// Schismatic init for usr_36GP
|
// Schismatic init for usr_36GP
|
||||||
void SetupUSR_36GP()
|
void SetupUSR_36GP()
|
||||||
{
|
{
|
||||||
|
@ -177,13 +146,6 @@ void SetupUSR_36GP()
|
||||||
robot_type = USR_36GP;
|
robot_type = USR_36GP;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Schismatic init for usr_rs
|
|
||||||
void SetupUSR_rs()
|
|
||||||
{
|
|
||||||
// Add usr_RS specific initialization here
|
|
||||||
robot_type = USR_RS;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Schismatic init for usr_lp1
|
// Schismatic init for usr_lp1
|
||||||
void SetupUSR_lp1()
|
void SetupUSR_lp1()
|
||||||
{
|
{
|
||||||
|
@ -191,6 +153,20 @@ void SetupUSR_lp1()
|
||||||
robot_type = USR_LP1;
|
robot_type = USR_LP1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Schismatic init for usr_ls1
|
||||||
|
void SetupUSR_ls1()
|
||||||
|
{
|
||||||
|
// Add usr_ls1 specific initialization here
|
||||||
|
robot_type = USR_LS1;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Schismatic init for usr_ls2
|
||||||
|
void SetupUSR_ls2()
|
||||||
|
{
|
||||||
|
// Add usr_ls2 specific initialization here
|
||||||
|
robot_type = USR_LS2;
|
||||||
|
};
|
||||||
|
|
||||||
// Schismatic init for usr_mpa1
|
// Schismatic init for usr_mpa1
|
||||||
void SetupUSR_mpa1()
|
void SetupUSR_mpa1()
|
||||||
{
|
{
|
||||||
|
@ -198,6 +174,41 @@ void SetupUSR_mpa1()
|
||||||
robot_type = USR_MPA1;
|
robot_type = USR_MPA1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Schismatic init for usr_mpa11
|
||||||
|
void SetupUSR_mpa11()
|
||||||
|
{
|
||||||
|
// Add usr_mpa1 specific initialization here
|
||||||
|
robot_type = USR_MPA11;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Schismatic init for usr_mpa12
|
||||||
|
void SetupUSR_mpa12()
|
||||||
|
{
|
||||||
|
// Add usr_mpa1 specific initialization here
|
||||||
|
robot_type = USR_MPA12;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Schismatic init for usr_rs
|
||||||
|
void SetupUSR_rs()
|
||||||
|
{
|
||||||
|
// Add usr_RS specific initialization here
|
||||||
|
robot_type = USR_RS;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Schismatic init for usr_sc
|
||||||
|
void SetupUSR_sc()
|
||||||
|
{
|
||||||
|
// Add usr_sc specific initialization here
|
||||||
|
robot_type = USR_SC;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Schismatic init for usr_trb1
|
||||||
|
void SetupUSR_trb1()
|
||||||
|
{
|
||||||
|
// Add usr_trb1 specific initialization here
|
||||||
|
robot_type = USR_TRB1;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
// Carset specific entry points (functions)
|
// Carset specific entry points (functions)
|
||||||
|
@ -276,6 +287,36 @@ extern "C" int usr_mpa1(tModInfo *ModInfo)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Schismatic entry point for usr_mpa1
|
||||||
|
extern "C" int usr_mpa11(tModInfo *ModInfo)
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
setRobotName("usr_mpa11");
|
||||||
|
robot_type = USR_MPA11;
|
||||||
|
void *robot_settings = getFileHandle();
|
||||||
|
if (robot_settings)
|
||||||
|
{
|
||||||
|
ret = usr(ModInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Schismatic entry point for usr_mpa1
|
||||||
|
extern "C" int usr_mpa12(tModInfo *ModInfo)
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
setRobotName("usr_mpa12");
|
||||||
|
robot_type = USR_MPA12;
|
||||||
|
void *robot_settings = getFileHandle();
|
||||||
|
if (robot_settings)
|
||||||
|
{
|
||||||
|
ret = usr(ModInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
// Schismatic entry point for usr_36GP
|
// Schismatic entry point for usr_36GP
|
||||||
extern "C" int usr_36GP(tModInfo *ModInfo)
|
extern "C" int usr_36GP(tModInfo *ModInfo)
|
||||||
{
|
{
|
||||||
|
@ -418,6 +459,10 @@ extern "C" int moduleWelcome(const tModWelcomeIn* welcomeIn,
|
||||||
SetupUSR_lp1();
|
SetupUSR_lp1();
|
||||||
else if (strncmp(robot_name,"usr_mpa1", strlen("usr_mpa1")) == 0)
|
else if (strncmp(robot_name,"usr_mpa1", strlen("usr_mpa1")) == 0)
|
||||||
SetupUSR_mpa1();
|
SetupUSR_mpa1();
|
||||||
|
else if (strncmp(robot_name,"usr_mpa11", strlen("usr_mpa11")) == 0)
|
||||||
|
SetupUSR_mpa11();
|
||||||
|
else if (strncmp(robot_name,"usr_mpa12", strlen("usr_mpa12")) == 0)
|
||||||
|
SetupUSR_mpa12();
|
||||||
|
|
||||||
|
|
||||||
// Set max nb of interfaces to return.
|
// Set max nb of interfaces to return.
|
||||||
|
|
Loading…
Reference in a new issue