STM32与WSEN-ISDS IMU实现高精度运动跟踪方案

STM32WSEN-ISDSIMU
于 2026-07-07 13:44:26 修改
·本内容遵循CC 4.0 BY-SA版权协议

1. 项目背景与硬件选型解析

在工业自动化、机器人控制和无人机导航等领域,精确跟踪物体在三维空间中的角运动和线性运动是核心需求。WSEN-ISDS(型号2536030320001)是一款集成了三轴加速度计和三轴陀螺仪的6自由度惯性测量单元(IMU),配合STM32F101ZG微控制器,可以构建高性价比的运动跟踪解决方案。

WSEN-ISDS采用MEMS技术,具有±2g至±16g的可编程加速度量程和±125dps至±2000dps的陀螺仪量程。其内置的16位ADC确保数据采集的高精度,最高6.6kHz的输出数据率能满足快速运动跟踪需求。传感器还集成了温度检测、自由落体检测、点击/双击识别等实用功能,通过I2C或SPI接口与主控通信。

STM32F101ZG是基于ARM Cortex-M3内核的微控制器,具有512KB Flash和64KB RAM,运行频率可达36MHz。其丰富的外设接口(包括多个SPI/I2C)使其非常适合作为传感器数据采集和处理的核心。这款MCU在成本敏感型应用中表现出色,同时能胜任实时数据处理任务。

2. 硬件连接与电路设计

2.1 接口电路设计

WSEN-ISDS支持I2C和SPI两种通信方式。在STM32F101ZG项目中,我们选择SPI接口以获得更高的数据传输速率。典型连接方式如下:

  • WSEN-ISDS的SCK接STM32的SPI1_SCK(PB3)
  • MISO接PB4,MOSI接PB5
  • CS片选信号接任意GPIO(如PB0)
  • INT中断引脚接外部中断引脚(如PA0)

电源方面需要注意:

  • WSEN-ISDS工作电压为1.71-3.6V,建议使用3.3V供电
  • 如果STM32工作在3.3V,可直接连接;若STM32工作在5V,需添加电平转换电路
  • 每个电源引脚都应放置0.1μF去耦电容

2.2 PCB布局要点

  1. 传感器应尽可能靠近MCU放置,缩短走线长度
  2. 模拟电源和数字电源应分开走线,在靠近传感器处汇合
  3. 避免高速信号线平行走线过长,减少串扰
  4. 地平面应完整,为高频信号提供低阻抗回路
  5. 传感器下方应保持净空区,避免机械应力影响MEMS性能

3. 软件架构与驱动实现

3.1 底层驱动开发

首先需要实现SPI通信基础函数:

C
# define IMU_CS_LOW() GPIO_ResetBits(GPIOB, GPIO_Pin_0)
# define IMU_CS_HIGH() GPIO_SetBits(GPIOB, GPIO_Pin_0)
 
uint8_t SPI_ReadWrite(uint8_t data) {
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1, data);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
return SPI_I2S_ReceiveData(SPI1);
}
 
uint8_t IMU_ReadReg(uint8_t reg) {
uint8_t value;
IMU_CS_LOW();
SPI_ReadWrite(reg | 0x80); // 读操作最高位置1
value = SPI_ReadWrite(0xFF);
IMU_CS_HIGH();
return value;
}
 
void IMU_WriteReg(uint8_t reg, uint8_t value) {
IMU_CS_LOW();
SPI_ReadWrite(reg & 0x7F); // 写操作最高位清0
SPI_ReadWrite(value);
IMU_CS_HIGH();
}

3.2 传感器初始化配置

C
void IMU_Init(void) {
// 验证设备ID
if(IMU_ReadReg(0x0F) != 0x6A) {
// 错误处理
}
// 配置加速度计: ±4g量程, 104Hz输出率
IMU_WriteReg(0x10, 0x40);
// 配置陀螺仪: ±500dps量程, 104Hz输出率
IMU_WriteReg(0x11, 0x44);
// 启用Block Data Update功能
IMU_WriteReg(0x12, 0x80);
// 配置FIFO为流模式
IMU_WriteReg(0x2E, 0x40);
}

4. 数据采集与处理算法

4.1 原始数据读取

加速度和角速度数据分别存储在特定的寄存器组中,需要组合高低字节:

