Преглед изворни кода

change decition_brain_sf_changan_shenlan. add some param for config speed and brake.

yuchuli пре 2 година
родитељ
комит
c464bb7a3f

+ 7 - 0
src/decition/common/common/car_status.h

@@ -276,6 +276,13 @@ namespace iv {
         double mfbasepitch = 0.0;
         bool mbUseRampAssit = false;
 
+        bool mbUseDynamics = true;
+        bool mbLimitSpeed = true;
+        double mfMaxAcc = 3.0;
+        double mfChassisMaxBrake = 6.0; //Chassis Limit Max Brake
+        double mfPerceptionMax = 40.0; // Max 40 meters Obs
+        double mfMaxSpeed = 80.0; //Max Speed is calculate, mfMaxSpeed = sqrt(2.0 * mfChassisMaxBrake * (mfPerceptionMax - 5.0)) * 3.6;
+
         //20230814,交通标志牌识别数据更新计时
         QTime mTrafficSignUpdateTimer;
         //std::vector<iv::vision::cameraobjectarray> xtrafficsign;

+ 7 - 1
src/decition/decition_brain_sf_changan_shenlan/decition/adc_adapter/changan_shenlan_adapter.cpp

@@ -24,6 +24,9 @@ iv::decition::Decition iv::decition::ChanganShenlanAdapter::getAdapterDeciton(GP
 
     bool bUseDynamics = true;//false;
 
+    if(ServiceCarStatus.mbUseDynamics)bUseDynamics = true;
+    else bUseDynamics = false;
+
     float controlSpeed=0;
     float controlBrake=0;
     float realSpeed = now_gps_ins.speed;
@@ -207,7 +210,10 @@ float iv::decition::ChanganShenlanAdapter::limitSpeed(float realSpeed, float con
         controlSpeed=0;
     }
 
-    controlSpeed=min((float)3000,controlSpeed);
+    if(ServiceCarStatus.mbUseDynamics == false)
+        controlSpeed=min((float)1000,controlSpeed);
+    else
+        controlSpeed=min((float)3000.0,controlSpeed);
     controlSpeed=max((float)0.0,controlSpeed);
     return controlSpeed;
 

+ 1 - 1
src/decition/decition_brain_sf_changan_shenlan/decition/adc_controller/pid_controller.cpp

@@ -394,7 +394,7 @@ float iv::decition::PIDController::limiteU(float u,float ttc){
     }
     else
     {
-        if (u < -1.5) u = -1.5;
+        if (u <(ServiceCarStatus.mfMaxAcc *(-1.0))) u = ServiceCarStatus.mfMaxAcc *(-1.0);
     }
     if (u >= 0 && lastU <= 0)
     {

+ 34 - 0
src/decition/decition_brain_sf_changan_shenlan/decition/brain.cpp

@@ -412,6 +412,40 @@ void iv::decition::BrainDecition::run() {
     decitionGps00->mstopbrake = fabs(xp.GetParam("stopbrake",0.6));
     if(decitionGps00->mstopbrake < 0.1)decitionGps00->mstopbrake = 0.1;
 
+
+//    bool mbUseDynamics = true;
+//    bool mbLimitSpeed = true;
+//    double mfMaxAcc = 3.0;
+//    double mfChassisMaxBrake = 6.0; //Chassis Limit Max Brake
+//    double mfPerceptionMax = 40.0; // Max 40 meters Obs
+//    double mfMaxSpeed = 80.0; //Max Speed is calculate, mfMaxSpeed = sqrt(2.0 * mfChassisMaxBrake * (mfPerceptionMax - 5.0)) * 3.6;
+
+    ServiceCarStatus.mbUseDynamics = xp.GetParam("UseDynamics",true);
+    if(ServiceCarStatus.msysparam.mvehtype=="shenlan")
+        ServiceCarStatus.mbLimitSpeed = xp.GetParam("LimitSpeed",true);
+    else
+        ServiceCarStatus.mbLimitSpeed = xp.GetParam("LimitSpeed",false);
+    ServiceCarStatus.mfMaxAcc = xp.GetParam("MaxAcc",3.0);
+    if(ServiceCarStatus.mfMaxAcc<0.0)ServiceCarStatus.mfMaxAcc = 0.1;
+    ServiceCarStatus.mfChassisMaxBrake = xp.GetParam("ChassisMaxBrake",6.0);
+    if(ServiceCarStatus.msysparam.mvehtype=="shenlan")
+        ServiceCarStatus.mfChassisMaxBrake = xp.GetParam("ChassisMaxBrake",1.5);
+    ServiceCarStatus.mfPerceptionMax = xp.GetParam("PerceptionMax",40);
+    if(ServiceCarStatus.mfPerceptionMax <= 6.0)ServiceCarStatus.mfPerceptionMax = 6.0;
+    if(ServiceCarStatus.mfChassisMaxBrake < 0.1)ServiceCarStatus.mfChassisMaxBrake = 0.1;
+    ServiceCarStatus.mfMaxSpeed = sqrt(2.0 * ServiceCarStatus.mfChassisMaxBrake * (ServiceCarStatus.mfPerceptionMax - 5.0)) * 3.6;
+
+    if((ServiceCarStatus.msysparam.mvehtype=="shenlan") &&(ServiceCarStatus.mbLimitSpeed))
+
+
+    if(ServiceCarStatus.msysparam.mvehtype=="hunter")
+    {
+        ServiceCarStatus.mfMaxSpeed = 5.0;
+    }
+
+    std::cout<<" Max Acc: "<<ServiceCarStatus.mfMaxAcc<<" PerceptionMax: "<<ServiceCarStatus.mfPerceptionMax
+            <<" Chassis Max Brake: "<<ServiceCarStatus.mfChassisMaxBrake<<" Max Speed: "<<ServiceCarStatus.mfMaxSpeed<<std::endl;
+
     mstrmemmap_index = xp.GetParam("msg_mapindex","map_index");
 
 

+ 4 - 14
src/decition/decition_brain_sf_changan_shenlan/decition/decide_gps_00.cpp

@@ -2780,13 +2780,7 @@ else
         }
     }
 
-    if(ServiceCarStatus.msysparam.mvehtype=="hunter")
-    {
-        if(dSpeed>5.0)
-        {
-            dSpeed=5.0;
-        }
-    }
+
 
     if(obsDistance == 0)obsDistance = -1;
 
@@ -2814,13 +2808,9 @@ else
     dSpeed=min(dSpeed,ServiceCarStatus.iTrafficsignSpeed);
     //20230814,交通标志识别添加 end
 
-    if(ServiceCarStatus.msysparam.mvehtype=="shenlan")//fangzhe juece zuihou,xianzhi sudu
-    {
-        if(dSpeed>40.0)
-        {
-            dSpeed=40.0;   //shenlan bisai xiansu 10
-        }
-    }
+
+    dSpeed = min(dSpeed,ServiceCarStatus.mfMaxSpeed); //Speed Limit By Max Speed
+
 
     phaseSpeedDecition(gps_decition, secSpeed, obsDistance, obsSpeed,now_gps_ins);