|
@@ -185,7 +185,7 @@ enum VehState { normalRun, park, readyPark, stopObs, avoidObs, preAvoid, avoidin
|
|
|
waitAvoid ,shoushaTest,justRun, changingRoad, chaoche, chaocheBack, reverseCar,reversing, reverseCircle, reverseDirect,reverseArr,
|
|
|
dRever,dRever0,dRever1,dRever2,dRever3,dRever4} vehState,lastVehState;
|
|
|
|
|
|
-
|
|
|
+std::vector<iv::Point2D> gpsTraceBackward;//20200418
|
|
|
std::vector<iv::Point2D> gpsTraceAim; //记录变道后的目标路径,若车辆经frenet规划行驶至该路径上后,就关闭frenet规划
|
|
|
std::vector<iv::Point2D> gpsTraceAvoid,gpsTraceNow,gpsTraceBack,gpsTracePre,gpsTraceOri,gpsTraceRear,gpsTraceNowLeft,gpsTraceNowRight,gpsTraceAvoidXY;
|
|
|
|
|
@@ -2015,6 +2015,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
|
|
|
//computeAvoidBoundary(0,2,4.5,2.4,avoidLeft_p,avoidRight_p);
|
|
|
//avoidLeft_value=-5;
|
|
|
//avoidRight_value=0;
|
|
|
+ computeObsBackward(lidarGridPtr,now_gps_ins, gpsMapLine,lidar_per,avoidLeft_value,avoidRight_value);//2020418
|
|
|
avoidXNewPre=computeAvoidXDistance(lidarGridPtr,now_gps_ins, gpsMapLine,lidar_per,avoidLeft_value,avoidRight_value);
|
|
|
givlog->debug("decition_brain","vehState: %d,roadOri: %d,roadSum: %d,vehWidth: %f,avoidLeft: %d,avoidRight_value: %d,avoidXNewPre: %d",
|
|
|
vehState,roadOri,roadSum,ServiceCarStatus.msysparam.vehWidth,avoidLeft_value,avoidRight_value,avoidXNewPre);
|
|
@@ -4588,6 +4589,73 @@ void iv::decition::DecideGps00::computeAvoidBoundary(int roadOriginal,int roadSu
|
|
|
|
|
|
int iv::decition::DecideGps00::computeAvoidXDistance(iv::LidarGridPtr lidarGridPtr, GPS_INS now_gps_ins, const std::vector<GPSData> gpsMapLine,std::vector<iv::Perception::PerceptionOutput> lidar_per,int avoidLeft,int avoidRight) {
|
|
|
|
|
|
+// int signed_record_avoidX=0,record_avoidX=20;
|
|
|
+// double obs_cur_distance=500,record_obstacle_distance;
|
|
|
+
|
|
|
+// obs_property.clear();
|
|
|
+// for (int i = avoidLeft; i <= avoidRight; i++)
|
|
|
+// {
|
|
|
+// obsvalue x_value;
|
|
|
+// obsvalue *x=&x_value;
|
|
|
+// x_value.avoid_distance=i;
|
|
|
+// gpsTraceAvoid.clear();
|
|
|
+// gpsTraceAvoid = getGpsTraceOffset(gpsTraceOri, i);
|
|
|
+// computeObsOnRoadNew(lidarGridPtr, gpsTraceAvoid, i,gpsMapLine,lidar_per,x);
|
|
|
+// obs_property.push_back(x_value);
|
|
|
+// if(i==0)
|
|
|
+// obs_cur_distance=x_value.obs_distance;
|
|
|
+// givlog->debug("decition_brain","i: %d,obs:%f",x_value.avoid_distance,x_value.obs_distance);
|
|
|
+// }
|
|
|
+
|
|
|
+// if (lidarGridPtr!=NULL)
|
|
|
+// {
|
|
|
+// hasCheckedAvoidLidar = true;
|
|
|
+// }
|
|
|
+// int record_vector=0;
|
|
|
+// for(int j=0;j<obs_property.size();j++){
|
|
|
+// if(obs_property[j].obs_distance>100){
|
|
|
+// if((signed_record_avoidX<0)&&(obs_property[j].avoid_distance>0)){
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// if(abs(obs_property[j].avoid_distance)<record_avoidX){
|
|
|
+// record_avoidX=abs(obs_property[j].avoid_distance);
|
|
|
+// signed_record_avoidX=obs_property[j].avoid_distance;
|
|
|
+// record_vector=j;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+// if((signed_record_avoidX<0)&&(signed_record_avoidX-1>=avoidLeft))
|
|
|
+// {
|
|
|
+// int obs_test=record_vector-1;
|
|
|
+
|
|
|
+// if(obs_property[obs_test].obs_distance>100){
|
|
|
+// signed_record_avoidX-=1;
|
|
|
+// givlog->debug("decition_brain","singrecord_Y: %d",signed_record_avoidX);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if(front_car_id>0){
|
|
|
+// if((obs_cur_distance<50)&&(front_car.front_car_dis<30)&&(front_car_decide_avoid==true)){
|
|
|
+// signed_record_avoidX=front_car.avoidX;
|
|
|
+// return signed_record_avoidX;
|
|
|
+// }
|
|
|
+
|
|
|
+// if((obs_cur_distance<50)&&(front_car.front_car_dis<150)&&(front_car.avoidX!=0||front_car.vehState!=0)){
|
|
|
+// signed_record_avoidX=front_car.avoidX;
|
|
|
+// return signed_record_avoidX;
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+// if((signed_record_avoidX!=0)&&(obs_cur_distance<50))
|
|
|
+// {
|
|
|
+
|
|
|
+// avoidMinDistance= obs_cur_distance + 2*ServiceCarStatus.msysparam.vehLenth;
|
|
|
+// startAvoidGps=now_gps_ins;
|
|
|
+// return signed_record_avoidX;
|
|
|
+// }
|
|
|
+// return 0;
|
|
|
+
|
|
|
+ //20200418,add,begin
|
|
|
int signed_record_avoidX=0,record_avoidX=20;
|
|
|
double obs_cur_distance=500,record_obstacle_distance;
|
|
|
|
|
@@ -4610,29 +4678,57 @@ int iv::decition::DecideGps00::computeAvoidXDistance(iv::LidarGridPtr lidarGridP
|
|
|
{
|
|
|
hasCheckedAvoidLidar = true;
|
|
|
}
|
|
|
- int record_vector=0;
|
|
|
+ int record_j=0;
|
|
|
for(int j=0;j<obs_property.size();j++){
|
|
|
if(obs_property[j].obs_distance>100){
|
|
|
- if((signed_record_avoidX<0)&&(obs_property[j].avoid_distance>0)){
|
|
|
- break;
|
|
|
- }
|
|
|
if(abs(obs_property[j].avoid_distance)<record_avoidX){
|
|
|
record_avoidX=abs(obs_property[j].avoid_distance);
|
|
|
signed_record_avoidX=obs_property[j].avoid_distance;
|
|
|
- record_vector=j;
|
|
|
+ record_j=j;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if((signed_record_avoidX<0)&&(signed_record_avoidX-1>=avoidLeft))
|
|
|
- {
|
|
|
- int obs_test=record_vector-1;
|
|
|
-
|
|
|
- if(obs_property[obs_test].obs_distance>100){
|
|
|
- signed_record_avoidX-=1;
|
|
|
- givlog->debug("decition_brain","singrecord_Y: %d",signed_record_avoidX);
|
|
|
- }
|
|
|
+// if((signed_record_avoidX<0)&&(signed_record_avoidX-1>=avoidLeft))
|
|
|
+// {
|
|
|
+// int obs_test=record_j-1;
|
|
|
+// if(obs_property[obs_test].obs_distance>100){
|
|
|
+// signed_record_avoidX-=1;
|
|
|
+// givlog->debug("decition_brain","singrecord_Y: %d",signed_record_avoidX);
|
|
|
+// }
|
|
|
+// }
|
|
|
+ if(signed_record_avoidX<0){
|
|
|
+ if(signed_record_avoidX-1>=avoidLeft){
|
|
|
+ int obs_test=record_j-1;
|
|
|
+ int signed_record_avoidX_minusone=signed_record_avoidX-1;
|
|
|
+ if(obs_property[obs_test].obs_distance>100){
|
|
|
+ for(int k=signed_record_avoidX_minusone;k<0;k++){
|
|
|
+ if(obs_back_property[k].avoid_ok==false){
|
|
|
+ signed_record_avoidX=0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if(k==-1){
|
|
|
+ signed_record_avoidX-=1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ for(int k=signed_record_avoidX;k<0;k++){
|
|
|
+ if(obs_back_property[k].avoid_ok==false){
|
|
|
+ signed_record_avoidX=0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(signed_record_avoidX>0){
|
|
|
+ for(int k=1;k<signed_record_avoidX;k++){
|
|
|
+ if(obs_back_property[k].avoid_ok==false){
|
|
|
+ signed_record_avoidX=0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
if(front_car_id>0){
|
|
|
if((obs_cur_distance<50)&&(front_car.front_car_dis<30)&&(front_car_decide_avoid==true)){
|
|
|
signed_record_avoidX=front_car.avoidX;
|
|
@@ -4769,7 +4865,63 @@ int iv::decition::DecideGps00::computeBackDistance(iv::LidarGridPtr lidarGridPtr
|
|
|
|
|
|
return 20;
|
|
|
}
|
|
|
+void iv::decition::DecideGps00::computeObsOnRoadBack(iv::LidarGridPtr lidarGridPtr, std::vector<Point2D> gpsTrace, int roadNum,
|
|
|
+ const std::vector<GPSData> gpsMapLine,std::vector<iv::Perception::PerceptionOutput> lidar_per,backobs* obsva) {
|
|
|
|
|
|
+ double obs=100,obsSd=100;
|
|
|
+
|
|
|
+ if (lidarGridPtr == NULL)
|
|
|
+ {
|
|
|
+ lidarDistance = lastLidarDis;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ obsPoint = Compute00().getLidarObsPointBackward(gpsTrace, lidarGridPtr);
|
|
|
+ float lidarXiuZheng=0;
|
|
|
+ if(!ServiceCarStatus.useMobileEye){
|
|
|
+ lidarXiuZheng=0-ServiceCarStatus.msysparam.frontGpsXiuzheng;
|
|
|
+ }
|
|
|
+ lidarDistance = obsPoint.y;// + lidarXiuZheng; //激光距离推到车头 gjw20191110 lidar
|
|
|
+
|
|
|
+ lastLidarDis = lidarDistance;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ obs = lidarDistance;
|
|
|
+ obsSd= obsPoint.obs_speed_y;
|
|
|
+ obsva->obs_distance=obs;
|
|
|
+ obsva->obs_speed=obsSd;
|
|
|
+
|
|
|
+// obs = lidarDistance;
|
|
|
+// obsSd= obsPoint.obs_speed_y;
|
|
|
+// if(obs<0){
|
|
|
+// obsva->obs_distance=500;
|
|
|
+// }else{
|
|
|
+// obsva->obs_distance=obs;
|
|
|
+// obsva->obs_speed=obsSd;
|
|
|
+// }
|
|
|
+}
|
|
|
+void iv::decition::DecideGps00::computeObsBackward(iv::LidarGridPtr lidarGridPtr, GPS_INS now_gps_ins, const std::vector<GPSData> gpsMapLine,std::vector<iv::Perception::PerceptionOutput> lidar_per,int avoidLeft,int avoidRight) {
|
|
|
+
|
|
|
+ obs_back_property.clear();
|
|
|
+ for (int i = avoidLeft; i <= avoidRight; i++)
|
|
|
+ {
|
|
|
+ backobs x_value;
|
|
|
+ backobs *x=&x_value;
|
|
|
+ //x_value.avoid_distance=i;
|
|
|
+ gpsTraceBack.clear();
|
|
|
+ gpsTraceBack = getGpsTraceOffset(gpsTraceBackward, i);
|
|
|
+ computeObsOnRoadBack(lidarGridPtr, gpsTraceBack, i,gpsMapLine,lidar_per,x);
|
|
|
+ if((x_value.obs_distance>-20)&&(x_value.obs_distance<0)&&(x_value.obs_speed>0)){
|
|
|
+ x_value.avoid_ok=false;
|
|
|
+ }else{
|
|
|
+ x_value.avoid_ok=true;
|
|
|
+ }
|
|
|
+ obs_back_property.insert(make_pair(i,x_value));
|
|
|
+ //double test=obs_back_property[i].obs_distance;
|
|
|
+ //double test_f=test.obs_distance;
|
|
|
+ givlog->debug("decition_brain","i: %d,avoid_ok: %d,back_obs:%f,back_obs_speed:%f",i,x_value.avoid_ok,x_value.obs_distance,x_value.obs_speed);
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
|
|
|
|