C
typedef struct {
int16_t x;
int16_t y;
int16_t z;
} IMU_Data;
 
void IMU_ReadAccel(IMU_Data *accel) {
uint8_t buffer[6];
IMU_CS_LOW();
SPI_ReadWrite(0xA8); // 加速度数据起始地址 | 读标志
for(int i=0; i<6; i++) {
buffer[i] = SPI_ReadWrite(0xFF);
}
IMU_CS_HIGH();
accel->x = (int16_t)((buffer[1] << 8) | buffer[0]);
accel->y = (int16_t)((buffer[3] << 8) | buffer[2]);
accel->z = (int16_t)((buffer[5] << 8) | buffer[4]);
}
 
void IMU_ReadGyro(IMU_Data *gyro) {
uint8_t buffer[6];
IMU_CS_LOW();
SPI_ReadWrite(0xA2); // 陀螺仪数据起始地址 | 读标志
for(int i=0; i<6; i++) {
buffer[i] = SPI_ReadWrite(0xFF);
}
IMU_CS_HIGH();
gyro->x = (int16_t)((buffer[1] << 8) | buffer[0]);
gyro->y = (int16_t)((buffer[3] << 8) | buffer[2]);
gyro->z = (int16_t)((buffer[5] << 8) | buffer[4]);
}

4.2 数据转换与校准

原始数据需要转换为物理量并校准:

C
// 加速度计校准参数(需通过校准获得)
float accel_bias[3] = {0.12f, -0.08f, 0.05f};
float accel_scale[3] = {1.02f, 0.98f, 1.05f};
 
// 陀螺仪校准参数
float gyro_bias[3] = {1.5f, -2.1f, 0.8f};
 
void ConvertAccelData(IMU_Data *raw, float *accel_mps2) {
const float scale = 4.0f / 32768.0f * 9.80665f; // ±4g量程转换为m/s²
accel_mps2[0] = (raw->x * scale - accel_bias[0]) * accel_scale[0];
accel_mps2[1] = (raw->y * scale - accel_bias[1]) * accel_scale[1];
accel_mps2[2] = (raw->z * scale - accel_bias[2]) * accel_scale[2];
}
 
void ConvertGyroData(IMU_Data *raw, float *gyro_radps) {
const float scale = 500.0f / 32768.0f * (3.1415926f / 180.0f); // ±500dps转换为rad/s
gyro_radps[0] = raw->x * scale - gyro_bias[0];
gyro_radps[1] = raw->y * scale - gyro_bias[1];
gyro_radps[2] = raw->z * scale - gyro_bias[2];
}

5. 姿态解算算法实现

5.1 互补滤波算法

结合加速度计和陀螺仪数据计算姿态:

C
typedef struct {
float roll;
float pitch;
float yaw;
} Attitude;
 
void UpdateAttitude(Attitude *att, float *accel, float *gyro, float dt) {
// 从加速度计计算倾斜角
float accel_roll = atan2f(accel[1], accel[2]);
float accel_pitch = atan2f(-accel[0], sqrtf(accel[1]*accel[1] + accel[2]*accel[2]));
// 互补滤波系数(0.98依赖陀螺仪,0.02依赖加速度计)
const float alpha = 0.98f;
// 更新姿态
att->roll = alpha * (att->roll + gyro[0] * dt) + (1-alpha) * accel_roll;
att->pitch = alpha * (att->pitch + gyro[1] * dt) + (1-alpha) * accel_pitch;
att->yaw += gyro[2] * dt; // 偏航角无法从加速度计获取
}

5.2 卡尔曼滤波实现

更高级的姿态解算可采用卡尔曼滤波:

C
typedef struct {
float angle;
float bias;
float P[2][2];
float Q_angle;
float Q_bias;
float R_measure;
} Kalman;
 
