ADCIntelligentVehicle.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. #ifndef ADCINTELLIGENTVEHICLE_H
  2. #define ADCINTELLIGENTVEHICLE_H
  3. #include <QMainWindow>
  4. #include <QtWidgets/QMainWindow>
  5. #include <common/boost.h>
  6. //#include <control/control_status.h>
  7. //#include <control/can.h>
  8. #include "ui_ADCIntelligentVehicle.h"
  9. //#include <decition/brain.h>
  10. //#include <control/can.h>
  11. #include "look.h"
  12. #include <common/car_status.h>
  13. #include <qtimer.h>
  14. #include <qpainter.h>
  15. #include <QGraphicsView>
  16. #include <QWheelEvent>
  17. #include <QKeyEvent>
  18. #include <QPoint>
  19. #include <QPointF>
  20. #include <qfiledialog.h>
  21. #include <qmessagebox.h>
  22. #include <QCloseEvent>
  23. #include <qabstractscrollarea.h>
  24. #include <QGraphicsItem>
  25. #include <QKeyEvent>
  26. #include <qpainter.h>
  27. #include <QDebug>
  28. #include <string>
  29. #include <cassert>
  30. #include <iostream>
  31. #include <sstream>
  32. #include <math.h>
  33. #include <mobileye_info.h>
  34. #include <QUdpSocket>
  35. #include <QHostAddress>
  36. #include <QTime>
  37. #include <QSet>
  38. #include <QtWebEngineWidgets/QtWebEngineWidgets>
  39. #include "common/can_type.h"
  40. #include "common/decition_type.h"
  41. #include "common/vehiclestate_type.h"
  42. #include "common/hmi_type.h"
  43. #include "common/lidar.h"
  44. #include "common/obstacle_type.h"
  45. #include "common/constants.h"
  46. #include "../../../src/decition/common/common/tracepointstation.h"
  47. #include "modulecomm.h"
  48. #include <QMutex>
  49. #include <thread>
  50. //#include <platform/platform.h>
  51. #include "hmi.pb.h"
  52. #include "gpsimu.pb.h"
  53. #include "radarobjectarray.pb.h"
  54. #include "decition.pb.h"
  55. #include "brainstate.pb.h"
  56. #include "canstate.pb.h"
  57. #include "v2x.pb.h"
  58. #include "mobileye.pb.h"
  59. #include "ivlog.h"
  60. #include "mapreq.pb.h"
  61. #include "vbox.pb.h"
  62. #include "fusionobject.pb.h"
  63. #include "fusionobjectarray.pb.h"
  64. #include "brainrunstate.pb.h"
  65. extern iv::Ivlog * gIvlog;
  66. #define USE_PAD_CTRL
  67. class MyView : public QGraphicsView
  68. {
  69. Q_OBJECT
  70. public:
  71. MyView(QWidget *parent);
  72. qreal x, y, beishu; //倍数
  73. protected:
  74. void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE; //Q_DECL_OVERRIDE也就是c++的override 作用是防止写错虚函数:
  75. void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
  76. void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
  77. void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
  78. void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
  79. void keyReleaseEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
  80. signals:
  81. void CtrlManual(bool bManual);
  82. public:
  83. QSet<int> mPressKeys;
  84. public Q_SLOTS:
  85. void zoomIn(); // 放大
  86. void zoomOut(); // 缩小
  87. private:
  88. bool bottonstatus = false;
  89. QPoint myview_lastMousePos;
  90. };
  91. namespace Ui {
  92. class ADCIntelligentVehicle;
  93. }
  94. struct packageHead
  95. {
  96. unsigned char type;
  97. int size;
  98. };
  99. struct dataInfo //与PAD通信结构体
  100. {
  101. unsigned char is_run = 0;
  102. unsigned char is_mapLoad = 0;
  103. unsigned char is_initSuccess = 0;
  104. double speed;
  105. double accelerate;
  106. double brake;
  107. double swerve;
  108. double gps_lng;
  109. double gps_lat;
  110. double gps_head;
  111. double radarobs;
  112. double lidarobs;
  113. double obs;
  114. unsigned char RTKstatus;
  115. unsigned char radarStatus;
  116. unsigned char lidarStatus;
  117. unsigned char boche_status;
  118. };
  119. class DataToUI
  120. {
  121. public:
  122. struct packageHead mHead;
  123. struct dataInfo mInfo;
  124. };
  125. //Split Map to Some Domain for quick find gps point for draw.
  126. namespace iv {
  127. struct MapPointDomain
  128. {
  129. public:
  130. int mxpos;
  131. int mypos;
  132. std::vector<iv::GPSData> mvectorgpsdata;
  133. };
  134. }
  135. class ADCIntelligentVehicle : public QMainWindow
  136. {
  137. Q_OBJECT
  138. public:
  139. explicit ADCIntelligentVehicle(QWidget *parent = 0);
  140. ~ADCIntelligentVehicle();
  141. signals:
  142. void otaversion(const char * strversion);
  143. public slots:
  144. void savestabuyEditinfo(const QString &txt);
  145. // void on_pb_load_navigation_data_clicked(); //加载地图 当前没有实现
  146. void on_pb_start_all_clicked(); //启动无人驾驶
  147. // void on_pb_open_can_card_clicked(); //打开can
  148. void on_pb_auto_drive_mode_clicked(); //自动驾驶使能
  149. void on_pb_auto_braking_mode_clicked(); //自动刹车使能
  150. void on_pb_auto_accelerate_mode_clicked(); //自动油门使能
  151. void on_pb_auto_wheel_mode_clicked(); //自动方向盘使能
  152. void on_pushButton_clicked();
  153. void on_pb_speed_control_mode_clicked(); //速度控制模式使能
  154. void on_hs_braking_percent_valueChanged(int value); //响应刹车压力改变
  155. void on_hs_accelerate_percent_valueChanged(int value); //响应油门改变
  156. void on_hs_wheel_angle_valueChanged(int value); //响应方向盘改变
  157. // void on_pushButton_2_clicked(); //打开地图采集器
  158. void on_pushButton_3_clicked();
  159. void on_pushButton_4_clicked();
  160. void on_timer_car_status_time_out(); //获取车辆状态定时器响应
  161. void on_timer_mobileye_info_time_out();
  162. virtual void paintEvent(QPaintEvent *);
  163. void timeoutslot();
  164. void onRecvUDP();
  165. void onStateTimer();
  166. void onStateTimerMap();
  167. void onStateTimer1();
  168. void onotaversion(const char * strversion);
  169. protected:
  170. void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;// 加/减键进行缩放
  171. void closeEvent(QCloseEvent *event);
  172. private slots:
  173. void on_listWidget_clicked();
  174. void on_pushButton_5_clicked();
  175. void on_pushButton_6_clicked();
  176. void on_pushButton_7_clicked();
  177. void on_pushButton_8_clicked();
  178. void on_pushButton_9_clicked();
  179. void onTimerManual();
  180. void onCtrlManual(bool bCtrl);
  181. void on_pb_v2xEn_clicked();
  182. void on_pBtn_door_open_clicked();
  183. void on_pBtn_door_close_clicked();
  184. void on_pBtn_low_beam_open_clicked();
  185. void on_pBtn_low_beam_close_clicked();
  186. void on_pBtn_high_beam_open_clicked();
  187. void on_pBtn_high_beam_close_clicked();
  188. private:
  189. Ui::ADCIntelligentVehicle *ui;
  190. /**************************************/
  191. QWebEngineView * mMapview;
  192. /**************************************/
  193. // boost::shared_ptr<iv::decition::BrainDecition> brain;
  194. bool is_brain_running_flag_ = false;
  195. bool is_map_loaded_flag_ = false;
  196. bool is_can_opened_ = false;
  197. bool is_auto_drive_mode_enable_ = false;
  198. bool is_auto_braking_mode_enable_ = false;
  199. bool is_auto_accelerate_mode_enable_ = false;
  200. bool is_auto_wheel_mode_enable_ = false;
  201. bool is_3 = false;
  202. bool is_speed_control_mode_enable_ = false;
  203. bool is_show_enable = false;
  204. Look_decition *look_decition;
  205. Mobileye_info *mobileye_info;
  206. Qt::MouseButton m_translateButton; // 平移按钮
  207. qreal m_translateSpeed; // 平移速度
  208. qreal m_zoomDelta; // 缩放的增量
  209. bool m_bMouseTranslate; // 平移标识
  210. QPoint m_lastMousePos; // 鼠标最后按下的位置
  211. qreal m_scale; // 缩放值
  212. QTimer * timer_car_status;
  213. QTimer * timer_mobileye_info;
  214. qreal horizontalOffset;
  215. qreal verticalOffset;
  216. qreal scaleFactor;
  217. qreal currentStepScaleFactor;
  218. QImage *image,*image_small;
  219. QPainter *painter,*painter_small;
  220. MyView *myview,*myview_small;
  221. QTimer *timer;
  222. QGraphicsScene *scene,*scene_small;
  223. iv::ObsLiDAR Lidar_read;
  224. iv::ObsLiDAR Lidar_obsread;
  225. iv::ObsRadar RadarDate;
  226. double asd = 0.0;
  227. int load_counts = 0;
  228. void AutoStart();
  229. QUdpSocket msocksend;
  230. QUdpSocket msockrecv;
  231. QTimer mTimerState;
  232. QTimer mTimerStateMap;
  233. DataToUI mDataToUI;
  234. QTime mTime;
  235. int mnTimeLastUpdatePaint;
  236. void * mpa;
  237. QMutex mMutexNavi;
  238. std::vector<iv::GPSData> m_navigation_data;
  239. qint64 mnNaviUpdateTime = 0;
  240. bool mbBrainRunning = false;
  241. double mdecition_period = 0;
  242. QTime mTimeState;
  243. int mnTimeUpdateGPS= 0;
  244. int mnTimeUpdateRadar=0;
  245. int mnTimeUpdateDecition=0;
  246. int mnTimeUpdateVS=0;
  247. int mnTimeUpdateCANState=0;
  248. double mfSOC = 0.0;
  249. void * mpManualCtrl;
  250. bool mbManual= false;
  251. QTimer * mTimerManual;
  252. int mnCtrlValue[3]; //Acc Brake Gear Acc 0-1000 Brake 0-1000 Gear -500 --- 500
  253. QTime mManualTime;
  254. int mnLastManualTime;
  255. void * mpafusiongpsimu;
  256. int64_t mnLastFusionGPSIMUUpdate = 0;
  257. private:
  258. void UpdateMap(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
  259. private:
  260. void * mpagpsimu;
  261. public:
  262. void UpdateGPSIMU(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
  263. unsigned int mv2xStEn = 0;
  264. private:
  265. void * mparadar;
  266. private:
  267. iv::radar::radarobjectarray mradararray;
  268. bool mbradarUpdate = false;
  269. QMutex mMutexRadar;
  270. void UpdateRADAR(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
  271. void UpdateChassis(const char *strdata, const unsigned int nSize, const unsigned int index, const QDateTime *dt, const char *strmemname);
  272. void * mpachassis;
  273. private:
  274. void * mpacanstate;
  275. public:
  276. int mimobileyeState;
  277. public:
  278. void UpdateCANState(const char * pdata,const int ndatasize);
  279. private:
  280. void * mpaDecition;
  281. public:
  282. void UpdateDecition(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
  283. private:
  284. void * mpaVechicleState;
  285. public:
  286. void UpdateVehicleState(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
  287. void UpdateBrainRunState(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
  288. private:
  289. void * mpaHMI;
  290. /***********20200509****************/
  291. public:
  292. void UpdatePlanTrace(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
  293. void UpdatePlanTrace_left(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
  294. void UpdatePlanTrace_right(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
  295. std::vector<iv::TracePoint> m_plan,m_plan_left,m_plan_right;
  296. QMutex mMutexPlan,mMutexPlan_left,mMutexPlan_right;
  297. private:
  298. void * mpaplantrace;
  299. void * mpaplantrace_left;
  300. void * mpaplantrace_right;
  301. /**************************/
  302. /**********20210429***********************/
  303. public:
  304. void UpdateFusion(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
  305. QMutex mMutexFusion;
  306. private:
  307. iv::fusion::fusionobjectarray mfusionarray;
  308. bool mbfusionUpdate = false;
  309. void * mpafusion;
  310. /*****************************************/
  311. private:
  312. void * mpaLidar;
  313. public:
  314. void UpdateOBS(std::shared_ptr<std::vector<iv::ObstacleBasic> > lidar_obs);
  315. void UpdateV2xStEn(unsigned int enable);
  316. private:
  317. void * mp_v2xStSend;
  318. void ShareHMIMsg(iv::hmi::HMIBasic xhmi);
  319. iv::Ivlog * mpivlog;
  320. // iv::platform::Client mplatform_client;
  321. public:
  322. void * mpamapreq; //请求地图
  323. void shareMapReqMsg();
  324. private:
  325. void * mpaVbox;
  326. public:
  327. void UpdateVbox(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname);
  328. private:
  329. QImage img,img2,img3,img4;
  330. QTimer mTimerState1;
  331. private:
  332. void threadCalcDrawTrace(); //Thread for caluclate draw trace.
  333. void UpdateMapDomain(std::vector<iv::GPSData> & xvectorMap,std::vector<iv::MapPointDomain> & xvectorMapDomain,const int nDomainSize);
  334. std::vector<double> mDraw_x0,mDraw_y0,mDraw_x1,mDraw_y1,mDraw_x2,mDraw_y2; //Save Draw Point
  335. QMutex mMutexDraw;
  336. int get_path_availspace(const QString & path);
  337. int mnHDDSpaceMB;
  338. void threadotacheck();
  339. bool mbotacheckclose = false;
  340. std::thread * mpthreadota;
  341. };
  342. #endif