2. データ出力

対象:IMU600-V2/FW 0.11.2/GUI v1.6.1。

仕様v1.1の第2章、4–10ページの順序です。番号はメッセージ名の次から数え、<...>はプレースホルダー、*XXはXORチェックサムです。実際の行末はCRLF(\r\n)です。

連続モードはRATEに従い、初期値50 Hz(20 msごとに1組)です。RAWは校正済み個別データ、FUSEDは使用可能IMUの合成値です。外部トリガーの最初の立ち上がりは起点を作り、以降の各エッジで1組を出力します。

機体軸はFRD:+X前、+Y右、+Z下です。水平静止時azは約−9.79 m/s²です。IMUのts_usは起動からの積分区間終端(u64、µs)で、ホスト受信時刻ではありません。

2.1 $SPNVIMURAW — 個別IMUデータ(1組3行)

$SPNVIMURAW,<id>,<ts_us>,<gx>,<gy>,<gz>,<ax>,<ay>,<az>,<temp>,<n>,<status>,<dthx>,<dthy>,<dthz>,<dvx>,<dvy>,<dvz>,<dt>*XX
# フィールド 型/小数桁 単位 説明
1 id 整数 — IMU番号1、2、3。
2 ts_us u64 µs 計測区間の終端。同一組のRAW 3行とFUSEDで共通。
3–5 gx / gy / gz 浮動小数点 4桁 °/s 区間内の生標本(公称1475 Hz)から算出した3軸角速度。
6–8 ax / ay / az 浮動小数点 4桁 m/s² 区間平均比力。加速度計測定値で重力の影響を含む。
9 temp 浮動小数点 2桁 °C 該当IMUの内部温度。
10 n 整数 — 生標本数:100 Hzで約14–15、50 Hzで約29–30、5 Hzで約295。
11 status 整数(bit) — 区間内全標本の状態をbit OR。0はエラーなし・PPSなし。2.1.1参照。
12–14 dthx / dthy / dthz 浮動小数点 7桁 rad 累積回転ベクトルΔθ。台形積分と2次coning補正。
15–17 dvx / dvy / dvz 浮動小数点 6桁 m/s 回転・sculling補正を含む累積速度増分Δv。静止時dvz ≈ −9.79 × dt。
18 dt 浮動小数点 6桁 s 実積分時間、約1/RATE。dth/dtはrad/s(°/sは180/π倍)、dv/dtは平均比力。

2.1.1 statusの判定

生標本ごとに内部SPI応答7個を読みます。50 HzのRAW 1件は約30標本・210応答です。途中のフラグも保持し、最後の標本だけでなく区間全体を表します。

bit/値 名前/発生源 意味とデータ信頼性 原因と対処
bit0 / 1 SPI_CRC 48-bit内部SPI応答のCRC-8不正またはレジスタアドレス不一致。該当値は0となり平均へ影響。 通常0、crc_errも増加。内部センサー通信のノイズ、SCK速度、CSタイミングを確認。
bit1 / 2 CE · frame CE 読取専用書込、未定義アドレス、EOI後書込などの命令エラー。データ自体は有効。 通常は発生しないためメーカーへ報告。合成ではエラーマスクにより除外。
bit2 / 4 IDS · frame IDS Internal Data Status:センサー内部エラー。データに疑いあり。 通常S_ERROR(bit3)と同時に発生。
bit3 / 8 S_ERROR · S[1:0]=01 電源・時計・温度・自己試験異常。データは信頼不可。 継続時REINIT,1。回復しなければ該当ハードウェアを確認。
bit4 / 16 S_SAT · S[1:0]=10 いずれかの軸が±300 °/sまたは±156.9 m/s²超。フィルター前ピークも対象。Δθ/Δvが過小になる場合あり。 衝撃・激しい運動・過大振動が原因。通常静止や一般飛行では発生しない。
bit5 / 32 S_INIT · S[1:0]=11 初期化中。通常電源投入/リセット後約250 ms。データは信頼不可。 起動またはREINIT後の一時的な状態。
bit7 / 128 PPS · fw 0.8.0 ts_usがGPS PPS立ち上がりに対応。整列時毎秒1件。エラーではない。 status & 0x7FでPPSを除いてエラー判定。
  • 1応答のS[1:0]は初期化 > エラー > 飽和 > 正常の優先順位で1状態。バッチORではbit3/4/5が同時に立ち得ます。PDFはbit6の用途を定義していません。
  • 通常(status & 0x7F) ≠ 0を除外し、128は使用可能です。3個ともエラーの場合は3個での合成へ戻るため、3.1.1のRAW確認が必要です。
  • 代表値:0正常、1 SPI検証/アドレス、16飽和、12(8+4)センサーエラー、32または44初期化、128 PPSのみ。