float KalmanUpdate(Kalman *k, float newAngle, float newRate, float dt) {
// 预测步骤
k->angle += dt * (newRate - k->bias);
k->P[0][0] += dt * (dt*k->P[1][1] - k->P[0][1] - k->P[1][0] + k->Q_angle);
k->P[0][1] -= dt * k->P[1][1];
k->P[1][0] -= dt * k->P[1][1];
k->P[1][1] += k->Q_bias * dt;
// 更新步骤
float y = newAngle - k->angle;
float S = k->P[0][0] + k->R_measure;
float K[2];
K[0] = k->P[0][0] / S;
K[1] = k->P[1][0] / S;
// 更新估计和协方差
k->angle += K[0] * y;
k->bias += K[1] * y;
float P00_temp = k->P[0][0];
float P01_temp = k->P[0][1];
k->P[0][0] -= K[0] * P00_temp;
k->P[0][1] -= K[0] * P01_temp;
k->P[1][0] -= K[1] * P00_temp;
k->P[1][1] -= K[1] * P01_temp;
return k->angle;
}

6. 系统集成与优化

6.1 实时数据采集架构

在STM32上实现高效数据采集和处理:

C
# define SAMPLE_RATE 100 // 100Hz采样率
# define DT (1.0f/SAMPLE_RATE)
 
void IMU_Task(void) {
static Attitude att = {0};
static Kalman kalman_roll, kalman_pitch;
IMU_Data raw_accel, raw_gyro;
float accel[3], gyro[3];
// 初始化卡尔曼滤波器
kalman_roll.Q_angle = 0.001f;
kalman_roll.Q_bias = 0.003f;
kalman_roll.R_measure = 0.03f;
kalman_pitch.Q_angle = 0.001f;
kalman_pitch.Q_bias = 0.003f;
kalman_pitch.R_measure = 0.03f;
while(1) {
uint32_t tick = HAL_GetTick();
IMU_ReadAccel(&raw_accel);
IMU_ReadGyro(&raw_gyro);
ConvertAccelData(&raw_accel, accel);
ConvertGyroData(&raw_gyro, gyro);
// 使用卡尔曼滤波更新姿态
att.roll = KalmanUpdate(&kalman_roll,
atan2f(accel[1], accel[2]),
gyro[0], DT);
att.pitch = KalmanUpdate(&kalman_pitch,
atan2f(-accel[0], sqrtf(accel[1]*accel[1] + accel[2]*accel[2])),
gyro[1], DT);
att.yaw += gyro[2] * DT;
// 发送数据或进行控制计算
SendAttitudeData(&att);
// 确保精确的采样间隔
while(HAL_GetTick() - tick < 10); // 10ms周期
}
}

6.2 性能优化技巧

  1. SPI DMA传输:使用DMA可以显著降低CPU负载
C
void IMU_ReadDMA(uint8_t reg, uint8_t *buffer, uint8_t len) {
IMU_CS_LOW();
uint8_t tx = reg | 0x80;
HAL_SPI_TransmitReceive_DMA(&hspi1, &tx, buffer, len);
// 在传输完成中断中拉高CS
}
  1. 传感器数据同步:启用传感器的FIFO功能,确保加速度和陀螺仪数据时间对齐

  2. 浮点运算优化:STM32F101ZG没有硬件FPU,应考虑使用定点数运算或查找表

  3. 任务调度:将数据采集、处理和通信任务合理分配到不同优先级

7. 实际应用中的问题排查

7.1 常见问题与解决方案

  1. 数据跳动严重

    • 检查电源稳定性,确保供电无噪声
    • 验证传感器安装是否牢固,避免机械振动影响
    • 适当降低滤波器截止频率
  2. 姿态漂移

    • 重新校准传感器偏置
    • 调整滤波器参数,增加加速度计权重
    • 考虑引入磁力计补偿偏航角
  3. 通信失败

    • 检查SPI时钟相位和极性设置
    • 验证CS信号时序
    • 测量信号完整性,必要时增加上拉电阻
  4. 数据更新率不稳定

    • 使用硬件定时器触发采样
    • 避免在中断服务程序中处理复杂计算
    • 检查是否有更高优先级任务阻塞

7.2 校准流程详解

精确校准是获得可靠数据的关键:

  1. 加速度计校准

    • 将设备放置在6个正交方向各30秒
    • 记录每个方向的输出值
    • 计算偏置和比例因子:
    C
    // X轴偏置 = (X_正面 + X_反面)/2
    // X轴比例因子 = (理想值)/(X_正面 - X_反面)
  2. 陀螺仪校准

    • 保持设备完全静止30秒
    • 计算平均输出值作为偏置
    • 对于高精度应用,可使用转台进行动态校准
  3. 温度补偿

    • 在不同温度下重复校准过程
    • 建立温度-偏置曲线
    • 实时应用中根据温度传感器读数补偿

