main.cpp 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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.hpp"
  16. #include "transformation.h"
  17. #include "mobileye.pb.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. iv::radar::radarobjectarray radarobjvec;
  26. iv::lidar::objectarray lidar_obj;
  27. iv::mobileye::mobileye mobileye_info;
  28. iv::mobileye::obs obs_info;
  29. iv::mobileye::lane lane_info;
  30. iv::mobileye::tsr tsr_info;
  31. QTime gTime;
  32. using namespace std;
  33. int gntemp = 0;
  34. iv::fusion::fusionobjectarray li_ra_fusion;
  35. void datafusion(iv::lidar::objectarray& lidar_obj,iv::radar::radarobjectarray& radarobjvec, iv::fusion::fusionobjectarray& li_ra_fusion);
  36. TrackerSettings settings;
  37. CTracker tracker(settings);
  38. bool m_isTrackerInitialized = false;
  39. void Listenesrfront(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  40. {
  41. iv::radar::radarobjectarray radarobj;
  42. if(nSize<1)return;
  43. if(false == radarobj.ParseFromArray(strdata,nSize))
  44. {
  45. std::cout<<" Listenesrfront fail."<<std::endl;
  46. return;
  47. }
  48. else{
  49. //std::<<"srfront byte size: "<<radarobjvec.ByteSize()<<std::endl;
  50. }
  51. // std::cout<<"radar is ok : "<<radarobj.obj_size()<<std::endl;
  52. gMutex.lock();
  53. // for(int i=0;i<radarobj.obj_size();i++)
  54. // {
  55. // if(abs(radarobj.obj(i).x())<2 && abs(radarobj.obj(i).vy()) >10)
  56. // {
  57. // std::cout<<"x y vx vy "<<radarobj.obj(i).x()<<" "
  58. // <<radarobj.obj(i).y()<<" "
  59. // <<radarobj.obj(i).vx()<<" "
  60. // <<radarobj.obj(i).vy()<<" "<<std::endl;
  61. // }
  62. // }
  63. radarobjvec.CopyFrom(radarobj);
  64. gMutex.unlock();
  65. }
  66. void Listenlidarcnndetect(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  67. {
  68. iv::lidar::objectarray lidarobj;
  69. if(nSize<1)return;
  70. if(false == lidarobj.ParseFromArray(strdata,nSize))
  71. {
  72. std::cout<<"PecerptionShow Listenesrfront fail."<<std::endl;
  73. return;
  74. }
  75. // std::cout<<" lidar is ok "<<lidarobj.obj_size()<<std::endl;
  76. gMutex.lock();
  77. // std::cout<<" obj size "<<lidarobj.obj_size()<<std::endl;
  78. datafusion(lidarobj,radarobjvec,li_ra_fusion);
  79. gMutex.unlock();
  80. }
  81. void Listenmobileye(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  82. {
  83. iv::mobileye::mobileye mobileye;
  84. if(nSize<1)return;
  85. if(false == mobileye.ParseFromArray(strdata,nSize))
  86. {
  87. std::cout<<"PecerptionShow Listenesrfront fail."<<std::endl;
  88. return;
  89. }
  90. // std::cout<< " obj size "<<mobileye.xobj_size()<<std::endl;
  91. // for (int m_index = 0; m_index< mobileye.xobj_size(); m_index++)
  92. // {
  93. // std::cout<<" p_x p_y v_x v_y "<<mobileye.xobj(m_index).pos_y()<< " "<<mobileye.xobj(m_index).pos_x()
  94. // <<" "<<mobileye.xobj(m_index).obs_rel_vel_x() * tan(mobileye.xobj(m_index).obsang())
  95. // <<" "<<mobileye.xobj(m_index).obs_rel_vel_x()<<" \n"
  96. // << mobileye.xobj(m_index).obsang()<<std::endl;
  97. // }
  98. gMutex.lock();
  99. mobileye_info.CopyFrom(mobileye);
  100. gMutex.unlock();
  101. }
  102. int ccccc =0;
  103. void datafusion(iv::lidar::objectarray& lidar_obj,iv::radar::radarobjectarray& radarobjvec, iv::fusion::fusionobjectarray& li_ra_fusion)
  104. {
  105. // gMutex.lock();
  106. // Transformation::RadarPross(radarobjvec);
  107. RLfusion(lidar_obj,radarobjvec,li_ra_fusion);
  108. // li_ra_fusion.Clear();
  109. // std::cout<<" RLFusion begin "<<std::endl;
  110. AddMobileye(li_ra_fusion,mobileye_info);
  111. // std::cout<<" RLFusion end "<<std::endl;
  112. mobileye_info.clear_xobj();
  113. // std::cout<< " fusion size "<<li_ra_fusion.obj_size()<<std::endl;
  114. // for(int i=0;i<li_ra_fusion.obj_size();i++)
  115. // {
  116. // if(abs(li_ra_fusion.obj(i).vel_relative().y())>10 )
  117. // {
  118. // std::cout<<"x y vx vy w "<<li_ra_fusion.-obj(i).centroid().x()<<" "
  119. // <<li_ra_fusion.obj(i).centroid().y()<<" "
  120. // <<li_ra_fusion.obj(i).vel_relative().x()<<" "
  121. // <<li_ra_fusion.obj(i).vel_relative().y()<<" "
  122. // <<li_ra_fusion.obj(i).dimensions().x()<<std::endl;
  123. // }
  124. // }
  125. // int nsize =0;
  126. // for(int nradar = 0; nradar<radarobjvec.obj_size(); nradar++)
  127. // {
  128. // if(radarobjvec.obj(nradar).bvalid() == false) continue;
  129. // if(sqrt(abs(radarobjvec.obj(nradar).x()))< 4 && radarobjvec.obj(nradar).y()< 20 ) nsize = nsize +1;
  130. // }
  131. // std::cout<<" fusion_obj_size radar_obj_size : "<<li_ra_fusion.obj_size()<<" "<<nsize<<std::endl;
  132. // gMutex.lock();
  133. // std::cout<<" track begin"<<std::endl;
  134. //--------------------------------------------- init tracker -------------------------------------------------
  135. if (!m_isTrackerInitialized)
  136. {
  137. m_isTrackerInitialized = InitTracker(tracker);
  138. if (!m_isTrackerInitialized)
  139. {
  140. std::cerr << "Tracker initialize error!!!" << std::endl;
  141. }
  142. }
  143. iv::fusion::fusionobjectarray trackedobjvec = Tracking(li_ra_fusion, tracker);
  144. // std::<<"track end"<<std::endl;
  145. //-------------------------------------------- end tracking --------------------------------------------------
  146. // gMutex.unlock();
  147. iv::fusion::fusionobjectarray out_fusion = trackedobjvec;
  148. ObsToNormal(out_fusion);
  149. string out;
  150. if(out_fusion.obj_size() == 0)
  151. {
  152. // std::cout<<" fake obj"<<std::endl;
  153. iv::fusion::fusionobject fake_obj;
  154. iv::fusion::fusionobject *fake_obj_;
  155. iv::fusion::PointXYZ fake_cen;
  156. iv::fusion::PointXYZ *fake_cen_;
  157. fake_cen.set_x(10000);
  158. fake_cen.set_y(10000);
  159. fake_cen.set_z(10000);
  160. fake_cen_ = fake_obj.mutable_centroid();
  161. fake_cen_ ->CopyFrom(fake_cen);
  162. fake_obj_ = out_fusion.add_obj();
  163. fake_obj_->CopyFrom(fake_obj);
  164. out = out_fusion.SerializeAsString();
  165. }else
  166. {
  167. out = out_fusion.SerializeAsString();
  168. // for (int k = 0; k<trackedobjvec.obj_size();k++){
  169. // std::cout<<" size x y vy : "<<trackedobjvec.obj_size()<<" "
  170. // <<trackedobjvec.obj(k).centroid().x()<< " "<<trackedobjvec.obj(k).centroid().y()<<" "
  171. // <<trackedobjvec.obj(k).vel_relative().y()<<" "<<trackedobjvec.obj(k).nomal_centroid_size() <<std::endl;
  172. // }
  173. }
  174. iv::modulecomm::ModuleSendMsg(gfu,out.data(),out.length());
  175. // gMutex.unlock();
  176. }
  177. int main(int argc, char *argv[])
  178. {
  179. QCoreApplication a(argc, argv);
  180. tracker.setSettings(settings);
  181. void *gpa;
  182. gpa = iv::modulecomm::RegisterRecv("radar",Listenesrfront);
  183. gpa = iv::modulecomm::RegisterRecv("lidar_pointpillar",Listenlidarcnndetect);
  184. gpa = iv::modulecomm::RegisterRecv("mobileye",Listenmobileye);
  185. return a.exec();
  186. }