问题标签 [point-cloud-library]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
681 浏览

c++ - Boost.thread 代码在 Ubuntu 和 Windows 中呈现不同的行为

我有一个简单的程序来测试我是否可以从不同的线程可视化点云并继续在主线程中工作,直到在终端中输入“q” 。

在 Ubuntu 10.04 中,代码有效,让我可以将云可视化为在每次迭代中添加新点。但是,在 Windows 7 中这不起作用(我正在使用QtCreator编译它)。显示云并在每一轮中计算新点,但这永远不会退出。输入'q'时,循环停止,但可视化线程继续运行。停止执行的唯一方法是显式使用CTRL+C

更多的东西:

  • 如果我不取消注释Visualize函数中的!viewer->wasStopped()循环之前的addPointCloud行,则永远不会显示点云。没关系,稍后在循环中我明确添加它。它必须在循环之前完成(现在该行已被注释以证明该行为)。
  • 我还尝试使用boost::mutex而不是 *tbb::queuing_mutex*,但同样,程序不会退出。

你知道为什么线程永远不会加入吗?此外,总是欢迎对我的线程使用提出建设性批评,我希望不断改进。

这是代码:

谢谢你的时间!。

编辑:由于 Windows 无法识别可执行格式(?),我无法使用调试器,所以我qDebug()在函数上添加了一些行(另外,现在我使用的是 volatile 中间 var,stoppedVisualize,而不是直接调用):viewer->wasStopped()

好吧,在 spinOnce 之前只显示一次,迭代=0Before a new loop行从不打印

另一方面,主线程不断计算这些点并将其打印到标准输出,直到输入“q”

可视化线程似乎在viewer->spinOnce(100)调用中冻结。如果spinOnce(100)我不使用其他可视化方法,则spin()没有任何变化。

也许我的代码中存在数据竞赛,但我一直在检查它,我自己找不到竞赛。

注意:根据 PCL 库文档,spinOnce(int time) 调用交互器并更新屏幕一次,而spin() 调用交互器并运行内部循环

编辑#2:今天我尝试在 Ubuntu 中再次执行代码,结果导致 PCL 可视化器出现死锁。我添加了一些volatile关键字和一个新的循环检查。现在看来一切顺利(至少它按预期工作,没有错误的转弯......)。这是新版本:

全局变量:

可视化方法:

主功能:

但是,我不喜欢新的控制循环 var hack。有没有更好的方法来知道何时退出?现在,我无法意识到任何其他方式......

0 投票
1 回答
1294 浏览

opencv - 使用 PCL 和 OpenCV 连接 Kinect for Windows

我的主要目标是使用 Cmake 建立一个基本的 c++ 解决方案,在那里我可以使用 PCL 和 OpenCV 的功能来处理从 Kinect for Windows 传感器获取的数据。

我使用: - Kinect for Windows 和 SDK,因为 OpenNI 与新版本的 Kinect 不兼容。https://github.com/avin2/SensorKinect将是解决方案之一,但它不适用于 Windows 8(根据 README 文件)

然后我想,我将使用 Cmake 生成 VS 解决方案,我已经尝试使用这个 CMakeLists.txt:

但我收到以下编译错误:

编码:

将来,使用 Cmake 生成 C++ 解决方案会更容易,而不是在项目属性下设置适当的目录。创建与 Kinect for Windows 一起使用的 Visual Studio C++ 解决方案的首选方法是什么?

0 投票
1 回答
5793 浏览

c++ - 将 PCL XYZ 云转换为 XY(3D 到 2D)

环境

