ユニット 4 / 9

センサーフュージョンとIoTデータ統合

利益:

  • IMU、エンコーダー、距離センサーデータとAIを組み合わせるフュージョンロジック(インテグレーター/カルマンフィルター)を構築する機能
  • AI を利用して MQTT ベースの IoT データ ストリームとテレメトリを構成および解釈する機能
  • AI 出力におけるセンサーのノイズ、キャリブレーション、時間同期の問題を検出して修正する機能

完璧なセンサーはありません。ジャイロスコープは短期的には非常に正確ですが、時間の経過とともに変動します。加速度センサーは長期的には安定していますが、振動によるノイズが発生します。エンコーダは位置を正確に計測しますが、スリップがあると誤差が生じます。 GPS は広範囲で動作しますが、周波数が低くノイズが多くなります。メカトロニクス エンジニアは、これらの不完全なセンサーから信頼できる単一の真実を導き出さなければなりません。これがセンサーフュージョンです。さらに、最新のシステムでは、このデータはローカルに留まるだけでなく、IoT ネットワークを介してクラウドやコントロール センターに流れます。人工知能は、フュージョン アルゴリズムのセットアップと IoT テレメトリの構成と解釈の両方において強力に役立ちます。この単元では、相補フィルター、カルマン フィルター ロジック、および AI を使用して MQTT ベースの IoT フローを設定し、ノイズと同期トラップをキャッチする方法について説明します。

なぜセンサーフュージョンなのか?

すべてのセンサーには「適切な周波数ゾーン」があります。融合の目的は、それぞれのセンサーが得意な分野で使い、苦手な分野を他のセンサーでサポートすることです。

センサー

強み

弱さ

ジャイロスコープ

短期角速度、高速応答

時間の経過とともに漂流

加速度計

長期傾斜基準(重力)

動作時の振動・騒音

エンコーダ

高解像度の場所

スリップ・バックラッシュエラー

GPS

絶対位置

低周波、騒音、屋内禁止

単一のセンサーに依存すると、そのセンサーの弱点がシステムに導入されます。たとえば、Fusion では、ジャイロスコープの高速だがドリフトする角度と、加速度計の低速だが安定した基準を組み合わせて、高速かつドリフトのない角度を生成します。

相補フィルター

最も単純で最も一般的な融合は相補フィルターです。このアイデアは直感的です。高周波数 (速い変化) ではジャイロスコープを信頼し、低周波数 (ゆっくり、安定) では加速度センサーを信頼します。 1 行の要約:

# 補完フィルター: 痛みの推定 (ピッチ) # alpha ~ 0.98 : ジャイロスコープへの影響が大きく、加速度計への影響が少ない (度/秒)加速度_ange : 加速度センサーから計算された角度 (度) dt : サンプリング周期 (秒) """ gyro_pac =Previous + gyro_speed * dt # ジャイロスコープの戻り値を統合 alpha * gyro_pace + (1 - alpha) *加速度_angle# 検証ロジック: alpha=1 の場合は純粋なジャイロスコープ (ドリフト)、# alpha=0 の場合は純粋な加速度計 (ノイズが多い) 中間値は 2 つのバランスをとります。

ここでの係数 alpha はバランスを決定します。1 に近い場合はジャイロスコープに依存し (ドリフトのリスクが増加します)、0 に近い場合は加速度センサーに依存します (ノイズが増加します)。一般的な値は 0.95 ~ 0.98 です。 AI がこの値を提案する場合がありますが、正しいアルファはシステムのサンプル レートとノイズ特性によって異なります。試験的に設定されています。

ヒント: 積分フィルターを AI に出力する場合は、dt がどのように測定されるかを必ず確認してください。ほとんどの誤差は、dt が一定であると仮定することで発生しますが、実際にはサイクル タイムは変化します。 millis()/timestamp を使用して dt real を測定します。定数は記述しません。

カルマンフィルターロジック

相補フィルターは単純ですが、ノイズ統計をモデル化しません。カルマン フィルターは、センサー ノイズとプロセスの不確実性を確率的にモデル化することにより、(特定の仮定の下で) 最適な推定値を生成します。これは 2 つのステップで動作します。

  1. 予測: システム モデルを使用して、次の状況とその不確実性を予測します。
  2. 更新: 新しい測定値を測定の信頼性 (カルマン ゲイン) と比較して、推定値を修正します。

カルマン ゲイン K は、各ステップで「測定値とモデルをもっと信頼すべきか」という質問に自動的に答えます。測定ノイズが大きい場合、K は小さくなり (モデルの信頼度)、プロセスの不確実性が大きい場合、K は大きくなります (測定の信頼度)。 AI は 1 次元のカルマン フィルターを簡単に作成できます。ただし、ノイズ共分散 (`Q`、`R`) を正しく選択するのはあなたの仕事であり、それらはシステムの実際のノイズから得られます。

注意: AI によって与えられる Q (プロセス ノイズ) と R (測定ノイズ) の値はサンプル/プレースホルダーです。システムの実際の測定ノイズ (センサーが静止しているときに測定される分散など) からこれらを決定しない場合、フィルターは遅すぎるかノイズが多すぎます。 AI によって与えられる共分散を「真の値」として信頼しないでください。

IoT データ ストリーム: MQTT とテレメトリ

fusion で生成されたクリーンなデータは、通常、IoT ネットワーク経由でセンターに転送されます。業界で最も一般的なプロトコルは MQTT です。これは、低帯域幅に適した軽量のパブリッシュ/サブスクライブ モデルです。 AI は、MQTT パブリッシャー/サブスクライバー コードと JSON テレメトリ スキーマを迅速に確立します。