標本時計は1470 Hzと1461 Hzなどの差があり、共通出力境界でもnが1異なる場合があります。30標本で20.4 ms、別の29標本で19.8 msなど、共通ts_usでも完全同時サンプリングではありません。

50 Hz静止例(PDFの数値を使用し、完全な1行でXORを再計算):

$SPNVIMURAW,1,12345680,0.0123,-0.0456,0.0089,0.0210,-0.0150,-9.7912,31.25,30,0,0.0000043,-0.0000159,0.0000031,0.000420,-0.000300,-0.195824,0.020000*0F

2.2 $SPNVIMU — 3個のIMU合成データ(1組1行)

$SPNVIMU,<ts_us>,<gx>,<gy>,<gz>,<ax>,<ay>,<az>,<temp>,<dthx>,<dthy>,<dthz>,<dvx>,<dvy>,<dvz>,<dt>,<n_used>,<flags>*XX
# フィールド 型/小数桁 単位 説明
1 ts_us u64 µs 同じ組のRAWと同じts_us。
2–4 gx / gy / gz 浮動小数点 4桁 °/s 合成3軸角速度。
5–7 ax / ay / az 浮動小数点 4桁 m/s² 合成3軸比力。
8 temp 浮動小数点 2桁 °C 採用IMUの平均温度。
9–11 dthx / dthy / dthz 浮動小数点 7桁 rad 合成回転ベクトルΔθ。
12–14 dvx / dvy / dvz 浮動小数点 6桁 m/s 合成速度増分Δv。
15 dt 浮動小数点 6桁 s 採用IMUのdt平均。
16 n_used 整数 — 使用IMU数、1–3。
17 flags 整数(bit) — 合成状態。複数bit可。0は3個とも正常・採用、PPSなし。
bit/値 名称 説明
bit0 / 1 IMU1_REJECTED IMU1未採用:(status & 0x7F) ≠ 0、または継続偏差が除外条件に到達。
bit1 / 2 IMU2_REJECTED 同じ条件でIMU2を除外。
bit2 / 4 IMU3_REJECTED 同じ条件でIMU3を除外。
bit3 / 8 SPREAD_WARN 有効しきい値の半分超。全しきい値超でも継続時間不足で未除外の場合を含む。
bit4 / 16 DEGRADED 使用可能IMUが2個未満で、この出力は1個のみ。
bit5 / 32 INCOMPLETE 準備済みIMUのデータが全部揃っていない。
bit6 / 64 SATURATED fw 0.5.0以降:少なくとも1個がS_SAT。範囲外運動は完全に測れず、INSで重みを下げるか推定誤差を増やす。
bit7 / 128 PPS fw 0.8.0以降:ts_usがGPS PPS立ち上がりに一致。時刻マーカーでエラーではない。

2.3 $SPNVBARO — 気圧計データ

$SPNVBARO,<ts_us>,<press_hpa>,<temp_c>,<alt_m>,<status>*XX
# フィールド 型/小数桁 単位 説明
1 ts_us u64 µs Forced mode:測定開始時刻。Normal mode:新データ準備完了を検出した時刻。
2 press_hpa 浮動小数点 4桁 hPa (= mbar) IIR係数3の気圧。ArduPilot SCALED_PRESSURE.press_absと同単位、100倍でPa。表示分解能0.0001 hPa = 0.01 Paは精度ではない。osr_pはSPNVINIT,B参照。
3 temp_c 浮動小数点 2桁 °C 気圧チップ内部温度。外気温ではなく基板温度に近い。
4 alt_m 浮動小数点 2桁 m 標準大気高度:44330.77 × (1 − (p/1013.25)^0.190263)。変化・作図用。天候に依存し正確な標高ではなく、高気圧では負値もある。
5 status 整数(bit) — 0正常。bit0=1は取得前のI2C NACK/バス競合が再試行で回復したことを示す。

fw 0.5.0以降はForced mode、50 Hzが初期値です。IMUと起動時計を共有し、50 Hzでは20000 µsごとに測定開始。BARO ts_usは測定開始、IMU ts_usは積分終端です。完了はconv_us(SPNVINIT,B)後となり、同一時刻でも計測区間は異なります。

BRATE 圧力OSR 温度OSR IIR
10 / 25 Hz 16× 2× 3
50 Hz 8× 2× 3
100 Hz 4× 1× 3

FWは変換時間が周期−3 ms以内となるOSRを選びます。BARO,0/BARO,1で無効/有効、BRATE,10/25/50/100で速度変更(前に$SPNVCMD,を付加)。健全性はSPNVSYSのbaro_samples・baro_i2c_err・baro_timeouts・baro_staleを確認。

$SPNVBARO,9651290,1017.3040,44.14,-33.69,0*20

