Kinect移植到嵌入式ARM平臺上面
本系統主要由兩個部件構成:嵌入式硬件平臺和USB設備,通過USB總線建立起它們之間通訊,如圖2.16所示,USB設備Kinect中包含一個USB集線器,在Kinect內部通過Hub將紅外攝像頭、彩色攝像頭、電機等設備連接到Kinect內部USB總線上面,最后將Kinect設備連接到ARM9嵌入式硬件平臺的Roothub上面。
本文引用地址:http://www.104case.com/article/201611/317678.htm
圖2.16 系統硬件連接圖
本系統的軟件系統設計主要核心部分是Libusb,它為USB設備驅動程序開發提供一系列API,它封裝了許多USB協議和底層內核交互代碼,將驅動開發從內核空間搬移到用戶空間。為了實現Libusb運行在嵌入式linux平臺上面,需要USB文件系統和linux底層USB驅動代碼作為底層接口支持,而這些接口最終依賴于一個嵌入式linux操作系統。總的來說,本系統軟件層次如下圖2.17所示:
圖2.17 系統軟件設計圖
詳細步驟:
step1: 搭建一個嵌入式linux平臺
本人用的是TQ2440 , 這個就直接用了出廠的源程序, 不過需要注意的是, libusb是基于usb文件系統的,所以移植的時候一定要包含進來
step2: 編譯libusb

具體的安裝編譯步驟如下:
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 libusbn"); //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 Errorn");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進行操作了。
評論