Selaa lähdekoodia

modify hapo lamp door control

zhangjia 3 vuotta sitten
vanhempi
commit
81cc87525c

+ 4 - 2
src/controller/controller_hapo/main.cpp

@@ -82,7 +82,7 @@ void executeDecition(const iv::brain::decition decition)
     gcontroller->control_handBrake(decition.handbrake());
     gcontroller->control_mode(decition.mode());
     //   gcontroller->control_mode(1);
-    //  gcontroller->control_near_light(1);
+    gcontroller->control_near_light(decition.dippedlight());
 
 
     gcontroller->control_air_enable(decition.air_enable());
@@ -90,11 +90,13 @@ void executeDecition(const iv::brain::decition decition)
     gcontroller->control_air_temp(decition.air_temp());
     gcontroller->control_air_mode(decition.air_mode());
     gcontroller->control_wind_level(decition.wind_level());
-    gcontroller->control_roof_light(0);
+    gcontroller->control_roof_light(decition.roof_light());
     gcontroller->control_home_light(decition.home_light());
     gcontroller->control_air_worktime(decition.air_worktime());
     gcontroller->control_air_offtime(decition.air_offtime());
     gcontroller->control_turnsignals(decition.leftlamp(),decition.rightlamp());
+    gcontroller->control_door(decition.door());
+
     /*if(decition.has_door())
     {
         if(decition.door())

+ 16 - 6
src/decition/decition_brain_sf/decition/adc_adapter/hapo_adapter.cpp

@@ -255,18 +255,28 @@ iv::decition::Decition iv::decition::HapoAdapter::getAdapterDeciton(GPS_INS now_
 
     (*decition)->wheel_angle=max((float)-870.0,(*decition)->wheel_angle);
     (*decition)->wheel_angle=min((float)870.0,(*decition)->wheel_angle);
-     lastDangWei= (*decition)->dangWei;
+    lastDangWei= (*decition)->dangWei;
 
-     (*decition)->topLight=0; //1116
-     (*decition)->nearLight=0;
-     (*decition)->farLight=0;
+    (*decition)->topLight=0; //1116
+    (*decition)->nearLight=0;
+    (*decition)->farLight=0;
+    (*decition)->home_light=0;
+    (*decition)->roof_light=0;
 
 
      if(ServiceCarStatus.has_mbdoor){
          if(ServiceCarStatus.mbdoor){
-             (*decition)->door=true;
+             (*decition)->door=2;
          }else{
-             (*decition)->door=false;
+             (*decition)->door=3;
+         }
+     }
+
+     if(ServiceCarStatus.has_mbjinguang){
+         if(ServiceCarStatus.mbjinguang){
+             (*decition)->nearLight=1;
+         }else{
+             (*decition)->nearLight=0;
          }
      }
 

+ 38 - 4
src/decition/decition_brain_sf/decition/decide_gps_00.cpp

@@ -106,6 +106,7 @@ int obsLostTimeAvoid = 0;
 
 
 double avoidX =0;
+int    turnLampFlag=0;  //  if <0:left , if >0:right
 float roadWidth = 3.5;
 int roadSum =10;
 int roadNow = 0;
@@ -1141,6 +1142,21 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
         }
     }
 
+    if(vehState==normalRun)
+    {
+        if(gpsTraceNow.size()>200){
+            if(gpsTraceNow[200].x<-3){
+                gps_decition->leftlamp = true;
+                gps_decition->rightlamp = false;
+            }else if(gpsTraceNow[200].x>3){
+                gps_decition->leftlamp = false;
+                gps_decition->rightlamp = true;
+            }else{
+                gps_decition->leftlamp = false;
+                gps_decition->rightlamp = false;
+            }
+        }
+    }
 
     //  dSpeed = getSpeed(gpsTraceNow);
     dSpeed =80;
@@ -1470,13 +1486,14 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
         else if (useOldAvoid && avoidDistance>35) {    //zj 2021.06.21   gpsTraceNow[60].x)<0.02
             // vehState = avoidObs; 0929
             vehState = normalRun;
+            turnLampFlag=0;
         }
-        else if (gpsTraceNow[0].x>0)
+        else if (turnLampFlag>0)
         {
             gps_decition->leftlamp = false;
             gps_decition->rightlamp = true;
         }
-        else if(gpsTraceNow[0].x<0)
+        else if(turnLampFlag<0)
         {
             gps_decition->leftlamp = true;
             gps_decition->rightlamp = false;
@@ -1496,6 +1513,7 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
         //若车辆到达变道后的路径,改变车辆状态,关闭frenet规划
         if (useFrenet && abs(gpsTraceAim[0].x)<1.0) {
             vehState = normalRun;
+            turnLampFlag=0;
             //            useFrenet = false;
             //            useOldAvoid = true;
         }
@@ -1503,12 +1521,12 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
             // vehState = avoidObs; 0929
             vehState = normalRun;
         }
-        else if (gpsTraceNow[0].x>0)
+        else if (turnLampFlag>0)
         {
             gps_decition->leftlamp = false;
             gps_decition->rightlamp = true;
         }
-        else if (gpsTraceNow[0].x<0)
+        else if (turnLampFlag<0)
         {
             gps_decition->leftlamp = true;
             gps_decition->rightlamp = false;
@@ -1540,6 +1558,14 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
         roadNow = roadPre;
    //     avoidX = (roadOri - roadNow)*roadWidth;
         avoidX=computeAvoidX(roadNow,roadOri,gpsMapLine[PathPoint],ServiceCarStatus.msysparam.vehWidth);
+
+        if(avoidX<0)
+            turnLampFlag<0;
+        else if(avoidX>0)
+            turnLampFlag>0;
+        else
+            turnLampFlag=0;
+
         if(useOldAvoid){
             //gpsTraceNow = getGpsTraceOffset(gpsTraceOri, avoidX);
             gpsTraceAvoidXY.clear();
@@ -1691,6 +1717,14 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
                     roadNow = roadPre;
                   //  avoidX = (roadOri - roadNow)*roadWidth;
                      avoidX=computeAvoidX(roadNow,roadOri,gpsMapLine[PathPoint],ServiceCarStatus.msysparam.vehWidth);
+
+                     if(avoidX<0)
+                         turnLampFlag<0;
+                     else if(avoidX>0)
+                         turnLampFlag>0;
+                     else
+                         turnLampFlag=0;
+
                     gpsTraceNow.clear();
                     //gpsTraceNow = getGpsTraceOffset(gpsTraceOri, avoidX);
                     gpsTraceAvoidXY.clear();

+ 3 - 3
src/decition/decition_brain_sf/decition/decition_type.h

@@ -18,7 +18,7 @@ struct DecitionBasic {
     int  mode;
     int handBrake;
     bool speak;
-    bool door;
+    int door;
     bool bright;
     int dangWei;
 
@@ -46,8 +46,8 @@ struct DecitionBasic {
     float   air_temp ;                  //空调温度
     float   air_mode ;                  //空调模式
     float   wind_level ;                  //空调风力
-    float   roof_light ;                  //顶灯
-    float   home_light ;                  //日光灯
+    int   roof_light ;                  //顶灯
+    int   home_light ;                  //日光灯
     float   air_worktime ;                  //空调工作时间
     float   air_offtime ;                  //空调关闭时间
 

+ 4 - 4
src/include/proto/decition.proto

@@ -16,7 +16,7 @@ message decition
     optional bool  doubleSpark = 10;          //双闪
     optional bool  headLight = 11;            //前灯
     optional bool  highBeam = 12;             //远光灯
-    optional bool  dippedLight = 13;          //近光灯
+    optional int32  dippedLight = 13;          //近光灯
     optional bool  tailLight = 14;            //尾灯
     optional bool  domeLight = 15;            //顶灯
     optional bool  fogLamp = 16;              //雾灯
@@ -26,7 +26,7 @@ message decition
     optional int32   mode = 20;                 //模式:自动or手动
     optional int32  handBrake = 21;            //手刹
     optional bool  speak = 22;                //喇叭
-    optional bool  door = 23;                 //车门
+    optional int32  door = 23;                 //车门
     optional int32   gear = 24;                 //挡位
     optional int32   wiper = 25;                //雨刷
     optional int32   grade = 26;                 //GE3使用的一个指标
@@ -35,8 +35,8 @@ message decition
     optional float   air_temp = 29;                  //空调温度 
     optional float   air_mode = 30;                  //空调模式 
     optional float   wind_level = 31;                  //空调风力 
-    optional float   roof_light = 32;                  //顶灯 
-    optional float   home_light = 33;                  //日光灯 
+    optional int32   roof_light = 32;                  //顶灯 
+    optional int32   home_light = 33;                  //日光灯 
     optional float   air_worktime = 34;                  //空调工作时间
     optional float   air_offtime = 35;                  //空调关闭时间 
     optional bool   air_on = 36;                  //空调使能