メインコンテンツまでスキップ

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 にデプロイして実行する方法を説明します:

  1. SSH を介してフォルダ全体を reCamera Pro にアップロードします:
scp -r ./icm42670_project root@deviceIP:/userdata
  1. メインプログラムを実行します:
./main.py
注記
  1. プログラムは初回実行時にキャリブレーション処理を行います。main.py を実行する前に、デバイスが安定して設置されていることを確認してください。再キャリブレーションが必要な場合(デフォルトのキャリブレーション時間は 3 秒)、次を実行します:
./main.py --force-calib
  1. コードの使用方法ヘルプを表示します:
./main.py --help

トラブルシューティング​

  • ジャイロスコープデータを読み取れない:/sys/bus/iio/devices/iio:device1 パスが存在し、in_anglvel_x_raw ファイルが読み取り可能であることを確認してください。パスが存在しない場合、IIO ドライバがロードされていない可能性があります。カーネルモジュールを確認してください。
  • 音声再生に失敗する:音声ファイルが WAV 形式であり、aplay コマンドが使用可能であることを確認してください。スピーカーから音が出ない場合は、ALSA のボリューム設定を確認してください。
  • キャリブレーションに失敗する:キャリブレーション中はデバイスが静止し水平になっていることを確認してください。キャリブレーション時間が不十分な場合は、--force-calib を使用して再キャリブレーションを行ってください。

技術サポートと製品ディスカッション​

弊社製品をお選びいただきありがとうございます。製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートをご用意しています。お好みやニーズに応じて選択いただけるよう、複数のコミュニケーションチャネルを提供しています。

Loading Comments...