2. 資料輸出¶
適用於 IMU600-V2/韌體 0.11.2/GUI v1.6.1。
本頁依《通訊協定說明 v1.1》第 2 章、第 4–10 頁的順序,說明每種輸出訊息。下列欄位編號從訊息名稱後的第 1 個欄位開始;<...> 是佔位符、*XX 是 XOR 校驗碼,實際每行以 CRLF(\r\n)結尾。
- 2.1 $SPNVIMURAW:單顆 IMU(每批 3 行)
- 2.2 $SPNVIMU:三顆 IMU 合併資料
- 2.3 $SPNVBARO:氣壓計資料
- 2.4 $SPNVAHRS:姿態資料
- 2.5 輸出模式與頻寬
連續模式依 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