vlp16_driver_test.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /*
  2. * @Description: vlp16驱动测试
  3. * @Author: yct
  4. * @Date: 2021-07-26 14:11:26
  5. * @LastEditTime: 2021-07-28 10:14:20
  6. * @LastEditors: yct
  7. */
  8. #include <iostream>
  9. #include <fstream>
  10. #include "../velodyne_lidar/velodyne_driver/input.h"
  11. #include "../velodyne_lidar/velodyne_driver/rawdata.h"
  12. bool velo_driver_test()
  13. {
  14. velodyne_driver::InputSocket sock;
  15. if (!sock.init("", 2368))
  16. {
  17. std::cout << "sock init failed" << std::endl;
  18. return false;
  19. }
  20. velodyne_rawdata::RawData data;
  21. data.setup("VLP16", "/home/youchen/extra_space/chutian/measure/puai_wj_2021/setting/VLP16db.yaml", 1.2, 0.1, 0, 360);
  22. int count = 0;
  23. unsigned char pkt[1206];
  24. std::vector<Lidar_point> t_point;
  25. while (count++ < 50000)
  26. {
  27. int ret = sock.getPacket(pkt);
  28. if (ret != 0)
  29. std::cout << "get pack: " << ret << std::endl;
  30. else
  31. {
  32. // t_point.clear();
  33. // memset(&pkt[1205], 0, 1);
  34. // printf("%s\n", pkt);
  35. data.unpack(pkt, t_point);
  36. std::cout << "point size: " << t_point.size() << std::endl;
  37. if(t_point.size() > 30000)
  38. {
  39. std::ofstream out("/home/youchen/extra_space/chutian/measure/puai_wj_2021/build/point.txt");
  40. if(out.is_open())
  41. {
  42. for (size_t i = 0; i < t_point.size(); i++)
  43. {
  44. char buf[255] = {0};
  45. sprintf(buf, "%.3f %.3f %.3f %.6f\n", t_point[i].x, t_point[i].y, t_point[i].z, t_point[i].timestamp);
  46. out << buf;
  47. }
  48. out.close();
  49. return true;
  50. }
  51. else
  52. {
  53. std::cout << "cannot open file to write cloud." << std::endl;
  54. }
  55. }
  56. }
  57. usleep(500);
  58. }
  59. sock.uninit();
  60. return true;
  61. }
  62. // 初始化velodyne设备并获取点云
  63. #include "../velodyne_lidar/velodyne_driver/velodyne_lidar_device.h"
  64. void device_test()
  65. {
  66. velodyne::velodyneLidarParams params;
  67. params.set_ip("");
  68. params.set_port(2368);
  69. params.set_model("VLP16");
  70. params.set_calibrationfile("/home/youchen/extra_space/chutian/measure/puai_wj_2021/setting/VLP16db.yaml");
  71. Velodyne_lidar_device t_device;
  72. t_device.init(params);
  73. usleep(1000 * 1000);
  74. std::mutex p_mutex;
  75. pcl::PointCloud<pcl::PointXYZ>::Ptr p_cloud(new pcl::PointCloud<pcl::PointXYZ>);
  76. Error_manager ec = t_device.get_new_cloud_and_wait(&p_mutex, p_cloud, std::chrono::steady_clock::now(), 6000);
  77. if (ec == SUCCESS)
  78. {
  79. std::ofstream out("/home/youchen/extra_space/chutian/measure/puai_wj_2021/build/device_point.txt");
  80. if (out.is_open())
  81. {
  82. for (size_t i = 0; i < p_cloud->size(); i++)
  83. {
  84. char buf[255] = {0};
  85. sprintf(buf, "%.3f %.3f %.3f\n", p_cloud->points[i].x, p_cloud->points[i].y, p_cloud->points[i].z);
  86. out << buf;
  87. }
  88. std::cout << "cloud written" << std::endl;
  89. out.close();
  90. }
  91. else
  92. {
  93. std::cout << "cannot open file to write cloud." << std::endl;
  94. }
  95. }else{
  96. std::cout << "get cloud failed" << std::endl;
  97. }
  98. }
  99. int main()
  100. {
  101. // velo_driver_test();
  102. device_test();
  103. return 0;
  104. }