|
@@ -643,90 +643,89 @@ int iv::decition::Compute00::getPlanSpeed(std::vector<GPSData> MapTrace)
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- for(int i=0;i<MapTrace.size();i++)
|
|
|
|
|
|
+ for(int i=0;i<MapTrace.size();i++)
|
|
|
|
+ {
|
|
|
|
+ if(MapTrace[i]->roadMode==0){
|
|
|
|
+ doubledata[i][4]=straightSpeed;
|
|
|
|
+ if(MapTrace[i]->speed>0)
|
|
{
|
|
{
|
|
- 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 fSpeed = MapTrace[i]->speed;
|
|
|
|
+ doubledata[i][4] = MapTrace[i]->speed*3.6;
|
|
|
|
|
|
- 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;
|
|
|
|
|
|
+ if(i>0)
|
|
|
|
+ {
|
|
|
|
+ if((doubledata[i-1][4] - doubledata[i][4]) > 5.0)
|
|
|
|
+ {
|
|
|
|
+ SmoothHighData(MapTrace,doubledata,i);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- 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(MapTrace[i]->roadMode==5){
|
|
|
|
+ doubledata[i][4]=straightCurveSpeed;
|
|
|
|
+ if(MapTrace[i]->speed>0)
|
|
|
|
+ {
|
|
|
|
+// double fSpeed = MapTrace[i]->speed;
|
|
|
|
+ doubledata[i][4] = MapTrace[i]->speed*3.6;
|
|
|
|
|
|
- }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 if(mode0to18countSum>0){
|
|
|
|
- for(int j=i;j>=i-mode0to18countSum;j--){
|
|
|
|
- doubledata[j][4]=Curve_LargeSpeed;
|
|
|
|
- step_count++;
|
|
|
|
- }
|
|
|
|
- }else{
|
|
|
|
- doubledata[i][4]=Curve_LargeSpeed;
|
|
|
|
- }
|
|
|
|
|
|
+ if(i>0)
|
|
|
|
+ {
|
|
|
|
+ if((doubledata[i-1][4] - doubledata[i][4]) > 5.0)
|
|
|
|
+ {
|
|
|
|
+ SmoothHighData(MapTrace,doubledata,i);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- mode0to5count=0;
|
|
|
|
- mode18count=0;
|
|
|
|
- mode0to5flash=0;
|
|
|
|
- mode18flash=0;
|
|
|
|
|
|
+ }else if(MapTrace[i]->roadMode==18){
|
|
|
|
+
|
|
|
|
+ if(fabs(MapTrace[i]->mfCurvature)>0.06)
|
|
|
|
+ {
|
|
|
|
+ doubledata[i][4]=(Curve_SmallSpeed + Curve_LargeSpeed)/2.0;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ doubledata[i][4]=Curve_SmallSpeed;
|
|
|
|
+
|
|
|
|
+ if((MapTrace[i]->speed>0) &&(doubledata[i][4]>(MapTrace[i]->speed*3.6)))
|
|
|
|
+ {
|
|
|
|
+// double fSpeed = MapTrace[i]->speed;
|
|
|
|
+ doubledata[i][4] = MapTrace[i]->speed*3.6;
|
|
|
|
+ }
|
|
|
|
+ if(i>0)
|
|
|
|
+ {
|
|
|
|
+ if(MapTrace[i-1]->roadMode != MapTrace[i]->roadMode)
|
|
|
|
+ {
|
|
|
|
+ SmoothData(MapTrace,doubledata,i);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }else if((MapTrace[i]->roadMode==14)||(MapTrace[i]->roadMode==15)){
|
|
|
|
+
|
|
|
|
+ doubledata[i][4]=Curve_LargeSpeed;
|
|
|
|
+ if((MapTrace[i]->speed>0) &&(doubledata[i][4]>(MapTrace[i]->speed*3.6)))
|
|
|
|
+ {
|
|
|
|
+// double fSpeed = MapTrace[i]->speed;
|
|
|
|
+ doubledata[i][4] = MapTrace[i]->speed*3.6;
|
|
|
|
+ }
|
|
|
|
+ if(i>0)
|
|
|
|
+ {
|
|
|
|
+ if(MapTrace[i-1]->roadMode != MapTrace[i]->roadMode)
|
|
|
|
+ {
|
|
|
|
+ SmoothData(MapTrace,doubledata,i);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ SmoothACC(MapTrace,doubledata);
|
|
}
|
|
}
|
|
|
|
+
|
|
//
|
|
//
|
|
/*for(int i=0;i<MapTrace.size();i++){
|
|
/*for(int i=0;i<MapTrace.size();i++){
|
|
//将数据写入文件开始
|
|
//将数据写入文件开始
|