2.4 $SPNVAHRS — 姿勢データ

$SPNVAHRS,<ts_us>,<roll>,<pitch>,<yaw>,<q0>,<q1>,<q2>,<q3>,<align>,<flags>,<bgx>,<bgy>,<bgz>,<zb_s>*XX
# フィールド 型/小数桁 単位 説明
1 ts_us u64 µs 同じ組のSPNVIMUと同じ。
2 roll 浮動小数点 3桁 deg ロール−180…180、右傾斜が正。FRD/NED、ZYXオイラー角。
3 pitch 浮動小数点 3桁 deg ピッチ−90…90、機首上げが正。
4 yaw 浮動小数点 3桁 deg ヨー0…360、上から時計回りが正。align=1では0からの相対角でドリフトする。
5–8 q0 / q1 / q2 / q3 浮動小数点 6桁 — 機体→NEDのHamilton四元数。q0はスカラー、v_n = R(q) · v_b。
9 align 整数 — 整列状態、下表参照。
10 flags 整数(bit) — 姿勢計算状態、下表参照。
11–13 bgx / bgy / bgz 浮動小数点 4桁 °/s 動作中の機体軸3軸ジャイロバイアス推定、診断用。
14 zb_s 浮動小数点 1桁 s fw 0.9.2:連続静止0–10秒。移動で0、10秒で推定を適用しBIAS_CAL設定。AZB,0では0固定。
align 名称 GUI表示例 説明
0 INIT Aligning… 起動/AHRS,reset後1秒は静止データ収集中。roll・pitch・yawは利用不可。
1 LEVELED Heading: NOT ALIGNED roll/pitch利用可。yawは外部基準なし、0から積分しドリフトする。
2 ALIGNED Heading: aligned (manual) 方位基準設定済み。現在はHDG手動設定のみで、flagsが出所を示す。
bit/値 名称 説明
bit0 / 1 HIGH_DYN 比力大きさとgの差 >0.5 m/s²、角速度 >50 °/s、または重力方向誤差 >5°。Kpを0.2に下げ加速度修正を弱める。
bit1 / 2 BIAS_FROZEN 動的状態、角速度 >5 °/s、または比力とgの差 >0.2 m/s²。バイアス学習のみ停止し姿勢更新は継続。
bit2 / 4 HDG_MANUAL 現在方位は$SPNVCMD,HDGで手動設定。
bit3 / 8 ACC_REJECT 比力とgの差 >3 m/s²。この更新はジャイロのみ、加速度修正なし。
bit4 / 16 INIT_MOVING 初期1秒に移動してバイアス未取得、水平精度低下。静止後AHRS,resetを実行。
bit5 / 32 BIAS_CAL fw 0.9.1:10秒以上の静止データでZを含む3軸推定完了。警告ではなく完了状態。方位ドリフト仕様は完了後の値。
bit6 / 64 STATIC fw 0.9.1:直近10秒が静止と判定され、バイアス更新中。

静止バイアス推定AZBは出荷時有効で、$SPNVCMD,AZB,0/1で制御します。10秒ごとに各ジャイロ軸標準偏差 <0.1 °/s、加速度判定値 <0.1 m/s²、動的フラグなしを確認。平均から推定し初回は直接適用してBIAS_CALを設定。GUIには「校正中 x / 10 s、静止してください」と表示できます。

FUSEDのΔθで四元数を更新し、Δv/dtで重力方向を観測します。関連操作はAHRS,0/AHRS,1/AHRS,reset、HDG,<deg>、AKP/AKI。コマンド構文参照。ASCII AHRSは約120 B/行です。

2.5 出力モードと帯域

$SPNVCMD,OUT,raw|fused|both|noneでIMU出力を選択(初期both)。送信時は値を1個選びます。460800 bps・8N1のUART1は約46 kB/sです。

設定 データ量 結果
50 Hz both + BARO 50 Hz + AHRS 50 Hz ≈38 kB/s 初期値、帯域内。
100 Hz fused + AHRS ≈26 kB/s 帯域内。PDFが実運用向けに推奨。
100 Hz raw ≈45 kB/s 上限付近。時々行単位で破棄。
100 Hz both ≈59 kB/s 帯域超過。行単位の破棄が発生。

200/400/500/1000 Hzではbinaryと高速ボーレートを使用し、Binary帯域表を参照。200/400/500 Hzはfw 0.10.3以降です。SPI3のみならOUT,noneでUART IMU出力を停止。AHRS/BAROは別制御です。SPNVSYS uart_dropの継続増加を確認します。


原資料:IMU600-V2 Communication Protocol v1.1 · PDFページ 4–10

原ページを読む · 3資料の章対応と相違点

このカテゴリの概要 · 設定ガイド一覧