2. データ出力¶
対象:IMU600-V2/FW 0.11.2/GUI v1.6.1。
仕様v1.1の第2章、4–10ページの順序です。番号はメッセージ名の次から数え、<...>はプレースホルダー、*XXはXORチェックサムです。実際の行末はCRLF(\r\n)です。
- 2.1 $SPNVIMURAW:個別IMU(1組3行)
- 2.2 $SPNVIMU:3個のIMU合成データ
- 2.3 $SPNVBARO:気圧計データ
- 2.4 $SPNVAHRS:姿勢データ
- 2.5 出力モードと帯域
連続モードは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