• 阅读数:117发布于2021-07-09 10:51:33

    只看该作者
    OpenNI协议小结 复制本文链接

    1.OpenNI协议命令是基于USB控制传输,使用默认的控制端点0;而图像数据传输是基于USB实现的批量传输,而后者根据取决于数据类型。图像传输端点:
    图片alt

    2.OpenNI协议命令

    使用默认的控制端点HOST使用USB默认端点0发送请求,协议包含一个头部信息,结构如下:

    
    typedef struct{
    
    uint16_t nMagic;
    
    uint16_t nSize;
    
    uint16_t nOpcode;
    
    uint16_t nId;
    
    }ProtocolHeader;
    

    其中,Request: nMagic=0x4252, Response: nMagic=0x4d47, nSize表示数据长度,nOpcode表示命令类型,如获取版本号、设置参数等,nId表示包号,设备应答时就使用接收到Request中的nId;

    数据部分限制最大长度为512字节。具体实现在protocol.c中,命令类型定义在protocol.h中。

    3.OpenNI图像传输

    OpenNI支持IR/DEPTH/RGB传输,协议与UVC类似,OpenNI 12字节头部信息定义:
    图片alt
    其中PACKAGE TYPE定义:
    图片alt

    根据USB工作模式,在USB3.0下,每帧最大长度为1024字节,USB2.0则为512字节。

    这里需要注意的是:

    1) 大小端,package_id 是小端,而package_size和TimeStamp是大端;

    2) 帧包与包号:package_id表示包号,每个传输完一个包加1;TimeStamp表示帧号,每传输完一帧加1,但每帧的第一个包,TimeStamp=0;

    3) 包长度,SOF和Normal均为0xC00,而最后一包取决于实际所剩长度last_size,则pakage_size=last_size+12.

    回复 (1)

    举报
举报

请选择举报理由

  • 垃圾广告
  • 违规内容
  • 恶意灌水
  • 重复发帖
提示

奥比中光 · 3D视觉开发者社区...

站长统计