Python 如何获得两个四元数之间的角度?
我在大腿和小腿上使用惯性测量装置,尝试获得所有自由度(x、y、z或屈曲、内收、旋转)下的膝关节角度。该公司提供的一种算法将加速度计、陀螺仪和磁强计数据中的9DOF转换为每个传感器的四元数 我希望使用给定的四元数获得大腿和小腿传感器之间的x、y和z(膝关节)角度。 我对四元数非常陌生,我正在尝试通过python了解实现这一点的方法,但也在概念上理解它。免责声明:我自己对四元数非常陌生,但在“接近”四元数方面做了一些工作。以下是我有限的知识加上一些谷歌搜索的结果。看起来它确实应该做到这一点 因此,听起来您试图解决的问题可以表述如下:Python 如何获得两个四元数之间的角度?,python,quaternions,coordinate-systems,euler-angles,Python,Quaternions,Coordinate Systems,Euler Angles,我在大腿和小腿上使用惯性测量装置,尝试获得所有自由度(x、y、z或屈曲、内收、旋转)下的膝关节角度。该公司提供的一种算法将加速度计、陀螺仪和磁强计数据中的9DOF转换为每个传感器的四元数 我希望使用给定的四元数获得大腿和小腿传感器之间的x、y和z(膝关节)角度。 我对四元数非常陌生,我正在尝试通过python了解实现这一点的方法,但也在概念上理解它。免责声明:我自己对四元数非常陌生,但在“接近”四元数方面做了一些工作。以下是我有限的知识加上一些谷歌搜索的结果。看起来它确实应该做到这一点 因此,听
- 给定两个四元数(分别表示大腿和小腿的三维方向)
- …计算两个四元数之间的三维角度差
- 。。。用欧拉角表示角差
将四元数导入为pyq
输入数学
#创建大腿和小腿的假设方向
#我们使用(轴,度)符号,因为它是这里最直观的
#大腿完全垂直,轻微旋转
四元数(轴=[0.0,0.0,-1.0],度=-5)
#小腿稍微偏离垂直方向,朝另一个方向旋转。
四元数(轴=[0.1,-0.2,-0.975],度=10)
#获取这两个方向之间的3D差异
qd=q_上共轭*q_下共轭
#从这个差分四元数计算欧拉角
φ=数学常数2(2*(qd.w*qd.x+qd.y*qd.z),1-2*(qd.x**2+qd.y**2))
θ=math.asin(2*(qd.w*qd.y-qd.z*qd.x))
psi=数学常数2(2*(量子点w*qd.z+qd.x*qd.y),1-2*(量子点y**2+qd.z**2))
#结果:
#φ=1.16度
#θ=-1.90度
#磅/平方英寸=-14.77度
注意事项:
- 我还没有亲自验证这一点的正确性,但它确实看起来应该是正确的李>
- 当然,您需要确认每个角度(φ、θ、psi)的实际方向和符号是否符合您的预期
- 在维基百科的文章中(在他们的C示例代码中),他们对计算θ的
调用添加了一点修正。我不确定是否需要这样做。但如果θ真的是内收,我猜你不用担心90度以上的角度;-)李>asin
X1 = Q1*X*conj(Q1);
Y1 = Q1*Y*conj(Q1);
Z1 = Q1*Z*conj(Q1);
X2 = Q2*X*conj(Q2);
Y2 = Q2*Y*conj(Q2);
Z2 = Q2*Z*conj(Q2);
DiffAngleX = acos(dot(X1,X2));
DiffAngleY = acos(dot(Y1,Y2));
DiffAngleZ = acos(dot(Z1,Z2));
你能提供更多关于你想做什么的信息吗(也许是一些代码行)?您的输入和输出是什么(列表、整数、浮点、数组…?)“大腿和小腿传感器之间的x、y和z(膝关节)角度”到底是什么