欢迎点云相关产学研的学者和团体加入我们。
利用光盘提供的CMakeLists.txt文件,在cmake中建立工程文件,并生成相应的可执行文件。运行可执行文件后,运行结果如图1所示,结束数据获取用control+C系统组合键,笔者测试是用华硕的设备进行的,在调试程序时需要注意设备打开后可以看到设备的摄像头发射红色散斑,有时程序退出但未关闭设备,设备摄像头仍然有红色散斑,用这一个点可以判断设备是否正常关闭。
图1 基准测试程序运行结果
问:Device could not be initialized or no devices found,具体错误如下:
[OpenNIGrabber] No devices connected. terminate called after throwing an instance of ‘pcl::PCLIOException’ what(): pcl::OpenNIGrabber::OpenNIGrabber(conststd::string&) in openni_grabber.cpp @ 69: Device could not be initialized or no devices found. [1] 8709 abort openni_viewer
答:这八成是XnSensorServer的问题。你安装PrimeSense工具包了吗?是否有老的XnSensorServer进程在运行?尝试结束该进程。或者直接卸载所有与设备相关的驱动,去PCL官方下载对应的设备包,重新安装。
问:The network connection has been closed!具体错误如下:
terminate called after throwing an instance of ‘pcl::PCLIOException’ what(): No matching device found. openni_wrapper::OpenNIDevice::OpenNIDevice(xn::Context&, constxn::NodeInfo&, constxn::NodeInfo&, constxn::NodeInfo&, constxn::NodeInfo&) @ /home/andreas/pcl/pcl/trunk/io/src/openni_camera/openni_device.cpp @ 96 : creating depth generator failed. Reason: The network connection has been closed!
答:这个错误可能在包含gspca_kinect内核模块的较新的Linux内核上发生,该模块占用了kinect的usb接口,并且阻止OpenNI占用,你既可以移除该内核模块(rmmodgspca_kinect),也可以把它列入黑名单(通过执行命令echo “blacklist gspca_kinect” >/etc/modprobe.d/blacklist-psengine.conf as root),PCL提供的OpenNI Ubuntu程序包已经包含了这项修正,但是你在其他系统中可能需要它。
Grabber接口功能很强大,很通用,它使得在你自己的代码中连接OpenNI兼容设备十分的容易。PCL正在编写FileGrabber,它以相同的接口来得到应用,例如能够从一个目录加载所有的点云文件并以某一比率提供给它们回调函数,唯一需要改变的是Grabber对象的配置(pcl::Grabber *g = new ...;)。随着各大厂商对类kinect设备的追逐,基于OpenNI的应用将无法估量,当前PCL正在开发开源的人体追踪和识别模块,相信结合android等linux开源平台将来市场也非常广阔,最重要的是PCL还在不断添加不同类型的3D点云获取设备的支持。
敬请关注PCL(Point Cloud Learning)中国更多的点云库PCL(Point Cloud Library)相关官方教程。
参考文献:
1.朱德海、郭浩、苏伟.点云库PCL学习教程(ISBN 978-7-5124-0954-5)北京航空航天出版社 2012-10