單元 16 · 多感測器與實作案例

HSB 多相機

HSB 多感測器

Thor 的 Holoscan Sensor Bridge 支援「感測器走乙太網路」——多顆感測器資料匯流進 GPU,適合機器人多感測器融合。

多感測器HSB(乙太網路)HoloscanGPU 即時處理
HSB 重點:① 頻寬規劃(25GbE)② 每顆感測器時序同步 ③ host 端解包與格式匹配。

完整案例:Thor 接一顆 OV9281

  1. 感測器走 MIPI(近)或 HSB(遠)。
  2. 確認 I2C 通、讀到 ID、argus/Holoscan 出圖。
  3. 確認 AE/AWB 自動收斂。
  4. RAW 分析(黑位、雜訊、缺陷像素)。
  5. NVIDIA 工具做 LSC / 色彩基準。
  6. 不同場景回歸。

⚠️ Thor 具體 SDK/工具以 NVIDIA 最新文件為準。

最佳實踐

16.4 深入:客製 OV9281 接入的檢查清單

checklist
□ 硬體:CSI lane / I2C / reset / clock
□ DT overlay:compatible / reg / clocks / reset-gpios
□ 驅動:現成 or 改 init table
□ dmesg:probe 成功?讀到 ID?
□ 出圖:能取到幀?
□ RAW:Bayer order / 黑位 / 缺陷像素
□ 調校:黑位 → LSC → AWB/CCM → NR/Sharpen
紀律:一次只換一個變數,保留官方模組當對照組。

16.5 總複習:寫下你的 SOP

  1. 寫一份「你的 bring-up SOP」。
  2. 寫一份「你的調校流程與參數」。
  3. 放進 repo 成為團隊資產。

16.6 深入原理:HSB 多感測器頻寬與同步

多感測器走 HSB(25GbE)時,兩個必修課:頻寬規劃時間同步

面向計算/方式檢查
頻寬Σ (W×H×bit × fps)務必 < 25GbE 可用頻寬(留 headroom)
同步PTP/IEEE 1588 或感測器 frame sync多相機時間戳對齊
封包每顆感測器獨立 channelhost 端一一對應
雙 OV9281 頻寬估算
每顆:1280×800 RAW10 @ 120 fps
  = 1280×800×10 × 120 = 1,228,800,000 bit/s ≈ 1.23 Gbps
兩顆:≈ 2.46 Gbps
25GbE headroom:25 × 0.7(保守)≈ 17.5 Gbps 可用
→ 2.46 Gbps 完全沒問題,還能再加十顆
(若用 12MP RAW12 @ 30fps = 4.5 Gbps/顆,25GbE 約可載 3–4 顆)
陷阱:25GbE 是「線路速率」,不是「可用速率」。封包 overhead、PCIe/GPU 瓶頸都要扣。規劃請用 50–70% 為安全上限。

16.7 Worked Example:雙感測器同步曝光(frame sync)

兩顆 OV9281 同步取樣
1. 硬體:接 frame sync(FSIN)pin,由 host 給同步脈衝
2. 確認兩顆都設「external sync」模式
   (依感測器 register,unit-03 的方法回讀驗證)
3. 驗證同步:
   - 取兩顆同場景的幀,比較時間戳
   - 或用「同一轉動物體」確認無相位差
4. (HSB) 若走網路:用 PTP 對齊時間基準
   # 時間戳差 < 1 幀週期 → 同步可接受
為什麼重要:立體視覺、多視角融合需要「同一瞬間」的曝光,否則深度圖會因運動不一致而產生誤差。同步是 HSB 多感測器的核心價值。

16.8 疑難排解決策樹:多感測器異常

「兩顆畫面不同步 / 掉幀」
1. 個別單顆都正常?
   ├─ 否 → 回到單顆 bring-up(unit-06)
   └─ 是 ─┐
2. 總頻寬超過安全上限?
   ├─ 是 → 降 fps/解析度,或拆通道
   └─ 否 ─┐
