Mahony
com.roumai.myodecoder.core.Mahony
Overview
Mahony
是一个算法实现类,用于将 IMU 传感器的原始数据转换为姿态角。
用户需要将传感器获取到的 IMU 数据实时传入 Mahony
的 update
方法(比如在 IO 线程中更新数据),
然后通过调用如 angleInEarth
velocityInEarth
positionInEarth
方法在适当的地方(比如 Main 线程)获取当前姿态角度。
Functions
#update/4
将 IMU 数据更新至算法输入,辅助计算最终的姿态角度。
参数 | 类型 | 描述 |
---|---|---|
gyro | Point | 陀螺仪数据 |
accel | Point | 加速度计数据 |
mag | Point | 磁力计数据 |
deltaTime | Double | 更新时间间隔(秒) |
返回值类型 | 描述 |
---|---|
Quaternion | 旋转四元数 |
val mahony = Mahony()
val gyro = Point(0.0, 0.0, 0.0)
val accel = Point(0.0, 0.0, 0.0)
val mag = Point(0.0, 0.0, 0.0)
val deltaTime = 0.0
val quaternion = mahony.update(gyro, accel, mag, deltaTime)
// quaternion 可以不做处理,如果有需要可以自行设计算法时使用
#angleInEarth/0
获取当前姿态角度(对大地坐标系)。
返回值类型 | 描述 |
---|---|
Point | 姿态角度(Pitch, Roll, Yaw) |
val angle = mahony.angleInEarth()
Log.i(TAG, "Pitch: ${angle.x}, Roll: ${angle.y}, Yaw: ${angle.z}")
#velocityInEarth/0
获取当前姿态速度(对大地坐标系,笛卡尔坐标)。
返回值类型 | 描述 |
---|---|
Point | 姿态速度(X, Y, Z) |
val velocity = mahony.velocityInEarth()
Log.i(TAG, "Velocity: ${velocity.x}, ${velocity.y}, ${velocity.z}")
#positionInEarth/0
获取当前姿态位置(对大地坐标系,笛卡尔坐标)。
返回值类型 | 描述 |
---|---|
Point | 姿态位置(X, Y, Z) |
val position = mahony.positionInEarth()
Log.i(TAG, "Position: ${position.x}, ${position.y}, ${position.z}")
FAQ
Q: 如何根据磁力计数据获取指南针方向?
A: Mahony
类里面并未实现该函数,因为通过磁力计换算成罗盘模式其实有比较简单的实现方法,可以参考以下代码:
val mag = Point(...) // 磁力计读取到的数值
val angle = atan2(mag.x, mag.y) * 180 / Math.PI
Log.i(TAG, "Compass: ${angle}˚")