OpenNI协议小结

作者丨悟空
编辑丨3D视觉开发者社区

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

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字节头部信息定义:
在这里插入图片描述

其中PACKAGE TYPE定义:
在这里插入图片描述

根据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.

版权声明:本文为3D视觉开发者社区特约作者授权原创发布,未经授权不得转载,本文仅做学术分享,版权归原作者所有,若涉及侵权内容请联系删文。

3D视觉开发者社区是给所有开发者打造的分享与交流平台,旨在将3D视觉技术开放给开发者。平台为开发者提供3D视觉领域免费课程、奥比中光独家资源与专业技术支持。

点击加入3D视觉开发者社区,和开发者们一起讨论分享吧~

或可微信关注官方公众号 3D视觉开发者社区 ,获取更多干货知识哦。

猜你喜欢

转载自blog.csdn.net/limingmin2020/article/details/126731962
今日推荐