使用 reCamera Pro 板载 IMU 实现倾斜与晃动检测

介绍
本文介绍如何使用 reCamera Pro 板载的六轴惯性测量单元(IMU)——ICM-42670-P 陀螺仪——来实现设备倾斜与晃动检测。当设备发生倾斜或晃动时,系统会通过板载扬声器播放相应的语音警告。通过本教程,你将学习如何通过 Linux IIO 驱动读取原始陀螺仪数据、使用 ALSA 音频驱动播放警告音,并最终整合出一个完整的检测与告警程序。
硬件准备
- 一台 reCamera Pro
| reCamera Pro |
|---|
![]() |
实现原理
通过采集板载陀螺仪(ICM-42670-P)的原始角速度数据,系统判断设备是否发生倾斜或晃动。当前实现采用简单的阈值判断方式,后续可根据实际需求进行优化。
晃动检测
当任一轴向的角速度数据绝对值超过预设阈值时,即判定为晃动。
倾斜检测
当任一轴向的角速度数据绝对值超过预设阈值时,即判定为倾斜。
板载陀螺仪数据采集
reCamera Pro 的 Linux 环境使用 IIO(Industrial I/O)驱动,通过 sysfs 接口暴露传感器数据和配置,供用户空间应用访问。传感器数据路径为:
/sys/bus/iio/devices/iio:device1
陀螺仪的原始数据文件在该目录下暴露,如下图所示:

要获取陀螺仪的原始数据,只需读取对应的文件。例如,要获取陀螺仪 X 轴数据,读取 in_anglvel_x_raw 文件:
cat /sys/bus/iio/devices/iio:device1/in_anglvel_x_raw
执行结果如下图所示:

使用板载扬声器
reCamera Pro 的板载扬声器通过标准 Linux ALSA 驱动进行控制。你可以使用以下命令查看当前声卡设备:
aplay -l

使用以下命令播放音频文件:
aplay test.wav
aplay 是一个 ALSA PCM 播放器。它只能播放 PCM/WAV 格式数据,无法解码 MP3。你可以使用以下命令将 MP3 转换为 WAV 格式:
ffmpeg -i test.mp3 test.wav
基础实现代码
在了解了如何读取原始陀螺仪数据和播放音频之后,我们来编写代码实现完整功能。
陀螺仪数据采集
下面是一个最小函数示例,演示如何采集 X 轴陀螺仪数据。你可以在此基础上扩展以获取其他轴的数据。
#!/usr/bin/env python3
DEVICE = "/sys/bus/iio/devices/iio:device1"
with open(f"{DEVICE}/in_anglvel_scale", "r") as f:
scale = float(f.read().strip())
with open(f"{DEVICE}/in_anglvel_x_raw", "r") as f:
raw = int(f.read().strip())
gyro_x = raw * scale
print(f"Gyroscope X: {gyro_x:.6f} rad/s")
音频播放
当设备触发倾斜或晃动时,需要播放相应的语音警告。下面的代码演示如何使用 Python 播放音频:
#!/usr/bin/env python3
import subprocess
AUDIO = "test.wav"
subprocess.run([
"aplay",
AUDIO
])
最终实现代码
- 当设备被晃动时,将播放 “警告:请勿晃动设备”。
- 当设备发生倾倒时,将播放 “警告:设备已倾倒。请立即检查设备状态以防止发生意外”。
相关代码可从 reCamera_PRO_IMU_Detect 下载。

代码部署
下面的步骤说明如何将代码部署到 reCamera Pro 并运行:
- 通过 SSH 将整个文件夹上传到 reCamera Pro:
scp -r ./icm42670_project root@deviceIP:/userdata
- 运行主程序:
./main.py
- 程序首次运行会进行一次校准操作。请在运行
main.py前确保设备放置稳定。如需重新校准(默认校准时长为 3 秒),运行:
./main.py --force-calib
- 查看代码使用帮助:
./main.py --help
故障排查
- 无法读取陀螺仪数据:请确认路径
/sys/bus/iio/devices/iio:device1是否存在,以及in_anglvel_x_raw文件是否可读。如果路径不存在,可能是 IIO 驱动未加载;请检查内核模块。 - 音频播放失败:请确认音频文件为 WAV 格式,并且系统中存在
aplay命令。如果扬声器无声,请检查 ALSA 音量设置。 - 校准失败:请确保设备在校准过程中保持静止且水平。如果校准时间不足,可使用
--force-calib重新校准。
技术支持与产品讨论
感谢你选择我们的产品!我们为你提供多种支持方式,以确保你在使用产品的过程中体验顺畅。我们提供多种沟通渠道,以满足不同偏好和需求。
