作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个初始四元数q0。我得到了角速度测量结果,对速度进行了积分,所以在50Hz左右获得了3个角度。如何基于3个角度制作四元数?我不能只做3个四元数,可以吗?
所以要说清楚。
Q.new = Q.new * Q.update(alfa,beta,gamma)
Q.new代表我当前的四元数方向,我想乘以Q.update四元数来更新它。如何使用角度进行Q.update?
谢谢!
最佳答案
原谅我线程坏死,但答案似乎都很复杂,有些人,例如我,可能更喜欢这种“方便”的方法:
假设ω=(alpha,beta,gamma)是陀螺仪的测得角速度矢量。然后我们旋转
theta = ||omega||*dt; //length of angular velocity vector
周围有许多单位(度数或弧度取决于陀螺仪)
v = omega / ( ||omega|| ); // normalized orientation of angular velocity vector
因此,我们可以将旋转四元数构造为:
Q.update = (cos(theta/2),v_x * sin(theta/2), v_y * sin(theta/2), v_z * sin(theta/2));
现在剩下的就是通过
Q.update
旋转我们当前的旋转。这很简单:
Q.new = multiply_quaternions(Q.update,Q.new);
// note that Q.update * Q.new != Q.new * Q.update for quaternions
完毕。四元数很漂亮,不是吗?
关于orientation - 如何基于3D陀螺仪数据更新四元数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23503151/
我是一名优秀的程序员,十分优秀!