返回作品集
嵌入式系統

BLE 室內定位追蹤系統

為物流倉儲打造的 BLE 5.1 室內定位系統,採用 AoA 測向技術,定位精度達 30cm,即時追蹤貨物與人員位置

使用技術

Nordic nRF52840BLE 5.0AoA/AoDRustReactNode.jsPostgreSQLWebSocket

專案詳情

客戶物流倉儲公司
開發時程5個月

專案概述

為物流倉儲公司開發的 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 分鐘,現在打開手機就能看到確切位置,效率提升非常明顯。」 — 倉儲經理

探索更多專案

查看更多 嵌入式系統 領域的技術專案