MocapApi Calc类型数据详解

  • 北京诺亦腾科技有限公司
  • 版本:v1.2
  • 撰写人:刘午达
  • 修改人:王莎
  • 修改时间:2021年9月24日

文档概述

  • MocapApi中的Calc数据主要包含六种数据,本文档详细介绍了这些数据的定义,格式,以及坐标系信息。

Calc数据项概述

  • Calc数据项包括分为4段,段之间用-连接。

    1. 第一段为身体部分名称,如Hips,SpineBottom ,…,LeftHandPinkyTip等59种,详情请见后文“第一段(身体部分)说明”。

    2. 第二段为特征信息,包括传感器Sensor、关节Joint、骨骼Bone共3种。

    3. 第三段为物理量信息,包括姿态四元数Quat、角速度Gyro、加速度Acce、速度Velo、位置Posi共5种。另包括丢包标记Lost。

    4. 第四段为具体分量数值,包括x,y,z分量,其中四元数多一个w分量。

  • 在Calc数据中,由上文中的第二段和第三段一共组合成了6种不同的数据进行输出,包括

    1. 传感器姿态四元数Sensor-Quat
    2. 传感器角速度Sensor-Gyro
    3. 传感器加速度Sensor-Acce
    4. 关节速度Joint-Velo
    5. 关节位置Joint-Posi
    6. 骨骼姿态四元数Bone-Quat。

第一段(身体部分)说明

  • 在MocapApi输出的数据中,将人体分为59个部分,其中以臀部节点为根节点,后续每个节点都与一个父节点相连,具体顺序如下表所示
  • Calc数据中的Joint-Velo与Joint-Posi数据会用到此连接关系。每个节点Joint的定义均为此节点与其父节点的连接处。比如“右前臂”的父节点为“右大臂”,其连接处为右臂肘关节,所以“右前臂”的Position和Velocity均指的是右臂肘关节的Postion和Velocity
部分名称 标识 序号 父节点
臀部 Hips 0 根节点
右大腿 RightUpLeg 1 0
右小腿 RightLeg 2 1
右脚 RightFoot 3 2
左大腿 LeftUpLeg 4 0
左小腿 LeftLeg 5 4
左脚 LeftFoot 6 5
脊柱下部分 Spine 7 0
脊柱中部分 Spine1 8 7
脊柱上部分 Spine2 9 8
颈部下部分 Neck 10 9
颈部上部分 Neck1 11 10
头部 Head 12 11
右肩 RightShoulder 13 8
右大臂 RightArm 14 13
右前臂 RightForeArm 15 14
右手 RightHand 16 15
右拇指指根 RightHandThumb1 17 16
右拇指指中 RightHandThumb2 18 17
右拇指指尖 RightHandThumb3 19 18
右食指掌骨 RightInHandIndex 20 16
右食指指根 RightHandIndex1 21 20
右食指指中 RightHandIndex2 22 21
右食指指尖 RightHandIndex3 23 22
右中指掌骨 RightInHandMiddle 24 16
右中指指根 RightHandMiddle1 25 24
右中指指中 RightHandMiddle2 26 25
右中指指尖 RightHandMiddle3 27 26
右无名指掌骨 RightInHandRing 28 16
右无名指指根 RightHandRing1 29 28
右无名指指中 RightHandRing2 30 29
右无名指指尖 RightHandRing3 31 30
右小指掌骨 RightInHandPinky 32 16
右小指指根 RightHandPinky1 33 32
右小指指中 RightHandPinky2 34 33
右小指指尖 RightHandPinky3 35 34
左肩 LeftShoulder 36 8
左大臂 LeftArm 37 36
左前臂 LeftForeArm 38 37
左手 LeftHand 39 38
左拇指指根 LeftHandThumb1 40 39
左拇指指中 LeftHandThumb2 41 40
左拇指指尖 LeftHandThumb3 42 41
左食指掌骨 LeftInHandIndex 43 39
左食指指根 LeftHandIndex1 44 43
左食指指中 LeftHandIndex2 45 44
左食指指尖 LeftHandIndex3 46 45
左中指掌骨 LeftInHandMiddle 47 39
左中指指根 LeftHandMiddle1 48 47
左中指指中 LeftHandMiddle2 49 48
左中指指尖 LeftHandMiddle3 50 49
左无名指掌骨 LeftInHandRing 51 39
左无名指指根 LeftHandRing1 52 51
左无名指指中 LeftHandRing2 53 52
左无名指指尖 LeftHandRing3 54 53
左小指掌骨 LeftInHandPinky 55 39
左小指指根 LeftHandPinky1 56 55
左小指指中 LeftHandPinky2 57 56
左小指指尖 LeftHandPinky3 58 57

