pcl-qt使用QVTKWidget 与PCLVisualizer 显示雷达点云
阅读原文时间:2023年07月15日阅读:1

#ifndef PCLVIEWER_H
#define PCLVIEWER_H
#include "defines.h"
#include
#include "radarserviceprovider.h"
#include "radarserviceprovider32.h"
#include "radarserviceproviderbase.h"
// Qt
#include
#include
#include

// Point Cloud Library
//#include "pcl/visualization/pcl_visualizer.h"
#include "pcl/pcl_visualizer.h"
#include
#include
#include
#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 = ,int width =,int height =);
~PCLViewer ();

protected:
boost::shared_ptr
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
#include
#include "service.h"
#include
#include
#include
#include"config.h"
#include "src/datacache.h"
#include
#include "service.h"
#include
#include"math.h"
#include "vtkRenderer.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkConeSource.h"

#include
#include

#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()<<"width:height"<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 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();  
 }

}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章