|
@@ -192,6 +192,7 @@ int iv::decition::Compute00::getDesiredSpeed(std::vector<GPSData> gpsMap)
|
|
int iv::decition::Compute00::getMapDelta(std::vector<GPSData> MapTrace){
|
|
int iv::decition::Compute00::getMapDelta(std::vector<GPSData> MapTrace){
|
|
double distance,deltaphi;
|
|
double distance,deltaphi;
|
|
//x,y,phi in rad
|
|
//x,y,phi in rad
|
|
|
|
+ doubledata.clear();
|
|
for (int i = 0; i < MapTrace.size(); i++) { // 1225/14:25
|
|
for (int i = 0; i < MapTrace.size(); i++) { // 1225/14:25
|
|
std::vector<double> temp;
|
|
std::vector<double> temp;
|
|
temp.push_back(0);temp.push_back(0);temp.push_back(0);temp.push_back(0);temp.push_back(0);//先push四个空量,然后就可以给量赋值了
|
|
temp.push_back(0);temp.push_back(0);temp.push_back(0);temp.push_back(0);temp.push_back(0);//先push四个空量,然后就可以给量赋值了
|
|
@@ -199,22 +200,24 @@ int iv::decition::Compute00::getMapDelta(std::vector<GPSData> MapTrace){
|
|
doubledata[i][0] = MapTrace.at(i)->gps_x;
|
|
doubledata[i][0] = MapTrace.at(i)->gps_x;
|
|
doubledata[i][1] = MapTrace.at(i)->gps_y;
|
|
doubledata[i][1] = MapTrace.at(i)->gps_y;
|
|
doubledata[i][2] = (MapTrace.at(i)->ins_heading_angle) / 180 * PI;
|
|
doubledata[i][2] = (MapTrace.at(i)->ins_heading_angle) / 180 * PI;
|
|
|
|
+ doubledata[i][3]=0;
|
|
|
|
+ doubledata[i][4]=0;
|
|
}
|
|
}
|
|
// compute delta///////////////////////////////////////////////////////////////
|
|
// compute delta///////////////////////////////////////////////////////////////
|
|
- for (int i = 0; i < doubledata.size()-1; i++)
|
|
|
|
|
|
+ for (int i = 0; i < doubledata.size()-10; i++)
|
|
{
|
|
{
|
|
- deltaphi=doubledata[i+1][2]-doubledata[i][2];
|
|
|
|
|
|
+ deltaphi=doubledata[i+10][2]-doubledata[i][2];
|
|
if (deltaphi>PI)
|
|
if (deltaphi>PI)
|
|
{deltaphi=deltaphi-2*PI; }
|
|
{deltaphi=deltaphi-2*PI; }
|
|
if (deltaphi<-PI)
|
|
if (deltaphi<-PI)
|
|
{deltaphi=deltaphi+2*PI;}
|
|
{deltaphi=deltaphi+2*PI;}
|
|
- distance=sqrt( pow((doubledata[i+1][0]-doubledata[i][0]),2)+pow((doubledata[i+1][1]-doubledata[i][1]),2));
|
|
|
|
|
|
+ distance=sqrt( pow((doubledata[i+10][0]-doubledata[i][0]),2)+pow((doubledata[i+10][1]-doubledata[i][1]),2));
|
|
doubledata[i][3]=-atan( 4.0* (deltaphi) / distance );//车辆坐标系和惯导坐标系方向相反,delta变号
|
|
doubledata[i][3]=-atan( 4.0* (deltaphi) / distance );//车辆坐标系和惯导坐标系方向相反,delta变号
|
|
}
|
|
}
|
|
doubledata[doubledata.size()-1][3] = doubledata[doubledata.size()-2][3];
|
|
doubledata[doubledata.size()-1][3] = doubledata[doubledata.size()-2][3];
|
|
|
|
|
|
//delta filter
|
|
//delta filter
|
|
- for(int j=10;j<doubledata.size()-10;j++)
|
|
|
|
|
|
+ /*for(int j=10;j<doubledata.size()-10;j++)
|
|
{
|
|
{
|
|
double delta_sum=0;
|
|
double delta_sum=0;
|
|
for(int k=j-10;k<j+10;k++)
|
|
for(int k=j-10;k<j+10;k++)
|
|
@@ -222,7 +225,7 @@ int iv::decition::Compute00::getMapDelta(std::vector<GPSData> MapTrace){
|
|
delta_sum+= doubledata[k][3];
|
|
delta_sum+= doubledata[k][3];
|
|
}
|
|
}
|
|
doubledata[j][3]=delta_sum/20;
|
|
doubledata[j][3]=delta_sum/20;
|
|
- }
|
|
|
|
|
|
+ }*/
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -234,7 +237,7 @@ 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)){
|
|
if((doubledata[i][3]>-0.4)&&(doubledata[i][3]<0.4)){
|
|
MapTrace[i]->roadMode=0;
|
|
MapTrace[i]->roadMode=0;
|
|
@@ -245,6 +248,18 @@ int iv::decition::Compute00::getPlanSpeed(std::vector<GPSData> MapTrace)
|
|
}else if(((doubledata[i][3]>10))||((doubledata[i][3]<-10))){
|
|
}else if(((doubledata[i][3]>10))||((doubledata[i][3]<-10))){
|
|
MapTrace[i]->roadMode=14;
|
|
MapTrace[i]->roadMode=14;
|
|
}
|
|
}
|
|
|
|
+ }*/
|
|
|
|
+ for(int i=0;i<doubledata.size();i++)
|
|
|
|
+ {
|
|
|
|
+ if((doubledata[i][3]>-0.2)&&(doubledata[i][3]<0.2)){
|
|
|
|
+ MapTrace[i]->roadMode=0;
|
|
|
|
+ }else if(((doubledata[i][3]>0.2)&&(doubledata[i][3]<0.4))||((doubledata[i][3]>-0.4)&&(doubledata[i][3]<-0.2))){
|
|
|
|
+ MapTrace[i]->roadMode=5;
|
|
|
|
+ }else if(((doubledata[i][3]>0.4)&&(doubledata[i][3]<1))||((doubledata[i][3]>-1)&&(doubledata[i][3]<-0.4))){
|
|
|
|
+ MapTrace[i]->roadMode=18;
|
|
|
|
+ }else if(((doubledata[i][3]>1))||((doubledata[i][3]<-1))){
|
|
|
|
+ MapTrace[i]->roadMode=14;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
for(int i=0;i<MapTrace.size();i++)
|
|
for(int i=0;i<MapTrace.size();i++)
|
|
{
|
|
{
|
|
@@ -328,10 +343,10 @@ int iv::decition::Compute00::getPlanSpeed(std::vector<GPSData> MapTrace)
|
|
for(int i=0;i<MapTrace.size();i++){
|
|
for(int i=0;i<MapTrace.size();i++){
|
|
//将数据写入文件开始
|
|
//将数据写入文件开始
|
|
ofstream outfile;
|
|
ofstream outfile;
|
|
- outfile.open("ctr0108003.txt", ostream::app); /*以添加模式打开文件*/
|
|
|
|
|
|
+ outfile.open("ctr0108003.txt", ostream::app);
|
|
outfile<<"Delta"<< "," <<doubledata[i][3]<< ","<<"roadMode"<< "," <<MapTrace[i]->roadMode<< ","
|
|
outfile<<"Delta"<< "," <<doubledata[i][3]<< ","<<"roadMode"<< "," <<MapTrace[i]->roadMode<< ","
|
|
<<"plan_speed"<< "," << doubledata[i][4]<< ","<<endl;
|
|
<<"plan_speed"<< "," << doubledata[i][4]<< ","<<endl;
|
|
- outfile.close(); /*关闭文件*/
|
|
|
|
|
|
+ outfile.close();
|
|
//将数据写入文件结束
|
|
//将数据写入文件结束
|
|
}
|
|
}
|
|
|
|
|