串流端口协议
以下是基于该JSON数据的说明文档:
串流数据说明
本文档介绍了一个JSON格式的串流数据,其中包含了人体各个关节的姿态信息和根节点的位置信息。客户端通过Socket连接ServerSocket,接收到JSON格式的数据。
数据格式
数据格式为JSON格式,如下所示:
{
"deviceList": [
{
"leftLittleFingerUnder": [0.0, 0.0, 0.0],
"leftLowerLeg": [0.5283327317267245, 0.9699280975299531, 0.05361260659299393],
"leftThumbMid": [0.0, 0.0, 0.0],
"actorName": "36895272192031866103",
"rightMiddleFingerMid": [0.0, 0.0, 0.0],
"deviceId": "36895272192031866103",
"leftToe": [0.0, 0.0, 0.0],
"crotch": [167.57347163011366, -83.40422843226828, 168.32318812755344],
"rightForeFingerUnder": [0.0, 0.0, 0.0],
"leftThumbUnder": [0.0, 0.0, 0.0],
"rightLowerLeg": [-0.14184703756515651, -0.3411541341866196, 0.11966295623743685],
"rightMiddleFingerUnder": [0.0, 0.0, 0.0],
"rightThumbMid": [0.0, 0.0, 0.0],
"rightForeFingerMid": [0.0, 0.0, 0.0],
"rightMiddleFingerUp": [0.0, 0.0, 0.0],
"coordinate": [-0.701085451990366, 0.9399006068706512, 1.7706798166036606],
"rightThumbUp": [0.0, 0.0, 0.0],
"leftForeFingerMid": [0.0, 0.0, 0.0],
"leftLowerArm": [-4.275193053831556, 6.029475112014665, 0.16694912669166465],
"rightRingFingerMid": [0.0, 0.0, 0.0],
"waistTwo": [0.29568526455187555, 35.644963830923615, -0.5573244587306913],
"leftMiddleFingerUnder": [0.0, 0.0, 0.0],
"leftMiddleFingerMid": [0.0, 0.0, 0.0],
"rightLittleFingerMid": [0.0, 0.0, 0.0],
"rightUpperLeg": [176.6885544428917, 72.91872796381254, -177.95669928739395],
"leftForeFingerUnder": [0.0, 0.0, 0.0],
"leftRingFingerUnder": [0.0, 0.0, 0.0],
"leftLittleFingerUp": [0.0, 0.0, 0.0],
"leftForeFingerUp": [0.0, 0.0, 0.0],
"bvhRotationOrder": "XYZ",
"rightLowerArm": [-121.27302739968908, -53.80513365787473, -79.57055095508167],
"leftRingFingerMid": [0.0, 0.0, 0.0],
"rightForeFingerUp": [0.0, 0.0, 0.0],
"back": [0.29551572530026504, 35.6342730205439, -0.5570915211338497],
"rightLittleFingerUp": [0.0, 0.0, 0.0],
"rightRingFingerUnder": [0.0, 0.0, 0.0],
"leftShoulder": [-0.18589438315193915, -0.9052612384769648, -0.5738650285131836],
"head": [-0.03851023463838937, 0.7913068784451655, -0.7062768447186851],
"leftUpperArm": [-2.2109214884746184, 0.7886943442852772, -33.677680182697486],
"leftMiddleFingerUp": [0.0, 0.0, 0.0],
"rightHand": [116.29463249250328, 50.96926853262847, -78.59930404908181],
"rightFoot": [0.2060584982674821, 0.8379528867935927, -0.09795635155078423],
"waistOne": [0.29551572530026504, 35.63427302054393, -0.5570915211338499],
"leftUpperLeg": [178.28257488310416, 73.86704919190285, -179.49772684666087],
"leftThumbUp": [0.0, 0.0, 0.0],
"rightUpperArm": [2.7153986036959346, -0.9532830770749268, 33.639901563359864],
"rightRingFingerUp": [0.0, 0.0, 0.0],
"rightToe": [0.0, 0.0, 0.0],
"leftLittleFingerMid": [0.0, 0.0, 0.0],
"leftRingFingerUp": [0.0, 0.0, 0.0],
"leftHand": [34.30087801348577, -36.18378054306241, 10.29834646689235],
"leftFoot": [-0.3257049210066964, 1.284396122923064, 0.34588575015733],
"rightShoulder": [-0.1527352626370245, 0.7979215521202965, -0.6612408963735164],
"rightLittleFingerUnder": [0.0, 0.0, 0.0],
"rightThumbUnder": [0.0, 0.0, 0.0]
},
{
"leftLittleFingerUnder": [0.0, 0.0, 0.0],
"leftLowerLeg": [-0.40573345247257264, -18.4634204946525, 0.2511509567285266],
"leftThumbMid": [0.0, 0.0, 0.0],
"actorName": "8780442582114229391",
"rightMiddleFingerMid": [0.0, 0.0, 0.0],
"deviceId": "8780442582114229391",
"leftToe": [0.0, 0.0, 0.0],
"crotch": [-0.2044930858509223, -39.26269365322497, -0.037041743724933796],
"rightForeFingerUnder": [0.0, 0.0, 0.0],
"leftThumbUnder": [0.0, 0.0, 0.0],
"rightLowerLeg": [-0.1767339587597831, 3.9021207519650063, 0.49314465550116343],
"rightMiddleFingerUnder": [0.0, 0.0, 0.0],
"rightThumbMid": [0.0, 0.0, 0.0],
"rightForeFingerMid": [0.0, 0.0, 0.0],
"rightMiddleFingerUp": [0.0, 0.0, 0.0],
"coordinate": [-0.06738789379596713, 0.9254053207114338, 0.06742429733276367],
"rightThumbUp": [0.0, 0.0, 0.0],
"leftForeFingerMid": [0.0, 0.0, 0.0],
"leftLowerArm": [-0.08699000572472954, 0.6863571788756292, 0.11855827980903816],
"rightRingFingerMid": [0.0, 0.0, 0.0],
"waistTwo": [-0.015424130073108227, 0.055886741439810775, 0.026696603642111863],
"leftMiddleFingerUnder": [0.0, 0.0, 0.0],
"leftMiddleFingerMid": [0.0, 0.0, 0.0],
"rightLittleFingerMid": [0.0, 0.0, 0.0],
"rightUpperLeg": [0.42060291176478676, -2.1037899016837187, -0.1868693436966618],
"leftForeFingerUnder": [0.0, 0.0, 0.0],
"leftRingFingerUnder": [0.0, 0.0, 0.0],
"leftLittleFingerUp": [0.0, 0.0, 0.0],
"leftForeFingerUp": [0.0, 0.0, 0.0],
"bvhRotationOrder": "XYZ",
"rightLowerArm": [-0.16399108361481987, -0.11848358762031388, -0.03239584056380892],
"leftRingFingerMid": [0.0, 0.0, 0.0],
"rightForeFingerUp": [0.0, 0.0, 0.0],
"back": [-0.015419499853539614, 0.05586997984781864, 0.02668859400377571],
"rightLittleFingerUp": [0.0, 0.0, 0.0],
"rightRingFingerUnder": [0.0, 0.0, 0.0],
"leftShoulder": [0.5305371373965916, -0.4449699181562023, -0.9358010480478481],
"head": [0.11915716369841646, 0.10442513581288657, -0.11235430434039644],
"leftUpperArm": [-0.5747730532023467, 0.4200904612748533, -32.76454790349389],
"leftMiddleFingerUp": [0.0, 0.0, 0.0],
"rightHand": [-5.839335306133827, -7.834890734098407, 0.25703843613984406],
"rightFoot": [-0.37335566172713364, -2.4396810057529454, -0.12317384133139211],
"waistOne": [-0.01541949985353954, 0.05586997984781229, 0.02668859400377569],
"leftUpperLeg": [0.07023596070865984, 17.845656318012665, 0.11397519757537351],
"leftThumbUp": [0.0, 0.0, 0.0],
"rightUpperArm": [0.6870520821370538, -2.0975935038200126, 31.78050481691975],
"rightRingFingerUp": [0.0, 0.0, 0.0],
"rightToe": [0.0, 0.0, 0.0],
"leftLittleFingerMid": [0.0, 0.0, 0.0],
"leftRingFingerUp": [0.0, 0.0, 0.0],
"leftHand": [0.3254735259841174, -0.9885952909200776, -0.1923420038814004],
"leftFoot": [0.329059431216289, 24.35541948578364, 0.029652081491475666],
"rightShoulder": [-0.5753150002783762, 2.0401497415649117, 1.9198983633224964],
"rightLittleFingerUnder": [0.0, 0.0, 0.0],
"rightThumbUnder": [0.0, 0.0, 0.0]
}]
}
数据内容
数据中包含了人体的各个关节的位置信息(以三维坐标的形式表示)。以下是关节的名称及对应的坐标:
-
deviceId:设备Id -
actorName:角色名字 -
leftLittleFingerUnder:左手小指下方 -
leftLittleFingerUnder:左手小指下方 -
leftLowerLeg:左小腿 -
leftThumbMid:左拇指中间 -
rightMiddleFingerMid:右手中指中间 -
leftToe:左脚趾头 -
crotch:腹股沟 -
rightForeFingerUnder:右手食指下方 -
leftThumbUnder:左拇指下方 -
rightLowerLeg:右小腿 -
rightMiddleFingerUnder:右手中指下方 -
rightThumbMid:右拇指中间 -
rightForeFingerMid:右手食指中间 -
rightMiddleFingerUp:右手中指向上 -
coordinate:坐标 -
rightThumbUp:右拇指向上 -
leftForeFingerMid:左手食指中间 -
leftLowerArm:左前臂 -
rightRingFingerMid:右手无名指中间 -
waistTwo:腰二 -
leftMiddleFingerUnder:左手中指下方 -
leftMiddleFingerMid:左手中指中间 -
rightLittleFingerMid:右手小指中间 -
rightUpperLeg:右大腿 -
leftForeFingerUnder:左手食指下方 -
rightToe:右脚趾头 -
rightLowerArm:右前臂 -
rightRingFingerUnder:右手无名指下方 -
leftRingFingerUnder:左手无名指下方 -
leftRingFingerMid:左手无名指中间 -
rightMiddleFingerDown:右手中指向下 -
rightForeFingerUp:右手食指向上 -
rightRingFingerUp:右手无名指向上 -
leftMiddleFingerDown:左手中指向下 -
leftUpperLeg:左大腿 -
leftLittleFingerMid:左手小指中间 -
head:头部 -
leftForeFingerUp:左手食指向上 -
rightLittleFingerUp:右手小指向上 -
rightThumbUnder:右拇指下方
其中,coordinate表示整个人体的三维坐标,bvhRotationOrder表示旋转顺序
模型的坐标系为右手坐标系X轴向右Y轴向上Z轴向后。欧拉角为内旋数据
需要注意的是,本文档中的数据仅为示例,具体应用中的数据可能会有所不同。
注意:bvhRotationOrder顺规是XYZ各个关节对应数组中元素顺序也是XYZ。同理顺规是ZXY数组中元素顺序也是ZXY
数据解析
解析数据需要按照JSON格式进行解析,然后根据关节名称提取对应的坐标。
参考
特定需求
【串流】API
通用错误码
| code取值 | 说明 |
|---|---|
| 1001 | 参数错误,此时看msg查看具体错误描述 |
查询设备列表
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| $.control | 是 | string | deviceList |
| $.nodeList | 是 | array | 整型数组,比如:[1,2],从1开始编号的采集器列表,1-左手套,2-右手套 |
返回参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| $.control | 是 | string | onDeviceList |
| $.code | 是 | int | 公共错误码,返回1000表示成功; |
| $.msg | 是 | string | 公共错误提示,对应code字段的解释,比如返回code为1000时,msg为ok |
| $.deviceList | 是 | array | 设备列表 |
| $.deviceList.[i].productID | 是 | string | 设备ID |
| $.deviceList.[i].name | 是 | string | 设备名字,目前格式为"设备"+idex |
| $.deviceList.[i].channel | 是 | string | 设备频段 |
| $.deviceList.[i].modeName | 是 | string | 模式名字,比如全身模式 |
| $.deviceList.[i].actorName | 是 | string | 角色名字,未设置获取未打开工程,默认为Motion Robot,打开工程则为工程对应的角色名字; |
| $.deviceList.[i].isConnected | 是 | boolean | 该设备是否在连接状态,true表示在连接状态,false表示不在连接状态(比如关机、休眠等); |
| $.deviceList.[i].createTime | 是 | string | 设备创建时间戳,用来进行排序显示等,用string类型避免精度丢失; |
| $.deviceList.[i].boneTemplateName | 是 | string | 骨骼模板名字,用于录制接口的时候回传; |
有线手套马达震动协议
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| $.control | 是 | string | motorShake |
| $.deviceId | 否 | string | 设备ID,第一版没有获取到设备列表可不填,后面有设备列表后必填; |
| $.shakePattern | 是 | int | shakePattern - 马达震动模式 shakePattern=0 震动0.5s shakePattern=1 震动1s shakePattern=2 震动1.5 shakePattern=3 震动2s shakePattern=4 震动2.5s 以此类推最多支持5秒 |
| $.nodeList | 是 | array | 整型数组,比如:[1,2],从1开始编号的采集器列表,1-左手套,2-右手套 |
返回参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| $.control | 是 | string | onMotorShake |
| $.code | 是 | int | 公共错误码,返回1000表示成功 |
| $.msg | 是 | string | 公共错误提示,对应code字段的解释,比如返回code为1000时,msg为ok |
| $.data | 是 | boolean | 操作结果,code=1000时为true |