#ifndef ADCINTELLIGENTVEHICLE_H #define ADCINTELLIGENTVEHICLE_H #include #include #include //#include //#include #include "ui_ADCIntelligentVehicle.h" //#include //#include #include "look.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "common/can_type.h" #include "common/decition_type.h" #include "common/vehiclestate_type.h" #include "common/hmi_type.h" #include "common/lidar.h" #include "common/obstacle_type.h" #include "common/constants.h" #include "../../../src/decition/common/common/tracepointstation.h" #include "modulecomm.h" #include #include //#include #include "hmi.pb.h" #include "gpsimu.pb.h" #include "radarobjectarray.pb.h" #include "decition.pb.h" #include "brainstate.pb.h" #include "canstate.pb.h" #include "v2x.pb.h" #include "mobileye.pb.h" #include "ivlog.h" #include "mapreq.pb.h" #include "vbox.pb.h" #include "fusionobject.pb.h" #include "fusionobjectarray.pb.h" #include "brainrunstate.pb.h" extern iv::Ivlog * gIvlog; #define USE_PAD_CTRL class MyView : public QGraphicsView { Q_OBJECT public: MyView(QWidget *parent); qreal x, y, beishu; //倍数 protected: void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE; //Q_DECL_OVERRIDE也就是c++的override 作用是防止写错虚函数: void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; void keyReleaseEvent(QKeyEvent *event) Q_DECL_OVERRIDE; signals: void CtrlManual(bool bManual); public: QSet mPressKeys; public Q_SLOTS: void zoomIn(); // 放大 void zoomOut(); // 缩小 private: bool bottonstatus = false; QPoint myview_lastMousePos; }; namespace Ui { class ADCIntelligentVehicle; } struct packageHead { unsigned char type; int size; }; struct dataInfo //与PAD通信结构体 { unsigned char is_run = 0; unsigned char is_mapLoad = 0; unsigned char is_initSuccess = 0; double speed; double accelerate; double brake; double swerve; double gps_lng; double gps_lat; double gps_head; double radarobs; double lidarobs; double obs; unsigned char RTKstatus; unsigned char radarStatus; unsigned char lidarStatus; unsigned char boche_status; }; class DataToUI { public: struct packageHead mHead; struct dataInfo mInfo; }; //Split Map to Some Domain for quick find gps point for draw. namespace iv { struct MapPointDomain { public: int mxpos; int mypos; std::vector mvectorgpsdata; }; } class ADCIntelligentVehicle : public QMainWindow { Q_OBJECT public: explicit ADCIntelligentVehicle(QWidget *parent = 0); ~ADCIntelligentVehicle(); signals: void otaversion(const char * strversion); public slots: void savestabuyEditinfo(const QString &txt); // void on_pb_load_navigation_data_clicked(); //加载地图 当前没有实现 void on_pb_start_all_clicked(); //启动无人驾驶 // void on_pb_open_can_card_clicked(); //打开can void on_pb_auto_drive_mode_clicked(); //自动驾驶使能 void on_pb_auto_braking_mode_clicked(); //自动刹车使能 void on_pb_auto_accelerate_mode_clicked(); //自动油门使能 void on_pb_auto_wheel_mode_clicked(); //自动方向盘使能 void on_pushButton_clicked(); void on_pb_speed_control_mode_clicked(); //速度控制模式使能 void on_hs_braking_percent_valueChanged(int value); //响应刹车压力改变 void on_hs_accelerate_percent_valueChanged(int value); //响应油门改变 void on_hs_wheel_angle_valueChanged(int value); //响应方向盘改变 // void on_pushButton_2_clicked(); //打开地图采集器 void on_pushButton_3_clicked(); void on_pushButton_4_clicked(); void on_timer_car_status_time_out(); //获取车辆状态定时器响应 void on_timer_mobileye_info_time_out(); virtual void paintEvent(QPaintEvent *); void timeoutslot(); void onRecvUDP(); void onStateTimer(); void onStateTimerMap(); void onStateTimer1(); void onotaversion(const char * strversion); protected: void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;// 加/减键进行缩放 void closeEvent(QCloseEvent *event); private slots: void on_listWidget_clicked(); void on_pushButton_5_clicked(); void on_pushButton_6_clicked(); void on_pushButton_7_clicked(); void on_pushButton_8_clicked(); void on_pushButton_9_clicked(); void onTimerManual(); void onCtrlManual(bool bCtrl); void on_pb_v2xEn_clicked(); void on_pBtn_door_open_clicked(); void on_pBtn_door_close_clicked(); void on_pBtn_low_beam_open_clicked(); void on_pBtn_low_beam_close_clicked(); void on_pBtn_high_beam_open_clicked(); void on_pBtn_high_beam_close_clicked(); private: Ui::ADCIntelligentVehicle *ui; /**************************************/ QWebEngineView * mMapview; /**************************************/ // boost::shared_ptr brain; bool is_brain_running_flag_ = false; bool is_map_loaded_flag_ = false; bool is_can_opened_ = false; bool is_auto_drive_mode_enable_ = false; bool is_auto_braking_mode_enable_ = false; bool is_auto_accelerate_mode_enable_ = false; bool is_auto_wheel_mode_enable_ = false; bool is_3 = false; bool is_speed_control_mode_enable_ = false; bool is_show_enable = false; Look_decition *look_decition; Mobileye_info *mobileye_info; Qt::MouseButton m_translateButton; // 平移按钮 qreal m_translateSpeed; // 平移速度 qreal m_zoomDelta; // 缩放的增量 bool m_bMouseTranslate; // 平移标识 QPoint m_lastMousePos; // 鼠标最后按下的位置 qreal m_scale; // 缩放值 QTimer * timer_car_status; QTimer * timer_mobileye_info; qreal horizontalOffset; qreal verticalOffset; qreal scaleFactor; qreal currentStepScaleFactor; QImage *image,*image_small; QPainter *painter,*painter_small; MyView *myview,*myview_small; QTimer *timer; QGraphicsScene *scene,*scene_small; iv::ObsLiDAR Lidar_read; iv::ObsLiDAR Lidar_obsread; iv::ObsRadar RadarDate; double asd = 0.0; int load_counts = 0; void AutoStart(); QUdpSocket msocksend; QUdpSocket msockrecv; QTimer mTimerState; QTimer mTimerStateMap; DataToUI mDataToUI; QTime mTime; int mnTimeLastUpdatePaint; void * mpa; QMutex mMutexNavi; std::vector m_navigation_data; qint64 mnNaviUpdateTime = 0; bool mbBrainRunning = false; double mdecition_period = 0; QTime mTimeState; int mnTimeUpdateGPS= 0; int mnTimeUpdateRadar=0; int mnTimeUpdateDecition=0; int mnTimeUpdateVS=0; int mnTimeUpdateCANState=0; double mfSOC = 0.0; void * mpManualCtrl; bool mbManual= false; QTimer * mTimerManual; int mnCtrlValue[3]; //Acc Brake Gear Acc 0-1000 Brake 0-1000 Gear -500 --- 500 QTime mManualTime; int mnLastManualTime; void * mpafusiongpsimu; int64_t mnLastFusionGPSIMUUpdate = 0; private: void UpdateMap(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname); private: void * mpagpsimu; public: void UpdateGPSIMU(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname); unsigned int mv2xStEn = 0; private: void * mparadar; private: iv::radar::radarobjectarray mradararray; bool mbradarUpdate = false; QMutex mMutexRadar; void UpdateRADAR(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname); void UpdateChassis(const char *strdata, const unsigned int nSize, const unsigned int index, const QDateTime *dt, const char *strmemname); void * mpachassis; private: void * mpacanstate; public: int mimobileyeState; public: void UpdateCANState(const char * pdata,const int ndatasize); private: void * mpaDecition; public: void UpdateDecition(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname); private: void * mpaVechicleState; public: void UpdateVehicleState(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname); void UpdateBrainRunState(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname); private: void * mpaHMI; /***********20200509****************/ public: void UpdatePlanTrace(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname); void UpdatePlanTrace_left(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname); void UpdatePlanTrace_right(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname); std::vector m_plan,m_plan_left,m_plan_right; QMutex mMutexPlan,mMutexPlan_left,mMutexPlan_right; private: void * mpaplantrace; void * mpaplantrace_left; void * mpaplantrace_right; /**************************/ /**********20210429***********************/ public: void UpdateFusion(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname); QMutex mMutexFusion; private: iv::fusion::fusionobjectarray mfusionarray; bool mbfusionUpdate = false; void * mpafusion; /*****************************************/ private: void * mpaLidar; public: void UpdateOBS(std::shared_ptr > lidar_obs); void UpdateV2xStEn(unsigned int enable); private: void * mp_v2xStSend; void ShareHMIMsg(iv::hmi::HMIBasic xhmi); iv::Ivlog * mpivlog; // iv::platform::Client mplatform_client; public: void * mpamapreq; //请求地图 void shareMapReqMsg(); private: void * mpaVbox; public: void UpdateVbox(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname); private: QImage img,img2,img3,img4; QTimer mTimerState1; private: void threadCalcDrawTrace(); //Thread for caluclate draw trace. void UpdateMapDomain(std::vector & xvectorMap,std::vector & xvectorMapDomain,const int nDomainSize); std::vector mDraw_x0,mDraw_y0,mDraw_x1,mDraw_y1,mDraw_x2,mDraw_y2; //Save Draw Point QMutex mMutexDraw; int get_path_availspace(const QString & path); int mnHDDSpaceMB; void threadotacheck(); bool mbotacheckclose = false; std::thread * mpthreadota; }; #endif