專案概述
為物流倉儲公司開發的 BLE 5.1 室內定位系統。採用 Nordic nRF52840 晶片與 AoA(到達角度)測向技術,實現亞米級定位精度。系統可即時追蹤倉庫內 5,000+ 個貨物標籤與 200+ 員工,提升揀貨效率與倉儲管理。
上線後,揀貨效率提升 35%,貨物遺失率降低 90%。
核心技術
1. BLE 5.1 AoA 測向
採用 BLE 5.1 Direction Finding 功能,透過天線陣列計算訊號到達角度:
// nRF52840 AoA 接收處理(Rust 實現)
use nrf52840_hal as hal;
use embedded_hal::digital::v2::OutputPin;
pub struct AoAReceiver {
radio: hal::Radio,
antenna_array: [hal::gpio::Pin; 12],
iq_samples: [Complex<i8>; 128],
}
impl AoAReceiver {
pub fn measure_angle(&mut self) -> Result<(f32, f32), Error> {
// 啟動 CTE 接收模式
self.radio.configure_cte_rx(CteMode::AoA);
// 設定天線切換模式
self.configure_antenna_switching();
// 等待封包接收
let packet = self.radio.receive_with_cte()?;
// 提取 IQ 樣本
self.extract_iq_samples(&packet);
// MUSIC 演算法計算角度
let (azimuth, elevation) = self.music_algorithm()?;
Ok((azimuth, elevation))
}
fn music_algorithm(&self) -> Result<(f32, f32), Error> {
// 計算協方差矩陣
let cov_matrix = self.compute_covariance_matrix();
// 特徵值分解
let (eigenvalues, eigenvectors) = cov_matrix.eig();
// 掃描空間頻譜
let spectrum = self.scan_spatial_spectrum(&eigenvectors);
// 找出峰值角度
let (azimuth, elevation) = spectrum.find_peaks();
Ok((azimuth, elevation))
}
}
2. 多點定位融合
結合多個 Anchor 的 AoA 測量結果,使用最小二乘法計算精確位置:
- Anchor 佈署:天花板每 10m x 10m 佈署一個
- 冗餘設計:每個位置至少 3 個 Anchor 可見
- 卡爾曼濾波:平滑軌跡、預測移動方向
3. 低功耗標籤設計
貨物標籤採用 CR2032 紐扣電池,可運作 2 年以上:
- 廣播週期:靜止時 1 次/10秒,移動時 1 次/秒
- 動作偵測:內建加速度計,偵測移動狀態
- 超低功耗:平均電流 < 20μA
系統架構
┌─────────────────────────────────────────────────────────┐
│ 倉庫天花板 │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │Anchor 1│ │Anchor 2│ │Anchor 3│ │Anchor 4│ │
│ │nRF52840│ │nRF52840│ │nRF52840│ │nRF52840│ │
│ └────┬───┘ └────┬───┘ └────┬───┘ └────┬───┘ │
│ │ │ │ │ │
│ └───────────┴─────┬─────┴───────────┘ │
│ │ PoE 網路 │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 定位引擎伺服器 │ │
│ │ (Node.js) │ │
│ └────────┬────────┘ │
│ │ │
│ ┌──────────────┼──────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │PostgreSQL│ │ 即時地圖 │ │ API │ │
│ │ 位置歷史 │ │ (React) │ │ 服務 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────┘
🏷️ BLE 標籤(貨物) 👷 員工識別證
↑ 廣播 ↑ 廣播
專案成果
- 定位精度:95% 誤差 < 50cm
- 更新頻率:移動物件 1Hz,靜止物件 0.1Hz
- 覆蓋範圍:10,000 平方公尺倉庫
- 同時追蹤:5,000+ 標籤
客戶評價
「以前找一個貨物要花 10 分鐘,現在打開手機就能看到確切位置,效率提升非常明顯。」 — 倉儲經理