adcintelligentshow.cpp 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101
  1. #include "adcintelligentshow.h"
  2. #include "ui_adcintelligentshow.h"
  3. #include <QSound>
  4. #include <QtMath>
  5. #include "pos_def.h"
  6. extern std::vector<iv::pos_def> gvectorpos;
  7. extern std::string gstrdefaultlane;
  8. ADCIntelligentShow * gAShow;
  9. #include "grpcclientthread.h"
  10. #ifdef Android
  11. extern grpcclientthread * ggt;
  12. #endif
  13. const double PI = 3.1415926535898;
  14. class xodrobj
  15. {
  16. public:
  17. double flatsrc;
  18. double flonsrc;
  19. double fhgdsrc;
  20. double flat;
  21. double flon;
  22. int lane;
  23. };
  24. void Listengpsimu(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  25. {
  26. (void)&index;
  27. (void)dt;
  28. (void)strmemname;
  29. // ggpsimu->UpdateGPSIMU(strdata,nSize);
  30. iv::gps::gpsimu xgpsimu;
  31. if(!xgpsimu.ParseFromArray(strdata,nSize))
  32. {
  33. std::cout<<"ListenRaw Parse error."<<std::endl;
  34. return;
  35. }
  36. gAShow->UpdateGPSIMU(&xgpsimu);
  37. // qDebug(" gps time is %ld",QDateTime::currentMSecsSinceEpoch());
  38. }
  39. void ListenOBS(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  40. {
  41. (void)&index;
  42. (void)dt;
  43. (void)strmemname;
  44. std::shared_ptr<std::vector<iv::ObstacleBasic>> lidar_obs(new std::vector<iv::ObstacleBasic>);
  45. iv::ObstacleBasic * pdata = (iv::ObstacleBasic *)strdata;
  46. int nCount = nSize/sizeof(iv::ObstacleBasic);
  47. int i;
  48. for(i=0;i<nCount;i++)
  49. {
  50. iv::ObstacleBasic temp;
  51. memcpy(&temp,pdata,sizeof(iv::ObstacleBasic));
  52. lidar_obs->push_back(temp);
  53. pdata++;
  54. }
  55. gAShow->UpdateOBS(lidar_obs);
  56. // gw->UpdateOBS(lidar_obs);
  57. }
  58. void ListenRadar(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  59. {
  60. (void)&index;
  61. (void)dt;
  62. (void)strmemname;
  63. if(nSize<1)return;
  64. iv::radar::radarobjectarray xobj;
  65. if(false == xobj.ParseFromArray(strdata,nSize))
  66. {
  67. std::cout<<"ListenenRadar fail."<<std::endl;
  68. return;
  69. }
  70. gAShow->UpdateRADAR(&xobj);
  71. }
  72. void ListenDection(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  73. {
  74. (void)&index;
  75. (void)dt;
  76. (void)strmemname;
  77. iv::brain::decition xdecision;
  78. if(!xdecision.ParseFromArray(strdata,nSize))
  79. {
  80. std::cout<<" ListenDection error. Parse error."<<std::endl;
  81. return;
  82. }
  83. gAShow->UpdateDection(xdecision);
  84. }
  85. void ListenBrainState(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  86. {
  87. (void)&index;
  88. (void)dt;
  89. (void)strmemname;
  90. iv::brain::brainstate xbrainstate;
  91. if(!xbrainstate.ParseFromArray(strdata,nSize))
  92. {
  93. std::cout<<"ListenBrainState Parse error."<<std::endl;
  94. return;
  95. }
  96. gAShow->UpdateBrainState(xbrainstate);
  97. }
  98. void ListenTraceMap(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  99. {
  100. (void)&index;
  101. (void)dt;
  102. (void)strmemname;
  103. gAShow->UpdateMap(strdata,nSize);
  104. }
  105. #ifdef Android
  106. void ADCIntelligentShow::AndroidSetMsg(const char * msgname , const char *strdata, const unsigned int nDataLen)
  107. {
  108. if(strncmp(msgname,"hcp2_gpsimu",256) == 0)
  109. {
  110. Listengpsimu(strdata,nDataLen,0,0,0);
  111. }
  112. if(strncmp(msgname,"tracemap",256) == 0)
  113. {
  114. ListenTraceMap(strdata,nDataLen,0,0,0);
  115. }
  116. if(strncmp(msgname,"lidar_obs",256) == 0)
  117. {
  118. ListenOBS(strdata,nDataLen,0,0,0);
  119. }
  120. if(strncmp(msgname,"brainstate",256) == 0)
  121. {
  122. ListenBrainState(strdata,nDataLen,0,0,0);
  123. }
  124. if(strncmp(msgname,"deciton",256) == 0)
  125. {
  126. ListenDection(strdata,nDataLen,0,0,0);
  127. }
  128. if(strncmp(msgname,"radar",256) == 0)
  129. {
  130. ListenRadar(strdata,nDataLen,0,0,0);
  131. }
  132. }
  133. #endif
  134. ADCIntelligentShow::ADCIntelligentShow(QWidget *parent) :
  135. QMainWindow(parent),
  136. ui(new Ui::ADCIntelligentShow)
  137. {
  138. gAShow = this;
  139. ui->setupUi(this);
  140. ui->pushButton->setEnabled(false);
  141. //样式 3-26
  142. qApp->setStyleSheet("QPushButton#pushButton_2\n{\nborder-image: url(:/new/pic/restart1.png);\n}"
  143. "QPushButton#pushButton_2:hover\n{border-image: url(:/new/pic/restart4.png);\n}"
  144. "QPushButton#pushButton_2:pressed\n{ border-image: url(:/new/pic/restart3.png); \n}"
  145. "QPushButton#park:pressed\n{border-image: url(:/new/pic/park_press.png);\n}"
  146. "QPushButton#pushButton_Setting\n{ border-image: url(:/new/pic/setting.png); \n}"
  147. "QPushButton#pushButton_Setting:pressed\n{ border-image: url(:/new/pic/setting2.png); \n}"
  148. "QCheckBox#checkBox::indicator\n{width: 110px;height: 110px;\n}"
  149. "QCheckBox#checkBox::indicator:unchecked\n{ border-image:url(:/new/pic/call_gray1.png);\n}"
  150. "QCheckBox#checkBox::indicator:checked\n{ border-image:url(:/new/pic/call1.png);\n}"
  151. "QCheckBox#checkBox_2::indicator\n{width: 110px;height: 110px;\n}"
  152. "QCheckBox#checkBox_2::indicator:unchecked\n{ border-image:url(:/new/pic/mulcar_gray.png);\n}"
  153. "QCheckBox#checkBox_2::indicator:checked\n{ border-image:url(:/new/pic/mulcar.png);\n}");
  154. QDesktopWidget *desktopWidget = QApplication::desktop();
  155. QRect screenRect = desktopWidget->screenGeometry();
  156. resize(screenRect.width(),screenRect.height());
  157. loadMapFromFile("map.txt");
  158. image = new QImage(900*2,900*2,QImage::Format_RGB32);
  159. painter = new QPainter(image);
  160. myview = new MyView(ui->widget_2);
  161. myview->setObjectName("graphicsView");
  162. myview->setGeometry(QRect(100,20,900,1000));
  163. myview->setCacheMode(myview->CacheBackground);
  164. scene = new QGraphicsScene;
  165. myview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  166. myview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  167. DataUI = new DataToUI;
  168. socket = new QUdpSocket;
  169. socket->bind(9999,QUdpSocket::ShareAddress);
  170. // connect(socket,SIGNAL(readyRead()),this,SLOT(onRecv()));
  171. lidarsock = new QUdpSocket;
  172. lidarsock->bind(9997);
  173. // connect(lidarsock,SIGNAL(readyRead()),this,SLOT(onlidarRecv()));
  174. mbHaveData = false;
  175. recvFlag = 0;
  176. connect(&mTimer,SIGNAL(timeout()),this,SLOT(onTimer()));
  177. // mTimer.start(500);
  178. connect(&connTimer,SIGNAL(timeout()),this,SLOT(onconnTimer()));
  179. connTimer.start(1000);
  180. for(int i = 0;i<128;i++)
  181. {
  182. DataUI->mInfo.point[i] = 0.0;
  183. }
  184. mlidarpoint.lidar_size = 0;
  185. for(int i=0;i<10000;i++)
  186. {
  187. mlidarpoint.lidar_point[i] = 0.0;
  188. }
  189. //DataUI->mInfo.lidar_size = 0;
  190. ///added by kkcai, 2019-11-28
  191. // ui->label_3->hide();
  192. // ui->label_4->hide();
  193. ///////////////////////////////////////////////////////////////////////////
  194. ///added by kkcai, 2019-12-02
  195. soundAlarm = new QSound(":/new/pic/alarm.wav");
  196. connect(this, SIGNAL(sigAlarm()), this, SLOT(slotAlarm()));
  197. #ifndef Android
  198. void * pa;
  199. pa = iv::modulecomm::RegisterRecv("hcp2_gpsimu",Listengpsimu);
  200. mpagps = pa;
  201. pa = iv::modulecomm::RegisterRecv("tracemap",ListenTraceMap);
  202. mpatracemap = pa;
  203. pa = iv::modulecomm::RegisterRecv("lidar_obs",ListenOBS);
  204. mpalidarobs = pa;
  205. pa = iv::modulecomm::RegisterRecv("brainstate",ListenBrainState);
  206. mpabrainstate = pa;
  207. pa = iv::modulecomm::RegisterRecv("deciton",ListenDection);
  208. mpadecision = pa;
  209. pa = iv::modulecomm::RegisterRecv("radar",ListenRadar);
  210. mparadar = pa;
  211. mpadst = iv::modulecomm::RegisterSend("xodrreq",1000,1);
  212. mpapad = iv::modulecomm::RegisterSend("pad",1000,1);
  213. mndefaultlane = atoi(gstrdefaultlane.data());
  214. #endif
  215. connect(this,SIGNAL(signalGPSIMU()),this,SLOT(onUpdateGPSIMU()));
  216. connect(this,SIGNAL(signalbrainstate()),this,SLOT(onUpdateBrainState()));
  217. connect(this,SIGNAL(signaldection()),this,SLOT(onUpdateDection()));
  218. mpivmapview = new ivmapview();
  219. mpivmapview->start();
  220. QTimer * timerpainter = new QTimer(this);
  221. connect(timerpainter,SIGNAL(timeout()),this,SLOT(onTimerPainter()));
  222. timerpainter->start(100);
  223. ui->pushButton_go->setStyleSheet("background: green; color: white;");
  224. ui->pushButton_prestation->setStyleSheet("background: green; color: white;");
  225. ui->pushButton_nextstation->setStyleSheet("background: green; color: white;");
  226. ui->label_station->setStyleSheet("background: transparent; color: white;font: 15pt 'Arial';");
  227. ui->label_station->setText("");
  228. if(gvectorpos.size()>0)
  229. {
  230. mnStationIndex = 0;
  231. ui->label_station->setText(gvectorpos[0].mstrstationname.data());
  232. }
  233. mpDS = new DialogSetting(this);
  234. connect(mpDS,SIGNAL(signalswith(int)),this,SLOT(onSwitchClick(int)));
  235. connect(mpDS,SIGNAL(signalMode(int)),this,SLOT(onModeClick(int)));
  236. // ui->pushButton_go->setStyleSheet("color: red");
  237. ///////////////////////////////////////////////////////////////////////
  238. ///added by kkcai, 2019-12-02
  239. // ui->checkBox->hide();
  240. // ui->checkBox_2->hide();
  241. // ui->park->hide();
  242. ///////////////////////////////////////////////////////////////////////
  243. }
  244. ADCIntelligentShow::~ADCIntelligentShow()
  245. {
  246. iv::modulecomm::Unregister(mpabrainstate);
  247. iv::modulecomm::Unregister(mpadecision);
  248. iv::modulecomm::Unregister(mpagps);
  249. iv::modulecomm::Unregister(mpalidarobs);
  250. iv::modulecomm::Unregister(mpapad);
  251. iv::modulecomm::Unregister(mparadar);
  252. iv::modulecomm::Unregister(mpatracemap);
  253. iv::modulecomm::Unregister(mpadst);
  254. // std::this_thread::sleep_for(std::chrono::milliseconds(50));
  255. delete ui;
  256. if(soundAlarm){
  257. delete soundAlarm;
  258. soundAlarm = nullptr;
  259. }
  260. }
  261. void ADCIntelligentShow::resizeEvent(QResizeEvent *event)
  262. {
  263. (void)event;
  264. QSize sizemain = ui->centralWidget->size();
  265. ui->widget_2->setGeometry(730,0,sizemain.width()-730,sizemain.height()-0);
  266. myview->setGeometry(0,150,sizemain.width()-730-0,sizemain.height()-150);
  267. #ifndef Android
  268. ui->pushButton_prestation->setGeometry(50,30,100,50);
  269. ui->label_station->setGeometry(160,30,200,50);
  270. ui->pushButton_nextstation->setGeometry(380,30,100,50);
  271. ui->pushButton_go->setGeometry(490,30,100,50);
  272. #else
  273. // ui->pushButton_prestation->setGeometry(30,30,150,100);
  274. // ui->label_station->setGeometry(190,30,260,100);
  275. // ui->pushButton_nextstation->setGeometry(460,30,150,100);
  276. // ui->pushButton_go->setGeometry(630,30,150,100);
  277. ui->pushButton_prestation->setGeometry(50,30,200,100);
  278. ui->label_station->setGeometry(260,30,400,100);
  279. ui->pushButton_nextstation->setGeometry(680,30,200,100);
  280. ui->pushButton_go->setGeometry(990,30,200,100);
  281. #endif
  282. }
  283. void ADCIntelligentShow::onTimer()
  284. {
  285. if(!mbHaveData)
  286. {
  287. ui->pushButton->setEnabled(false);
  288. }
  289. mbHaveData = false;
  290. update();
  291. }
  292. void ADCIntelligentShow::on_pushButton_clicked()
  293. {
  294. std::cout<<"click "<<std::endl;
  295. iv::hmi::hmimsg xhmi;
  296. xhmi.set_mbbochemode(false);
  297. xhmi.set_mbbusmode(false);
  298. if(mbRunning)
  299. xhmi.set_mbpause(true);
  300. else
  301. xhmi.set_mbpause(false);
  302. int nsize = xhmi.ByteSize();
  303. char * str = new char[nsize];
  304. if(xhmi.SerializeToArray(str,1000))
  305. {
  306. #ifndef Android
  307. iv::modulecomm::ModuleSendMsg(mpapad,str,nsize);
  308. #else
  309. ggt->UpdateData(str,nsize,"pad");
  310. #endif
  311. }
  312. else
  313. {
  314. std::cout<<"ADCIntelligentShow::on_pushButton_clicked serialize error."<<std::endl;
  315. }
  316. delete str;
  317. QApplication::beep();
  318. return;
  319. if(DataUI->mInfo.is_run == 0x00)
  320. {
  321. int xRun = 1;
  322. socket->writeDatagram((char *)&xRun,4,QHostAddress::Broadcast,9998);
  323. }
  324. if(DataUI->mInfo.is_run == 0x01)
  325. {
  326. int xRun = 0;
  327. socket->writeDatagram((char *)&xRun,4,QHostAddress::Broadcast,9998);
  328. }
  329. QApplication::beep();
  330. }
  331. void ADCIntelligentShow::onRecv()
  332. {
  333. while(socket->hasPendingDatagrams())
  334. {
  335. QByteArray data;
  336. data.resize(socket->pendingDatagramSize());
  337. socket->readDatagram(data.data(),data.size());
  338. recvFlag++;
  339. // packageHead packHead;
  340. qDebug("size = %d",data.size());
  341. //if(data.size() == sizeof(DataToUI))
  342. //{
  343. memcpy(DataUI,data.data(),data.size());
  344. qDebug("size:%d",DataUI->mHead.size);
  345. ////////////////////////
  346. /// 程序状态/////////////
  347. ///////////////////////
  348. qDebug("speed:%g",DataUI->mInfo.speed);
  349. ui->label->setText(QString::number((DataUI->mInfo.speed),'f',1));
  350. if(DataUI->mInfo.is_mapLoad==0x01)
  351. ui->mapimg->setStyleSheet("background-image: url(:/new/pic/green.png);");
  352. else
  353. ui->mapimg->setStyleSheet("background-image: url(:/new/pic/red.png);");
  354. if(DataUI->mInfo.is_initSuccess==0x01)
  355. ui->canimg->setStyleSheet("background-image: url(:/new/pic/green.png);");
  356. else
  357. ui->canimg->setStyleSheet("background-image: url(:/new/pic/red.png);");
  358. ui->acc->setText(QString::number(DataUI->mInfo.accelerate,'f',1));
  359. ui->swerve->setText(QString::number(DataUI->mInfo.swerve,'f',1));
  360. ui->lng->setText(QString::number(DataUI->mInfo.gps_lng,'f',6));
  361. ui->lat->setText(QString::number(DataUI->mInfo.gps_lat,'f',6));
  362. ui->radarob->setText(QString::number(DataUI->mInfo.radarobs,'f',2));
  363. ui->lidarob->setText(QString::number(DataUI->mInfo.lidarobs,'f',2));
  364. ui->allob->setText(QString::number(DataUI->mInfo.obs,'f',2));
  365. //add
  366. ui->break_1->setText(QString::number(DataUI->mInfo.brake,'f',2));
  367. if(DataUI->mInfo.lidarStatus == 0x01)
  368. ui->lidarimg->setStyleSheet("background-image: url(:/new/pic/red.png);");
  369. else
  370. ui->lidarimg->setStyleSheet("background-image: url(:/new/pic/green.png);");
  371. /*
  372. if(DataUI->mInfo.radarStatus == 0x01)
  373. ui->radarimg->setStyleSheet("background-image: url(:/new/pic/green.png);");
  374. else
  375. ui->radarimg->setStyleSheet("background-image: url(:/new/pic/red.png);");
  376. */
  377. if(DataUI->mInfo.radarStatus == 0x01)
  378. ui->radarimg->setStyleSheet("background-image: url(:/new/pic/red.png);");
  379. else
  380. ui->radarimg->setStyleSheet("background-image: url(:/new/pic/green.png);");
  381. if(DataUI->mInfo.RTKstatus == 6)
  382. {
  383. ui->local->setText(QStringLiteral("定位:")+QString::number(DataUI->mInfo.RTKstatus));
  384. ui->local->setStyleSheet("color: rgb(220, 220, 220); font: 15pt 'Arial';");
  385. ui->localimg->setStyleSheet("background-image: url(:/new/pic/green.png);");
  386. }
  387. else
  388. {
  389. ui->local->setText(QStringLiteral("定位:")+QString::number(DataUI->mInfo.RTKstatus));
  390. ui->local->setStyleSheet("color: rgb(220, 220, 220); font: 15pt 'Arial';");
  391. ui->localimg->setStyleSheet("background-image: url(:/new/pic/red.png);");
  392. }
  393. if(DataUI->mInfo.is_mapLoad==0x00||DataUI->mInfo.is_initSuccess==0x00)
  394. {
  395. ui->pushButton->setEnabled(false);
  396. ui->pushButton->setStyleSheet("border-image: url(:/new/pic/button_gray.png);");
  397. }
  398. else
  399. {
  400. ui->pushButton->setEnabled(true);
  401. ui->pushButton->setStyleSheet("border-image: url(:/new/pic/button_green.png);");
  402. if(DataUI->mInfo.is_run==0x01)
  403. {
  404. ui->runimg->setStyleSheet("background-image: url(:/new/pic/green.png);");
  405. ui->pushButton->setStyleSheet("border-image: url(:/new/pic/button_stop.png);");
  406. }
  407. else
  408. {
  409. ui->runimg->setStyleSheet("background-image: url(:/new/pic/red.png);");
  410. ui->pushButton->setStyleSheet("border-image: url(:/new/pic/button_green.png);");
  411. }
  412. }
  413. if(DataUI->mInfo.parkSatus == 0x00)
  414. {
  415. ui->park->setText(QStringLiteral("不可泊车"));
  416. ui->park->setStyleSheet("background-image: url(:/new/pic/red.png);");
  417. ui->park->setEnabled(false);
  418. ui->park->setStyleSheet("border-image: url(:/new/pic/park_gray.png)");
  419. }
  420. else if(DataUI->mInfo.parkSatus == 0x01)
  421. {
  422. ui->park->setText(QStringLiteral("可泊车"));
  423. ui->park->setStyleSheet("background-image: url(:/new/pic/green.png);");
  424. ui->park->setEnabled(true);
  425. ui->park->setStyleSheet("border-image: url(:/new/pic/park.png)");
  426. }
  427. else if(DataUI->mInfo.parkSatus == 0x02)
  428. {
  429. ui->park->setText(QStringLiteral("泊车"));
  430. ui->park->setStyleSheet("background-color: rgb(211, 211, 0); font: 15pt 'Arial';");
  431. ui->park->setEnabled(false);
  432. ui->park->setStyleSheet("border-image: url(:/new/pic/park_gray.png)");
  433. }
  434. mbHaveData = true;
  435. // if(p->mInfo.)
  436. data.clear();
  437. // }
  438. // memcpy(&packHead,data.data(),sizeof(packHead));
  439. }
  440. update();
  441. }
  442. void ADCIntelligentShow::onconnTimer()
  443. {
  444. qint64 xTime = QDateTime::currentMSecsSinceEpoch();
  445. if(recvFlag!=0)
  446. {
  447. //ui->connect->setText(QStringLiteral("已连接"));
  448. ui->connect->setStyleSheet("image: url(:/new/pic/connect.png);");
  449. if(((xTime - mnTimeGPS)>1000) &&(mnstylegps != 0))
  450. {
  451. ui->lng->setText(" ");
  452. ui->lat->setText(" ");
  453. ui->label->setText(QString::number(0));
  454. ui->localimg->setStyleSheet("background-image: url(:/new/pic/red.png);");
  455. mnstylegps = 0;
  456. }
  457. if(((xTime - mnTimeLidar)>1000) &&(mnstylelidar != 1))
  458. {
  459. ui->lidarimg->setStyleSheet("background-image: url(:/new/pic/red.png);");
  460. mnstylelidar = 1;
  461. }
  462. if(((xTime - mnTimeLidar)<1000) &&(mnstylelidar != 2))
  463. {
  464. ui->lidarimg->setStyleSheet("background-image: url(:/new/pic/green.png);");
  465. mnstylelidar = 2;
  466. }
  467. if(((xTime - mnTimeRADAR)>1000) && (mnstyleradar != 1))
  468. {
  469. ui->radarimg->setStyleSheet("background-image: url(:/new/pic/red.png);");
  470. mnstyleradar = 1;
  471. }
  472. if(((xTime - mnTimeRADAR)<1000) && (mnstyleradar != 2))
  473. {
  474. ui->radarimg->setStyleSheet("background-image: url(:/new/pic/green.png);");
  475. mnstyleradar = 2;
  476. }
  477. if((xTime- mnTimeDection)>1000)
  478. {
  479. ui->acc->setText(" ");
  480. ui->swerve->setText(" ");
  481. ui->break_1->setText(" ");
  482. if(mnstylepark != 0)
  483. {
  484. ui->park->setText(QStringLiteral("不可泊车"));
  485. ui->park->setStyleSheet("background-image: url(:/new/pic/red.png);");
  486. ui->park->setEnabled(false);
  487. ui->park->setStyleSheet("border-image: url(:/new/pic/park_gray.png)");
  488. mnstylepark = 0;
  489. }
  490. }
  491. if(navigation_data.size()>0)
  492. {
  493. ui->mapimg->setStyleSheet("background-image: url(:/new/pic/green.png);");
  494. }
  495. else
  496. {
  497. ui->mapimg->setStyleSheet("background-image: url(:/new/pic/red.png);");
  498. }
  499. }
  500. else
  501. {
  502. //ui->connect->setText(QStringLiteral("未连接"));
  503. ui->connect->setStyleSheet("image: url(:/new/pic/connect_grey.png);");
  504. ui->pushButton->setEnabled(false);
  505. ui->pushButton->setStyleSheet("border-image: url(:/new/pic/button_gray.png);");
  506. ui->label->setText(QString::number(0));
  507. ui->runimg->setStyleSheet("background-image: url(:/new/pic/blue.png);");
  508. ui->mapimg->setStyleSheet("background-image: url(:/new/pic/blue.png);");
  509. ui->canimg->setStyleSheet("background-image: url(:/new/pic/blue.png);");
  510. ui->localimg->setStyleSheet("background-image: url(:/new/pic/blue.png);");
  511. ui->acc->setText(" ");
  512. ui->swerve->setText(" ");
  513. ui->lng->setText(" ");
  514. ui->lat->setText(" ");
  515. ui->radarob->setText(" ");
  516. ui->lidarob->setText(" ");
  517. ui->allob->setText(" ");
  518. ui->lidarimg->setStyleSheet("background-image: url(:/new/pic/blue.png);");
  519. ui->radarimg->setStyleSheet("background-image: url(:/new/pic/blue.png);");
  520. ui->park->setText(QStringLiteral("不可泊车"));
  521. ui->park->setStyleSheet("background-image: url(:/new/pic/red.png);");
  522. ui->park->setEnabled(false);
  523. ui->park->setStyleSheet("border-image: url(:/new/pic/park_gray.png)");
  524. mnstylegps = 0;
  525. mnstylelidar = 0;
  526. mnstylebrain = 0;
  527. mnstyleradar = 0;
  528. mnstylepark = 0;
  529. }
  530. recvFlag = 0;
  531. }
  532. void ADCIntelligentShow::onTimerPainter()
  533. {
  534. update();
  535. }
  536. //刷新
  537. void ADCIntelligentShow::paintEvent(QPaintEvent *)
  538. {
  539. // 绘制背景图
  540. mpainter_background = new QPainter(this);
  541. mpainter_background->drawPixmap(0, 0, this->width(), this->height(), QPixmap(":/new/pic/background2.jpg"));
  542. delete mpainter_background;
  543. if(mpivmapview->IsHaveNew())
  544. {
  545. QImage image = mpivmapview->GetImage();
  546. scene->clear();
  547. scene->addPixmap(QPixmap::fromImage(image));
  548. myview->setScene(scene);
  549. myview->show();
  550. }
  551. return;
  552. }
  553. bool ADCIntelligentShow::loadMapFromFile(std::string fileName) {
  554. std::ifstream fis(fileName);//获取文件
  555. std::string line;
  556. std::vector<std::string> des;
  557. if (fis.is_open() == false)
  558. return false;
  559. try {
  560. while (getline(fis, line)) {//开始一行一行的读数据
  561. des.clear();
  562. SplitString(line,des,"\t");
  563. //boost::split(des, line, boost::is_any_of("\t"));
  564. //if (des.size() != 10)
  565. // throw "error";
  566. if(des.size() < 10)
  567. throw "error";
  568. GPS_INS *data =new GPS_INS;
  569. data->index = atoi(des[0].c_str());
  570. data->gps_lng = atof(des[1].c_str());
  571. data->gps_lat = atof(des[2].c_str());
  572. data->speed_mode = atoi(des[3].c_str());
  573. data->mode2 = atoi(des[4].c_str());
  574. data->ins_heading_angle = atof(des[5].c_str());
  575. data->runMode = atoi(des[6].c_str());
  576. data->roadMode = atoi(des[7].c_str());
  577. data->roadSum = atoi(des[8].c_str());
  578. data->roadOri = atoi(des[9].c_str());
  579. //des[10].c_str() is the width of the road, and is no use.
  580. //Modified by map. 2019-12-02
  581. // gps2xy(data->gps_lat, data->gps_lng, &data->gps_x, &data->gps_y);
  582. GaussProjCal(data->gps_lng, data->gps_lat, &data->gps_x, &data->gps_y);
  583. //data->speed = 5; //调试用 所有点速度都设为5km/h
  584. //LOG2(data->gps_x, data->gps_y);
  585. //ODS("x %.20lf y %.20lf\n", data->gps_x, data->gps_y);
  586. // iv::decition::BLH2XYZ(*data); //重新转下大地坐标
  587. // navigation_data.push_back(data);
  588. }
  589. }
  590. catch (...) {
  591. fis.close();
  592. return false;
  593. }
  594. fis.close();
  595. return true;
  596. }
  597. //高斯投影由经纬度(Unit:DD)反算大地坐标(含带号,Unit:Metres)
  598. void ADCIntelligentShow::GaussProjCal(double longitude, double latitude, double *X, double *Y)
  599. {
  600. int ProjNo = 0; int ZoneWide; ////带宽
  601. double longitude1, latitude1, longitude0, X0, Y0, xval, yval;
  602. double a, f, e2, ee, NN, T, C, A, M, iPI;
  603. iPI = 0.0174532925199433; ////3.1415926535898/180.0;
  604. ZoneWide = 6; ////6度带宽
  605. a = 6378245.0; f = 1.0 / 298.3; //54年北京坐标系参数
  606. ////a=6378140.0; f=1/298.257; //80年西安坐标系参数
  607. ProjNo = (int)(longitude / ZoneWide);
  608. longitude0 = ProjNo * ZoneWide + ZoneWide / 2;
  609. longitude0 = longitude0 * iPI;
  610. //latitude0 = 0;
  611. longitude1 = longitude * iPI; //经度转换为弧度
  612. latitude1 = latitude * iPI; //纬度转换为弧度
  613. e2 = 2 * f - f * f;
  614. ee = e2 * (1.0 - e2);
  615. NN = a / sqrt(1.0 - e2 * sin(latitude1)*sin(latitude1));
  616. T = tan(latitude1)*tan(latitude1);
  617. C = ee * cos(latitude1)*cos(latitude1);
  618. A = (longitude1 - longitude0)*cos(latitude1);
  619. M = a * ((1 - e2 / 4 - 3 * e2*e2 / 64 - 5 * e2*e2*e2 / 256)*latitude1 -
  620. (3 * e2 / 8 + 3 * e2*e2 / 32 + 45 * e2*e2*e2 / 1024)*sin(2 * latitude1)
  621. + (15 * e2*e2 / 256 + 45 * e2*e2*e2 / 1024)*sin(4 * latitude1) -
  622. (35 * e2*e2*e2 / 3072)*sin(6 * latitude1));
  623. xval = NN * (A + (1 - T + C)*A*A*A / 6 + (5 - 18 * T + T * T + 72 * C - 58 * ee)*A*A*A*A*A / 120);
  624. yval = M + NN * tan(latitude1)*(A*A / 2 + (5 - T + 9 * C + 4 * C*C)*A*A*A*A / 24
  625. + (61 - 58 * T + T * T + 600 * C - 330 * ee)*A*A*A*A*A*A / 720);
  626. X0 = 1000000L * (ProjNo + 1) + 500000L;
  627. Y0 = 0;
  628. xval = xval + X0; yval = yval + Y0;
  629. *X = xval;
  630. *Y = yval;
  631. }
  632. void ADCIntelligentShow::SplitString(const string& s, vector<string>& v, const string& c)
  633. {
  634. string::size_type pos1, pos2;
  635. pos2 = s.find(c);
  636. pos1 = 0;
  637. while(string::npos != pos2)
  638. {
  639. v.push_back(s.substr(pos1, pos2-pos1));
  640. pos1 = pos2 + c.size();
  641. pos2 = s.find(c, pos1);
  642. }
  643. if(pos1 != s.length())
  644. v.push_back(s.substr(pos1));
  645. }
  646. void ADCIntelligentShow::on_park_clicked()
  647. {
  648. int xRun = 2;
  649. socket->writeDatagram((char *)&xRun,4,QHostAddress::Broadcast,9998);
  650. QApplication::beep();
  651. }
  652. void ADCIntelligentShow::onlidarRecv()
  653. {
  654. while(lidarsock->hasPendingDatagrams())
  655. {
  656. QByteArray data;
  657. data.resize(lidarsock->pendingDatagramSize());
  658. lidarsock->readDatagram(data.data(),data.size());
  659. // packageHead packHead;
  660. qDebug("size = %d",data.size());
  661. //if(data.size() == sizeof(DataToUI))
  662. //{
  663. memcpy(&mlidarpoint,data.data(),data.size());
  664. qDebug("size:%d",DataUI->mHead.size);
  665. }
  666. }
  667. ////一键叫车
  668. //void ADCIntelligentShow::on_onekey_clicked()
  669. //{
  670. // int res = QMessageBox::warning(NULL,"警告","确认是否一键叫车",QMessageBox::Yes,QMessageBox::No);
  671. // if(res==QMessageBox::Yes)
  672. // {
  673. // int xRun = 3;
  674. // socket->writeDatagram((char *)&xRun,4,QHostAddress::Broadcast,9998);
  675. // }
  676. // else
  677. // {
  678. // int xRun = 4;
  679. // socket->writeDatagram((char *)&xRun,4,QHostAddress::Broadcast,9998);
  680. // }
  681. //}
  682. void ADCIntelligentShow::on_pushButton_2_clicked()
  683. {
  684. std::cout<<"click "<<std::endl;
  685. iv::hmi::hmimsg xhmi;
  686. xhmi.set_mbbochemode(true);
  687. xhmi.set_mbbusmode(false);
  688. if(mbRunning)
  689. xhmi.set_mbpause(false);
  690. else
  691. xhmi.set_mbpause(true);
  692. int nsize = xhmi.ByteSize();
  693. char * str = new char[nsize];
  694. if(xhmi.SerializeToArray(str,1000))
  695. {
  696. #ifndef Android
  697. iv::modulecomm::ModuleSendMsg(mpapad,str,nsize);
  698. #else
  699. ggt->UpdateData(str,nsize,"pad");
  700. #endif
  701. }
  702. else
  703. {
  704. std::cout<<"ADCIntelligentShow::on_pushButton_clicked serialize error."<<std::endl;
  705. }
  706. delete str;
  707. QApplication::beep();
  708. return;
  709. //QMessageBox::styleSheet("background-color: rgb(140, 140, 140);");
  710. int res = QMessageBox::warning(NULL,"警告","确认是否重新启动",QMessageBox::Yes,QMessageBox::No);
  711. if(res==QMessageBox::Yes)
  712. {
  713. int xRun = 9;
  714. socket->writeDatagram((char *)&xRun,4,QHostAddress::Broadcast,9998);
  715. }
  716. }
  717. void ADCIntelligentShow::slotAlarm()
  718. {
  719. if(soundAlarm->isFinished())
  720. soundAlarm->play();
  721. }
  722. void ADCIntelligentShow::UpdateGPSIMU(iv::gps::gpsimu *pgpsimu)
  723. {
  724. iv::gps::gpsimu xgpsimu;
  725. xgpsimu.CopyFrom(*pgpsimu);
  726. mMutexGPSIMU.lock();
  727. mgpsimu.CopyFrom(*pgpsimu);
  728. mMutexGPSIMU.unlock();
  729. emit signalGPSIMU();
  730. mnTimeGPS = QDateTime::currentMSecsSinceEpoch();
  731. }
  732. void ADCIntelligentShow::UpdateOBS(std::shared_ptr<std::vector<iv::ObstacleBasic> > xobs)
  733. {
  734. recvFlag = 1;
  735. mpivmapview->setobs(xobs);
  736. mnTimeLidar = QDateTime::currentMSecsSinceEpoch();
  737. }
  738. void ADCIntelligentShow::onUpdateGPSIMU()
  739. {
  740. recvFlag = 1;
  741. iv::gps::gpsimu xgpsimu;
  742. mMutexGPSIMU.lock();
  743. xgpsimu.CopyFrom(mgpsimu);
  744. mMutexGPSIMU.unlock();
  745. mpivmapview->setgps(&xgpsimu);
  746. ui->lng->setText(QString::number(xgpsimu.lon(),'f',7));
  747. ui->lat->setText(QString::number(xgpsimu.lat(),'f',7));
  748. if(xgpsimu.rtk_state() == 6)
  749. {
  750. ui->local->setText(QStringLiteral("定位:")+QString::number(xgpsimu.rtk_state()));
  751. if(mnstylegps != 1)
  752. {
  753. ui->local->setStyleSheet("color: rgb(220, 220, 220); font: 15pt 'Arial';");
  754. ui->localimg->setStyleSheet("background-image: url(:/new/pic/green.png);");
  755. mnstylegps = 1;
  756. }
  757. }
  758. else
  759. {
  760. ui->local->setText(QStringLiteral("定位:")+QString::number(xgpsimu.rtk_state()));
  761. if(mnstylegps != 2)
  762. {
  763. ui->local->setStyleSheet("color: rgb(220, 220, 220); font: 15pt 'Arial';");
  764. ui->localimg->setStyleSheet("background-image: url(:/new/pic/red.png);");
  765. mnstylegps = 2;
  766. }
  767. }
  768. ui->label->setText(QString::number((sqrt(pow(xgpsimu.ve(),2)+pow(xgpsimu.vn(),2))*3.6),'f',1));
  769. }
  770. void ADCIntelligentShow::UpdateMap(const char *mapdata, const int mapdatasize)
  771. {
  772. std::cout<<"update map "<<std::endl;
  773. int gpsunitsize = sizeof(iv::MAP_GPS_INS);
  774. int nMapSize = mapdatasize/gpsunitsize;
  775. // std::cout<<"map size is "<<nMapSize<<std::endl;
  776. if(nMapSize < 1)return;
  777. bool bUpdate = false;
  778. if(nMapSize != navigation_data.size())
  779. {
  780. bUpdate = true;
  781. }
  782. else
  783. {
  784. iv::MAP_GPS_INS * p = (iv::MAP_GPS_INS *)mapdata;
  785. if((p->gps_lat == navigation_data.at(0).gps_lat)&&(p->ins_heading_angle == navigation_data.at(0).ins_heading_angle))
  786. {
  787. // qDebug("same map");
  788. bUpdate = false;
  789. }
  790. else
  791. {
  792. bUpdate = true;
  793. }
  794. }
  795. if(bUpdate)
  796. {
  797. int i;
  798. mMutexMap.lock();
  799. navigation_data.clear();
  800. for(i=0;i<nMapSize;i++)
  801. {
  802. iv::MAP_GPS_INS x;
  803. memcpy(&x,mapdata + i*gpsunitsize,gpsunitsize);
  804. navigation_data.push_back(x);
  805. }
  806. mpivmapview->setmap(navigation_data);
  807. mMutexMap.unlock();
  808. // mpasd->SaveState("map",mapdata,mapdatasize);
  809. }
  810. else
  811. {
  812. // qDebug("not need update");
  813. }
  814. }
  815. void ADCIntelligentShow::UpdateBrainState(iv::brain::brainstate xbrainstate)
  816. {
  817. recvFlag = 1;
  818. mMutexBrain.lock();
  819. mbrainstate.CopyFrom(xbrainstate);
  820. mMutexBrain.unlock();
  821. mnTimeBrain = QDateTime::currentMSecsSinceEpoch();
  822. emit signalbrainstate();
  823. }
  824. void ADCIntelligentShow::onUpdateBrainState()
  825. {
  826. recvFlag = 1;
  827. iv::brain::brainstate xbrainstate;
  828. mMutexBrain.lock();
  829. xbrainstate.CopyFrom(mbrainstate);
  830. mMutexBrain.unlock();
  831. ui->pushButton->setEnabled(true);
  832. if(xbrainstate.mbbrainrunning())
  833. {
  834. mbRunning = true;
  835. if(mnstylebrain != 2)
  836. {
  837. ui->runimg->setStyleSheet("background-image: url(:/new/pic/green.png);");
  838. ui->pushButton->setStyleSheet("border-image: url(:/new/pic/button_stop.png);");
  839. mnstylebrain = 2;
  840. }
  841. ui->radarob->setText(QString::number(xbrainstate.mfradarobs(),'f',2));
  842. ui->lidarob->setText(QString::number(xbrainstate.mflidarobs(),'f',2));
  843. ui->allob->setText(QString::number(xbrainstate.mfobs(),'f',2));
  844. }
  845. else
  846. {
  847. mbRunning = false;
  848. if(mnstylebrain != 1)
  849. {
  850. ui->runimg->setStyleSheet("background-image: url(:/new/pic/red.png);");
  851. ui->pushButton->setStyleSheet("border-image: url(:/new/pic/button_green.png);");
  852. mnstylebrain = 1;
  853. }
  854. ui->radarob->setText(" ");
  855. ui->lidarob->setText(" ");
  856. ui->allob->setText(" ");
  857. }
  858. if(xbrainstate.mbbocheenable())
  859. {
  860. if(mnstylepark != 2)
  861. {
  862. mnstylepark = 2;
  863. ui->park->setText(QStringLiteral("可泊车"));
  864. ui->park->setStyleSheet("background-image: url(:/new/pic/green.png);");
  865. ui->park->setEnabled(true);
  866. ui->park->setStyleSheet("border-image: url(:/new/pic/park.png)");
  867. }
  868. }
  869. else
  870. {
  871. if(mnstylepark != 1)
  872. {
  873. ui->park->setText(QStringLiteral("不可泊车"));
  874. ui->park->setStyleSheet("background-image: url(:/new/pic/red.png);");
  875. ui->park->setEnabled(false);
  876. ui->park->setStyleSheet("border-image: url(:/new/pic/park_gray.png)");
  877. mnstylepark = 1;
  878. }
  879. }
  880. }
  881. void ADCIntelligentShow::UpdateDection(iv::brain::decition xdecision )
  882. {
  883. mMutexDecision.lock();
  884. mdecision.CopyFrom(xdecision);
  885. mMutexDecision.unlock();
  886. emit signaldection();
  887. mnTimeDection = QDateTime::currentMSecsSinceEpoch();
  888. }
  889. void ADCIntelligentShow::onUpdateDection()
  890. {
  891. iv::brain::decition xdecision;
  892. mMutexDecision.lock();
  893. xdecision.CopyFrom(mdecision);
  894. mMutexDecision.unlock();
  895. ui->acc->setText(QString::number(xdecision.torque(),'f',1));
  896. ui->swerve->setText(QString::number(xdecision.wheelangle(),'f',1));
  897. ui->break_1->setText(QString::number(xdecision.brake(),'f',2));
  898. }
  899. void ADCIntelligentShow::UpdateRADAR(iv::radar::radarobjectarray *pxobj)
  900. {
  901. recvFlag = 1;
  902. mMutexRadar.lock();
  903. mradarobj.CopyFrom(*pxobj);
  904. mMutexRadar.unlock();
  905. mnTimeRADAR = QDateTime::currentMSecsSinceEpoch();
  906. mpivmapview->setradar(pxobj);
  907. }
  908. void ADCIntelligentShow::on_pushButton_nextstation_clicked()
  909. {
  910. if(gvectorpos.size()<1)return;
  911. mnStationIndex++;
  912. if(mnStationIndex>=gvectorpos.size())mnStationIndex = 0;
  913. ui->label_station->setText(gvectorpos[mnStationIndex].mstrstationname.data());
  914. }
  915. void ADCIntelligentShow::on_pushButton_prestation_clicked()
  916. {
  917. if(gvectorpos.size()<1)return;
  918. mnStationIndex--;
  919. if(mnStationIndex<0)mnStationIndex = gvectorpos.size()-1;
  920. ui->label_station->setText(gvectorpos[mnStationIndex].mstrstationname.data());
  921. }
  922. void ADCIntelligentShow::on_pushButton_go_clicked()
  923. {
  924. if(gvectorpos.size()<1)return;
  925. xodrobj xo;
  926. xo.flon = gvectorpos[mnStationIndex].mflon;
  927. xo.flat = gvectorpos[mnStationIndex].mflat;
  928. xo.lane = mndefaultlane;
  929. #ifndef Android
  930. iv::modulecomm::ModuleSendMsg(mpadst,(char *)&xo,sizeof(xodrobj));
  931. #else
  932. ggt->UpdateData((char *)&xo,sizeof(xodrobj),"xodrreq");
  933. #endif
  934. }
  935. void ADCIntelligentShow::onSwitchClick(int nswitch)
  936. {
  937. qDebug("click");
  938. }
  939. void ADCIntelligentShow::onModeClick(int nMode)
  940. {
  941. }
  942. void ADCIntelligentShow::on_pushButton_Setting_clicked()
  943. {
  944. mpDS->show();
  945. }