第二段(特征信息)说明

  • 传感器Sensor:在惯性动作捕捉中,有些身体部分上并没有绑定相应传感器,这些身体部分的“传感器数据”是由身体骨骼数据反算得出。现阶段MocapApi仅支持Perception Neuron Studio 传感器。

  • 关节Joint:已在上一节“第一段(身体部分)说明”中解释

  • 骨骼Bone:即代表该身体部分

坐标系与坐标原点说明

  • 在说明第三段(物理量)与第四段(分量数据)之前,需要介绍具体的坐标系与坐标原点
  • Calculation Data 文件中所有数据都是其在全局系下的数据,不是与父节点的相对系数据

    全局坐标系

  • MocapApi输出的Calc文件中所有物理量均以北天东坐标系为全局坐标系

    传感器本体坐标系

  • Perception Neuron Studio 传感器,其传感器经过下位机AHRS计算后,上位机收到的输出数据的本体坐标系如下图所示

传感器本体坐标系

人体本体坐标系

  • 人体节点坐标系的定义遵从BVH格式的定义,每个节点输出数据坐标系为TPose情况下的左上前坐标系,如下图所示

    Skeleton Coordinate

位置零点

  • Calc输出数据包含节点的Postion数据(Joint-Posi),其零点定义为Axis Studio软件中的红线与蓝线在地面上的交点,它也是Avatar坐完人体姿态校准后Hips节点所在位置在地面上的投影。如下图所示:

    位置坐标原点

旋转零点:

  • Calc输出数据包含身体每根骨骼的旋转数据(Bone-Quat),其零点定义为人体在TPose情况下面朝正东方的时候各节点的角度(即T-Pose下人体的左上前方向与全局系北天东坐标系重合)
  • T-Pose的具体定义请参考Perception Neuron Studio 骨骼的BVH格式头文件描述

第三段(物理量)与第四段(分量数据)说明

  • 四元数Quat:用标准四元数格式表述传感器和骨骼的旋转量。两者旋转是一致的,但由于坐标系不同,故有两种数据输出。
  • 角速度Gyro:单位为弧度制,即rad/s
  • 加速度Acce:国际标准单位m/s²
  • 速度Velo:国际标准单位m/s
  • 位置Posi:国际标准单位m

Calc数据具体示例说明

  • 数据项名称(表头)一般分为4段,段之间用-连接,上文已解释。

  • 帧序号,从0开始记号。

  • 丢包标记Lost,取值1代表丢包,数据值通过算法得到。取值0代表正常,数据值为传感器测量值。

  • 示例如下表。

