|
@@ -105,7 +105,7 @@ int obsLostTimeAvoid = 0;
|
|
|
|
|
|
// double avoidTime = 0;
|
|
|
|
|
|
-int avoidXNewPre=0,avoidXNewPreFilter=0;
|
|
|
+double avoidXNewPre=0,avoidXNewPreFilter=0;//20230213,障碍物检测精度由1米换成0.5米
|
|
|
//vector<int> avoidXNewPreVector;
|
|
|
//int avoidXNew=0;
|
|
|
//int avoidXNewLast=0;
|
|
@@ -287,10 +287,10 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
|
|
|
|
|
|
//如果useFrenet、useOldAvoid两者不互为相异,则采用原来的方法。“^”为异或运算符。
|
|
|
- if(!(useFrenet^useOldAvoid)){
|
|
|
- useFrenet = false;
|
|
|
- useOldAvoid = true;
|
|
|
- }
|
|
|
+// if(!(useFrenet^useOldAvoid)){
|
|
|
+// useFrenet = false;
|
|
|
+// useOldAvoid = true;
|
|
|
+// }
|
|
|
|
|
|
static int file_num;
|
|
|
if (isFirstRun)
|
|
@@ -352,7 +352,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
minDecelerate=0;
|
|
|
if(now_gps_ins.gps_lat<0||now_gps_ins.gps_lat>90)
|
|
|
{
|
|
|
- gps_decition->wheel_angle = 0;
|
|
|
+ gps_decition->wheel_angle = 0.2;
|
|
|
gps_decition->speed = dSpeed;
|
|
|
|
|
|
gps_decition->accelerator = -0.5;
|
|
@@ -1043,7 +1043,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
vehState=normalRun;
|
|
|
}
|
|
|
}
|
|
|
- givlog->debug("decition_brain","avoidXNew: %d",avoidXNew);
|
|
|
+ givlog->debug("decition_brain","avoidXNew: %f",avoidXNew);
|
|
|
#else
|
|
|
if(obstacle_avoid_flag==1)
|
|
|
{
|
|
@@ -1125,55 +1125,55 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
// if(GetDistance(now_gps_ins,*gpsMapLine[PathPoint]) < 1){
|
|
|
// startingFlag = false;
|
|
|
// }
|
|
|
- startingFlag = false;
|
|
|
- if(startingFlag)
|
|
|
- {
|
|
|
- // gpsTraceAim = gpsTraceOri;
|
|
|
- if(abs(gpsTraceOri[0].x)>1)
|
|
|
- {
|
|
|
- cout<<"frenetPlanner->getPath:pre"<<endl;
|
|
|
- gpsTraceNow = frenetPlanner->getPath(now_gps_ins,gpsMapLine,PathPoint,0,lidarGridPtr);
|
|
|
- cout<<"frenetPlanner->getPath,gpsTraceNow.size: "<<gpsTraceNow.size()<<endl;
|
|
|
- if(gpsTraceNow.size()==0)
|
|
|
- {
|
|
|
- gps_decition->accelerator = 0;
|
|
|
- gps_decition->brake=10;
|
|
|
- gps_decition->wheel_angle = lastAngle;
|
|
|
- gps_decition->speed = 0;
|
|
|
- return gps_decition;
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- startingFlag = false;
|
|
|
- }
|
|
|
- }
|
|
|
+// startingFlag = false;
|
|
|
+// if(startingFlag)
|
|
|
+// {
|
|
|
+// // gpsTraceAim = gpsTraceOri;
|
|
|
+// if(abs(gpsTraceOri[0].x)>1)
|
|
|
+// {
|
|
|
+// cout<<"frenetPlanner->getPath:pre"<<endl;
|
|
|
+// gpsTraceNow = frenetPlanner->getPath(now_gps_ins,gpsMapLine,PathPoint,0,lidarGridPtr);
|
|
|
+// cout<<"frenetPlanner->getPath,gpsTraceNow.size: "<<gpsTraceNow.size()<<endl;
|
|
|
+// if(gpsTraceNow.size()==0)
|
|
|
+// {
|
|
|
+// gps_decition->accelerator = 0;
|
|
|
+// gps_decition->brake=10;
|
|
|
+// gps_decition->wheel_angle = lastAngle;
|
|
|
+// gps_decition->speed = 0;
|
|
|
+// return gps_decition;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// else
|
|
|
+// {
|
|
|
+// startingFlag = false;
|
|
|
+// }
|
|
|
+// }
|
|
|
|
|
|
|
|
|
- if(useFrenet){
|
|
|
- //如果车辆在变道中,启用frenet规划局部路径
|
|
|
- if(vehState == avoiding || vehState == backOri)
|
|
|
- {
|
|
|
- // avoidX = (roadOri - roadNow)*roadWidth;
|
|
|
- avoidX=computeAvoidX(roadNow,roadOri,gpsMapLine[PathPoint]);
|
|
|
- gpsTraceNow = frenetPlanner->getPath(now_gps_ins,gpsMapLine,PathPoint,avoidX,lidarGridPtr);
|
|
|
- //gpsTraceAim = laneChangePlanner->getPath(now_gps_ins,gpsMapLine,PathPoint,avoidX,lidarGridPtr);
|
|
|
- gpsTraceAim = getGpsTraceOffset(gpsTraceOri, avoidX);
|
|
|
- if(gpsTraceNow.size()==0)
|
|
|
- {
|
|
|
- gps_decition->accelerator = 0;
|
|
|
- gps_decition->brake=10;
|
|
|
- gps_decition->wheel_angle = lastAngle;
|
|
|
- gps_decition->speed = 0;
|
|
|
- return gps_decition;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+// if(useFrenet){
|
|
|
+// //如果车辆在变道中,启用frenet规划局部路径
|
|
|
+// if(vehState == avoiding || vehState == backOri)
|
|
|
+// {
|
|
|
+// // avoidX = (roadOri - roadNow)*roadWidth;
|
|
|
+// avoidX=computeAvoidX(roadNow,roadOri,gpsMapLine[PathPoint]);
|
|
|
+// gpsTraceNow = frenetPlanner->getPath(now_gps_ins,gpsMapLine,PathPoint,avoidX,lidarGridPtr);
|
|
|
+// //gpsTraceAim = laneChangePlanner->getPath(now_gps_ins,gpsMapLine,PathPoint,avoidX,lidarGridPtr);
|
|
|
+// gpsTraceAim = getGpsTraceOffset(gpsTraceOri, avoidX);
|
|
|
+// if(gpsTraceNow.size()==0)
|
|
|
+// {
|
|
|
+// gps_decition->accelerator = 0;
|
|
|
+// gps_decition->brake=10;
|
|
|
+// gps_decition->wheel_angle = lastAngle;
|
|
|
+// gps_decition->speed = 0;
|
|
|
+// return gps_decition;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
|
|
|
#ifdef AVOID_NEW
|
|
|
if(gpsTraceNow.size()==0)
|
|
|
{
|
|
|
- if (avoidXNew==0)
|
|
|
+ if (avoidXNew==0.0)
|
|
|
{
|
|
|
if((vehState == backOri)||(vehState == avoiding))
|
|
|
{
|
|
@@ -1602,8 +1602,6 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
obs_speed_for_avoid=(secSpeed+obsSpeed)*3.6;
|
|
|
|
|
|
obs_speed_for_avoid=0;//shenlan guosai zhangaiwu sudu zhijiegei 0
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -1723,7 +1721,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
std::cout<<"\n原始RoadOri:%d\n"<<roadOri<<endl;
|
|
|
// 计算回归原始路线
|
|
|
#ifdef AVOID_NEW
|
|
|
- if((avoidXNew == 0)&&(vehState == avoiding))
|
|
|
+ if((avoidXNew == 0.0)&&(vehState == avoiding))
|
|
|
{
|
|
|
iv::Point2D now_s_d=cartesian_to_frenet1D(gpsMapLine,now_gps_ins.gps_x, now_gps_ins.gps_y);
|
|
|
if(fabs(now_s_d.d)<0.05)
|
|
@@ -1795,16 +1793,35 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
}*/
|
|
|
|
|
|
road_permit_avoid=false;
|
|
|
- if(PathPoint+400<gpsMapLine.size()){
|
|
|
- int road_permit_sum=0;
|
|
|
- for(int k=PathPoint;k<PathPoint+400;k++){
|
|
|
- if((gpsMapLine[k]->mbnoavoid==false))//&&(gpsMapLine[k]->roadSum>1))
|
|
|
- road_permit_sum++;
|
|
|
+
|
|
|
+ if(ServiceCarStatus.msysparam.mvehtype=="shenlan") //比赛总路线可能不会太长
|
|
|
+ {
|
|
|
+ if(PathPoint+200<gpsMapLine.size()){
|
|
|
+ int road_permit_sum=0;
|
|
|
+ for(int k=PathPoint;k<PathPoint+200;k++){
|
|
|
+ if((gpsMapLine[k]->mbnoavoid==false))//&&(gpsMapLine[k]->roadSum>1))
|
|
|
+ road_permit_sum++;
|
|
|
+ }
|
|
|
+ if(road_permit_sum>=200)
|
|
|
+ road_permit_avoid=true;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(PathPoint+400<gpsMapLine.size()){
|
|
|
+ int road_permit_sum=0;
|
|
|
+ for(int k=PathPoint;k<PathPoint+400;k++){
|
|
|
+ if((gpsMapLine[k]->mbnoavoid==false))//&&(gpsMapLine[k]->roadSum>1))
|
|
|
+ road_permit_sum++;
|
|
|
+ }
|
|
|
+ if(road_permit_sum>=400)
|
|
|
+ road_permit_avoid=true;
|
|
|
}
|
|
|
- if(road_permit_sum>=400)
|
|
|
- road_permit_avoid=true;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
//shiyanbizhang 0929
|
|
|
if(obsDistance>0&& (obsDistance<ServiceCarStatus.aocfDis)&&(obs_speed_for_avoid>-8.0)&&(obs_speed_for_avoid<3.0)&&(realspeed>0.01)//&& (avoid_speed_flag==true) //
|
|
|
&&(vehState==normalRun||vehState==backOri || vehState==avoiding) //&&(ObsTimeStart==-1)
|
|
@@ -1889,7 +1906,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
}
|
|
|
|
|
|
|
|
|
- if((vehState == preAvoid)||(avoidXNew!=0))
|
|
|
+ if((vehState == preAvoid)||(avoidXNew!=0.0))
|
|
|
{
|
|
|
dSpeed = min(6.0,dSpeed);
|
|
|
// int avoidLeft_value=0;
|
|
@@ -1928,7 +1945,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
|
|
|
gpsTraceNow.clear();
|
|
|
gpsTraceAvoidXY.clear();
|
|
|
- givlog->debug("decition_brain","avoidXNew: %d,avoidXNewLast: %d",
|
|
|
+ givlog->debug("decition_brain","avoidXNew: %f,avoidXNewLast: %f",
|
|
|
avoidXNew,avoidXNewLast);
|
|
|
//gpsTraceAvoidXY = getGpsTraceOffsetAvoid(gpsTraceOri, avoidXNew,now_gps_ins);
|
|
|
gpsTraceAvoidXY = splinePlanner->chooseRoadBySpline(now_gps_ins,gpsMapLine,PathPoint,obsSpline,avoidXNew,avoidXNewLast);
|
|
@@ -2273,11 +2290,16 @@ else
|
|
|
|
|
|
transferGpsMode2(gpsMapLine);
|
|
|
|
|
|
- if(ServiceCarStatus.msysparam.mvehtype=="hapo"){
|
|
|
- if(obsDistance>0 && obsDistance<8){
|
|
|
+ if(ServiceCarStatus.msysparam.mvehtype=="hapo")
|
|
|
+ {
|
|
|
+ if(obsDistance>0 && obsDistance<8)
|
|
|
+ {
|
|
|
dSpeed=0;
|
|
|
}
|
|
|
- }else if(obsDistance>0 && obsDistance<15){
|
|
|
+ }
|
|
|
+// else if(obsDistance>0 && obsDistance<15)
|
|
|
+ else if(obsDistance>0 && obsDistance< ServiceCarStatus.socfDis)
|
|
|
+ {
|
|
|
dSpeed=0;
|
|
|
}
|
|
|
|
|
@@ -2495,8 +2517,8 @@ else
|
|
|
<<"SecSpeed"<<","<<secSpeed<<","
|
|
|
<<"Vehicle_state"<< ","<<vehState<< ","
|
|
|
<<"avoid_flag"<<","<<obstacle_avoid_flag<<","
|
|
|
- <<"avoidXNew"<<","<<avoidXNew<<","
|
|
|
- <<"avoidXNewPre"<<","<<avoidXNewPre<<","
|
|
|
+ <<"avoidXNew"<<","<< setprecision(3)<<avoidXNew<<","
|
|
|
+ <<"avoidXNewPre"<<","<< setprecision(3)<<avoidXNewPre<<","
|
|
|
//<<"avoidXPre"<<","<<avoidXPre<<","
|
|
|
<<"ObsTimeEnd"<<","<<ObsTimeEnd<<","
|
|
|
<<"avoidXY_size"<<","<<gpsTraceAvoidXY.size()<<","
|
|
@@ -2622,13 +2644,23 @@ std::vector<iv::Point2D> iv::decition::DecideGps00::getGpsTrace(iv::GPS_INS now_
|
|
|
|
|
|
traceOriLeft.clear();
|
|
|
traceOriRight.clear();
|
|
|
+ int tracesize=800;
|
|
|
+ if(ServiceCarStatus.msysparam.mvehtype=="shenlan")
|
|
|
+ {
|
|
|
+ tracesize=400;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ tracesize=800;
|
|
|
+ }
|
|
|
|
|
|
- if (gpsMapLine.size() > 800 && PathPoint >= 0) {
|
|
|
+ if (gpsMapLine.size() > tracesize && PathPoint >= 0)
|
|
|
+ {
|
|
|
int aimIndex;
|
|
|
if(circleMode){
|
|
|
- aimIndex=PathPoint+800;
|
|
|
+ aimIndex=PathPoint+tracesize;
|
|
|
}else{
|
|
|
- aimIndex=min((PathPoint+800),(int)gpsMapLine.size());
|
|
|
+ aimIndex=min((PathPoint+tracesize),(int)gpsMapLine.size());
|
|
|
}
|
|
|
|
|
|
for (int i = PathPoint; i < aimIndex; i++)
|