3.1 IO涉及的设备及相关概念
3.1.1 OpenNI及类Kinect设备
OpenNI(开放式自然交互)来源于由业界领导的一个非营利性组织,创建于2010年11月,专注于提高和改善自然交互设备与应用软件的互操作能力。其官方网站于12月8日正式公开,主要成员之一是PrimeSense公司(Kinect的核心芯片正是由这家公司提供),其他成员还包括开发ROS的机器人公司Willow Garage,以及游戏公司Side-Kick等。
OpenNI是一个多语言、跨平台的框架,它定义了一套用于编写通用自然交互应用的API。OpenNI的主要目的就是形成标准的API,便于下面两个接口之间进行通信。
• 视觉和音频传感器(用来感知周围环境信息)。
• 视觉和音频感知中间件(用来对应用场景中所记录的音频和视觉数据进行分析与理解,例如能够接收一份可见的图像数据并返回从中检测到的手掌位置信息)。
OpenNI提供了一组基于传感器设备实现的API和另外一组由中间件组件实现的API,打破了传感器和中间件之间的依赖关系。这样,使用OpenNI API开发应用程序时,就不需要在各种中间件模块的上层操作上浪费时间,可以做到一次编写、随处部署。OpenNI的这种分层设计机制允许中间件开发者可以直接基于最原始的数据格式编写算法,而不管这些数据是由何种传感器设备产生,同时也让传感器生产商制造的设备能用于任何OpenNI兼容的应用程序。
OpenNI的这套标准化API使得自然交互应用开发人员可以利用由传感器输入并计算过的数据类型,很方便地跟踪处理现实生活中的场景(例如,可以是表示人体全身的数据,也可以是表示手的位置数据,或者仅仅是深度图里面的一组像素等等)。这样可以保证编写应用程序的时候,不用考虑传感器或中间件供应商相关的细节。
图3-1展示了OpenNI框架的应用概念,分为以下三层。
• 应用层:基于OpenNI实现的自然交互应用软件。
• 中间件接口层:代表OpenNI本身,提供了传感器和中间件组件之间的交互接口。
• 硬件设备层:列出了捕捉视觉和音频数据的多种硬件设备。
图3-1 OpenNI应用框架
注意:在Apple公司收购了维护OpenNI的核心公司Primesense之后,虽然业界开始质疑其可持续性,但该项目还是由相关开源组织维护和更新(http://www.OpenNI.org已经不存在了,目前改为http://OPenNI.ru/index.html),其GitHub链接为https://github.com/OpenNI。同时有相关公司为了其产品延续性,维护升级该开发包,例如http://structure.io/OPenNI。并且目前版本已经为OpenNI2,其与OpenNI不兼容,所以PCL分别做了OpenNI和OpenNI2的封装。OpenNI2设计更清晰简单,支持第三方的硬件驱动,中间件和应用程序可通过OpeNI2透明地对任何第三方硬件数据进行处理,例如使用Kinect v2时,只要安装了其驱动,就可以通过OpenNI2对Kinect v2数据进行获取等操作。PCL集成了OpenNI2接口后,也就自然支持更多的硬件了。
3.1.2 以Project Tango为代表的便携式消费级点云获取设备
手机能够获取点云数据虽然在意料当中,但并未奢求这么快,就在苹果公司收购Primesense声称2014年底推出支持点云数据获取的手机之后,Google不声不响地与Movidius联姻推出了ATAP Project Tango,这样世界上第一个消费级的能够获取点云数据的手机原型就诞生了。虽然大家都在做,但还是让Google给抢先发布了,目前Google打算发放200个原型,提供给全球的开发团队。随后,2016年底的Phab 2 Pro是联想和Google合力打造的一款手机,该手机特色就是集成了深度摄像头,块头比一般的手机大一些。感觉SDK以及对应的APP都在快速开发和发展中,可以说从交互式游戏、测量、SLAM、机器人相关的各种应用都在不断涌现。唯一的不足就是国内用户没法正常去更新Google商店里面的基于Tango的APP。读者可以幻想下,网上的照片都变成3D点云格式的时代又近了一步,大家就可以搞crowd 3D海量数据计算了,通过网上所有的3D点云照片以及地理坐标,是不是能够获取地球表面更多房屋内部的地图呢,以后还用什么Wii、Kinect、Xtion,直接把手机在电脑前面一摆,都能玩体感游戏了,应用场景应该有很多。关于Project Tango最新的消息是已经关闭了,取而代之的是ARCore,最终还是进入移动虚拟现实时代。
关于消费级点云获取设备一直在快速发展,不断有新设备产生,例如苹果iPhone X就支持对点云数据的获取。所以点云处理技术在移动端的应用将不断涌现,也需要点云数据处理技术的从业者不断学习与创新,并打造出属于自己的软件应用产品。
3.1.3 PCL目前支持的点云获取设备
OpenNI目前已成为PCL集成进来的第一个设备相关的第三方库,用来抓取OpenNI兼容设备中的点云数据。前面描述的OpenNI应用框架说明,只要底层的硬件传感器设备与OpenNI兼容,都可以作为点云数据输入源,图3-2就展示了目前流行的OpenNI兼容设备。
其中,Primesense Reference Design、Microsoft Kinect和ASUS Xtion PRO这三种摄像头设备均进行了 OpenNI 兼容性测试。选择其中任何一个设备进行点云数据采集,都可以经 OpenNI 处理后转化为标准数据供上层应用使用。除了OpenNI接口的集成,PCL在不断地对各种设备驱动接口进行集成,方便使用者对设备在PCL中的调用,流行的设备有Velodyne HDL系列、IDS-Imag-ing Ensenso等,预计马上会支持Intel的RealSense 3 D深度摄像头等。
图3-2 OpenNI兼容设备
3.1.4 PCL中IO模块及类
PCL中IO库提供了点云文件输入输出相关的操作类,并封装了OpenNI兼容的设备源数据获取接口,还封装了Velodyne HDL系列、IDS-Imaging Ensenso等设备的获取接口,可直接从众多感知设备获取点云图像等数据。IO模块利用50多个类与30多个函数实现了对点云的获取、读入、存储等相关操作,其依赖于pcl_common和pcl_octree模块,以及OpenNI和相关设备驱动等外部开发包。具体的函数和类说明请参阅点云库PCL学习手册以及网址http://docs.pointclouds.org/trunk/group_io.html。