eyes.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #include <perception_sf/eyes.h>
  2. #include <time.h>
  3. iv::perception::Eyes::Eyes() {
  4. mgpsindex = 0;
  5. mgpsreadindex = 0;
  6. }
  7. iv::perception::Eyes::~Eyes() {
  8. delete sensor_gps;
  9. // delete sensor_camera;
  10. // delete sensor_radar;
  11. delete sensor_lidar;
  12. }
  13. void iv::perception::Eyes::inialize() {
  14. sensor_lidar = new iv::perception::LiDARSensor();
  15. sensor_radar = new iv::perception::RadarSensor();
  16. sensor_camera = new iv::perception::CameraSensor();
  17. sensor_gps = new iv::perception::GPSSensor();
  18. sensor_lidar->registerCallBack<iv::perception::LiDARSensor::sig_cb_lidar_sensor_obstacle_grid>(boost::bind(&iv::perception::Eyes::cb_lidar_grid, this, _1));
  19. //sensor_radar->registerCallBack<iv::perception::RadarSensor::sig_cb_radar_sensor_obstacle>(boost::bind(&iv::perception::Eyes::cb_radar, this, _1));
  20. //sensor_camera->registerCallBack<iv::perception::CameraSensor::sig_cb_camera_sensor_obstacle>(boost::bind(&iv::perception::Eyes::cb_camera, this, _1));
  21. sensor_gps->registerCallBack<iv::perception::GPSSensor::sig_cb_gps_sensor_data>(boost::bind(&iv::perception::Eyes::cb_gps, this, _1));
  22. sensor_lidar->start();
  23. sensor_radar->start();
  24. sensor_camera->start();
  25. sensor_gps->start();
  26. obs_lidar_gridptr_ = NULL;
  27. obs_camera_ = NULL;
  28. }
  29. void iv::perception::Eyes::cb_lidar_grid(iv::LidarGridPtr obs) {
  30. mutex_.lock();
  31. if (obs_lidar_gridptr_ != NULL)
  32. {
  33. free(obs_lidar_gridptr_);
  34. }
  35. obs_lidar_gridptr_ = obs;
  36. obs = NULL;
  37. mutex_.unlock();
  38. }
  39. void iv::perception::Eyes::cb_radar(iv::ObsRadar obs) {
  40. boost::mutex::scoped_lock(mutex_);
  41. obs_radar_ = obs;
  42. }
  43. void iv::perception::Eyes::cb_camera(iv::CameraInfoPtr obs) {
  44. mutex_.lock();
  45. //boost::mutex::scoped_lock(mutex_);
  46. if (obs_camera_ != NULL)
  47. {
  48. free(obs_camera_);
  49. }
  50. obs_camera_ = obs;
  51. obs = NULL;
  52. mutex_.unlock();
  53. }
  54. void iv::perception::Eyes::cb_gps(iv::GPSData gps_data) {
  55. if((gps_data->gps_lat<0.01)||(gps_data->gps_lat>90))return;
  56. boost::mutex::scoped_lock(mutex_);
  57. // gps_ins_data_ = gps_data;
  58. if(gps_data == NULL)return;
  59. iv::GPSData data(new iv::GPS_INS);
  60. if(data == NULL)return;
  61. *data = *gps_data;
  62. gps_ins_data_ = data;
  63. mgpsindex++;
  64. }
  65. bool iv::perception::Eyes::isAllSensorRunning() {
  66. return true;
  67. bool bx;
  68. //bx = sensor_lidar->isRunning() && sensor_radar->isRunning() && sensor_camera->isRunning() && sensor_gps->isRunning();
  69. bx = sensor_gps->isRunning();
  70. // ODS("Get Running time = %d", GetTickCount() - ticks);
  71. return bx;
  72. }
  73. void iv::perception::Eyes::stopAllSensor() {
  74. sensor_lidar->stop();
  75. sensor_radar->stop();
  76. sensor_camera->stop();
  77. sensor_gps->stop();
  78. }
  79. void iv::perception::Eyes::getSensorObstacle(iv::ObsRadar& brain_obs_radar, iv::CameraInfoPtr& brain_obs_camera, iv::GPSData& brain_gps_data, iv::LidarGridPtr& brain_obs_lidar_gridptr) {
  80. //brain_obs_camera = NULL;
  81. brain_gps_data = NULL;
  82. brain_obs_radar = NULL;
  83. while (true) {
  84. if (mutex_.try_lock()) {
  85. // ServiceLidar.copylidarobsto(brain_obs_lidar_gridptr);
  86. if(obs_lidar_gridptr_ != NULL)
  87. {
  88. brain_obs_lidar_gridptr = (Obs_grid *)malloc(sizeof(Obs_grid[iv::grx][iv::gry]));
  89. memcpy(brain_obs_lidar_gridptr,obs_lidar_gridptr_,sizeof(Obs_grid[iv::grx][iv::gry]));
  90. // brain_obs_lidar_gridptr = obs_lidar_gridptr_;
  91. free(obs_lidar_gridptr_);
  92. obs_lidar_gridptr_ = NULL;
  93. }
  94. obs_lidar_gridptr_ = NULL;
  95. // obs_radar_.swap(brain_obs_radar);
  96. brain_obs_radar = NULL;
  97. //obs_camera_.swap(brain_obs_camera);
  98. brain_obs_camera = NULL;
  99. if(mgpsindex != mgpsreadindex)
  100. // if(gps_ins_data_ != NULL)
  101. {
  102. iv::GPSData data(new iv::GPS_INS);
  103. *data = *gps_ins_data_;
  104. brain_gps_data = data;
  105. mgpsreadindex = mgpsindex;
  106. }
  107. // brain_gps_data = gps_ins_data_;
  108. // gps_ins_data_ = NULL;
  109. obs_camera_ = NULL;
  110. mutex_.unlock();
  111. break;
  112. }
  113. }
  114. }