数据项表头说明 说明
Frame-No 帧号
Hips-Sensor-Lost Hips部分传感器丢包标记
Hips-Sensor-Quat-x Hips部分传感器姿态四元数x分量
Hips-Sensor-Quat-y Hips部分传感器姿态四元数y分量
Hips-Sensor-Quat-z Hips部分传感器姿态四元数z分量
Hips-Sensor-Quat-w Hips部分传感器姿态四元数w分量
Hips-Sensor-Gyro-x Hips部分传感器角速度x分量
Hips-Sensor-Gyro-y Hips部分传感器角速度y分量
Hips-Sensor-Gyro-z Hips部分传感器角速度z分量
Hips-Sensor-Acce-x Hips部分传感器加速度x分量
Hips-Sensor-Acce-y Hips部分传感器加速度y分量
Hips-Sensor-Acce-z Hips部分传感器加速度z分量
Hips-Joint-Velo-x Hips部分与父节点的关节速度x分量
Hips-Joint-Velo-y Hips部分与父节点的关节速度y分量
Hips-Joint-Velo-z Hips部分与父节点的关节速度z分量
Hips-Joint-Posi-x Hips部分与父节点的关节位置x分量
Hips-Joint-Posi-y Hips部分与父节点的关节位置y分量
Hips-Joint-Posi-z Hips部分与父节点的关节位置z分量
Hips-Bone-Quat-x Hips部分骨骼姿态四元数x分量
Hips-Bone-Quat-y Hips部分骨骼姿态四元数y分量
Hips-Bone-Quat-z Hips部分骨骼姿态四元数z分量
Hips-Bone-Quat-w Hips部分骨骼姿态四元数w分量
SpineBottom -Sensor-Lost SpineBottom部分传感器丢包标记
SpineBottom -Sensor-Quat-x SpineBottom部分传感器姿态四元数x分量
SpineBottom -Sensor-Quat-y SpineBottom部分传感器姿态四元数y分量
SpineBottom -Sensor-Quat-z SpineBottom部分传感器姿态四元数z分量
SpineBottom -Sensor-Quat-w SpineBottom部分传感器姿态四元数w分量
…… ……
…… ……
LeftHandPinky1-Bone-Quat-x LeftHandPinky1部分骨骼姿态四元数x分量
LeftHandPinky1-Bone-Quat-y LeftHandPinky1部分骨骼姿态四元数y分量
LeftHandPinky1-Bone-Quat-z LeftHandPinky1部分骨骼姿态四元数z分量
LeftHandPinky1-Bone-Quat-w LeftHandPinky1部分骨骼姿态四元数w分量

输出文件格式

  • 文件扩展名为csv,数据项主要通过逗号分隔。

  • 文件的第1行为帧的总数。

  • 文件的第2行为数据项表头说明。使用上表的表头说明。表头顺序为:第1列为Frame-No,然后先按59个身体部分的序号顺序输出,每个身体部分有21个数据,按照上面的表头说明顺序输出。所以数据总列数为:每个身体部分有21个量[(Lost标记)X1+(Sensor Quaternion)X4+(Sensor Gyro)X3+(Sensor Acce)X3+(Joint Velocity)X3+(Joint Position)X3+(Bone Quaternion)X4],共59个身体部分,另外包括帧号,所以每1行一共59*21+1=1240项数据,即数据为1240列。

  • 文件从第3行开始为数据部分,每1帧的数据为1行。数据间用逗号分隔,共1240列。

  • 示例如下。名叫"Data"的数据文件,总帧数为998帧。

    data.csv

    998

    Frame-No,Hips-Sensor-Lost,Hips-Sensor-Quat-x,Hips-Sensor-Quat-y, …, LeftHandPinky3-Bone-Quat-w

    0, 0, 0.0, 0.0, 0.0, 1.0, -0.0036, -0.4065, 0.6567, -0.0036, -0.4065, 0.6567, … , 0.0,0.0,0.0,1.0

    1, 0, 0.0, 0.0, 0.0, 1.0, -0.0038, -0.4069, 0.6567, -0.0033, -0.4087, 0.6560, … , 0.0,0.0,0.0,1.0

    2, 1, 0.0, 0.0, 0.0, 1.0, -0.0138, -0.4169, 0.6267, -0.0133, -0.4387, 0.6561, … , 0.0,0.0,0.0,1.0

    …………

    ……..

    997, 0, 0.0, 0.0, 0.0, 1.0, -0.0036, -0.4065, 0.6567, -0.0036, -0.4065, 0.6567, … , 0.0,0.0,0.0,1.0

诺亦腾动作捕捉文档系统 all right reserved,powered by Gitbook最后更新时间: 2021-09-24 17:03:45

results matching ""

    No results matching ""

    results matching ""

      No results matching ""