IMU¶
概览¶
MoonBot Kit 主控模块 集成了及三轴磁力计、三轴加速度、温度传感器三种功能于一体的 IMU 模组。 对应的,在 Arduino 库中我们也提供了 IMU 库来方便用户获取主控当前姿态、方向、温度等状态。
通过调用 IMU
我们可以快速的获取当前的指南针角度、俯仰角、横滚角、重力加速度、温度等状态值。
读取主控当前方向¶
通过读取指南针的角度,我们可以知道当前主控所处方向:
#include <MoonBot.h>
void setup()
{
IMU.enable(); // IMU使能
IMU.calibrateMag(); // IMU磁力计校准,校准时以"∞"字形晃动主控
}
void loop()
{
Serial.print("compass:");
// 获取指南针角度(0~360°),指向正北时值为0或360
Serial.println(IMU.getMagAngle());
}
注解
主控平放时,返回数值为 Y 轴(见主控正面丝印标识)与正北方向夹角;主控竖放时,返回数值为 Z 轴与正北方向夹角。
获取取俯仰角、横滚角¶
// 获取俯仰角(±180°),主控向上角度为正,向下角度为负
int pitch = IMU.getAccAngle(kAccPitch);
// 获取横滚角(±180°),主控右倾为正,左倾为正
int roll = IMU.getAccAngle(kAccRoll);
注解
MoonBot Kit 主控正方向为 Y 轴(见主控正面丝印标识),姿态角度都是以此为前提进行计算的。
获取当前加速度¶
// 获取加速度,单位:g,静止时数值为1.0左右
float acceleration = IMU.getAcceleration();
获取当前运动状态¶
void loop()
{
if (IMU.on(kIMUShake)) {
// 如果当前主控在晃动
// 亮红灯
LED.setPixelColor(0, 0xff0000);
LED.setPixelColor(1, 0xff0000);
LED.show();
} else if (IMU.on(kIMUFreeFall)) {
// 如果当前主控在自由落体
// 亮绿灯
LED.setPixelColor(0, 0x00ff00);
LED.setPixelColor(1, 0x00ff00);
LED.show();
} else {
// 如果主控静置
// 关闭LED
LED.setPixelColor(0, 0x000000);
LED.setPixelColor(1, 0x000000);
LED.show();
}
}
API 参考 - IMU¶
枚举¶
- enum lsm303_axes_t
IMU 方向轴类型。
值:
- kDirX
- kDirY
- kDirZ
- enum lsm303_acc_angle_t
IMU 姿态角度类型。
值:
- kAccRoll
- kAccPitch
- enum imu_state_t
IMU 特殊状态类型。
值:
- kIMUShake
IMU 是否处于晃动状态
- kIMUFreeFall
IMU 是否处于自由落体状态
类¶
- class LSM303AGR_IMU_Sensor
IMU 驱动。
- 成员函数
- int enable(void);
使能 IMU 单元。
- 返回
0
使能成功,否则失败
- int advGetMagAngle(lsm303_axes_t main_axes, lsm303_axes_t sub_axes);
获取给定主轴与副轴所在平面,主轴与正北方夹角
- 参数
main_axes
:主轴sub_axes
:副轴
- 返回
主轴与正北方夹角
- int getMagAngle(void);
获取指南针角度,主控平放时,返回 Y 轴正方向与正北方夹角;主控竖放时,返回 Z 轴正方向与正北方夹角。
- 返回
主轴与正北方夹角
- int getAccAngle(lsm303_acc_angle_t angle_type);
获取主控姿态角度。
- 参数
angle_type
:姿态角度类型
- 返回
姿态角度
- float getAcceleration(void);
获取加速度值。
- 返回
加速度值,单位:g
- bool on(imu_state_t imu_state);
获取主控知否处于某些状态。
- 参数
imu_state
:IMU状态
- 返回
true
IMU 处于该状态,否则不处于该状态
- bool calibrateMag(void);
磁力计校准
- 返回
是否校准完成
- int16_t temperature(void);
获取温度原始数值
- 返回
温度原始数值
- float temperatureC(void);
获取当前温度,单位:摄氏度(℃)
- 返回
当前温度,单位:摄氏度(℃)
- float temperatureF(void);
获取当前温度,单位:华氏度(℉)
- 返回
当前温度,单位:华氏度(℉)
- 成员变量
- LSM303AGR_ACC_Sensor Acc;
加速度驱动
- LSM303AGR_MAG_Sensor Mag;
磁力计驱动