8. 应用案例扩展

8.1 四轴飞行器姿态控制

在该应用中,WSEN-ISDS提供的关键数据用于:

  • 飞行器自稳控制
  • 手动模式下的姿态响应
  • 自动悬停和导航

实现要点:

  • 控制周期应至少达到100Hz
  • 传感器安装位置应靠近重心
  • 考虑振动隔离措施

8.2 工业设备状态监测

通过分析设备的振动模式:

  • 检测轴承磨损等机械故障
  • 监测设备运行状态
  • 预测性维护

实现方法:

  • 设置适当的采样率(通常1kHz以上)
  • 实现频域分析算法(FFT)
  • 建立正常状态基准模型

8.3 虚拟现实动作捕捉

多传感器融合实现:

  • 头部运动跟踪
  • 手部控制器定位
  • 全身动作捕捉

关键技术:

  • 多传感器时间同步
  • 传感器融合算法
  • 低延迟数据传输

在实际部署中发现,将传感器数据采集周期控制在8-10ms范围内,配合适当的滤波算法,可以获得足够流畅的运动跟踪效果。对于需要更高精度的应用,建议考虑使用更高性能的STM32系列(如STM32F4)并启用硬件浮点运算单元。

STM32与WSEN-ISDS IMU实现高精度运动跟踪方案
本文介绍基于STM32L4A6RG微控制器与WSEN-ISDS六轴IMU高精度运动跟踪方案。涵盖硬件选型依据、SPI/I2C接口连接PCB布局要点、传感器初始化数据处理流程,并重点实现Mahony互补滤波姿态解算及加速度双重积分位移估计。通过静态/动态校准、DMA+FPU优化和温度补偿,系统实现<0.5°姿态误差、0.5mg RMS加速度噪声及0.4ms算法延迟,满足工业机器人无人机实时运动感知需求。
Creamy络
227
STM32与WSEN-ISDS实现高精度运动跟踪方案
本文介绍基于STM32F334R8微控制器与WSEN-ISDS六轴IMU高精度运动跟踪方案,涵盖硬件架构设计、传感器初始化、中断驱动数据采集、互补滤波Mahony算法融合、静态校准及温度补偿实现,并应用于无人机姿态控制和工业机械臂末端定位,支持6.6kHz输出率500Hz实时闭环控制。
weixin_30299709
356
STM32F767ZI与WSEN-ISDS IMU高精度运动跟踪实现
本文基于STM32F767ZI微控制器与WSEN-ISDS六轴IMU实现高精度三维运动跟踪。重点涵盖SPI接口硬件连接、LDO电源设计、DMA加速数据采集、16位原始数据转换及互补滤波姿态解算算法。通过零偏校正、时序优化和去耦电容配置,显著降低噪声数据跳变。系统支持100Hz实时采样,适用于工业机器人、无人机飞控等嵌入式运动感知场景。
天使的倔强
287
STM32与WSEN-ISDS IMU实现高精度运动跟踪系统
本文基于STM32F410RB微控制器与WSEN-ISDS六轴IMU构建高精度三维运动跟踪系统。重点阐述SPI硬件接口设计、传感器初始化流程、16位原始数据转换方法,以及互补滤波等数据融合算法。系统支持中断驱动采集、可配置ODR低通滤波器调优,并涵盖零偏/灵敏度校准、陀螺仪漂移补偿及振动抑制等关键误差处理技术,适用于手势识别远程监控等嵌入式运动感知场景。
圭 圭
274
STM32与WSEN-ISDS IMU运动跟踪开发指南
本文详细阐述基于STM32C031C6微控制器与WSEN-ISDS六轴IMU运动跟踪系统开发全流程,涵盖硬件接口设计(I2C连接、电源去耦、中断配置)、传感器初始化、原始数据读取校准滤波、互补滤波卡尔曼滤波姿态解算算法实现,以及实时性功耗优化策略。重点突出嵌入式IMU系统在无人机、可穿戴设备等场景下的高精度姿态估计关键技术。
512
STM32与WSEN-ISDS IMU的6自由度运动跟踪实现
本文基于STM32F723ZE微控制器与WSEN-ISDS六自由度IMU,构建高精度实时运动跟踪系统。重点涵盖SPI接口配置、传感器初始化、原始数据转换、互补滤波卡尔曼滤波姿态解算算法,以及静态/动态校准、温度补偿和DMA+定时器驱动的实时优化技术。硬件设计强调3.3V电平匹配高性能数据吞吐能力。
Creamy络
295
STM32与WSEN-ISDS实现高精度9轴运动跟踪方案
本文介绍基于STM32F215RE与WSEN-ISDS三合一MEMS传感器的9轴运动跟踪方案,涵盖硬件选型(I2C接口、电源隔离、低噪声布线)、底层驱动开发、Mahony互补滤波算法实现、六面静态校准动态调优方法,并给出在无人机飞控、工业机械臂和可穿戴设备中的实测性能数据问题排查指南,突出嵌入式传感器融合的实时性、精度低功耗设计。
George Gabriel
330
STM32与WSEN-ISDS IMU实现高精度运动追踪方案
本文介绍基于STM32F303VE微控制器与WSEN-ISDS六轴IMU的嵌入式运动追踪方案,涵盖硬件连接(SPI接口)、传感器初始化静态校准、原始数据转换、互补滤波/四元数姿态解算、双重积分位置估算,以及在无人机飞控和工业机械臂中的实际应用。强调时序优化、漂移抑制、电源稳定性机械安装对精度的关键影响。
Linux????? Mr.Liyz
447
STM32与WSEN-ISDS实现高精度三维运动跟踪
本文基于STM32F303VC微控制器与WSEN-ISDS 6DOF IMU构建三维运动跟踪系统,重点阐述I2C/SPI通信配置、传感器寄存器设置、原始数据转换温度补偿、Mahony滤波姿态估算、四元数到欧拉角转换等关键技术。系统利用硬件FPU和DMA提升实时性,支持无人机飞控机械臂监测等嵌入式应用场景。
江半
273
STM32与WSEN-ISDS实现高精度运动跟踪技术解析
本文详解基于STM32F215ZG微控制器与WSEN-ISDS六轴MEMS惯性传感器的高精度运动跟踪系统实现。涵盖硬件接口设计(SPI/I2C配置、电源纹波抑制)、原始数据采集CRC校验、静态/动态传感器校准、改进型Mahony姿态解算、零速修正线性运动补偿,以及DMA+FPU实时优化策略。重点解决角速度加速度同步、积分漂移、噪声抑制等关键技术问题,适用于工业机器人、VR手柄和无人机等场景。
书能解忧
323
STM32与WSEN-ISDS实现高精度6DOF运动跟踪系统
本文介绍基于STM32F303ZE微控制器与WSEN-ISDS 6DOF惯性传感器构建高精度运动跟踪系统的方法。涵盖硬件架构(I2C/SPI接口、电源PCB设计)、软件实现(HAL驱动、DMA采集、互补/卡尔曼滤波)、传感器校准(加速度计/陀螺仪零偏比例因子)、系统优化(低功耗、抗噪、实时性)及典型应用(四轴飞行器姿态控制、机械臂运动监测)。关键技术包括MEMS传感、嵌入式数据融合实时信号处理。
书能解忧
285
STM32L081CB与WSEN-ISDS IMU运动跟踪系统开发指南
本文介绍基于STM32L081CB微控制器与WSEN-ISDS六轴IMU的低功耗运动跟踪系统开发方法,涵盖硬件接口设计(SPI/I2C)、电源PCB布局要点、传感器驱动实现、姿态解算、卡尔曼滤波及线性位移估计等关键算法,并提供校准、低功耗优化和调试技巧。系统适用于可穿戴设备物联网节点等电池供电场景。
cuixie2370
325
WSEN-ISDS MEMS传感器与STM32的六自由度运动跟踪实践
本文基于WSEN-ISDS MEMS惯性传感器与STM32F373VC MCU,实现高精度六自由度运动跟踪。重点涵盖SPI接口优化、寄存器配置、数据校准、Mahony姿态解算算法、实时性保障(延迟<2ms)及动态精度调整策略。实测显示加速度零偏稳定性0.12mg、陀螺仪零偏不稳定性4.6°/h,并在无人机飞控和机械臂控制中验证了性能提升。
程昱森
288
STM32与WSEN-ISDS传感器实现高精度运动追踪方案
本文介绍基于STM32F405RG微控制器与WSEN-ISDS六轴IMU高精度运动追踪系统实现方法。涵盖硬件连接(SPI接口、电源PCB设计)、软件驱动(初始化、校准、DMA采集)、姿态解算算法(互补滤波、Mahony、卡尔曼滤波)及轨迹重建,并针对工业机械臂、无人机飞控和VR手柄等场景优化实时性、同步性抗干扰能力。
Nature自然科研
232
STM32F407与WSEN-ISDS传感器实现高精度运动跟踪
本文详细阐述基于STM32F407VGT6微控制器与WSEN-ISDS六轴MEMS惯性测量单元(IMU)的高精度实时运动跟踪系统设计。涵盖硬件接口(SPI连接)、电源设计、驱动开发、传感器初始化静态/动态校准、原始数据采集、姿态解算(俯仰/横滚/偏航)、DMA+中断实时优化、互补滤波噪声抑制,并验证于四轴飞行器姿态控制和工业机械臂监测等典型场景,支持EKF融合四元数表示等进阶方向。
weixin_34343000
358
STM32与WSEN-ISDS实现高精度运动追踪方案
本文介绍基于STM32F215RE微控制器与WSEN-ISDS六轴MEMS惯性测量单元(IMU)的高精度三维运动追踪方案。涵盖硬件架构设计、I2C/SPI接口配置、传感器初始化抗混叠滤波、中断驱动DMA数据采集、互补滤波卡尔曼滤波姿态解算、零速检测位置估计,以及温度补偿和动态误差校正等关键技术。实测在工业机械臂和无人机场景中实现20dB振动抑制。
weixin_30918633
378
STM32F103RC与WSEN-ISDS运动跟踪系统开发指南
本文详细阐述基于STM32F103RC微控制器与WSEN-ISDS六轴IMU传感器的运动跟踪系统开发全流程,涵盖硬件连接(SPI接口、电源抗干扰设计)、软件初始化、原始数据转换、加速度计/陀螺仪校准、互补滤波姿态解算等核心算法,并给出实时性优化(DMA、中断)、功耗管理及常见通信精度问题调试方法。
378
GPS+IMU STM32
初始化:设置STM32的GPIO、定时器、串行通信接口等,以便GPS和IMU模块建立连接。2.
weixin_41008146
1558
STM32F303RC与WSEN-ISDS的6DoF运动跟踪方案
Playmz
基于stm32实现gps和imu时间同步的代码
在本文中,我们将深入探讨如何基于STM32微控制器实现GPS(全球定位系统)与IMU(惯性测量单元)的时间同步技术。
辉——书生意气
602
stm32IMU
在压缩包"ql IMU"中,可能包含了以下内容:- 代码示例:STM32与MPU6050交互的C语言或汇编代码,可能包括初始化、数据读取和处理的函数。
qlexcel
523
ROS机器人STM32地盘程序
这些数据对于机器人的姿态估计至关重要,可以用来计算机器人的实时位置、方向和运动状态,从而实现自主导航和避障功能。再者,串口通讯是STM32与上位机之间交换信息的关键途径。
ahmatjan5000
2505
STM32读取IMU(ICM-42688-P)数据程序(HAL库)
本资源聚焦于如何使用STM32微控制器通过SPI(Serial Peripheral Interface)总线ICM-42688-P进行通信。
洛洛xin
1336
【C 语言】基于 STM32 HAL 驱动的 ICM-20948 9 轴 IMU 数据读取方案!.zip
通过使用STM32 HAL库驱动ICM-20948,开发者能够实现高效、稳定的传感器数据采集,进而应用于各种需要精确运动跟踪的场景。
木心爱编程
9
STM32F103 SPI驱动 IMU9250
总的来说,STM32F103通过SPI驱动IMU9250涉及了微控制器的外设接口配置、通信协议的理解与实现,以及传感器数据的解析。
leoliusht
580
基于STM32和MPU6050的空中鼠标的设计与实现
标题中的“基于STM32和MPU6050的空中鼠标的设计与实现”是指一个项目,目标是设计和构建一款使用STM32微控制器和MPU6050惯性测量单元(IMU)的无线空中鼠标。
Henry__Zhang
923