|
@@ -235,7 +235,7 @@ int iv::decition::Compute00::getMapDelta(std::vector<GPSData> MapTrace){
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-int iv::decition::Compute00::getPlanSpeed(std::vector<GPSData> MapTrace)
|
|
|
|
|
|
+/*int iv::decition::Compute00::getPlanSpeed(std::vector<GPSData> MapTrace)
|
|
{
|
|
{
|
|
int mode0to5count=0,mode0to18count=0,mode0to5countSum=0,mode0to18countSum=0,mode18count=0,mode18countSum=0,mode0to5flash=0,mode18flash=0;
|
|
int mode0to5count=0,mode0to18count=0,mode0to5countSum=0,mode0to18countSum=0,mode18count=0,mode18countSum=0,mode0to5flash=0,mode18flash=0;
|
|
double straightSpeed=min(ServiceCarStatus.mroadmode_vel.mfmode0,60.0);
|
|
double straightSpeed=min(ServiceCarStatus.mroadmode_vel.mfmode0,60.0);
|
|
@@ -243,25 +243,135 @@ int iv::decition::Compute00::getPlanSpeed(std::vector<GPSData> MapTrace)
|
|
double Curve_SmallSpeed=min(ServiceCarStatus.mroadmode_vel.mfmode18,15.0);
|
|
double Curve_SmallSpeed=min(ServiceCarStatus.mroadmode_vel.mfmode18,15.0);
|
|
double Curve_LargeSpeed=min(ServiceCarStatus.mroadmode_vel.mfmode14,8.0);
|
|
double Curve_LargeSpeed=min(ServiceCarStatus.mroadmode_vel.mfmode14,8.0);
|
|
getMapDelta(MapTrace);
|
|
getMapDelta(MapTrace);
|
|
- /*for(int i=0;i<doubledata.size();i++)
|
|
|
|
|
|
+// for(int i=0;i<doubledata.size();i++)
|
|
|
|
+// {
|
|
|
|
+// if((doubledata[i][3]>-0.4)&&(doubledata[i][3]<0.4)){
|
|
|
|
+// MapTrace[i]->roadMode=0;
|
|
|
|
+// }else if(((doubledata[i][3]>0.4)&&(doubledata[i][3]<4))||((doubledata[i][3]>-4)&&(doubledata[i][3]<-0.4))){
|
|
|
|
+// MapTrace[i]->roadMode=5;
|
|
|
|
+// }else if(((doubledata[i][3]>4)&&(doubledata[i][3]<10))||((doubledata[i][3]>-10)&&(doubledata[i][3]<-4))){
|
|
|
|
+// MapTrace[i]->roadMode=18;
|
|
|
|
+// }else if(((doubledata[i][3]>10))||((doubledata[i][3]<-10))){
|
|
|
|
+// MapTrace[i]->roadMode=14;
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+ for(int i=0;i<doubledata.size();i++)
|
|
{
|
|
{
|
|
- if((doubledata[i][3]>-0.4)&&(doubledata[i][3]<0.4)){
|
|
|
|
- MapTrace[i]->roadMode=0;
|
|
|
|
- }else if(((doubledata[i][3]>0.4)&&(doubledata[i][3]<4))||((doubledata[i][3]>-4)&&(doubledata[i][3]<-0.4))){
|
|
|
|
|
|
+ if((doubledata[i][3]>-0.26)&&(doubledata[i][3]<0.26)){
|
|
MapTrace[i]->roadMode=5;
|
|
MapTrace[i]->roadMode=5;
|
|
- }else if(((doubledata[i][3]>4)&&(doubledata[i][3]<10))||((doubledata[i][3]>-10)&&(doubledata[i][3]<-4))){
|
|
|
|
|
|
+ }else if(((doubledata[i][3]>=0.26)&&(doubledata[i][3]<=1.0))||((doubledata[i][3]>=-1.0)&&(doubledata[i][3]<=-0.26))){
|
|
MapTrace[i]->roadMode=18;
|
|
MapTrace[i]->roadMode=18;
|
|
- }else if(((doubledata[i][3]>10))||((doubledata[i][3]<-10))){
|
|
|
|
|
|
+ }else if(((doubledata[i][3]>1.0))||((doubledata[i][3]<-1.0))){
|
|
MapTrace[i]->roadMode=14;
|
|
MapTrace[i]->roadMode=14;
|
|
}
|
|
}
|
|
- }*/
|
|
|
|
|
|
+ }
|
|
|
|
+ for(int i=0;i<MapTrace.size();i++)
|
|
|
|
+ {
|
|
|
|
+ if(MapTrace[i]->roadMode==0){
|
|
|
|
+ doubledata[i][4]=straightSpeed;
|
|
|
|
+ mode0to5count++;
|
|
|
|
+ //mode0to18count++;
|
|
|
|
+ mode18count=0;
|
|
|
|
+ mode0to5flash=mode0to5count;
|
|
|
|
+ }else if(MapTrace[i]->roadMode==5){
|
|
|
|
+ doubledata[i][4]=straightCurveSpeed;
|
|
|
|
+ mode0to5count++;
|
|
|
|
+ //mode0to18count++;
|
|
|
|
+ mode18count=0;
|
|
|
|
+ mode0to5flash=mode0to5count;
|
|
|
|
+ }else if(MapTrace[i]->roadMode==18){
|
|
|
|
+ mode0to5countSum=mode0to5count;
|
|
|
|
+ doubledata[i][4]=Curve_SmallSpeed;
|
|
|
|
+
|
|
|
|
+ double brake_distance_double=(pow((straightCurveSpeed/3.6),2)-pow((Curve_SmallSpeed/3.6),2))*10/0.6;
|
|
|
|
+ int brake_distance=(int)brake_distance_double;
|
|
|
|
+ int step_count=0;
|
|
|
|
+ if((i>brake_distance)&&(mode0to5countSum>brake_distance))
|
|
|
|
+ {
|
|
|
|
+ double step_speed=(straightCurveSpeed-Curve_SmallSpeed)/brake_distance;
|
|
|
|
+
|
|
|
|
+ for(int j=i;j>i-brake_distance;j--){
|
|
|
|
+ doubledata[j][4]=min((Curve_SmallSpeed+step_count*step_speed),straightCurveSpeed);
|
|
|
|
+ step_count++;
|
|
|
|
+ }
|
|
|
|
+ }else if(mode0to5countSum>0){
|
|
|
|
+ for(int j=i;j>=i-mode0to5countSum;j--){
|
|
|
|
+ doubledata[j][4]=Curve_SmallSpeed;
|
|
|
|
+ step_count++;
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ doubledata[i][4]=Curve_SmallSpeed;
|
|
|
|
+ }
|
|
|
|
+ mode0to5count=0;
|
|
|
|
+ //mode0to18count++;
|
|
|
|
+ mode18count++;
|
|
|
|
+ mode18flash=mode18count;
|
|
|
|
+ }else if(MapTrace[i]->roadMode==14){
|
|
|
|
+ mode0to18countSum=mode0to5flash+mode18flash;
|
|
|
|
+ mode18countSum=mode18count;
|
|
|
|
+ double brake_distanceLarge_double=(pow((Curve_SmallSpeed/3.6),2)-pow((Curve_LargeSpeed/3.6),2))*10/0.6;
|
|
|
|
+ double brake_distance0to18_double=(pow((straightCurveSpeed/3.6),2)-pow((Curve_LargeSpeed/3.6),2))*10/0.6;
|
|
|
|
+ int brake_distanceLarge=(int)brake_distanceLarge_double;
|
|
|
|
+ int brake_distance0to18=(int)brake_distance0to18_double;
|
|
|
|
+ int step_count=0;
|
|
|
|
+ doubledata[i][4]=Curve_LargeSpeed;
|
|
|
|
+
|
|
|
|
+ if(mode18countSum>brake_distanceLarge)
|
|
|
|
+ {
|
|
|
|
+ double step_speed=(Curve_SmallSpeed-Curve_LargeSpeed)/brake_distanceLarge;
|
|
|
|
+
|
|
|
|
+ for(int j=i;j>i-brake_distanceLarge;j--){
|
|
|
|
+ doubledata[j][4]=min((Curve_LargeSpeed+step_count*step_speed),Curve_SmallSpeed);
|
|
|
|
+ step_count++;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }else if(mode0to18countSum>brake_distance0to18){
|
|
|
|
+
|
|
|
|
+ double step_speed=(straightCurveSpeed-Curve_LargeSpeed)/brake_distance0to18;
|
|
|
|
+
|
|
|
|
+ for(int j=i;j>i-brake_distance0to18;j--){
|
|
|
|
+ doubledata[j][4]=min((Curve_LargeSpeed+step_count*step_speed),straightCurveSpeed);
|
|
|
|
+ step_count++;
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ doubledata[i][4]=Curve_LargeSpeed;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ mode0to5count=0;
|
|
|
|
+ mode18count=0;
|
|
|
|
+ mode0to5flash=0;
|
|
|
|
+ mode18flash=0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for(int i=0;i<MapTrace.size();i++){
|
|
|
|
+ //将数据写入文件开始
|
|
|
|
+ ofstream outfile;
|
|
|
|
+ outfile.open("ctr0108003.txt", ostream::app);
|
|
|
|
+ outfile<<"Delta"<< "," <<doubledata[i][3]<< ","<<"roadMode"<< "," <<MapTrace[i]->roadMode<< ","
|
|
|
|
+ <<"plan_speed"<< "," << doubledata[i][4]<< ","<<"num,curve"<< "," <<i<< ","
|
|
|
|
+ <<MapTrace[i]->mfCurvature<<endl;
|
|
|
|
+ outfile.close();
|
|
|
|
+ //将数据写入文件结束
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}*/
|
|
|
|
+
|
|
|
|
+int iv::decition::Compute00::getPlanSpeed(std::vector<GPSData> MapTrace)
|
|
|
|
+{
|
|
|
|
+ int mode0to5count=0,mode0to18count=0,mode0to5countSum=0,mode0to18countSum=0,mode18count=0,mode18countSum=0,mode0to5flash=0,mode18flash=0;
|
|
|
|
+ double straightSpeed=min(ServiceCarStatus.mroadmode_vel.mfmode0,60.0);
|
|
|
|
+ double straightCurveSpeed=min(ServiceCarStatus.mroadmode_vel.mfmode5,40.0);
|
|
|
|
+ double Curve_SmallSpeed=min(ServiceCarStatus.mroadmode_vel.mfmode18,15.0);
|
|
|
|
+ double Curve_LargeSpeed=min(ServiceCarStatus.mroadmode_vel.mfmode14,8.0);
|
|
|
|
+ getMapDelta(MapTrace);
|
|
for(int i=0;i<doubledata.size();i++)
|
|
for(int i=0;i<doubledata.size();i++)
|
|
{
|
|
{
|
|
- if((doubledata[i][3]>-0.26)&&(doubledata[i][3]<0.26)){
|
|
|
|
|
|
+ if((MapTrace[i]->mfCurvature>-0.02)&&(MapTrace[i]->mfCurvature<0.02)){
|
|
MapTrace[i]->roadMode=5;
|
|
MapTrace[i]->roadMode=5;
|
|
- }else if(((doubledata[i][3]>=0.26)&&(doubledata[i][3]<=1.0))||((doubledata[i][3]>=-1.0)&&(doubledata[i][3]<=-0.26))){
|
|
|
|
|
|
+ }else if(((MapTrace[i]->mfCurvature>=0.02)&&(MapTrace[i]->mfCurvature<=0.16))||((MapTrace[i]->mfCurvature>=-0.16)&&(MapTrace[i]->mfCurvature<=-0.02))){
|
|
MapTrace[i]->roadMode=18;
|
|
MapTrace[i]->roadMode=18;
|
|
- }else if(((doubledata[i][3]>1.0))||((doubledata[i][3]<-1.0))){
|
|
|
|
|
|
+ }else if(((MapTrace[i]->mfCurvature>0.16))||((MapTrace[i]->mfCurvature<-0.16))){
|
|
MapTrace[i]->roadMode=14;
|
|
MapTrace[i]->roadMode=14;
|
|
}
|
|
}
|
|
}
|
|
}
|