sensor_lidar.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #include <perception_sf/sensor_lidar.h>
  2. namespace iv {
  3. namespace perception {
  4. LiDARSensor * gipl;
  5. }
  6. }
  7. iv::perception::LiDARSensor::LiDARSensor() {
  8. std::shared_ptr<std::vector<iv::ObstacleBasic>> lidar_obs(new std::vector<iv::ObstacleBasic>);
  9. mobs = lidar_obs;
  10. mbRun = false;
  11. gipl = this;
  12. signal_lidar_obstacle_grid = createSignal<sig_cb_lidar_sensor_obstacle_grid>();
  13. // signal_fusion_obstacle_grid = createSignal<sig_cb_fusion_sensor_obstacle_grid>();
  14. JiGuangLeiDa = boost::shared_ptr<std::vector<iv::ObstacleBasic>>(new std::vector<iv::ObstacleBasic>);
  15. }
  16. iv::perception::LiDARSensor::~LiDARSensor() {
  17. }
  18. void ListenPer(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  19. {
  20. // qDebug("size is %d",nSize);
  21. std::shared_ptr<std::vector<iv::Perception::PerceptionOutput>> lidar_per(new std::vector<iv::Perception::PerceptionOutput>);
  22. iv::Perception::PerceptionOutput * pdata = (iv::Perception::PerceptionOutput *)strdata;
  23. int nCount = nSize/sizeof(iv::Perception::PerceptionOutput);
  24. int i;
  25. for(i=0;i<nCount;i++)
  26. {
  27. iv::Perception::PerceptionOutput temp;
  28. memcpy(&temp,pdata,sizeof(iv::Perception::PerceptionOutput));
  29. lidar_per->push_back(temp);
  30. pdata++;
  31. }
  32. iv::perception::gipl->UpdatePer(lidar_per);
  33. // gw->UpdateOBS(lidar_obs);
  34. }
  35. void ListenFusion(const char *strdata, const unsigned int nSize, const unsigned int index, const QDateTime *dt, const char *strmemname)
  36. {
  37. std::shared_ptr<iv::fusion::fusionobjectarray> xfusion (new iv::fusion::fusionobjectarray);
  38. if(nSize<1)return;
  39. if(false == xfusion->ParseFromArray(strdata,nSize))
  40. {
  41. std::cout<<" Listenesrfront fail."<<std::endl;
  42. return;
  43. }
  44. else{
  45. //std::cout<<"srfront byte size: "<<radarobjvec.ByteSize()<<std::endl;
  46. }
  47. // for(int i=0;i<xfusion->obj_size();i++)
  48. // {
  49. // std::cout<<"x y vx vy w "<<xfusion->obj(i).centroid().x()<<" "
  50. // <<xfusion->obj(i).centroid().y()<<" "
  51. // <<xfusion->obj(i).vel_relative().x()<<" "
  52. // <<xfusion->obj(i).vel_relative().y()<<" "
  53. // <<xfusion->obj(i).dimensions().x()<<std::endl;
  54. // }
  55. iv::perception::gipl->updataFusion(xfusion);
  56. }
  57. void ListenOBS(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  58. {
  59. // qDebug("size is %d",nSize);
  60. std::shared_ptr<std::vector<iv::ObstacleBasic>> lidar_obs(new std::vector<iv::ObstacleBasic>);
  61. iv::ObstacleBasic * pdata = (iv::ObstacleBasic *)strdata;
  62. int nCount = nSize/sizeof(iv::ObstacleBasic);
  63. int i;
  64. for(i=0;i<nCount;i++)
  65. {
  66. iv::ObstacleBasic temp;
  67. memcpy(&temp,pdata,sizeof(iv::ObstacleBasic));
  68. lidar_obs->push_back(temp);
  69. pdata++;
  70. }
  71. iv::perception::gipl->UpdateOBS(lidar_obs);
  72. // gw->UpdateOBS(lidar_obs);
  73. }
  74. void iv::perception::LiDARSensor::start() {
  75. // iv::modulecomm::RegisterRecv("lidar_obs",ListenOBS);
  76. // mpa = new adcmemshare("lidar_obs",20000000,3);
  77. // mpa->listenmsg(ListenOBS);
  78. // iv::modulecomm::RegisterRecv("lidar_per",ListenPer);
  79. // mpb = new adcmemshare("lidar_per",20000000,3);
  80. // mpb->listenmsg(ListenPer);
  81. // txs
  82. // iv::modulecomm::RegisterRecv("li_ra_fusion",ListenFusion);
  83. //txs
  84. mbRun = true;
  85. return;
  86. // thread_sensor_run_ = new boost::thread(boost::bind(&iv::perception::LiDARSensor::processSensor, this));
  87. // thread_sensor_run_collect = new boost::thread(boost::bind(&iv::perception::LiDARSensor::lidarcollect, this));
  88. // std::cout << "LiDAR thread Run" << std::endl;
  89. }
  90. void iv::perception::LiDARSensor::stop() {
  91. delete mpa;
  92. mbRun = false;
  93. return;
  94. thread_sensor_run_->interrupt();
  95. thread_sensor_run_->join();
  96. thread_sensor_run_collect->interrupt();
  97. thread_sensor_run_collect->join();
  98. std::cout << "LiDAR thread Stop" << std::endl;
  99. }
  100. bool iv::perception::LiDARSensor::isRunning() const {
  101. return mbRun;
  102. return (thread_sensor_run_ != NULL && !thread_sensor_run_->timed_join(boost::posix_time::milliseconds(10)) && thread_sensor_run_collect != NULL && !thread_sensor_run_collect->timed_join(boost::posix_time::milliseconds(10)));
  103. }