gpt4 book ai didi

c# - 使用kinect获得骨骼的旋转(X、Y、Z轴的欧拉角)

转载 作者:行者123 更新时间:2023-11-30 12:45:44 24 4
gpt4 key购买 nike

我正在尝试通过 kinect 创建一个 .bvh 文件。

这意味着需要获取骨骼中每个骨骼的旋转。我需要欧拉角的旋转。我已经尝试了许多不同的方法,但其中任何一种都给了我很好的结果。谁能给我一些建议,我做错了什么?

这是(我认为)我的代码的主要部分。

foreach (Skeleton skeleton in newSkeleton)
{
if (skeleton.TrackingState != SkeletonTrackingState.Tracked)
continue;
int j = 0;
foreach (BoneOrientation orientation in skeleton.BoneOrientations)
{
Matrix4 matrix = orientation.HierarchicalRotation.Matrix;

double y = Math.Asin(matrix.M13);
double x = Math.Atan2(-matrix.M23, matrix.M33);
double z = Math.Atan2(-matrix.M12, matrix.M11);

rotationMatrix[j, 0] = x * 180 / Math.PI;
rotationMatrix[j, 1] = y * 180 / Math.PI;
rotationMatrix[j, 2] = z * 180 / Math.PI;
j++;
}
}

我的欧拉角应存储在 rotationMatrix 数组中以供进一步使用(保存到 bvh 文件中)。我的问题来了...以这种方式计算的旋转没有意义(我的意思是它们与我在 kinect 之前的位置无关)并且它们似乎是随机的。

编辑:

我还需要解释一些关于 kinect 的不清楚的主题。我尝试用谷歌搜索它,但没有成功。

  1. kinect 骨架是否有类似零姿势的东西?我的意思是所有骨骼旋转都为零的任何姿势。 (如T字等)

  2. kinect 使用什么样的标准?我的意思是kinect如何将数据存储到旋转矩阵中?我想知道矩阵是否像

    [X1, Y1, Z1,

    X2, Y2, Z2,

    X3, Y3, Z3]

    还是使用其他顺序?

  3. 关于 marices.. 是否可以通过标准方式从 kinect 给出的矩阵计算欧拉角?我的意思是本文提到的一些算法?

    http://www.geometrictools.com/Documentation/EulerAngles.pdf

最佳答案

好的,经过更多时间的研究,我想我也许可以回答我的一些问题。如果有人感兴趣...

  1. 我还没有找到任何零位姿,但我使用某种校准创建了我自己的位姿。我为我选择的零姿势保存了旋转矩阵(我们称之为 Mz),使这些矩阵转置 (MzT),然后我乘以所有下一个矩阵 kinect 给我(我们称之为 Mr)。这意味着我以这种方式计算了进一步使用的矩阵:M = MzT x Mr.
  2. 我在 3.问题中使用了从链接转换的 Rxyz 顺序,并且一切正常,这意味着 kinect 给出的旋转矩阵可能具有问题中给出的顺序。这也应该是第三个问题的答案。

关于c# - 使用kinect获得骨骼的旋转(X、Y、Z轴的欧拉角),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23313629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com