import json, timeimport paho.mqtt.client as mqttclient = mqtt.Client()client.connect("broker.local", 1883, keepalive=60)def telemetry_broadcast(温度, 温度, vibration_rms): message = { "ts": time.time(), # timestamp -- 同期条件 "pain_deg":round(pain, 2), "温度_c":round(温度, 1), "振動_rms":round(温度_rms, 3), "単位": {"痛み": "度", "温度": "℃", "振動": "mm/s"} } client.publish("machine/line1/sensor", json.dumps(message), qos=1)# qos=1: 少なくとも配信一度。重要なデータに対して qos=0 (失われる可能性があります) を使用します。

ここでは 2 つのエンジニアリング上の決定が重要です。(1) 各メッセージにタイムスタンプ (ts) を付ける - 異なるセンサーが異なる時間にサンプリングされ、同期はタイムスタンプを使用する場合にのみ可能です。 (2) QoS レベル - 重要なデータは少なくとも qos=1 (少なくとも 1 回配信) を使用し、qos=0 ではメッセージ損失が許容されます。

ノイズ、校正、同期

融合がどれほど優れていても、入力に 3 つの問題があると結果が歪みます。

  • ノイズ: 生のセンサー データがフィルター処理されずにフュージョンに入力される場合、フュージョン出力にもノイズが含まれます。事前フィルタリング (中央値、ローパス) が必要になる場合があります。
  • キャリブレーション: オフセットとスケールの誤差 (例: 加速度計のゼロ点がシフトしている) は、体系的に融合を誤解させます。センサーは使用前に校正する必要があります。
  • 時間同期: 異なるレートでサンプリングされたセンサーを調整するには、タイムスタンプと補間が必要です (例: 10 Hz GPS と 1 kHz IMU)。

AI はこれらのステップをコードに追加できますが、それぞれが必要かどうか、およびそのパラメータはシステムに固有です。 AI出力では「どこがキャリブレーションですか?」 「タイムスタンプは揃っていますか?」必ず質問してください。

弱いプロンプト / 強いプロンプト

WEAK:「IMU データから角度を計算します。」(どのフィルターですか?ドリフトは処理されますか?dt はどのように扱われますか?不明瞭です。)STRONG:「MPU6050 からの加速度センサーとジャイロスコープのデータを積分フィルターと組み合わせて、ピッチ角を推定します。リアルタイムのタイムスタンプから dt を計算します。定数を想定しません。アルファをパラメーターとして設定します (デフォルトは 0.98)。tane2 で加速度センサーの角度を計算します。フィルターは次のようになります。クラスとして書き込み、以前の角度を保持し、ノイズ用のオプションの中央値プレフィルターを追加します。」

ミニケース

ロボット工学エンジニアのセリンは、二輪バランシング ロボットの角度推定用に AI の補完フィルターを必要としています。 AIはきれいなコードを与えますが、ロボットはゆっくりと片側に傾きます。 Selin は dt をチェックします。コードでは dt が一定の 0.01 秒であると想定していますが、サイクル タイムは Bluetooth テレメトリにより変化します。 dt が実際のタイムスタンプから計算される場合、ドリフトは減少しますが、完全に消えるわけではありません。次に、加速度計の校正を調べます。センサーが静止している場合でも、2°のオフセットが存在します。キャリブレーションオフセットを取り除くと、ロボットは直立します。最後に、MQTT 経由でテレメトリをブロードキャストするときに qos=0 を使用し、臨界角データの場合は qos=1 に増やすことに気付きます。 AI は数分で融合スケルトンを提供しました。しかし、エンジニアの検証では、変数 dt、キャリブレーション オフセット、QoS という 3 つのシステム固有の問題が見つかりました。

よくある間違い

  • dt が一定であると仮定すると、サイクル時間は変化します (融合ドリフト)。
  • センサーをキャリブレーションせずに融合する (系統的オフセット)。
  • タイムスタンプを付けずに、異なる速度のセンサーを整列させようとしています。
  • 実際のノイズからカルマン Q/R 共分散を測定せずに、AI のサンプル値をそのままにします。
  • 重要な IoT データに対して qos=0 を使用することでメッセージ損失を許可します。
  • ノイズを含む生のデータを事前フィルタリングせずに Fusion に提供します。

要約すると

  • Fusion は、各センサーが強い周波数領域で使用し、その弱点を補います。
  • 補数フィルターは単純です。アルファを使用してジャイロスコープと加速度計のバランスを確立します。
  • カルマン フィルターはノイズを確率的にモデル化します。 Q/R は実際のシステムから取得されます。
  • MQTT テレメトリでは、タイムスタンプと適切な QoS がエンジニアリング上の重要な決定事項です。
  • ノイズ、キャリブレーション、時間同期が融合の品質を決定します。
  • dt はリアルタイムで測定されます。 AIに任せることなくキャリブレーションやQoSを検証します。

アプリケーションタスク

IMU (実際またはシミュレートされたジャイロ + 加速度計データ) の場合、AI に積分フィルターを生成させ、dt が実際のタイムスタンプから計算されるようにします。次に: (1) 0.90、0.98、および 1.0 のアルファを試し、ドリフトとノイズのバランスを観察します。(2) 意図的な固定オフセット (キャリブレーション エラー) をセンサ​​ーに追加し、Fusion 出力がどのようにドリフトするかを確認します。(3) データを MQTT JSON スキーマに変換し、タイムスタンプと単位フィールドを追加します。どのアルファ値がデータに対して最もバランスのとれた結果をもたらすか、およびキャリブレーション オフセットが出力をどの程度歪ませるかに注目してください。