|
@@ -926,7 +926,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
|
|
|
|
|
|
|
|
|
- avoidX = (roadOri-roadNow)*roadWidth;
|
|
|
+
|
|
|
|
|
|
gpsTraceOri.clear();
|
|
|
gpsTraceNow.clear();
|
|
@@ -970,9 +970,23 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
|
|
|
|
|
|
|
|
|
- roadOri = gpsMapLine[PathPoint]->roadOri;
|
|
|
+ if(!ServiceCarStatus.inRoadAvoid){
|
|
|
+ roadOri = gpsMapLine[PathPoint]->roadOri;
|
|
|
+ roadSum = gpsMapLine[PathPoint]->roadSum;
|
|
|
+ }else{
|
|
|
+ roadOri=gpsMapLine[PathPoint]->roadOri*3+1;
|
|
|
+ roadSum = gpsMapLine[PathPoint]->roadSum*3;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ServiceCarStatus.avoidObs){
|
|
|
+ gpsMapLine[PathPoint]->runMode=1;
|
|
|
+ }else{
|
|
|
+ gpsMapLine[PathPoint]->runMode=0;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
- roadSum = gpsMapLine[PathPoint]->roadSum;
|
|
|
+ // avoidX = (roadOri-roadNow)*roadWidth;
|
|
|
+ avoidX=computeAvoidX(roadNow,roadOri,gpsMapLine[PathPoint],ServiceCarStatus.msysparam.vehWidth);
|
|
|
|
|
|
|
|
|
if ( gpsMapLine[PathPoint]->runMode == 0 &&(vehState == avoidObs||vehState ==stopObs||vehState == preAvoid
|
|
@@ -1038,7 +1052,8 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
if(useFrenet){
|
|
|
//如果车辆在变道中,启用frenet规划局部路径
|
|
|
if(vehState == avoiding || vehState == backOri){
|
|
|
- avoidX = (roadOri - roadNow)*roadWidth;
|
|
|
+ // avoidX = (roadOri - roadNow)*roadWidth;
|
|
|
+ avoidX=computeAvoidX(roadNow,roadOri,gpsMapLine[PathPoint],ServiceCarStatus.msysparam.vehWidth);
|
|
|
gpsTraceNow = frenetPlanner->getPath(now_gps_ins,gpsMapLine,PathPoint,avoidX,lidarGridPtr);
|
|
|
//gpsTraceAim = laneChangePlanner->getPath(now_gps_ins,gpsMapLine,PathPoint,avoidX,lidarGridPtr);
|
|
|
gpsTraceAim = getGpsTraceOffset(gpsTraceOri, avoidX);
|
|
@@ -1470,14 +1485,16 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
}
|
|
|
else if(useOldAvoid){
|
|
|
roadPre = chooseBackRoad(lidarGridPtr, now_gps_ins, gpsMapLine,lidar_per);
|
|
|
- avoidX = (roadOri - roadNow)*roadWidth; //1012
|
|
|
+ // avoidX = (roadOri - roadNow)*roadWidth; //1012
|
|
|
+ avoidX=computeAvoidX(roadNow,roadOri,gpsMapLine[PathPoint],ServiceCarStatus.msysparam.vehWidth);
|
|
|
}
|
|
|
}
|
|
|
if (roadNow != roadOri && roadPre!=-1)
|
|
|
{
|
|
|
|
|
|
roadNow = roadPre;
|
|
|
- avoidX = (roadOri - roadNow)*roadWidth;
|
|
|
+ // avoidX = (roadOri - roadNow)*roadWidth;
|
|
|
+ avoidX=computeAvoidX(roadNow,roadOri,gpsMapLine[PathPoint],ServiceCarStatus.msysparam.vehWidth);
|
|
|
gpsTraceNow.clear();
|
|
|
if(useOldAvoid){
|
|
|
gpsTraceNow = getGpsTraceOffset(gpsTraceOri, avoidX);
|
|
@@ -1573,7 +1590,8 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
//roadPre = chooseAvoidRoad(lidarGridPtr, now_gps_ins,gpsMapLine);
|
|
|
if(useOldAvoid){
|
|
|
roadPre = chooseAvoidRoad(lidarGridPtr, now_gps_ins,gpsMapLine,lidar_per);
|
|
|
- avoidX = (roadOri - roadNow)*roadWidth; //1012
|
|
|
+ // avoidX = (roadOri - roadNow)*roadWidth; //1012
|
|
|
+ avoidX=computeAvoidX(roadNow,roadOri,gpsMapLine[PathPoint],ServiceCarStatus.msysparam.vehWidth);
|
|
|
}
|
|
|
else if(useFrenet){
|
|
|
double offsetL = -(roadSum - 1)*roadWidth;
|
|
@@ -1590,7 +1608,8 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
{
|
|
|
if(useOldAvoid){
|
|
|
roadNow = roadPre;
|
|
|
- avoidX = (roadOri - roadNow)*roadWidth;
|
|
|
+ // avoidX = (roadOri - roadNow)*roadWidth;
|
|
|
+ avoidX=computeAvoidX(roadNow,roadOri,gpsMapLine[PathPoint],ServiceCarStatus.msysparam.vehWidth);
|
|
|
gpsTraceNow.clear();
|
|
|
gpsTraceNow = getGpsTraceOffset(gpsTraceOri, avoidX);
|
|
|
}
|
|
@@ -1600,7 +1619,8 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
startAvoidGpsInsVector[roadNow] = now_gps_ins;
|
|
|
}
|
|
|
roadNow = roadPre;
|
|
|
- avoidX = (roadOri - roadNow)*roadWidth;
|
|
|
+ // avoidX = (roadOri - roadNow)*roadWidth;
|
|
|
+ avoidX=computeAvoidX(roadNow,roadOri,gpsMapLine[PathPoint],ServiceCarStatus.msysparam.vehWidth);
|
|
|
gpsTraceNow = frenetPlanner->getPath(now_gps_ins,gpsMapLine,PathPoint,avoidX,lidarGridPtr);
|
|
|
}
|
|
|
|
|
@@ -2749,7 +2769,8 @@ int iv::decition::DecideGps00::chooseAvoidRoad(iv::LidarGridPtr lidarGridPtr, GP
|
|
|
{
|
|
|
gpsTraceAvoid.clear();
|
|
|
// gpsTraceAvoid = getGpsTrace(now_gps_ins, gmapsL[int(abs(roadWidth * 2)*(i - roadOri))], lastGpsIndex);
|
|
|
- avoidX = (roadWidth)*(roadOri - i);
|
|
|
+ // avoidX = (roadWidth)*(roadOri - i);
|
|
|
+ avoidX=computeAvoidX(i,roadOri,gpsMapLine[PathPoint],ServiceCarStatus.msysparam.vehWidth);
|
|
|
gpsTraceAvoid = getGpsTraceOffset(gpsTraceOri, avoidX);
|
|
|
// computeObsOnRoad(lidarGridPtr, gpsTraceAvoid, roadNow + i);
|
|
|
computeObsOnRoad(lidarGridPtr, gpsTraceAvoid, i,gpsMapLine,lidar_per);
|
|
@@ -2775,7 +2796,8 @@ int iv::decition::DecideGps00::chooseAvoidRoad(iv::LidarGridPtr lidarGridPtr, GP
|
|
|
for (int i = 1; i < roadSum; i++)
|
|
|
{
|
|
|
if (roadNow + i < roadSum) {
|
|
|
- avoidX = (roadOri-roadNow-i)*roadWidth;
|
|
|
+ // avoidX = (roadOri-roadNow-i)*roadWidth;
|
|
|
+ avoidX=computeAvoidX(roadNow+i,roadOri,gpsMapLine[PathPoint],ServiceCarStatus.msysparam.vehWidth);
|
|
|
if (checkAvoidEnable(avoidX, lidarGridPtr, roadNow+i))
|
|
|
{
|
|
|
/*if (roadNow==roadOri)
|
|
@@ -2792,7 +2814,8 @@ int iv::decition::DecideGps00::chooseAvoidRoad(iv::LidarGridPtr lidarGridPtr, GP
|
|
|
|
|
|
if (roadNow - i >= 0)
|
|
|
{
|
|
|
- avoidX = (roadOri - roadNow+i)*roadWidth;
|
|
|
+ // avoidX = (roadOri - roadNow+i)*roadWidth;
|
|
|
+ avoidX=computeAvoidX(roadNow-i,roadOri,gpsMapLine[PathPoint],ServiceCarStatus.msysparam.vehWidth);
|
|
|
if (checkAvoidEnable(avoidX, lidarGridPtr, roadNow - i))
|
|
|
{
|
|
|
/*if (roadNow == roadOri)
|
|
@@ -2847,7 +2870,8 @@ int iv::decition::DecideGps00::chooseBackRoad(iv::LidarGridPtr lidarGridPtr, GPS
|
|
|
{
|
|
|
gpsTraceBack.clear();
|
|
|
// gpsTraceBack = getGpsTrace(now_gps_ins, gmapsR[int(abs(roadWidth * 2)*(roadOri-i))], lastGpsIndex);
|
|
|
- avoidX = (roadWidth)*(roadOri - i);
|
|
|
+ // avoidX = (roadWidth)*(roadOri - i);
|
|
|
+ avoidX=computeAvoidX(i,roadOri,gpsMapLine[PathPoint],ServiceCarStatus.msysparam.vehWidth);
|
|
|
gpsTraceBack = getGpsTraceOffset(gpsTraceOri, avoidX);
|
|
|
computeObsOnRoad(lidarGridPtr, gpsTraceBack, i,gpsMapLine,lidar_per);
|
|
|
}
|
|
@@ -3438,3 +3462,41 @@ void iv::decition::DecideGps00::transferGpsMode2( const std::vector<GPSData> gps
|
|
|
dSpeed=min(dSpeed,5.0);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+float iv::decition::DecideGps00::computeAvoidX(int roadAim,int roadOri,GPSData gps,float vehWidth){
|
|
|
+ if(roadAim==roadOri){
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ float x=0;
|
|
|
+ float veh_to_roadSide=(gps->mfRoadWidth- ServiceCarStatus.msysparam.vehWidth)*0.5;
|
|
|
+ float roadSide_to_roadSide=ServiceCarStatus.msysparam.vehWidth;
|
|
|
+ if(!ServiceCarStatus.inRoadAvoid){
|
|
|
+ x= (roadOri-roadAim)*gps->mfRoadWidth;
|
|
|
+ }else{
|
|
|
+ int num=roadOri-roadAim;
|
|
|
+ switch (num%3) {
|
|
|
+ case 0:
|
|
|
+ x=(num/3)*gps->mfRoadWidth;
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ if(num>0){
|
|
|
+ x=(num/3)*gps->mfRoadWidth +veh_to_roadSide;
|
|
|
+ }else{
|
|
|
+ x=(num/3)*gps->mfRoadWidth -veh_to_roadSide;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ if(num>0){
|
|
|
+ x=(num/3)*gps->mfRoadWidth +veh_to_roadSide+roadSide_to_roadSide;
|
|
|
+ }else{
|
|
|
+ x=(num/3)*gps->mfRoadWidth -veh_to_roadSide-roadSide_to_roadSide;
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return x;
|
|
|
+}
|