transformation.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include "transformation.h"
  2. using namespace Eigen;
  3. using namespace std;
  4. //计算毫米波目标距离
  5. float iv::fusion::Transformation::ComputelonDistance(double x, double y)
  6. {
  7. return (sqrt(pow(x,2) + pow(y,2)));
  8. }
  9. //计算毫米波目标速度
  10. float iv::fusion::Transformation::ComputeRadarSpeed(double vx, double vy)
  11. {
  12. return (sqrt(pow(vx,2) + pow(vy,2)));
  13. }
  14. //radar to lidar
  15. Eigen::Matrix<float,3,1> iv::fusion::Transformation::RadarToLidar(Eigen::Matrix<float,3,1> radar_int_radar)
  16. {
  17. Eigen::Matrix<float,3,3> radar_to_lidar_R;
  18. radar_to_lidar_R << -0.07164891, -0.99734797, -0.01278487,
  19. 0.99733994, -0.07180872, 0.01251175,
  20. -0.01339663, -0.0118544, 0.99983999;
  21. Eigen::Matrix<float,3,1> radar_in_lidar;
  22. Eigen::Matrix<float,3,1> radar_to_lidar_T;
  23. radar_to_lidar_T << -0.35455075, -0.84757324, 0.26293475;
  24. radar_in_lidar = radar_to_lidar_R*radar_int_radar + radar_to_lidar_T;
  25. return radar_in_lidar;
  26. }
  27. //lidar to radar
  28. Eigen::Matrix<float,3,1> iv::fusion::Transformation::LidarToRadar(Eigen::Matrix<float,3,1> lidar_in_lidar)
  29. {
  30. Eigen::Matrix<float,3,3> lidar_to_radar_R;
  31. Eigen::Matrix<float,3,1> lidar_in_radar;
  32. Eigen::Matrix<float,3,1> lidar_to_radar_T;
  33. lidar_in_lidar = lidar_to_radar_R*lidar_in_lidar + lidar_to_radar_T;
  34. return lidar_in_radar;
  35. }
  36. //毫米波数据去重
  37. //将速度相近、目标距离相近、纵向坐标相近的目标状态置为false
  38. void iv::fusion::Transformation::RadarPross(iv::radar::radarobjectarray& radar_object)
  39. {
  40. for(int r = 0; r<(radar_object.obj_size()-1);r++)
  41. {
  42. if(radar_object.obj(r).bvalid() == false) continue;
  43. for (int s=(r+1); s<(radar_object.obj_size());s++)
  44. {
  45. if(radar_object.obj(s).bvalid() == false) continue;
  46. float lonDistance1 = ComputelonDistance(radar_object.obj(r).x(),radar_object.obj(r).y());
  47. float lonDistance2 = ComputelonDistance(radar_object.obj(s).x(),radar_object.obj(s).y());
  48. float RadarSpeed1 = ComputeRadarSpeed(radar_object.obj(r).vx(),radar_object.obj(r).vy());
  49. float RadarSpeeds = ComputeRadarSpeed(radar_object.obj(s).vx(), radar_object.obj(s).vy());
  50. if(
  51. (fabs(lonDistance1- lonDistance2) <= 1.00) &&
  52. (fabs(radar_object.obj(r).x() - radar_object.obj(s).x()) <=1.00)&&
  53. (fabs(RadarSpeed1-RadarSpeeds)<=1.00)
  54. )
  55. {
  56. iv::radar::radarobject & radar_objct_new = (iv::radar::radarobject&)radar_object.obj(r);
  57. radar_objct_new.set_bvalid(false);
  58. }
  59. }
  60. }
  61. }