3. 時間戳/同步基準一致?
   ├─ 否 → 設 frame sync 或 PTP
   └─ 是 ─┐
4. host 端 channel 一一對應?
   └─ 否 → 對應錯誤,修 Holoscan 設定

16.9 常見錯誤與陷阱

陷阱 1:忽略單顆先驗——多感測器問題 80% 是「某一顆」沒通。先逐顆 bring-up、逐顆獨立 LSC,才談融合。
陷阱 2:頻寬算「線路速率」——25GbE 只算裸資料,實際剩 50–70%。算錯會掉幀。
陷阱 3:不同步就上線——立體/融合應用對時間戳敏感,務必驗證同步(16.7)。

16.10 練習

  1. 估算你專案的多感測器總頻寬,對照 25GbE 安全上限。
  2. 驗證兩顆感測器的時間戳差(或設計同步實驗)。
  3. 寫一份可重複執行的「多感測器 bring-up + 調校」SOP。

16.11 深入原理:多鏡頭系統的三個時鐘

多感測器融合至少要區分三種時間:曝光時間(物理世界被取樣的時刻)、sensor frame counter(感測器產生第幾幀)、host arrival time(封包到達 GPU 的時刻)。HSB 的網路延遲可能讓 arrival time 不等於曝光先後,因此融合要依硬體 frame sync、PTP timestamp 或 metadata 對齊,不能只依封包抵達順序。

FSIN / sensor clockexposure timestamppacket/frame counterHSB/PCIe arrivalHoloscan synchronizer
證據能證明什麼不能單獨證明
link up實體/網路層可通感測器資料正確
相同 FPS平均速率接近每幀時間對齊
相同 arrival timehost 收到接近曝光同時發生

16.12 Worked Example:兩顆相機的完整驗證表

從單顆到融合的 gate
Gate A:各自 bring-up
  cam0/cam1 都能讀 ID、取 RAW、固定曝光、無 CSI/HSB error
Gate B:各自畫質
  黑位、Bayer、LSC、AWB、SNR 通過同一套門檻
Gate C:同步
  frame counter 無跳號;曝光 timestamp 差 ≤ 0.5 ms
Gate D:頻寬與長跑
  Σ raw bitrate + overhead < 25GbE 安全上限
  30 分鐘無 drop、queue 不持續成長、GPU latency 穩定
Gate E:融合輸出
  用移動標記物量測視差/相位,保存原始 metadata 與結果

只通過 Gate A 不能宣稱多鏡頭系統完成。把每個 gate 的輸入、命令、門檻與 artifact 存進 repo,日後換線材、韌體或 sensor 才能重跑。

16.13 疑難排解決策樹:多鏡頭掉幀或融合錯位

先找單點故障,再找系統性故障
1. 單獨跑每顆 30 分鐘都穩定?
   ├─ 否 → 回單顆 power/I2C/CSI/HSB bring-up
   └─ 是 ─┐
2. 總 bitrate 加 overhead 是否超安全上限?
   ├─ 是 → 降解析度/fps、分流、提高 buffer/網路預算
   └─ 否 ─┐
3. frame counter 是否連續且 channel 對應正確?
   ├─ 否 → 查封包丟失、queue、Holoscan channel mapping
   └─ 是 ─┐
4. exposure timestamp 是否對齊?
   ├─ 否 → 查 FSIN/PTP/clock domain
   └─ 是 → 查 calibration、鏡頭幾何與融合演算法

16.14 常見錯誤與陷阱

陷阱 1:以為 25GbE 裸速就是可用預算。封包、metadata、重傳/緩衝、PCIe 與 GPU copy 都要留 headroom;以長時間測試結果為準。
陷阱 2:只用同一場景肉眼看同步。靜態場景看不出錯位;用高速移動標記、時間戳與 frame counter 一起驗證。
陷阱 3:多顆同時調校。一次改一顆、一次改一層;否則無法知道掉幀或色差來自哪個 sensor。

