|
@@ -1170,7 +1170,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
if((now_s_d.s+20>(gpsTraceAvoidXY[gpsTraceAvoidXY.size()-1].s))&&((gpsTraceAvoidXY[gpsTraceAvoidXY.size()-1].s)<((*gpsMapLine[gpsMapLine.size()-1]).frenet_s))){
|
|
|
double sPathFinal=gpsTraceAvoidXY[gpsTraceAvoidXY.size()-1].s;
|
|
|
if(sPathFinal+20<=(*gpsMapLine[gpsMapLine.size()-1]).frenet_s){
|
|
|
- sPathFinal=sPathFinal+20;
|
|
|
+ sPathFinal=sPathFinal+20;//20gaicheng 6
|
|
|
}else{
|
|
|
sPathFinal=(*gpsMapLine[gpsMapLine.size()-1]).frenet_s;
|
|
|
}
|
|
@@ -1183,13 +1183,13 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
|
|
|
if((vehState == avoiding || vehState == backOri)&&(gpsTraceAvoidXY.size()>0)&&(obstacle_avoid_flag==1))
|
|
|
{
|
|
|
+ // gpsTraceOri.clear();//20220811,cxw,add
|
|
|
gpsTraceOri=getGpsTraceAvoid(now_gps_ins, gpsTraceAvoidXY, lastGpsIndex,circleMode);
|
|
|
}
|
|
|
|
|
|
if(gpsTraceOri.empty()){
|
|
|
gps_decition->wheel_angle = 0;
|
|
|
gps_decition->speed = dSpeed;
|
|
|
-
|
|
|
gps_decition->accelerator = -0.5;
|
|
|
gps_decition->brake=10;
|
|
|
return gps_decition;
|
|
@@ -1347,18 +1347,18 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
}
|
|
|
|
|
|
//2020-0106
|
|
|
- if(ServiceCarStatus.msysparam.mvehtype !="zhongche"){
|
|
|
+// if(ServiceCarStatus.msysparam.mvehtype !="zhongche"){
|
|
|
|
|
|
- if(vehState==avoiding){
|
|
|
- ServiceCarStatus.msysparam.vehWidth=2.4;
|
|
|
- controlAng=max(-150.0,controlAng);//35 zj-150
|
|
|
- controlAng=min(150.0,controlAng);//35 zj-150
|
|
|
- }
|
|
|
- if(vehState==backOri){
|
|
|
- controlAng=max(-150.0,controlAng);//35 zj-150
|
|
|
- controlAng=min(150.0,controlAng);//35 zj-150
|
|
|
- }
|
|
|
- }
|
|
|
+// if(vehState==avoiding){
|
|
|
+// ServiceCarStatus.msysparam.vehWidth=2.4;
|
|
|
+// controlAng=max(-150.0,controlAng);//35 zj-150
|
|
|
+// controlAng=min(150.0,controlAng);//35 zj-150
|
|
|
+// }
|
|
|
+// if(vehState==backOri){
|
|
|
+// controlAng=max(-150.0,controlAng);//35 zj-150
|
|
|
+// controlAng=min(150.0,controlAng);//35 zj-150
|
|
|
+// }
|
|
|
+// }
|
|
|
|
|
|
// givlog->debug("brain_decition","vehState: %d,controlAng: %f",
|
|
|
// vehState,controlAng);
|
|
@@ -1599,7 +1599,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
static double obs_speed_for_avoid=-1,obs_filter_speed_memory=0; //obs_speed_for_avoid: obstacle actual speed in km/h
|
|
|
if(!ServiceCarStatus.daocheMode){
|
|
|
//computeObsOnRoad(lidarGridPtr, gpsTraceNow, roadNow,gpsMapLine,lidar_per);
|
|
|
- computeObsOnRoadXY(lidarGridPtr, gpsTraceNow,gpsTraceNowLeft,gpsTraceNowRight,roadNow,gpsMapLine,lidar_per);
|
|
|
+ computeObsOnRoadXY(now_gps_ins,lidarGridPtr, gpsTraceNow,gpsTraceNowLeft,gpsTraceNowRight,roadNow,gpsMapLine,lidar_per);
|
|
|
|
|
|
|
|
|
if(obs_filter_flag==0)
|
|
@@ -1647,6 +1647,8 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
|
|
|
|
|
|
obs_speed_for_avoid=(secSpeed+obsSpeed)*3.6;
|
|
|
+// obsSpeed=0-secSpeed;
|
|
|
+// obs_speed_for_avoid=0;
|
|
|
|
|
|
|
|
|
}else{
|
|
@@ -1714,7 +1716,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
// gps_decition->rightlamp = false;
|
|
|
// }
|
|
|
|
|
|
- dSpeed = min(6.0,dSpeed);
|
|
|
+ dSpeed = min(10.0,dSpeed); //6gaicheng 10,20220818
|
|
|
if (turnLampFlag>0)
|
|
|
{
|
|
|
gps_decition->leftlamp = false;
|
|
@@ -1876,7 +1878,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
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))
|
|
|
+ if((gpsMapLine[k]->mbnoavoid==false))//&&(gpsMapLine[k]->roadSum>1))
|
|
|
road_permit_sum++;
|
|
|
}
|
|
|
if(road_permit_sum>=400)
|
|
@@ -1884,7 +1886,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
}
|
|
|
|
|
|
//shiyanbizhang 0929
|
|
|
- if(obsDistance>0&& (obsDistance<ServiceCarStatus.aocfDis)&&(obs_speed_for_avoid>-8.0)&&(obs_speed_for_avoid<3.0)&&(realspeed>1)//&& (avoid_speed_flag==true) //
|
|
|
+ if(obsDistance>0&& (obsDistance<ServiceCarStatus.aocfDis)&&(obs_speed_for_avoid>-8.0)&&(obs_speed_for_avoid<3.0)&&(realspeed>0.1)//&& (avoid_speed_flag==true)//sudugaiwei0.1 //
|
|
|
&&(vehState==normalRun||vehState==backOri || vehState==avoiding) //&&(ObsTimeStart==-1)
|
|
|
&& (gpsMapLine[PathPoint]->runMode==1)&& (road_permit_avoid==true)&&(gpsMapLine[PathPoint]->mode2!=3000)&&(gpsMapLine[PathPoint+300]->mode2!=3000)&&(gpsMapLine[PathPoint+100]->mode2!=3000)&&(gpsMapLine[PathPoint+300]->mode2!=23)){
|
|
|
// ObsTimeStart=GetTickCount();
|
|
@@ -1913,7 +1915,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
if (vehState == avoidObs || vehState==waitAvoid ) {
|
|
|
if (obsDistance <ServiceCarStatus.aocfDis && obsDistance >0)
|
|
|
{
|
|
|
- dSpeed = min(6.0,dSpeed);
|
|
|
+ dSpeed = min(10.0,dSpeed);//6gaiwei10 ,20220818
|
|
|
avoidTimes++;
|
|
|
// if (avoidTimes>=6)
|
|
|
if (avoidTimes>=ServiceCarStatus.aocfTimes)
|
|
@@ -1925,7 +1927,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
}
|
|
|
else if (obsDistance < 40 && obsDistance >0 && dSpeed>15)
|
|
|
{
|
|
|
- dSpeed = min(15.0,dSpeed);
|
|
|
+ dSpeed = min(10.0,dSpeed);//15gaiceng10,20220816
|
|
|
avoidTimes = 0;
|
|
|
}
|
|
|
else
|
|
@@ -1996,15 +1998,18 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
|
|
|
|
|
|
|
|
|
- if((vehState == preAvoid)||(avoidXNew!=0))
|
|
|
+ if((vehState == preAvoid)||((avoidXNew!=0)))
|
|
|
+// if((vehState == preAvoid)||(avoidXNew!=0))
|
|
|
{
|
|
|
+ dSpeed = min(10.0,dSpeed);//6gaiwei 10
|
|
|
+ static int count_avoidx_0=0;
|
|
|
int avoidLeft_value=0;
|
|
|
int avoidRight_value=0;
|
|
|
int* avoidLeft_p=&avoidLeft_value;
|
|
|
int* avoidRight_p=&avoidRight_value;
|
|
|
computeAvoidBoundary(roadOri,roadSum,gpsMapLine[PathPoint]->mfLaneWidth,ServiceCarStatus.msysparam.vehWidth,avoidLeft_p,avoidRight_p);
|
|
|
avoidXNewPre=computeAvoidXDistance(lidarGridPtr,now_gps_ins, gpsMapLine,lidar_per,avoidLeft_value,avoidRight_value,avoidXNewLast);
|
|
|
- if(avoidXNewPreVector.size()<5){
|
|
|
+ if(avoidXNewPreVector.size()<20){
|
|
|
avoidXNewPreVector.push_back(avoidXNewPre);
|
|
|
}else{
|
|
|
if(avoidXNewPreVector[0]!=avoidXNewLast){
|
|
@@ -2028,12 +2033,29 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
else
|
|
|
turnLampFlag=0;
|
|
|
|
|
|
- gpsTraceNow.clear();
|
|
|
+// gpsTraceNow.clear();
|
|
|
gpsTraceAvoidXY.clear();
|
|
|
givlog->debug("decition_brain","avoidXNew: %d,avoidXNewLast: %d",
|
|
|
avoidXNew,avoidXNewLast);
|
|
|
//gpsTraceAvoidXY = getGpsTraceOffsetAvoid(gpsTraceOri, avoidXNew,now_gps_ins);
|
|
|
- gpsTraceAvoidXY = splinePlanner->chooseRoadBySpline(now_gps_ins,gpsMapLine,PathPoint,obsSpline,avoidXNew,avoidXNewLast);
|
|
|
+// gpsTraceAvoidXY = splinePlanner->chooseRoadBySpline(now_gps_ins,gpsMapLine,PathPoint,obsSpline,avoidXNew,avoidXNewLast);
|
|
|
+ if(vehState == preAvoid)
|
|
|
+ {
|
|
|
+ gpsTraceAvoidXY = splinePlanner->chooseRoadBySpline(now_gps_ins,gpsMapLine,PathPoint,obsSpline,avoidXNew,avoidXNewLast);
|
|
|
+ }
|
|
|
+ else if(avoidXNew==0)
|
|
|
+ {
|
|
|
+ count_avoidx_0++;
|
|
|
+ if(count_avoidx_0>60)
|
|
|
+ {
|
|
|
+ gpsTraceAvoidXY = splinePlanner->chooseRoadBySpline(now_gps_ins,gpsMapLine,PathPoint,obsSpline,avoidXNew,avoidXNewLast);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(avoidXNew!=0)
|
|
|
+ {
|
|
|
+ count_avoidx_0=0;
|
|
|
+ }
|
|
|
vehState = avoiding;
|
|
|
startAvoidGpsIns = now_gps_ins;
|
|
|
obstacle_avoid_flag=1;
|
|
@@ -2042,7 +2064,16 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
avoidXNewPreFilter=avoidXNew;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+if (vehState == preAvoid)
|
|
|
+{
|
|
|
+ //dSpeed = min(6.0,dSpeed);
|
|
|
+ iv::Point2D now_s_d=cartesian_to_frenet1D(gpsMapLine,now_gps_ins.gps_x, now_gps_ins.gps_y);
|
|
|
+ if ((obsDistance>ServiceCarStatus.aocfDis)&&(fabs(now_s_d.d)<0.05))
|
|
|
+ {
|
|
|
+ // vehState = avoidObs; 0929
|
|
|
+ vehState=normalRun;
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
|
|
|
// if (vehState == preAvoid)
|
|
@@ -2390,7 +2421,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
if(obsDistance>0 && obsDistance<8){
|
|
|
dSpeed=0;
|
|
|
}
|
|
|
- }else if(obsDistance>0 && obsDistance<15){
|
|
|
+ }else if(obsDistance>0 && obsDistance<10){
|
|
|
dSpeed=0;
|
|
|
}
|
|
|
|
|
@@ -2601,17 +2632,19 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
<<"Decide_ACC" << "," <<setprecision(2)<<gps_decition->torque<< ","
|
|
|
<<"Decide_Brake"<< "," <<gps_decition->brake<< ","
|
|
|
<<"Vehicle_RealSpd"<< "," <<setprecision(2)<<now_gps_ins.speed<< ","
|
|
|
-// <<"zuo_ultra"<< ","<<ServiceCarStatus.mbUltraDis[3]<< ","
|
|
|
-// <<"you_ultra"<< ","<<ServiceCarStatus.mbUltraDis[1]<< ","
|
|
|
- // <<"OBS_Distance"<< ","<<obsDistance_log<< ","
|
|
|
- // <<"OBS_Speed"<< ","<<obs_speed_for_avoid<< ","
|
|
|
- // <<"Vehicle_state"<< ","<<vehState<< ","
|
|
|
- // <<"avoid_flag"<<","<<obstacle_avoid_flag<<","
|
|
|
- // <<"avoidXNew"<<","<<avoidXNew<<","
|
|
|
- // <<"avoidXNewPre"<<","<<avoidXNewPre<<","
|
|
|
- // <<"avoidXPre"<<","<<avoidXPre<<","
|
|
|
- // <<"ObsTimeEnd"<<","<<ObsTimeEnd<<","
|
|
|
- // <<"avoidXY_size"<<","<<gpsTraceAvoidXY.size()<<","
|
|
|
+// <<"readyParkMode"<< ","<<readyParkMode<< ","
|
|
|
+// <<"readyZhucheMode"<< ","<<readyZhucheMode<< ","
|
|
|
+ <<"OBS_Distance"<< ","<<obsDistance_log<< ","
|
|
|
+ <<"OBS_Speed"<< ","<<obs_speed_for_avoid<< ","
|
|
|
+ <<"obsSpeed_fusion"<<","<<obsSpeed<<","
|
|
|
+ <<"SecSpeed"<<","<<secSpeed<<","
|
|
|
+ <<"Vehicle_state"<< ","<<vehState<< ","
|
|
|
+ <<"avoid_flag"<<","<<obstacle_avoid_flag<<","
|
|
|
+ <<"avoidXNew"<<","<<avoidXNew<<","
|
|
|
+ <<"avoidXNewPre"<<","<<avoidXNewPre<<","
|
|
|
+ //<<"avoidXPre"<<","<<avoidXPre<<","
|
|
|
+ <<"ObsTimeEnd"<<","<<ObsTimeEnd<<","
|
|
|
+ <<"avoidXY_size"<<","<<gpsTraceAvoidXY.size()<<","
|
|
|
<<"Min_Decelation"","<<minDecelerate<< ","
|
|
|
// <<"Decide_Angle"<< "," << setprecision(2)<<gps_decition->wheel_angle<< ","
|
|
|
// <<"Vehicle_GPS_heading"<< ","<< setprecision(10)<<now_gps_ins.ins_heading_angle<< ","
|
|
@@ -2619,7 +2652,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
// <<"Vehicle_GPS_Y"<< ","<< setprecision(10)<<now_gps_ins.gps_lng<< ","
|
|
|
// <<"Trace_Point"<< ","<<PathPoint<< ","
|
|
|
// <<"OBS_Speed"<< ","<<obsSpeed<< ","
|
|
|
- // <<"OBS_Distance"<< ","<<obsDistance<< ","
|
|
|
+ <<"gpsTraceOri"<< ","<<gpsTraceOri.size()<< ","
|
|
|
// <<"TTC"<< ","<<ttc<< ","
|
|
|
// <<"Decide_torque" << "," <<setprecision(2)<<gps_decition->torque<< ","
|
|
|
// <<"Decide_Brake"<< "," <<gps_decition->brake<< ","
|
|
@@ -2632,7 +2665,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
// <<"avoidXNewPre"<<","<<avoidXNewPre<<","
|
|
|
//// <<"avoidXPre"<<","<<avoidXPre<<","
|
|
|
// <<"ObsTimeEnd"<<","<<ObsTimeEnd<<","
|
|
|
-// <<"avoidXY_size"<<","<<gpsTraceAvoidXY.size()<<","
|
|
|
+ <<"avoidXY_size"<<","<<gpsTraceAvoidXY.size()<<","
|
|
|
// <<"Min_Decelation"","<<minDecelerate<< ","
|
|
|
<<"Decide_Angle"<< "," << setprecision(2)<<gps_decition->wheel_angle<< ","
|
|
|
// <<"Vehicle_GPS_heading"<< ","<< setprecision(10)<<now_gps_ins.ins_heading_angle<< ","
|
|
@@ -3583,13 +3616,20 @@ void iv::decition::DecideGps00::computeObsOnRoad(iv::LidarGridPtr lidarGridPtr,
|
|
|
|
|
|
}
|
|
|
|
|
|
-void iv::decition::DecideGps00::computeObsOnRoadXY(iv::LidarGridPtr lidarGridPtr, std::vector<Point2D> gpsTrace,std::vector<Point2D> gpsTraceLeft,std::vector<Point2D> gpsTraceRight,int roadNum,
|
|
|
+//void iv::decition::DecideGps00::computeObsOnRoadXY(iv::LidarGridPtr lidarGridPtr, std::vector<Point2D> gpsTrace,std::vector<Point2D> gpsTraceLeft,std::vector<Point2D> gpsTraceRight,int roadNum,
|
|
|
+// const std::vector<GPSData> gpsMapLine, std::vector<iv::Perception::PerceptionOutput> lidar_per) {
|
|
|
+void iv::decition::DecideGps00::computeObsOnRoadXY( iv::GPS_INS now_gps_ins,iv::LidarGridPtr lidarGridPtr, std::vector<Point2D> gpsTrace,std::vector<Point2D> gpsTraceLeft,std::vector<Point2D> gpsTraceRight,int roadNum,
|
|
|
const std::vector<GPSData> gpsMapLine, std::vector<iv::Perception::PerceptionOutput> lidar_per) {
|
|
|
|
|
|
+
|
|
|
// QTime xTime;
|
|
|
// xTime.start();
|
|
|
// qDebug("time 0 is %d ",xTime.elapsed());
|
|
|
double obs,obsSd;
|
|
|
+ double obsCarCoordinateX,obsCarCoordinateY;
|
|
|
+ GPS_INS obsGeodetic;
|
|
|
+ Point2D obsFrenet,obsFrenetMid;
|
|
|
+ double obsCarCoordinateDistance=-1;
|
|
|
|
|
|
if (lidarGridPtr == NULL)
|
|
|
{
|
|
@@ -3604,7 +3644,15 @@ void iv::decition::DecideGps00::computeObsOnRoadXY(iv::LidarGridPtr lidarGridPtr
|
|
|
if(!ServiceCarStatus.useMobileEye){
|
|
|
lidarXiuZheng=0-ServiceCarStatus.msysparam.frontGpsXiuzheng;
|
|
|
}
|
|
|
- lidarDistance = obsPoint.y + lidarXiuZheng; //激光距离推到车头 gjw20191110 lidar
|
|
|
+
|
|
|
+ obsCarCoordinateX=obsPoint.x;
|
|
|
+ obsCarCoordinateY=obsPoint.y;
|
|
|
+ obsGeodetic = Coordinate_UnTransfer(obsCarCoordinateX, obsCarCoordinateY, now_gps_ins); //车体转大地
|
|
|
+ obsFrenetMid=cartesian_to_frenet1D(gpsMapLine,obsGeodetic.gps_x,obsGeodetic.gps_y); //大地转frenet
|
|
|
+ iv::Point2D now_s_d=cartesian_to_frenet1D(gpsMapLine,now_gps_ins.gps_x,now_gps_ins.gps_y);
|
|
|
+ givlog->debug("decition_brain","road_num: %d,obsFrenetMid_s: %f,now_s: %f",roadNum,obsFrenetMid.s,now_s_d.s);
|
|
|
+ obsFrenet.s=obsFrenetMid.s-now_s_d.s;
|
|
|
+ lidarDistance = obsFrenet.s;//obsPoint.y + lidarXiuZheng; //激光距离推到车头 gjw20191110 lidar
|
|
|
// lidarDistance=-1;
|
|
|
if (lidarDistance<0)
|
|
|
{
|