kinect 无法在我的Android开发板上显示的分析
kinect 无法在我的Android开发板上显示的分析
之前在网上发现黑客已经将kinect移植到Android上,使用的beagleboard平台。公司想在kinect上深耕一下,所以需要将kinect在公司的android开发板上实现。记录以备忘。
一,按照黑客的教程,将之移植到beagleboard C4平台上。挺顺利。但深度图像只能维持几秒钟,因beagleboard不是我的最终目的,此问题搁置,beagleboard作为参考。黑客的教程点击这里。
顺便说一下,配置开发工具很麻烦,尤其是有些需要翻墙出去下,所以建议下载上面网页结尾处作者提供的完整软件包。解压后修改一下环境变量即可用。可以更懒一下:新建一个跟作者相同的用户名,将包解压到相应的文件夹,整个工程及其软件就可以用了。
二、将之移植到自己的android开发板。硬件平台就不具体说了,不是国际大厂的。
出错:加速度计显示正常,但深度图像没有显示,全黑。
到此为止,我一直没有仔细看代码。呵呵。没办法了,看代码吧。
框架:openframework
流程:openframework->ofxAndroid->ofxKinect->freenect->libusb之后就是linux内核?
前面不说了,可以借助打印log进行分析。没有显示的原因是ofxKinect::threadedFunction()函数中,
- void ofxKinect::threadedFunction(){
- freenect_set_led(kinectDevice, LED_GREEN);
- freenect_set_depth_format(kinectDevice, FREENECT_DEPTH_11BIT);
- freenect_set_depth_callback(kinectDevice, &grabDepthFrame);
- ofLog(OF_LOG_VERBOSE, "leon ofxKinect: Connection opened");
- freenect_start_depth(kinectDevice);
- ...............
- }
最后一条语句设置回调函数,具体实现如下
- void freenect_set_depth_callback(freenect_device *dev, freenect_depth_cb cb)
- {
- dev->depth_cb = cb;
- }
- int freenect_start_depth(freenect_device *dev)
- {
- freenect_context *ctx = dev->parent;
- int res;
- fnusb_start_iso(){
- strm->cb = cb;
- libusb_fill_iso_transfer(strm->xfers[i], dev->dev, ep, bufp, pkts * len, pkts, iso_callback, strm, 0);
- }
- static inline void libusb_fill_iso_transfer(struct libusb_transfer *transfer,
- libusb_device_handle *dev_handle, unsigned char endpoint,
- unsigned char *buffer, int length, int num_iso_packets,
- libusb_transfer_cb_fn callback, void *user_data, unsigned int timeout)
- {
- transfer->dev_handle = dev_handle;
- transfer->endpoint = endpoint;
- transfer->type = LIBUSB_TRANSFER_TYPE_ISOCHRONOUS;
- transfer->timeout = timeout;
- transfer->buffer = buffer;
- transfer->length = length;
- transfer->num_iso_packets = num_iso_packets;
- transfer->user_data = user_data;
- transfer->callback = callback;
- }
|
评论暂时关闭