Procházet zdrojové kódy

change boringavoid for catarc.

yuchuli před 3 roky
rodič
revize
1ef1529412

+ 1 - 0
src/driver/driver_map_xodrload/globalplan.cpp

@@ -1159,6 +1159,7 @@ std::vector<PlanPoint> GetPoint(Road * pRoad)
         {
             PlanPoint pp = xvectorPP.at(j);
             pp.dis = s + pp.dis;
+            pp.nRoadID = atoi(pRoad->GetRoadId().data());
             xvectorPPS.push_back(pp);
         }
         s = s+ s1;

+ 2 - 0
src/driver/driver_map_xodrload/globalplan.h

@@ -31,6 +31,8 @@ public:
     int mnLaneTotal = 1; //Lane Total
 
     int nSignal = -1;   //if 0 no signal point
+
+    int nRoadID =-1;
 };
 
 int GetNearPoint(const double x,const double y,OpenDrive * pxodr,Road ** pObjRoad,GeometryBlock ** pgeo, double & s,double & nearx,

+ 49 - 19
src/driver/driver_map_xodrload/main.cpp

@@ -435,6 +435,22 @@ static void ToGPSTrace(std::vector<PlanPoint> xPlan)
     ShareMap(mapdata);
 }
 
+int avoidroadid[] = {10002,10019,10003,10098,10099,10063};
+
+inline bool isboringroad(int nroadid)
+{
+    int i;
+    bool brtn = false;
+    for(i=0;i<6;i++)
+    {
+        if(avoidroadid[i] == nroadid)
+        {
+            brtn = true;
+            break;
+        }
+    }
+    return brtn;
+}
 
 void SetPlan(xodrobj xo)
 {
@@ -511,25 +527,39 @@ void SetPlan(xodrobj xo)
         }
 
 #ifdef BOAVOID
-        if(data->mfLaneWidth<4.0)
-        {
-            const int nrangeavoid = 600;
-            if((i+(nrangeavoid + 10))<nSize)
-            {
-                double fhdg1 = xPlan[i].hdg;
-                double fhdg2 = xPlan[i+nrangeavoid].hdg;
-                double fhdg3 = xPlan[i+nrangeavoid + 5].hdg;
-                double fhdgdiff1 = fhdg2 - fhdg1;
-                double fhdgdiff2 = fhdg3 - fhdg1;
-                while(fhdgdiff1<0)fhdgdiff1 = fhdgdiff1 + 2.0*M_PI;
-                while(fhdgdiff2<0)fhdgdiff2 = fhdgdiff2 + 2.0*M_PI;
-                if(((fhdgdiff1<(M_PI/3.0))||(fhdgdiff1>(5.0*M_PI/6.0)))&&((fhdgdiff2<(M_PI/3.0))||(fhdgdiff2>(5.0*M_PI/6.0))))
-                {
-                    data->roadSum = 2;
-                    data->roadOri = 0;
-                }
-            }
-        }
+    if(isboringroad(xPlan[i].nRoadID))
+    {
+        const int nrangeavoid = 600;
+         if((i+(nrangeavoid + 10))<nSize)
+         {
+             double fhdg1 = xPlan[i].hdg;
+             bool bavoid = true;
+             int k;
+             for(k=0;k<=10;k++)
+             {
+                 double fhdg5 = xPlan[i+nrangeavoid*k/10].hdg;
+                 double fhdgdiff1 = fhdg5 - fhdg1;
+                 while(fhdgdiff1<0)fhdgdiff1 = fhdgdiff1 + 2.0*M_PI;
+                 if((fhdgdiff1>(M_PI/3.0))&&(fhdgdiff1<(5.0*M_PI/3.0)))
+                 {
+                     bavoid = false;
+                     break;
+                 }
+
+             }
+             if(bavoid)
+             {
+                 data->roadSum = 2;
+                 data->roadOri = 0;
+             }
+
+         }
+         else
+         {
+             int a = 1;
+             a++;
+         }
+    }
 #endif
 
 //        data->roadSum = 1;