16.15 練習

  1. 替你的每顆感測器建立 Gate A–E 表格,填入明確命令、門檻與輸出檔。
  2. 用解析度、bit depth、fps 與 overhead 估算總頻寬,並以 30 分鐘長跑驗證。
  3. 設計一個移動標記同步實驗,同時保存 frame counter、exposure timestamp、arrival timestamp。
看完這單元你應該能說出:
  • HSB 多感測器與 Holoscan 管線。
  • Thor 接 OV9281 完整案例。
  • 「自動化收斂 + 只干預異常」。
  • 最佳實踐。

延伸閱讀

16.16 進階真實情境 Worked Example:六感測器物流分揀系統

場景:Thor T5000 用於自動物流分揀線。6 顆 OV5640(5 MP、RAW12、30 fps)分別拍攝包裹的頂面與四個側面,Holoscan 管線即時做 3D 重建與條碼讀取。

六感測器系統的完整驗證
# 頻寬計算:
# 每顆 OV5640:2592×1944×12×30 = 1.80 Gbps
# 6 顆 = 10.8 Gbps
# 25GbE 可用(70%)= 17.5 Gbps → 可行

# Gate A:各自 bring-up
# 6 顆逐一驗證:I2C 通、ID 正確、取 RAW 正常、無 CSI/HSB error

# Gate B:各自畫質
# 黑位、Bayer、LSC、AWB、SNR 通過門檻
# 每顆的 LSC 獨立校正(不同角度、不同 shading)

# Gate C:同步
# 6 路 frame counter 無跳號
# 曝光 timestamp 差 ≤ 0.5 ms(用 PTP 同步)

# Gate D:頻寬與長跑
# Σ raw bitrate + overhead < 17.5 Gbps
# 2 小時無 drop、queue 不持續成長

# Gate E:融合輸出
# 3D 重建精度 < 1 mm(用標準尺寸方塊驗證)
# 條碼讀取率 > 99.5%(用 100 個不同角度包裹測試)
設計決策:六感測器系統的驗證必須逐 Gate 通過。Gate A 通過不代表 Gate E 通過——同步、頻寬、融合各自有獨立的驗證標準。

16.17 深入原理擴充:多感測器的 PTP 時間同步精度

IEEE 1588 PTP(Precision Time Protocol)可把多台設備的時鐘同步到 < 1 µs 精度。但 HSB 橋接器的 PTP 實作可能有數百 µs 的 jitter(取決於橋接器品質)。在「同一台 Thor 內」的多感測器,用 FSIN(Frame Sync)硬體 pin 同步更精準(< 1 line time ≈ 17 µs)。

容易忽略的邊界案例:若 6 顆感測器分佈在不同位置(車身、手臂、頭部),FSIN 走線過長會引入傳播延遲(~5 ns/m)。6 顆分散在 5 米範圍內,最遠兩顆的 FSIN 延遲差 ~25 ns——對 30 fps 來說可忽略(< 0.001%),但對 240 fps 高速攝影需考慮。

16.18 診斷式疑難排解表

症狀可能原因解決方案
6 路取流中有一路偶發掉幀但其他路正常該路的 HSB channel 有網路 drop 或 buffer 不足用 ethtool 檢查該路 drop 計數;增加 buffer deep queue
3D 重建精度 < 2 mm(目標 < 1 mm)感測器同步精度不足 / 鏡頭校正有誤驗證 PTP/FSIN 同步精度;重新做攝影機標定
條碼讀取率在某些角度降到 90%該角度的感測器曝光或對焦不理想獨立調整該路感測器的 AE ROI 與對焦
2 小時長跑後 queue 持續成長某路的 GPU 處理延遲增加(thermal throttling)監控 GPU 溫度;加入散熱措施或降低處理複雜度
6 路同時 init 時有 1-2 顆失敗I2C 橋接佇列滿 / 位址衝突逐顆初始化避免佇列競爭;確認各感測器 I2C 位址無衝突

