#pragma once /* * 中央决策大脑 */ #ifndef _IV_DECITION_BRAIN_ #define _IV_DECITION_BRAIN_ #include #include //#include //#include #include #include //#include #include #include #include #include #include #include #include #include #include //#include //#include "adcivstatedb.h" //#include "decition/vehiclestate_type.h" #include "common/hmi_type.h" #include "common/platform_type.h" #include"common/gps_type.h" #include #include #include #include "brainstate.pb.h" #include "decition.pb.h" #include "mapreq.pb.h" #include "chassis.pb.h" #include "hmi.pb.h" #include "radio_send.pb.h" #include "ivlog.h" #include "formation_map.pb.h" #include "vbox.pb.h" #include "v2x.pb.h" #include "ultrasonic.pb.h" #include "fanyaapi.h" namespace iv { namespace decision { class BrainDecition { public: BrainDecition(); ~BrainDecition(); void inialize();/* 初始化*/ bool loadMapFromFile(std::string fileName);/* 加载地图*/ bool loadMapFromFile2(std::string fileName); bool loadMapFromFile3(std::string fileName); bool loadMapFromFile4(std::string fileName); void start();/* 启动大脑*/ void stop(); //关闭 std::vector navigation_data; //导航数据,GPS结构体数组 std::vector navigation_data2; //导航数据,GPS结构体数组2 std::vector navigation_data3; //导航数据,GPS结构体数组3 std::vector navigation_data4; //导航数据,GPS结构体数组4 std::vector radar_data; std::vector lidar_data; std::vector camera_data; /* std::vector> mapsL; std::vector> mapsR;*/ double decision_period = 0.0; double look1 = 0.0; double look2 = 0.0; double look3 = 0.0; double look4 = 0.0; double look5 = 0.0; double look6 = 0.0; double look7 = 0.0; void UpdateMap(const char * mapdata,const int mapdatasize); private: // iv::perception::Eyes* eyes; //眼睛 // iv::carcalling::carcalling* carcall; iv::perception::Eyes* eyes; iv::decision::DecitionMaker* decitionMaker; //决策器 iv::decision::DecitionVoter* decitionVoter; //决策仲裁 判断器 // iv::decition::DecitionExecuter* decitionExecuter; //决策执行器 iv::decision::DecideGps00* decitionGps00; //决策器 iv::decision::DecideLine00* decitionLine00; // boost::shared_ptr controller; //实际车辆控制器 boost::thread* thread_run; iv::ObsLiDAR obs_lidar_; //激光雷达障碍物 iv::ObsRadar obs_radar_; //毫米波雷达障碍物 //iv::ObsCamera obs_camera_; //摄像头障碍物 iv::CameraInfoPtr obs_camera_; // iv::GPSData gps_data_; //gps 惯导数据 iv::LidarGridPtr obs_lidar_grid_;//激光雷达网格化 iv::LidarGridPtr old_obs_lidar_grid_;//激光雷达网格化 iv::TrafficLight trafficLight; //iv::StationCmd stationCmd; int lastMode; bool lastPause; void run(); //实际执行逻辑 void * mpamapreq; void * mpa; void * mpvbox; QMutex mMutexMap; void * mpaDecition; void * mpaVechicleState; void * mpaToPlatform; void * mpaPlanTrace; void * mpaObsTraceLeft; void * mpaObsTraceRight; void ShareDecition(iv::decision::Decition decision); void ShareBrainstate(iv::brain::brainstate xbs); private: void * mpaPAD; void * mpaHMI; void * mpaPlatform; void *mpaGroup; void * mpmapChangeSig; void * v2x; void * ultra; std::string mstrmemmap_index; int mnOldTime; QTime mTime; double mfSpeedLast; double mfVehSpeedLast; public: void UpdatePAD(const char *pdata, const int ndatasize); void UpdateHMI(const char * pdata,const int ndatasize); void UpdatePlatform(const char * pdata,const int ndatasize); 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); void Updateultra(const char * pdata,const int ndatasize); private: // Adcivstatedb * mpasd; void UpdateChassis(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname); void adjuseGpsLidarPosition(); fanyaapi mmpcapi; bool mbUseExternMPC = false; }; } } #endif // !_IV_DECITION_BRAIN_