main.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #include <QCoreApplication>
  2. #include <QDateTime>
  3. #include <iostream>
  4. #include "modulecomm.h"
  5. #include "radarobjectarray.pb.h"
  6. #include "objectarray.pb.h"
  7. #include "fusionobjectarray.pb.h"
  8. #include "fusionobject.pb.h"
  9. #include <QThread>
  10. #include <QString>
  11. #include <QMutex>
  12. #include "eigen3/Eigen/Dense"
  13. //#include "data_manager.h"
  14. #include "fusion.hpp"
  15. #include "Tracking.h"
  16. #include "perceptionoutput.h"
  17. #include "transformation.h"
  18. using namespace iv;
  19. using namespace fusion;
  20. void *gfu = iv::modulecomm::RegisterSend("li_ra_fusion",10000000,1);
  21. static QMutex gMutex;
  22. typedef iv::radar::radarobjectarray RadarDataType;
  23. typedef iv::lidar::objectarray LidarDataType;
  24. typedef std::chrono::system_clock::time_point TimeType;
  25. typedef std::vector<iv::Perception::PerceptionOutput> LidarObject;
  26. iv::radar::radarobjectarray radarobjvec;
  27. LidarObject lidar_obj;
  28. QTime gTime;
  29. using namespace std;
  30. int gntemp = 0;
  31. iv::fusion::fusionobjectarray li_ra_fusion;
  32. void datafusion();
  33. TrackerSettings settings;
  34. CTracker tracker(settings);
  35. bool m_isTrackerInitialized = false;
  36. //iv::DataManager data_manager;
  37. void Listenesrfront(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  38. {
  39. // std::cout<<"radar is ok"<<std::endl;
  40. iv::radar::radarobjectarray radarobj;
  41. if(nSize<1)return;
  42. if(false == radarobj.ParseFromArray(strdata,nSize))
  43. {
  44. std::cout<<" Listenesrfront fail."<<std::endl;
  45. return;
  46. }
  47. else{
  48. //std::cout<<"srfront byte size: "<<radarobjvec.ByteSize()<<std::endl;
  49. }
  50. gMutex.lock();
  51. radarobjvec.CopyFrom(radarobj);
  52. gMutex.unlock();
  53. }
  54. void ListenPer(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  55. {
  56. // qDebug("size is %d",nSize);
  57. std::shared_ptr<std::vector<iv::Perception::PerceptionOutput>> lidar_per(new std::vector<iv::Perception::PerceptionOutput>);
  58. iv::Perception::PerceptionOutput * pdata = (iv::Perception::PerceptionOutput *)strdata;
  59. int nCount = nSize/sizeof(iv::Perception::PerceptionOutput);
  60. int i;
  61. for(i=0;i<nCount;i++)
  62. {
  63. iv::Perception::PerceptionOutput temp;
  64. memcpy(&temp,pdata,sizeof(iv::Perception::PerceptionOutput));
  65. lidar_per->push_back(temp);
  66. pdata++;
  67. }
  68. gMutex.lock();
  69. lidar_obj.swap(*lidar_per);
  70. // std::cout<<"lidar objs :"<<lidar_obj.size()<<std::endl;
  71. datafusion();
  72. gMutex.unlock();
  73. }
  74. int ccccc =0;
  75. void datafusion()
  76. {
  77. // gMutex.lock();
  78. // Transformation::RadarPross(radarobjvec);
  79. RLfusion(lidar_obj,radarobjvec,li_ra_fusion);
  80. // std::cout<<li_ra_fusion.obj_size()<<std::endl;
  81. // gMutex.lock();
  82. // std::cout<<" track begin"<<std::endl;
  83. //--------------------------------------------- init tracker -------------------------------------------------
  84. if (!m_isTrackerInitialized)
  85. {
  86. m_isTrackerInitialized = InitTracker(tracker);
  87. if (!m_isTrackerInitialized)
  88. {
  89. std::cerr << "Tracker initialize error!!!" << std::endl;
  90. }
  91. }
  92. Tracking(li_ra_fusion, tracker);
  93. // std::cout<<"track end"<<std::endl;
  94. //-------------------------------------------- end tracking ---------------------------------------------------
  95. // gMutex.unlock();
  96. string out;
  97. if(li_ra_fusion.obj_size() == 0)
  98. {
  99. iv::fusion::fusionobject fake_obj;
  100. iv::fusion::fusionobject *fake_obj_;
  101. iv::fusion::PointXYZ fake_cen;
  102. iv::fusion::PointXYZ *fake_cen_;
  103. fake_cen.set_x(10000);
  104. fake_cen.set_y(10000);
  105. fake_cen.set_z(10000);
  106. fake_cen_ = fake_obj.mutable_centroid();
  107. fake_cen_ ->CopyFrom(fake_cen);
  108. fake_obj_ = li_ra_fusion.add_obj();
  109. fake_obj_->CopyFrom(fake_obj);
  110. out = li_ra_fusion.SerializeAsString();
  111. }else
  112. {
  113. out = li_ra_fusion.SerializeAsString();
  114. }
  115. iv::modulecomm::ModuleSendMsg(gfu,out.data(),out.length());
  116. // gMutex.unlock();
  117. }
  118. int main(int argc, char *argv[])
  119. {
  120. QCoreApplication a(argc, argv);
  121. tracker.setSettings(settings);
  122. void *gpa;
  123. gpa = iv::modulecomm::RegisterRecv("radar",Listenesrfront);
  124. // gpa = iv::modulecomm::RegisterRecv("lidar_track",Listenlidarcnndetect);
  125. gpa = iv::modulecomm::RegisterRecv("lidar_per",ListenPer);
  126. return a.exec();
  127. }