在局部坐标系下,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