2. 資料輸出

適用於 IMU600-V2/韌體 0.11.2/GUI v1.6.1。

本頁依《通訊協定說明 v1.1》第 2 章、第 4–10 頁的順序,說明每種輸出訊息。下列欄位編號從訊息名稱後的第 1 個欄位開始;<...> 是佔位符、*XX 是 XOR 校驗碼,實際每行以 CRLF(\r\n)結尾。

連續模式依 RATE 定時輸出,預設 50 Hz(每 20 ms 一批)。RAW 是已套用校正的單顆資料,FUSED 是可用 IMU 的合併結果。外部觸發模式的第一個 EXT_TRIGGER 上升緣只建立起點,之後每個上升緣產生一批。

機體座標採 FRD:+X 向前、+Y 向右、+Z 向下。水平靜置時,az 約為 −9.79 m/s²。IMU 的 ts_us 從開機時開始計時,記錄的是這筆資料量測時段的結束時間(u64、µs),不是電腦收到資料的時間。

2.1 $SPNVIMURAW — 單顆 IMU 資料(每批 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 與 FUSED 相同。
3–5 gx / gy / gz 浮點 4 位 °/s 將本次輸出期間收集到的原始資料進行運算,得到三軸角速度。每顆 IMU 每秒約取樣 1475 次。
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) — 將本週期所有樣本的狀態做逐位元 OR,保留期間出現過的每一種旗標。0 表示沒有錯誤,也沒有 PPS 標記,詳見 2.1.1。
12–14 dthx / dthy / dthz 浮點 7 位 rad 累積旋轉向量 Δθ;梯形積分並加入二階圓錐運動(coning)補償。
15–17 dvx / dvy / dvz 浮點 6 位 m/s 累積速度變化 Δv,包含旋轉與 sculling 補償;靜置時 dvz ≈ −9.79 × dt。
18 dt 浮點 6 位 s 實際積分時間,約為 1/RATE。dth/dt 為 rad/s,換成 °/s 需乘 180/π;dv/dt 為平均比力。

2.1.1 如何判讀 status

每個原始樣本需讀取 7 個內部 SPI 回應封包;50 Hz 的一筆 RAW 約含 30 個樣本、210 個回應。只要其中一個回應出現旗標,status 就會保留該旗標。因此,它反映的是整個週期的狀況,不只是最後一個樣本。

位元/值 名稱/來源 意義與資料可信度 原因與處置
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 上升緣,對齊時每秒一筆;本身不是錯誤。 用 status & 0x7F 排除 PPS 位元後,再判斷錯誤。
  • 單個回應的 S[1:0] 只能有一種狀態,優先序:初始化 > 錯誤 > 飽和 > 正常;整批 OR 後,bit3/4/5 可能同時出現。PDF 未定義 bit6 的用途。
  • 一般情況下 (status & 0x7F) ≠ 0 的 IMU 會被排除;status=128 仍可採用。若三顆同時有錯誤,會退回使用三顆產生 FUSED,必須同時檢查 RAW,詳見 3.1.1。
  • 常見值: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 相同,也不表示三顆 IMU 在完全相同的瞬間取樣。

50 Hz 靜置示例(沿用 PDF 的數值,依完整單行重新計算 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 — 三顆 IMU 的合併資料(每批 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 合併後三軸角速度。
5–7 ax / ay / az 浮點 4 位 m/s² 合併後三軸比力。
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) — 合併狀態,可同時設多個位元;0 表示三顆正常且皆採用、無 PPS 標記。
位元/值 名稱 說明
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 起,至少一顆出現 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 是積分終點。量測完成會延後一個轉換時間,見 SPNVINIT,B 的 conv_us;即使時間戳相同,也不代表量測時段相同。

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

韌體會自動選擇 OSR,讓量測轉換時間比輸出週期至少短 3 ms。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 運作中估計的機體座標三軸陀螺零偏,供診斷。
14 zb_s 浮點 1 位 s fw 0.9.2:連續靜止 0–10 秒,有移動歸零;滿 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 表示。
位元/值 名稱 說明
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);表示校正已完成,不是警告;航向漂移規格以校正完成後的表現為準。
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。送出指令時,請從列出的選項中選一個填入。UART1 460800 bps、8N1 約可承載 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 資料。OUT 選擇的是 IMU 內容,AHRS/BARO 各有獨立開關;觀察 SPNVSYS uart_drop 是否持續增加。


原始文件:IMU600-V2 Communication Protocol v1.1 · PDF 頁 4–10

原文件逐頁閱讀 · 三份文件逐章對照與差異說明

回到本分類總覽 · 全部設定指南