Bladeren bron

add hapo station information

zhangjia 4 jaren geleden
bovenliggende
commit
0d1e031d76

+ 2 - 1
src/decition/common/common/car_status.h

@@ -180,7 +180,8 @@ namespace iv {
         int mnBocheComplete = 0;   //When boche comple set a value.
 
         bool useObsPredict = false;
-
+        //hapo station 2021/02/05
+        iv::StationCmd   stationCmd;
     };
     typedef boost::serialization::singleton<iv::CarStatus> CarStatusSingleton;//非线程安全,注意多线程加锁,单例模式
 }

+ 19 - 0
src/decition/common/common/gps_type.h

@@ -102,6 +102,25 @@ namespace iv {
 
      };
 
+     class StationCmd
+     {
+     public:
+         bool received;
+         uint32_t carID,carMode,emergencyStop,stationStop;
+         uint32_t stationID[20];
+         GPS_INS  stationGps[20];
+         uint32_t stationTotalNum;
+         StationCmd()
+         {
+             received=false;
+             carID=0;
+             carMode=0;
+             emergencyStop=0;
+             stationStop=0;
+             stationTotalNum=0;
+         }
+     };
+
 
 
 

+ 31 - 0
src/decition/decition_brain/decition/brain.cpp

@@ -1277,6 +1277,37 @@ void iv::decition::BrainDecition::UpdateVbox(const char *pdata, const int ndatas
 
 }
 
+void iv::decition::BrainDecition::Updatev2x(const char *pdata, const int ndatasize){
+
+    iv::v2x::v2x v2x_message;
+    if(false == v2x_message.ParseFromArray(pdata,ndatasize))
+    {
+        std::cout<<"Listenv2x fail."<<std::endl;
+        return;
+    }
+
+//  解析v2x信息
+    ServiceCarStatus.stationCmd.received=true;
+    ServiceCarStatus.stationCmd.carID=v2x_message.carid();
+    ServiceCarStatus.stationCmd.carMode=v2x_message.carmode();
+    ServiceCarStatus.stationCmd.emergencyStop=v2x_message.emergencystop();
+    ServiceCarStatus.stationCmd.stationStop=v2x_message.stationstop();
+
+    ServiceCarStatus.stationCmd.stationTotalNum=v2x_message.stationid_size();
+
+    for(int i=0;i++;i<ServiceCarStatus.stationCmd.stationTotalNum)
+    {
+        ServiceCarStatus.stationCmd.stationGps[i].gps_lat=v2x_message.stgps(v2x_message.stationid(i)).lat();
+        ServiceCarStatus.stationCmd.stationGps[i].gps_lng=v2x_message.stgps(v2x_message.stationid(i)).lon();
+    }
+
+}
+
+
+
+
+
+
 void iv::decition::BrainDecition::UpdateSate(){
      decitionGps00->isFirstRun=true;
 }

+ 3 - 0
src/decition/decition_brain/decition/brain.h

@@ -43,6 +43,7 @@
 #include "ivlog.h"
 #include "formation_map.pb.h"
 #include "vbox.pb.h"
+#include "v2x.pb.h"
 
 #include "fanyaapi.h"
 
@@ -110,6 +111,7 @@ namespace iv {
 			iv::LidarGridPtr obs_lidar_grid_;//激光雷达网格化
             iv::LidarGridPtr old_obs_lidar_grid_;//激光雷达网格化
             iv::TrafficLight trafficLight;
+            //iv::StationCmd   stationCmd;
             int lastMode;
             bool lastPause;
 
@@ -150,6 +152,7 @@ namespace iv {
             void UpdateGroupInfo(const char * pdata,const int ndatasize);
             void UpdateSate();
             void UpdateVbox(const char * pdata,const int ndatasize);
+            void Updatev2x(const char * pdata,const int ndatasize);
 
         private:
 //            Adcivstatedb * mpasd;

+ 33 - 1
src/decition/decition_brain/decition/decide_gps_00.cpp

@@ -1721,6 +1721,39 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
     }
 
 
+    //  解析云平台数据
+    if(ServiceCarStatus.stationCmd.received==true)
+    {
+        std::vector<Station>  station_received;
+        Station station_aa,station_nearest;
+        station_received.clear();
+        for(int i=0;i<ServiceCarStatus.stationCmd.stationTotalNum;i++)
+        {
+            station_aa.index=i;
+            station_aa.station_location.gps_lat=ServiceCarStatus.stationCmd.stationGps[i].gps_lat;
+            station_aa.station_location.gps_lng=ServiceCarStatus.stationCmd.stationGps[i].gps_lng;
+            station_received.push_back(station_aa);
+        }
+        station_nearest=getNearestStation(now_gps_ins,station_received,gpsMapLine);
+
+        if(ServiceCarStatus.stationCmd.emergencyStop==0x01)
+        {
+            ServiceCarStatus.carState = 0;
+        }
+
+        if((ServiceCarStatus.stationCmd.stationStop==0x00))
+        {
+            ServiceCarStatus.carState = 2;
+            ServiceCarStatus.amilat=station_nearest.station_location.gps_lat;
+            ServiceCarStatus.amilng=station_nearest.station_location.gps_lng;
+        }
+
+        ServiceCarStatus.stationCmd.received=false;
+        busMode=true;
+    }
+
+
+
 
 
     if (ServiceCarStatus.carState == 0 && busMode)
@@ -1749,7 +1782,6 @@ iv::decition::Decition iv::decition::DecideGps00::getDecideFromGPS(GPS_INS now_g
 
 
 
-
     ///kkcai, 2020-01-03
     //if (ServiceCarStatus.carState == 2 && busMode)
     if (ServiceCarStatus.carState == 2)

+ 3 - 2
src/decition/decition_brain/decition_brain.pro

@@ -27,7 +27,8 @@ SOURCES += $$PWD/../common/main.cpp \
     ../../include/msgtype/chassis.pb.cc \
     ../../include/msgtype/vbox.pb.cc \
     ../../include/msgtype/radio_send.pb.cc \
-    ../../include/msgtype/formation_map.pb.cc
+    ../../include/msgtype/formation_map.pb.cc \
+    ../../include/msgtype/v2x.pb.cc
 
 include($$PWD/../common/common/common.pri)
 include($$PWD/decition/decition.pri)
@@ -69,4 +70,4 @@ HEADERS += \
     ../../include/msgtype/chassis.pb.h \
     ../../include/msgtype/radio_send.pb.h \
     ../../include/msgtype/formation_map.pb.h \
-
+    ../../include/msgtype/v2x.pb.h \