16.19 進階挑戰題

  1. 設計一個六感測器系統的「降級模式」:當其中一路感測器故障時,系統自動切換到五路模式,3D 重建精度降級但不中斷。畫出完整的 failover 流程圖。
  2. 分析 PTP vs FSIN 在六感測器同步上的精度差異。設計一個實驗:用高速相機(> 1000 fps)同時拍攝 6 路的 LED 指示燈,量測同步精度,畫出 histogram。
  3. 為物流分揀系統設計一個完整的 SOP 文件:從硬體安裝、感測器校正、同步設定、融合驗證到長時間穩定性測試。格式參考 unit-14.7 的 tuning log,但擴展到多感測器系統。

16.20 專案級端到端 Worked Example:六感測器融合專案 — 從 bring-up 到融合輸出

場景:物流分揀系統,6 顆 OV5640(5MP RAW12 30fps)經 HSB 接入 Thor,Holoscan 即時 3D 重建與條碼讀取。這是全站課程的「畢業專案」。

里程碑規劃(Gate A–E)
Gate A 各自 bring-up
   6 顆逐一:I2C、ID、取 RAW、無 CSI/HSB error
   ✅ 通過:6 顆全獨立出圖

Gate B 各自畫質
   黑位/Bayer/LSC/AWB/SNR 各過門檻
   每顆 LSC 獨立校正(不同鏡頭角度)
   ✅ 通過:6 顆全達標

Gate C 同步
   frame counter 無跳號、曝光 timestamp 差 ≤ 0.5ms
   FSIN 或 PTP 硬體同步
   ✅ 通過:同步精度達標

Gate D 頻寬 + 長跑
   Σ bitrate + overhead < 17.5 Gbps
   2 小時無 drop、queue 穩定、GPU 溫度正常
   ✅ 通過:長跑穩定

Gate E 融合輸出
   3D 重建精度 < 1mm(標準方塊)
   條碼讀取率 > 99.5%(100 包裹測試)
   ✅ 通過:業務指標達標

輸出:6 顆的 Gate A–E 表格 + 原始資料 + SOP 進 repo
專案要點:多感測器專案的驗收是「Gate 制」——每道 Gate 有獨立門檻,未過不進下一關。Gate A 通過不代表融合成功;Gate E 才是終點。這個架構適用於任何多感測器專案。

16.21 量測 / 驗證 SOP:多感測器系統驗收

多感測器 SOP(Step 1–6)
Step 1 逐顆 bring-up(unit-06 SOP × N)
   每顆:I2C/ID/取流/RAW
Step 2 逐顆畫質(unit-14 SOP × N)
   黑位/LSC/AWB/SNR
Step 3 同步驗證
   frame counter 連續性 + timestamp 對齊
   FSIN 或 PTP(unit-16.7)
Step 4 頻寬驗算
   Σ (W×H×bit×fps) + overhead < 安全上限(70%)
Step 5 長跑測試
   2 小時:掉幀數、queue 深度、GPU/溫度
Step 6 融合輸出驗收
   業務指標(重建精度、讀取率、偵測率)

判讀指標:
  單顆偶發掉幀 → 該路 buffer/網路
  同步誤差大 → FSIN/PTP/clock domain
  queue 成長 → GPU thermal / 處理過重

16.22 平台間對照:多感測器與融合

面向Thor T5000RPi5Orange PiOrin Nano
多感測器上限6+(16 lanes / HSB)2(雙 CSI)1–24–6
HSB 網路感測器✅ 25GbE 遠距
同步機制FSIN + PTP + Holoscan sync無(單一相機)FSIN
融合框架✅ Holoscan(GPU 管線)⚠️ CPU 腳本⚠️⚠️ CUDA(自建)
多路 buffer 管理✅ 每路獨立設定⚠️⚠️
選擇思考:多感測器是 Thor 的「主場」——HSB 讓感測器數量與距離不受 CSI 限制,Holoscan 提供 GPU 融合框架與同步。RPi5/Orange Pi 在單顆學習上夠用,但「多顆 + 同步 + 融合」是 Thor/Orin 的領域。

