Kinect移植到嵌入式ARM平台上面
本系统主要由两个部件构成:嵌入式硬件平台和USB设备,通过USB总线建立起它们之间通讯,如图2.16所示,USB设备Kinect中包含一个USB集线器,在Kinect内部通过Hub将红外摄像头、彩色摄像头、电机等设备连接到Kinect内部USB总线上面,最后将Kinect设备连接到ARM9嵌入式硬件平台的Roothub上面。
图2.16 系统硬件连接图
本系统的软件系统设计主要核心部分是Libusb,它为USB设备驱动程序开发提供一系列API,它封装了许多USB协议和底层内核交互代码,将驱动开发从内核空间搬移到用户空间。为了实现Libusb运行在嵌入式linux平台上面,需要USB文件系统和linux底层USB驱动代码作为底层接口支持,而这些接口最终依赖于一个嵌入式linux操作系统。总的来说,本系统软件层次如下图2.17所示:
图2.17 系统软件设计图
详细步骤:
step1: 搭建一个嵌入式linux平台
本人用的是TQ2440 , 这个就直接用了出厂的源程序, 不过需要注意的是, libusb是基于usb文件系统的,所以移植的时候一定要包含进来
step2: 编译libusb
这一步很重要,需要使用交叉编译器ARM-linux编译, 下载libusb,进入其官网http://www.libusb.org/选择最新版,下载
具体的安装编译步骤如下:
1. 解压libusb-1.0.9.tar到当前文件中:
#tar –vxf libusb-1.0.9.tar –C ./
2. 使用cd命令进入到解压后的文件夹中,运行配置文件:
#./configure CC=arm-linux-gccCXX=arm-linux-g++ /
--build=i686-linux --host=arm-linux
其中--build=i686-linux表示软件是在X86平台下编译的,--host=arm-linux表示使用的是交叉编译器arm-linux-进行编译,系统默认是将软安装到/usr/local/lib目录下,需要更改使用--prefix=/path/to/install。
3. 编译安装:
#make
#make install
4. 进入/usr/local/lib/目录查看是否生成目标文件。
#cd /usr/local/lib/
可以看到在该目录下,多出一个libusb的文件夹,里面有一个include和lib目录。
5. 挂载NFS,通过nfs将include目录和lib目下的文件拷贝到开发板上
#mount –t nfs 192.168.0.7:/opt/nfs /mnt/nfs
这里192.168.0.7为开发板的地址。
step3: 使用libusb编写一个usb设备遍历程序
代码如下:附录A 使用libusb遍历usb设备程序源码/*desc: 使用libusb库函数编程遍历当前所有的usb设备*author: lxz*create data: 2013,3,20*modify data: 2013,4,25/#include#include #include "libusb.h"#include int main(){libusb_device devs ; // used to retrieve a list of device libusb_context *ctx = NULL ; //a libusb sessionstruct libusb_device_descriptor desc ;int r = 1 ; //for return valuessize_t cnt ; //holding number of devices in listr = libusb_init(&ctx); //initialize the library for the session we just declaredif( r<0){fprintf(stderr, "failed to initalise libusb\n"); //there was a errorexit(1) ;}else{printf("init successful !\n");}libusb_set_debug(ctx,3); //set verbosity level to 3, as suggested in the documentioncnt = libusb_get_device_list(ctx, &devs) ; //get the list of devicesif(cnt <0){fprintf(stderr, "Get Device Error\n");exit(1);}printf("%d Device in list .\n", cnt) ;ssize_t i ; //for iterating through the listfor(i=0; i
编译:将生成的代码,通过nfs下载到TQ2440开发板中, 在开发板上, 运行刚刚编译的程序,
libusb成功运行在ARM平台上面, 接下来就是对kinect进行操作了。
KinectARM平 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)