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

c# – 使用kinect获得骨骼旋转(X,Y,Z轴的欧拉角),第1张

概述我正在尝试通过kinect创建一个.bvh文件. 这意味着需要获得骨架的每个骨骼旋转.我需要欧拉角度的旋转.我已经尝试了很多不同的方法,但其中任何一个都给了我很好的结果.谁能给我一些建议我做错了什么? 这是(我认为)我的代码的主要部分. foreach (Skeleton skeleton in newSkeleton){ if (skeleton.TrackingState != S 我正在尝试通过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++;    }}

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

编辑:

我还需要解释一些关于kinect的不明确的话题.我试图谷歌它,但没有成功.

> kinect骨架是否有零姿势?我指的是所有骨骼旋转为零的任何姿势. (例如T-pose等)
> kinect使用什么样的标准?我的意思是kinect如何将数据存储到旋转矩阵中?我想知道矩阵是否像

[X1,Y1,Z1,

X2,Y2,Z2,

X3,Y3,Z3]

还是使用其他订单?
>关于marices ..是否可以从标准方式kinect给出的矩阵计算欧拉角?我的意思是本文中提到的一些算法?

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

解决方法 好吧,经过一段时间的研究后,我想我可以回答一些问题.如果有人有兴趣……

>我还没有找到任何零姿势,但我使用某种校准创建了自己的姿势.我为我选择的零姿势保存了旋转矩阵(让我们称之为Mz),使这些矩阵变为矩形(MzT),然后我乘以kinect给我的所有下一个矩阵(让我们称之为先生).这意味着我通过这种方式计算矩阵以便进一步使用:M = MzT x Mr.>我使用了Rxyz顺序中的链接转换3.并且一切运行良好,这意味着kinect给出的旋转矩阵可能具有问题中给出的顺序.这也应该是对第三个问题的回答.

总结

以上是内存溢出为你收集整理的c# – 使用kinect获得骨骼旋转(X,Y,Z轴的欧拉角)全部内容,希望文章能够帮你解决c# – 使用kinect获得骨骼旋转(X,Y,Z轴的欧拉角)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存