我在PCLVisualizer类的官方PCL文档中关注本教程:
http://pointclouds.org/documentation/tutorials/pcl_visualizer.php
我在键盘获取方面遇到了麻烦:当我选择渲染窗口,显示pointcloud,并尝试按“r”或“q”时,没有任何反应,当我尝试向左按下鼠标时按钮,显示以下文本:
Left mouse button released at position (413, 475)
并引发以下错误(在运行时):
Assertion failed: (px != 0), function operator->, file /usr/local/include/boost/smart_ptr/shared_ptr.hpp, line 687.
Abort trap: 6
我看到当你没有在变量声明中初始化boost::shared_ptr
时会发生这种错误。但是在文档中列出的代码中,变量定义得很好,所以我认为问题涉及shared_ptr.hpp
库,或者它不是?
我在互联网上搜索了一个解决方案,但我没有找到任何可以解决问题的方法。
是否有人能够通过在OS X上运行它来获取pointcloud渲染窗口中的击键?
如果问题不明确,请告诉我。 非常感谢任何帮助或信息!
答案 0 :(得分:1)
您没有显示任何代码,因此很难说出您的程序出了什么问题。
这是一个工作示例,在Ubuntu 14.04上使用PCL最新中继(VTK中继)进行测试:
#include <iostream>
#include <pcl/visualization/pcl_visualizer.h>
void keyboardEventOccurred(const pcl::visualization::KeyboardEvent &event, void* viewer_void)
{
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer = *static_cast<boost::shared_ptr<pcl::visualization::PCLVisualizer> *>(viewer_void);
if (event.getKeySym() == "r" && event.keyDown())
std::cout << "'r' was pressed" << std::endl;
if (event.getKeySym() == "h" && event.keyDown())
std::cout << "'h' was pressed" << std::endl;
}
void mouseEventOccurred(const pcl::visualization::MouseEvent &event, void* viewer_void)
{
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer = *static_cast<boost::shared_ptr<pcl::visualization::PCLVisualizer> *>(viewer_void);
if (event.getButton() == pcl::visualization::MouseEvent::LeftButton &&
event.getType() == pcl::visualization::MouseEvent::MouseButtonRelease)
std::cout << "Left mouse button released at position (" << event.getX() << ", " << event.getY() << ")" << std::endl;
}
int main()
{
pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer);
viewer->addCoordinateSystem();
viewer->registerKeyboardCallback(keyboardEventOccurred, (void*)&viewer);
viewer->registerMouseCallback(mouseEventOccurred, (void*)&viewer);
viewer->spin();
}
请注意,PCL可视化工具已经为某些操作使用了一些击键(按h
获取更多详细信息),但它也不会阻止您使用它们。