16.23 互動式檢核清單

16.18 Register 位元級完整工作流

本單元涉及的關鍵 register,以及「讀→改→寫→驗證」的完整位元級操作序列:

Register位址功能Bit Field 說明
MULTI_SENSOR_SYNC0x0c800100多感測器同步控制bit[0]=master sync enable, bit[3:1]=sync source
HSB_CHANNEL_MAP0x0c0b0000HSB 通道映射bit[7:0]=channel_id, bit[15:8]=sensor_port
讀→改→寫→驗證 完整序列(以 MULTI_SENSOR_SYNC 為例)
# Step 1: 讀取目前值
$ devmem2 0x0c800100 w
# 記錄 current_value

# Step 2: 計算新值(設定 bit[0]=1)
$ new_value=$((current_value | 0x0001))

# Step 3: 寫入
$ devmem2 0x0c800100 w $new_value

# Step 4: 驗證
$ devmem2 0x0c800100 w
# 確認 bit[0] = 1,其餘 bit 不變

# Step 5: 進階 — bitmask 操作
$ read_val=$(devmem2 0x0c800100 w | grep "Read" | awk '{print $NF}')
$ mask=0x0001
$ expected=0x0001
$ [ $(($read_val & $mask)) -eq $expected ] && echo "PASS" || echo "FAIL: bit[0] not set"

16.19 多層疑難排解決策樹

決策樹 1:多感測器同步失敗
1. Frame timestamp 不對齊?
   ├─ Sync source 設錯 → 檢查 MULTI_SENSOR_SYNC bit[3:1]
   └─ 感測器端不支持 hardware sync → 用 software timestamp 對齊
2. 有些感測器快有些慢?
   └─ Frame rate 不一致 → 確認所有感測器的 PLL 設定相同
決策樹 2:HSB 多相機 bandwidth 不足
1. 25GbE saturation?
   ├─ 單顆相機頻寬已超 25GbE → 降 resolution 或 fps
   └─ 多顆總和超限 → 減少同時 streaming 的感測器數
2. Frame drop 在特定相機?
   └─ 該 camera 的 HSB channel buffer 不足 → 增加 buffer

16.20 量測驗證完整 SOP

多感測器 Bring-up 完整 SOP:

步驟動作指令/方法預期輸出
Step 1單顆先確認每顆感測器逐個單獨測試每顆都能 stream
Step 2I2C 位址分配確認每顆有唯一 I2C 地址`i2cdetect` 看到所有地址
Step 3DT 設定多 sensor修改 device tree 新增 sensor nodedmesg 出現多個 sensor
Step 4同步測試啟用 hardware sync,比較 timestampΔt < 1ms
Step 5HSB 通道設定設定 HSB channel map,每颗 sensor 對應一通道`ping` 各 sensor IP
Step 6Bandwidth 驗證全 sensor 同時 stream,監控 drop rate0 frame drop
Step 7延遲一致性測量各 sensor 的 sensor→display 延遲各通道延遲差 < 5ms

16.21 四平台終極對照

面向Thor T5000RPi5Orange PiOrin Nano
最大感測器數6+(16 lanes)2(2 CSI port)1(1 CSI port)4–6(GMSL)
硬體 sync 支援⚠️
HSB 乙太網路N/AN/AN/A
多 sensor bandwidth~20 Gbps total~4 Gbps total~1 Gbps~10 Gbps
sensor fusion pipelineHoloscan graphOpenCV 多 streamN/ACUDA 多 stream
典型 multi-sensor 應用AV/robotics 360°stereo visionSingle cam onlyADAS multi-cam

16.22 完整 Bring-up 小 Checklist

針對「多感測器與實作案例」主題的完整 bring-up 步驟清單: