reCamera Pro のオンボード IMU を用いた傾き・振動検出

はじめに
この記事では、reCamera Pro に搭載されている 6 軸慣性計測ユニット(IMU)である ICM-42670-P ジャイロスコープを使用して、デバイスの傾きおよび振動検出を実装する方法を説明します。デバイスが傾いたり振動したりすると、システムはオンボードスピーカーから対応する音声警告を再生します。本チュートリアルを通じて、Linux IIO ドライバを介して生のジャイロスコープデータを読み取る方法、ALSA オーディオドライバを使用して警告音を再生する方法、そして最終的に完全な検出および警告プログラムを統合する方法を学びます。
ハードウェアの準備
- reCamera Pro 1 台
| 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を使用して再キャリブレーションを行ってください。
技術サポートと製品ディスカッション
弊社製品をお選びいただきありがとうございます。私たちは、製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートを提供しています。お好みやニーズに応じて選択いただけるよう、複数のコミュニケーションチャネルを用意しています。
