mainwindow.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include <QImage>
  5. #include <QGraphicsScene>
  6. #include <QTimer>
  7. #include <QPainter>
  8. #include <QMutex>
  9. #include <memory>
  10. #include <QDateTime>
  11. #include <pcl/conversions.h>
  12. #include <pcl/point_cloud.h>
  13. #include <pcl/point_types.h>
  14. #include <pcl/io/pcd_io.h>
  15. #include <pcl/point_types.h>
  16. #include <QTimer>
  17. #include <QTime>
  18. #include <QGroupBox>
  19. #include <QGridLayout>
  20. #include <QLabel>
  21. #include <QLineEdit>
  22. #include <QPushButton>
  23. #include <QFileDialog>
  24. #include <QCheckBox>
  25. #include <QComboBox>
  26. #include "myview.h"
  27. #include "modulecomm.h"
  28. #define LIDAR_MAX 6
  29. namespace Ui {
  30. class MainWindow;
  31. }
  32. namespace iv {
  33. const int grx = 200, gry = 550, centerx = 100, centery = 50;
  34. const double gridwide = 0.2;
  35. struct ObstacleBasic
  36. {
  37. bool valid;
  38. float nomal_x;
  39. float nomal_y;
  40. float nomal_z;
  41. float speed_relative;
  42. float speed_x;
  43. float speed_y;
  44. float speed_z;
  45. float high;
  46. float low;
  47. int esr_ID;
  48. };
  49. // typedef boost::shared_ptr<std::vector<iv::ObstacleBasic>> ObsLiDAR;
  50. // typedef boost::shared_ptr<std::vector<iv::ObstacleBasic>> ObsRadar;
  51. // typedef boost::shared_ptr<std::vector<iv::ObstacleBasic>> ObsCamera;
  52. // typedef boost::shared_ptr<std::vector<iv::ObstacleBasic>>ObsRadarPointer;
  53. struct Obs_grid
  54. {
  55. double high;
  56. double low;
  57. double obshight;
  58. int pointcount;
  59. int ob;//障碍物属性,0地面 ,1路沿,2障碍物
  60. };
  61. typedef Obs_grid LidarGrid;
  62. typedef Obs_grid* LidarGridPtr;
  63. }
  64. class BBox
  65. {
  66. public:
  67. double mcenter_x;
  68. double mcenter_y;
  69. double mydis;
  70. double mxdis;
  71. double xmin;
  72. double ymin;
  73. double xmax;
  74. double ymax;
  75. std::shared_ptr<std::vector<iv::ObstacleBasic>> mPC;
  76. BBox(std::shared_ptr<std::vector<iv::ObstacleBasic>> ptrclu)
  77. {
  78. int nSize = ptrclu->size();
  79. if(nSize < 1)return;
  80. iv::ObstacleBasic x = ptrclu->at(0);
  81. xmin = x.nomal_x;
  82. xmax = x.nomal_x;
  83. ymin = x.nomal_y;
  84. ymax = ymin;
  85. int i;
  86. for(i=1;i<nSize;i++)
  87. {
  88. x = ptrclu->at(i);
  89. if(x.nomal_x<xmin)xmin = x.nomal_x;
  90. if(x.nomal_x>xmax)xmax = x.nomal_x;
  91. if(x.nomal_y<ymin)ymin = x.nomal_y;
  92. if(x.nomal_y>ymax)ymax = x.nomal_y;
  93. }
  94. mydis = ymax - ymin+0.2;
  95. mxdis = xmax - xmin+0.2;
  96. mcenter_x = xmin + mxdis/2.0;
  97. mcenter_y = ymin + mydis/2.0;
  98. mPC.swap(ptrclu);
  99. // std::cout<<"box x="<<mcenter_x<<" y="<<mcenter_y<<" xdis ="<<mxdis<<" ydis = "<<mydis<<" point count ="<<nSize<<std::endl;
  100. }
  101. };
  102. class LidarData
  103. {
  104. public:
  105. double mxmin = -300;
  106. double mxmax = 300;
  107. double mymin = -300;
  108. double mymax = 300;
  109. double mzmin = -300;
  110. double mzmax = 300;
  111. double mxoff = 0;
  112. double myoff = 0;
  113. double mzoff = 0;
  114. double mxyawoff = 0;
  115. double myyawoff = 0;
  116. double mzyawoff = 0;
  117. pcl::PointCloud<pcl::PointXYZI>::Ptr mpoint_cloud;
  118. std::string mstrname;
  119. bool mbView = true;
  120. double mcomp[6];//xmin ymin zmin xmax ymax zmax
  121. };
  122. class MainWindow : public QMainWindow
  123. {
  124. Q_OBJECT
  125. public:
  126. explicit MainWindow(QWidget *parent = 0);
  127. ~MainWindow();
  128. QTime mTime;
  129. void UpdatePointCloud(pcl::PointCloud<pcl::PointXYZI>::Ptr pc);
  130. private slots:
  131. void on_checkBox_clicked();
  132. void onTimer();
  133. virtual void paintEvent(QPaintEvent *);
  134. private:
  135. Ui::MainWindow *ui;
  136. bool mbOpen;
  137. void * mpa;
  138. unsigned char mbmpLD[400*600*4];
  139. QImage *image;
  140. QPainter *painter;
  141. MyView *myview;
  142. QTimer *timer;
  143. QGraphicsScene *scene;
  144. QTimer mTimer;
  145. QMutex mMutex;
  146. QMutex mMutexPer;
  147. pcl::PointCloud<pcl::PointXYZI>::Ptr mpoint_cloud;
  148. public:
  149. void resizeEvent(QResizeEvent *event);
  150. private:
  151. void AdjustWPos(QSize sizemain);
  152. void CreateStatusView(QGridLayout * gl);
  153. void CreateView();
  154. QGroupBox * mgplidar;
  155. QLineEdit * mpLE_lidarcount;
  156. int mnlidarcount;
  157. QPushButton * mpPB_saveonepcd;
  158. QPushButton * mpPB_savepcd;
  159. QLineEdit * mpLE_onepcd;
  160. QLineEdit * mpLE_savepcd;
  161. int mnonepcd;
  162. bool mbSaveOne;
  163. bool mbSave;
  164. int mnsave;
  165. QLineEdit * mpLE_savefolder;
  166. public slots:
  167. void onSaveOnePCD();
  168. void onSavePCD();
  169. void onSelectFolder();
  170. void onLoadPCD();
  171. void onViewChange(int index);
  172. void onLidarSetChagne(int index);
  173. void onCompLidarChagne(int index);
  174. void onViewSetClick();
  175. void onLidarCheck();
  176. void onNDTCalc();
  177. private:
  178. QString mstrSavePath;
  179. QScrollArea * mgSA;
  180. void CreateSelection(QGroupBox * pGP);
  181. void CreateViewsetting(QGroupBox * pGP);
  182. void CreateCompview(QGroupBox * pGP);
  183. void CreateNDTView(QGroupBox * pGP);
  184. QCheckBox * mpCheckLidar[LIDAR_MAX];
  185. QComboBox mpCBView;
  186. std::vector<LidarData> mLidarData;
  187. void UpdateView();
  188. void AddLidarData(LidarData & ld);
  189. QLineEdit * mpLEViewSet[12];
  190. QLineEdit * mpLEComp[6];
  191. QLineEdit * mpLENDT[6];
  192. double moffValue[12];
  193. double mfNDT[12];
  194. QComboBox * mpCBLidar;
  195. QComboBox * mpCBCompLidar;
  196. int mnViewType = 2;
  197. inline bool PointShow(pcl::PointXYZI point,LidarData ld);
  198. inline void OffPoint(pcl::PointXYZI & point,LidarData & ld);
  199. };
  200. #endif // MAINWINDOW_H