首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从陀螺+加速度计数据计算四元数

从陀螺+加速度计数据计算四元数
EN

Stack Overflow用户
提问于 2010-09-27 09:30:29
回答 3查看 6.3K关注 0票数 5

我有陀螺仪+加速度计在每个时间周期T的数据。

使用C++,我想要计算对象在每个时刻的旋转-它可以围绕它的轴旋转。我读到用四元数(而不是欧拉角)来表示系统的旋转是很方便的。

如何将角速度(从陀螺仪)转换为四元数表示?我认为为了做到这一点,我需要用数值方法来求解微分方程。

EN

回答 3

Stack Overflow用户

发布于 2010-09-27 09:47:26

你说的是Slerp吗?(球面线性插值)

请参阅Jonathan Blow的文章"“,其中有C++的示例源代码……

http://number-none.com/product/Understanding%20Slerp,%20Then%20Not%20Using%20It/

票数 3
EN

Stack Overflow用户

发布于 2010-09-29 03:20:30

陀螺仪中的每个样本都代表一个小旋转:

代码语言:javascript
复制
rot_x = angV_x * timestep
rot_y = angV_y * timestep
rot_z = angV_z * timestep

如果生成的旋转很小,则可以通过取旋转角度的一半直接将其转换为四元数:

代码语言:javascript
复制
// for small rotations, quick & dirty quaternion is sufficient
// (note: all angles *must* be in radians!)
float k = timestep * 0.5;
quaternion raw_delta_Q(1.0, angV_x*k, angV_y*k, angV_z*k);  // unnormalized!

// combine rotation for current timestep with orientation state
estimated_orient_Q *= raw_delta_Q;  // multiply by unnormalized delta
estimated_orient_Q *= 1 / norm(estimated_orient_Q);  // then renormalize it!

如果您的旋转大于几度,或者如果您需要最大的精度,则需要更密切地关注如何获得四元数。

编辑:请注意,上面的代码假设*=被定义为通过四元数和实数标量进行四元数乘法。这些函数的某种形式(以及明显的构造函数)将出现在任何合理的四元数库中。

票数 3
EN

Stack Overflow用户

发布于 2010-09-27 09:48:24

什么语言?例如,对于Python,cgkit有一个漂亮的quat模块(从旋转矩阵初始化的四元数,而不是“角速度”,但想必你可以从后者构建前者?)euclid.py有一个四元数类的Python源代码,包括从旋转矩阵和其他方式构建它的类方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3800581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档