我有一个 PCL 类型的点云PointXYZ。我需要将它转换为 type 的网格图vector<vector<bool> >map[x][y]如果至少有一个点它应该是真的。地图应该代表点云的某个区域(比如 20x30 个单元格,覆盖 x=[-10,10],y=[-15,15] 的点云维度。

我现在拥有的

目前我有两种方法:

  1. 扫描所有点并将地图中的相应单元格设置为true。
  2. 将点投影到平面,创建一个 Kd-Tree,然后为地图中的每个单元格查询树中最近的点,如果它落入单元格中,则将单元格设置为 true。

现在,第一种方法适用于小点云:O(n),其中 n 是点云中的点数。

我认为第二种方法适用于大型云。最终查询只有 O(m),其中 m 是地图的大小。但是,构建 Kd 树和将云投影到平面上都应该是 O(n) 左右。

我认为第二种方法总是更糟,但我会进行测试看看。

问题

有没有更好的方法?也许有八叉树或体素网格(二维)?方法一的问题是,我不必要地查看感兴趣区域之外的点。

在我看来,我不可能是第一个遇到这个问题的人,对吧?

0 投票
1 回答
2350 浏览

visual-c++ - 带有 PCL 库的 VS2012 中的链接错误 LNK2020 和 2001 Visual C++

我正在尝试使用 Open Point Cloud 库来对齐点云。我使用 Visual Studio 2012 并创建了一个新的 Visual c++ 项目。存储PCL的所有.libs的目录添加到项目的属性中(属性-> c/c++->通用->附加包含目录)我要使用的库列在属性->链接器->输入 -> 附加依赖项

我写到现在的代码很简单:

我只是按照本教程: http: //pointclouds.org/documentation/tutorials/reading_pcd.php

我包含了正确的库和文件……尤其是“pcd_io.h”,为什么会出现链接器错误?我要加载的 pcd 文件与 cpp 文件位于同一文件夹中。我是否以错误的方式处理库?

Link-Errors Fehler 28 错误 LNK2020: Nicht aufgel÷stes Token (0A000C90) "void __cdecl pcl::console::print(enum pcl::console::VERBOSITY_LEVEL,char const *,...)" (?print@控制台@pcl@@$$FYAXW4VERBOSITY_LEVEL@12@PBDZZ)。D:\Documents\\Code\PCL_cpp\pcl_cpp\pcl_cpp\pcl_registration.obj pcl_cpp

Fehler 29 错误 LNK2020:Nicht aufgel÷stes 令牌 (0A000CBD) “void __cdecl pcl::console::print(enum pcl::console::VERBOSITY_LEVEL,char const *,...)” (?print@console@pcl@ @$$FYAXW4VERBOSITY_LEVEL@12@PBDZZ)。D:\Documents\代码\PCL_cpp\pcl_cpp\pcl_cpp\pcl_registration.obj pcl_cpp

Fehler 30 错误 LNK2001: Nicht aufgel÷stes externes Symbol ""public: virtual int __thiscall pcl::PCDReader::readHeader(class std::basic_string,class std::allocator > const &,struct sensor_msgs::PointCloud2 &,class Eigen ::Matrix &,class Eigen::Quaternion &,int &,int &,unsigned int &,int)" (?readHeader@PCDReader@pcl@@UAEHABV?$basic_string@DU?$char_traits@D@std@@V ?$allocator@D@2@@std@@AAUPointCloud2@sensor_msgs@@AAV?$Matrix@M$03$00$0A@$03$00@Eigen@@AAV?$Quaternion@M$0A@@8@AAH4AAIH@Z) ”。D:\Documents\代码\PCL_cpp\pcl_cpp\pcl_cpp\pcl_registration.obj pcl_cpp

Fehler 31 错误 LNK2001: Nicht aufgel÷stes externes Symbol ""public: virtual int __thiscall pcl::PCDReader::read(class std::basic_string,class std::allocator > const &,struct sensor_msgs::PointCloud2 &,class Eigen ::Matrix &,class Eigen::Quaternion &,int &,int)" (?read@PCDReader@pcl@@UAEHABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2 @@std@@AAUPointCloud2@sensor_msgs@@AAV?$Matrix@M$03$00$0A@$03$00@Eigen@@AAV?$Quaternion@M$0A@@8@AAHH@Z)"。D:\Documents\代码\PCL_cpp\pcl_cpp\pcl_cpp\pcl_registration.obj pcl_cpp

Fehler 32 错误 LNK2001: Nicht aufgel÷stes externes Symbol ""void __cdecl pcl::console::print(enum pcl::console::VERBOSITY_LEVEL,char const *,...)" (?print@console@pcl@@ $$FYAXW4VERBOSITY_LEVEL@12@PBDZZ)"。D:\Documents\Code\PCL_cpp\pcl_cpp\pcl_cpp\pcl_registration.obj pcl_cpp

错误是德语“Nicht aufgelöstes”的意思是未解决根据您关于正确安装的评论...我不舒尔,所以我再次下载并安装了它。它是 64 位“Windows MSVC 2010(64 位)”的完整安装程序,安装后我得到相同的结果。

0 投票
1 回答
1994 浏览

callback - 将 VTK 回调与 Qt 插槽连接

我正在尝试将VTK回调连接到Qt插槽,因此当回调发生时将触发该插槽。

我正在使用 aQVTKWidget来渲染已添加到 aPCLVisualizer中的点云(来自点云库,PCL)。

让我们展示一些代码:

点云.h

点云.cpp

这很好用,一旦云渲染开始,将打印PointCloud - loadCallback started,当渲染结束并显示云时,将打印消息PointCloud - loadCallback end

现在,除了打印结束消息之外,我还想触发一个Qt插槽。我正在尝试为此使用vtkEventQtSlotConnect该类,因为这似乎是将回调连接到插槽的正确选择:

PointCloud.h 中的新功能

PointCloud.cpp 中的新功能

在调用 Visualizer->addPointCloud 之前添加到 PointCloud::load()

通过这些添加,回调中的消息被打印,但test()插槽内的消息永远不会显示。

知道我做错了什么吗?

编辑

VTK我见过的回调示例中,avtkRendeWindowInteractor用于管理回调。但是,如果我向其中添加回调观察者,则不如直接将它们添加到渲染窗口准确。

0 投票
1 回答
1345 浏览

callback - 回调函数出错

我正在尝试使用点云库 API 将键盘回调函数注册到 3D 查看器。

我这样做:

但我收到以下错误消息:

我试图理解错误信息。我明白什么voidvoid *意思,但这是什么意思void(*)(...)void(RailExtraction< pcl::PointXYZI >::*>(...)

0 投票
2 回答
16610 浏览

visual-c++ - Cmake 无法为 Visual Studios 10 amd64 配置项目

我正在尝试让 CMAKE 为 x64 架构的 msvc 10 express edition 创建一个项目。我同时安装了 MSVC 2010 Express 和 Windows SDK 7.1。

如果我开始 CMake 通常我可以创建一个 32 位项目,但是它无法创建一个 64 位项目。我还尝试从 Windows SDK 命令提示符(cl cmd 映射到 x64 版本)中启动 CMAKE,但是它仍然失败并出现以下问题。

0 投票
1 回答
1276 浏览

c++ - 超类对子类对象的引用

我试图用我自己的版本覆盖一个类,然后创建一个对该类的超类引用,但我得到一个编译错误。这是我的代码结构

文件:RailExtractionInteractorStyle.h(这是我继承超类 PCLVisualizerInteractor 的子类)

文件:RailExtractionInteractor.cpp:

文件:CloudPointPicker.hpp(使用 RailExtractionInteractorStyle 类的任意类)

CloudPointPicker 构造函数中的语句给了我以下错误:

我究竟做错了什么?

0 投票
1 回答
241 浏览

c++ - 使用继承来重定向多个并行层次结构 C++

这是我最好的问题摘要:

当多个单独的类从多个单独的基类中继承每个类时,如何使用继承机制编写一个函数,该函数将来自多个这些基类的对象作为参数?

但最好通过例子来解释。

我有一个在其 API 中提供以下类的库:

这些类用于向使用应用程序隐藏模板的复杂性。实现涉及模板:

问题是我需要一个类似的功能:

继承机制在这里似乎对我没有多大帮助,因为如果函数在内部AImpl,它就无法自动选择正确Type2BImpl(没有动态转换列表)。

到目前为止,我最好的解决方案是将其中一个类模板化两次:

但是这种方法似乎并没有扩展到组合AB几个任意模板化实例化可能有用的情况(这需要一个动态转换,它只在确定参数insta实际上是一个AImpl<Type2>- 或上述列表的情况下才有效演员表)。

在不增加Aand用户的复杂性的情况下B,是否可以做我在这里尝试做的事情,还是有更惯用的方法?

谢谢大家。

编辑

鉴于 Bart van Ingen Schenau 的回答,这可能无关紧要,但为了回应 Nawaz 和 Andy Prowl 的询问,我制定了以下示例文件。它需要 PCL 库,但它是工作代码(尽管我试图实现的一个缩减示例)。

感谢大家的意见。

该类Features类似于A上面和Keypoint上面B。我也将 PCL 标签添加到问题中。

0 投票
1 回答
2671 浏览

c++ - PCL:如何绘制方向线

我已经建立了一个点云和一个对象,并估计了姿势,并希望从指向姿势方向(俯仰、偏航、滚动)的中心点 (xyz) 向可视化添加一条方向线。

但是,我在网上找不到任何这样的例子,而且我对 pcl 库很陌生。

我已经看过绘图法线示例但是,这是不同的。

任何帮助表示赞赏。

谢谢