SDK输出数据内容。在局部坐标系下,SDK 能否输出手臂关节角度?

在局部坐标系下,SDK 能否输出手臂关节角度,以及手臂末端的位置坐标。如果想要获取手臂末端与肩关节的相对位置,是否需要使用全局坐标系?

你的需求SDK完全可以满足,因此SDK不会对此类需求做任何响应。如果你对FK比较熟悉,这是一个很简单的问题。

本质上局部坐标系和全局坐标系是可以相互转换的。

比如我们假设大臂的全局旋转是G1,小臂相对于大臂的 local 旋转 是 g2(我们局部坐标系全部是根据父骨骼计算,如果中间有缺失,缺失的部分 local 旋转一定是0), 手相对于小臂的local旋转是 g3,那么:

小臂的旋转就是: G2 = G1 * g2
手掌的旋转就是: G3 = G2 * g3

请注意,旋转都存在坐标系,这里的基础只是需要自己掌握,另外,旋转不可描述朝向,我们都是以默认姿态未T-Pose旋转的,如果你不清楚,可以直接使用 SDK 全局坐标系,然后按照父子骨骼关系旋转,每个骨骼的位置按照Tpose定义即可,比如使用默认坐标系,按照人物朝向和自身一致(即 面部朝向定义未前,自身左手方向定义未左),那么 x 正方向就是 左,y 正方向就是 上,z 正方向就是 前,按照单位为米,那么 默认 Tpose姿态下,假设左边肩膀是原点,大臂长度 0.4,小臂长度 0.3,那么:

胳膊Tpose坐标:VT1:(0.4, 0, 0)
大臂骨骼向量:V1:(0.4, 0, 0)
手腕Tpose坐标:VT2:(0.7, 0, 0)
手肘骨骼向量:V2:(0.3, 0, 0)

旋转以后,坐标计算如下:
VT1-1 = G1 * V1
VT2-1 = G2 * V2 + VT1-1

假设你使用 python 计算,我们推荐使用 numpy-quaternion。

1 Like