zoukankan      html  css  js  c++  java
  • pcl-qt使用QVTKWidget 与PCLVisualizer 显示雷达点云

    #ifndef PCLVIEWER_H
    #define PCLVIEWER_H
    #include "defines.h"
    #include <iostream>
    #include "radarserviceprovider.h"
    #include "radarserviceprovider32.h"
    #include "radarserviceproviderbase.h"
    // Qt
    #include <QWidget>
    #include <QObject>
    #include <QTimer>
    
    // Point Cloud Library
    //#include "pcl/visualization/pcl_visualizer.h"
    #include "pcl/pcl_visualizer.h"
    #include <vtkRenderWindow.h>
    #include<QMutex>
    #include<QDialog>
    #include "QVTKWidget.h"
    class vtkRenderer;
    class vtkRenderWindowInteractor;
    class vtkImageViewer2;
    #define MAX_READ_LENGTH  5000
    namespace Ui
    {
      class PCLViewer;
    };
    
    class PCLViewer : public QVTKWidget
    {
      Q_OBJECT
    
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
    
      explicit PCLViewer (QWidget *parent = 0,int width =200,int height =200);
      ~PCLViewer ();
    
    
    protected:
      boost::shared_ptr<pcl::visualization::PCLVisualizer> 
    m_viewerOrg;
      PointCloudT::Ptr m_cloudOrg;
    private slots:
    
       void combineRadarData();
    
    
    private:
    
       int  m_height;
       int  m_width;
    
    
      PointCloudT m_pOrgData;
      PointCloudT m_ptestData;
      bool m_frontArrivedFlag;   //ǰ�״����ݵ�����ֵ
      bool m_backArrivedFlag;     // ���״����ݵ�����־
    
    
    
    
      int m_cubeSize;
      QStringList m_idList;
      QStringList m_idSituationList;
      pcl::visualization::Camera m_cam;
    
      bool m_viewFollow = true;
      QTimer *m_timer;
      QMutex m_lidarBackMutex;
      QMutex m_lidarfrontMutex;
      QMutex m_situationTargetsMutex;
      QMutex m_lidarTargetsMutex;
    
    };
    
    #endif // PCLVIEWER_H

    项目是两个雷达数据一起显示的。

    #include "pclviewer.h"
    #include <vtkOutputWindow.h>
    #include <vtkPolyDataAlgorithm.h>
    #include "service.h"
    #include <QFile>
    #include<QFileDevice>
    #include<QXmlStreamReader>
    #include"config.h"
    #include "src/datacache.h"
    #include<QMessageBox>
    #include "service.h"
    #include<QMutexLocker>
    #include"math.h"
    #include "vtkRenderer.h"
    #include "vtkRenderWindowInteractor.h"
    #include "vtkConeSource.h"
    
    #include <vtkImageViewer2.h>
    #include <vtkPNGReader.h>
    
    #define MAX_POINT_NUM 1
    PCLViewer::PCLViewer (QWidget *parent, int width, int height) :
        QVTKWidget(parent),m_frontArrivedFlag(false),m_backArrivedFlag(false),
        m_width(width),m_height(height)
    {
      qDebug()<<"height"<<width<<":"<<height;
      this->setFixedSize(width,height);
      m_cubeSize =0;
    
    
      vtkOutputWindow::SetGlobalWarningDisplay(0);
      m_cloudOrg.reset(new PointCloudT);
      m_cloudOrg->points.resize(MAX_POINT_NUM);
      m_viewerOrg.reset (new pcl::visualization::PCLVisualizer ("viewer", false));
      this->SetRenderWindow (m_viewerOrg->getRenderWindow ());
      m_viewerOrg->setupInteractor (this->GetInteractor (), this->GetRenderWindow ());
    
      m_viewerOrg->resetCamera();
    
      m_viewerOrg->addPointCloud (m_cloudOrg, "cloud");
    
      m_viewerOrg->setCameraPosition(0, 0, 72, 0, 1, 0, 0);
    
      std::vector<pcl::visualization::Camera> cam;
      m_viewerOrg->getCameras(cam);
      m_cam =cam[0];
    
    }
    
    
    
    
    void PCLViewer::combineRadarData()
    {
          if(m_viewFollow)
          {
             float offsetx  = 视觉x坐标 ;
             float offsety = 视觉y坐标;
    
             m_cam.pos[0] = offsetx;
             m_cam.pos[1]= offsety;
             m_cam.pos[2]=72;
             m_cam.focal[0] = offsetx;
             m_cam.focal[1]= offsety;
             m_cam.focal[2]=0;
             m_cam.view[0]=0;
             m_cam.view[1]=1;
             m_cam.view[2]=0;
             m_viewerOrg->setCameraParameters(m_cam);
         }
    
         if(m_threadList.count()>0) // m_threadList接收线程列表
         {
             PointCloudT::Ptr data =m_threadList.at(0)->readData();
             PointCloudT combine = *data;
             for(int i =1;i<m_threadList.count();i++ )
             {
                 PointCloudT::Ptr backData = m_threadList.at(i)->readData() ;
                 combine += *backData;
             }
             PointCloudT::Ptr pCombine = combine.makeShared();
             m_viewerOrg->updatePointCloud(pCombine, "cloud");
             this->update();
         }
    
         for(auto p: m_threadList)
         {
             p->setDataUsed();
         }
    
    }
    

      

  • 相关阅读:
    SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束
    数据查询基础
    用SQL语句操作数据库
    2.样式表的分类
    1.CSS中的定位机制
    MySQL子查询subquery
    MySQL限制查询结果返回的数量limit
    MySQL对结果进行排序order by
    MySQL 查询结果分组 group by
    MySQL where 表达式
  • 原文地址:https://www.cnblogs.com/kabe/p/10387146.html
Copyright © 2011-2022 走看看