4.1(I/O涉及的设备及相关概念)
4.1.1 OpenNI开源框架
OpenNI是一个多语言、跨平台的框架,它定义了一套用于编写通用自然交互应用的API,主要目的就是形成标准的API,便于下面两个接口之间进行通信:
(1)视觉和音频传感器(用来感知周围环境信息)
(2)视觉和音频感知中间件(用来对应用场景中所记录的音频和视觉数据进行分析和理解,例如能够接受一份可见的图像数据并返回从中检测到的手掌位置信息。)
兼容设备:Primesense Reference Design、Microsoft Kinect和Asus XtionPro
通过这些设备可以获取点云数据的采集。
4.2 PCL中I/O模块及类的介绍
4.2.1 I/O模块中类以及全局函数说明
I/O模块中目前共有21个类
1、class pcl::FileReader
定义了PCD文件的读取接口,主要用做其他读取类的父类。
关键成员函数:
virtual intreadHeader(const std::string & file_name, sensor_msgs::PointCloud2 &cloud, Eigen::Vector4f &origin, Eigen::Quaternionf &orientation, int &file_version, int &data_type, unsigned int &data_idx, const int offset=0)=0 //纯虚函数,定义读取点云头文件的接口函数
【pcl::PCDReader, pcl::PLYReader都继承于此函数】
2、class pcl::FileWriter
是写入PCD文件的类接口定义。与FileReader对应,可以作为其他写入类的父类。
关键成员函数:
virtual int write
【pcl::PCDWriter, pcl::PLYWriter都继承于此函数】
3、class pcl::Grabber
类Grabber为PCL1.X对应的设备驱动接口的基类定义。
// 类的关键成员函数
// 提供回调函数指针,当获取每帧图像或点云数据时都会启动回调函数:
template<typename T>
boost::signals2::connectionregisterCallback(const boost::function<T>&callback)
// 判断是否提供回调函数:
emplate<typename T>
bool providesCallback()const
// 启动设备,开始传输数据流:
virtual void start() = 0
// 停止设备上的数据流传输:
virtual void stop() = 0
// 返回明确的子类名字:
virtual std::string getName() const = 0
// 返回是否在传输数据流:
virtual bool isRunning() const = 0
// 获取FPS帧率,即每秒多少帧数据:
virtualfloat getFramesPerSecond() const = 0
4、classopenni_wrapper::OpenNIDevice
类OpenNIDevice定义OpenNI设备的基类,继承该基类可以实现不同的OpenNI设备子类,用于获取包括红外数据、RGB数据、深度图像数据等。
5、class openni_wrapper::DeviceKinect
6、class openni_wrapper::DevicePrimesense
7、class openni_wrapper::DeviceXtionPro
8、class openni_wrapper::DeviceONI
9、class openni_wrapper::OpenNIDriver
10、class openni_wrapper::OpenNIException
11、class openni_wrapper::Image
12、class openni_wrapper::ImageByerRGBG
13、class openni_wrapper::ImageRGB24
14、class openni_wrapper::ImageYUV422
15、class pcl::OpenNIGrabber
16、class pcl::PCDReader
17、class pcl::PLYReader
18、class pcl::PCDWriter
19、class pcl::PLYWriter
20、class pcl::PCLIOExpection
用到再具体了解吧
4.3 应用实例解析
4.3.1 PCD(点云数据)文件格式
3D点云数据的文件格式:
- PLY是一种多边形文件格式,由Stanford大学的Truk等人设计开发;
- STL是3D Systems公司创建的模型文件格式,主要应用于CAD,CAM领域;
- OBJ是从几何学上定义的文件格式,首先有Wavefront Technologies开发;
- X3D是符合ISO标准的基于XML的文件格式,表示3D计算机图形数据;
- 其他
PCD文件格式的优势:
- 存储和处理有序点云数据集的能力——这一点对于实时应用,例如增强现实、机器学习领域十分重要。
- 二进制mmap/munmap数据类型是把数据下载和存储到磁盘上最快的方法。
- 存储不同的数据类型(支持所有的基本类型:char, short, int, float, double)——使得点云数据在存储和处理过程中适应性强并且高效,其中无效的点通常存储为MAN类型
- 特征描述子的n维直方图——对于3D识别和计算机视觉应用十分重要。