main.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include <QCoreApplication>
  2. #include <QDateTime>
  3. #include <pcl/point_cloud.h>
  4. #include <pcl/point_types.h>
  5. #include "modulecomm.h"
  6. #include "ivversion.h"
  7. void * gpvtdpoint, * g_lidar_pc;
  8. static int g_seq = 0;
  9. void Listenvtdpoint(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * pdt,const char * strmemname)
  10. {
  11. if(nSize < 12)return;
  12. QDateTime dt = QDateTime::currentDateTime();
  13. pcl::PointCloud<pcl::PointXYZI>::Ptr point_cloud(
  14. new pcl::PointCloud<pcl::PointXYZI>());
  15. point_cloud->header.frame_id = "velodyne";
  16. point_cloud->height = 1;
  17. point_cloud->header.stamp = dt.currentMSecsSinceEpoch();
  18. point_cloud->width = 0;
  19. point_cloud->header.seq =g_seq;
  20. g_seq++;
  21. int nmark[3];
  22. memcpy(nmark,strdata,3*sizeof(int));
  23. if(nSize<(nmark[0]*nmark[1]*nmark[2]))
  24. {
  25. std::cout<<"Listenvtdpoint point is small."<<std::endl;
  26. return;
  27. }
  28. int npointcount = nmark[0]*nmark[1];
  29. int i;
  30. float * pvalue = (float *)(strdata + 3*sizeof(int));
  31. for(i=0;i<npointcount;i++)
  32. {
  33. float x,y,z;
  34. x = pvalue[3*i+0];
  35. y = pvalue[3*i+1];
  36. z = pvalue[3*i+2];
  37. pcl::PointXYZI point;
  38. point.x = x;
  39. point.y = y;
  40. point.z = z;
  41. point.intensity = 30;
  42. point_cloud->points.push_back(point);
  43. ++point_cloud->width;
  44. }
  45. char * strOut = new char[4+sizeof(point_cloud->header.frame_id.size()) + 4+8+point_cloud->width * sizeof(pcl::PointXYZI)];
  46. int * pHeadSize = (int *)strOut;
  47. *pHeadSize = 4 + point_cloud->header.frame_id.size()+4+8;
  48. memcpy(strOut+4,point_cloud->header.frame_id.c_str(),point_cloud->header.frame_id.size());
  49. pcl::uint32_t * pu32 = (pcl::uint32_t *)(strOut+4+sizeof(point_cloud->header.frame_id.size()));
  50. *pu32 = point_cloud->header.seq;
  51. memcpy(strOut+4+sizeof(point_cloud->header.frame_id.size()) + 4,&point_cloud->header.stamp,8);
  52. pcl::PointXYZI * p;
  53. p = (pcl::PointXYZI *)(strOut +4+sizeof(point_cloud->header.frame_id.size()) + 4+8 );
  54. memcpy(p,point_cloud->points.data(),point_cloud->width * sizeof(pcl::PointXYZI));
  55. iv::modulecomm::ModuleSendMsg(g_lidar_pc,strOut,4+sizeof(point_cloud->header.frame_id.size()) + 4+8+point_cloud->width * sizeof(pcl::PointXYZI));
  56. delete strOut;
  57. }
  58. int main(int argc, char *argv[])
  59. {
  60. showversion("driver_lidar_vtdpoint");
  61. QCoreApplication a(argc, argv);
  62. gpvtdpoint = iv::modulecomm::RegisterRecv("vtdpoint",Listenvtdpoint);
  63. g_lidar_pc = iv::modulecomm::RegisterSend("lidar_pc",20000000,1);
  64. return a.exec();
  65. }