采用ESP32的實時超寬帶室內(nèi)定位系統(tǒng)
如果你試過追蹤大樓里的東西,你就會知道GPS很難用。這就是超寬帶(UWB)的用武之地;它可以精確定位到大約10厘米的位置。是的,厘米。漂亮的野生。
我一直在擺弄Qorvo DWM3000 UWB模塊與ESP32板配對,老實說,它比我預(yù)期的要好。在這個ESP32項目中,我們將建立一個室內(nèi)定位系統(tǒng),它可以實時跟蹤運動。
為什么超寬頻?
與依賴數(shù)英里外衛(wèi)星的GPS不同,超寬帶只是測量無線電脈沖在設(shè)備之間傳播所需的時間。DWM3000可以測量精確到納秒的時間,換算成厘米級的精度。這就是知道某人在房間里和確切知道他們在哪張桌子前的區(qū)別。
快速室內(nèi)跟蹤對比:
?超寬帶:~10cm,可達200m
?藍牙:1 - 3米,可以用于“附近”,但不精確
?Wi-Fi: 5 - 15米,基本是房間級別
?室內(nèi)GPS: 5 - 10米,如果能工作的話
硬件設(shè)置
以下是你需要的:
?4個DWM3000模塊(1個吊牌+ 3個錨)
?4× ESP32-WROOM板
?Micro-USB電纜用于電源/編程
?面包板或自定義pcb安裝一切
DWM3000超級棒,因為它是一個完整的模塊——天線、射頻組件、晶體、電源管理——集于一體。不需要成為射頻專家。只要通過SPI連接到ESP32,你就完成了大部分工作。
引腳連接:
?DWM3000 → ESP32
?VCC → 3.3V (not 5V!)
?GND → GND
?SCK → GPIO18
?MOSI → GPIO23
?MISO → GPIO19
?CS → GPIO4
?RST → GPIO27
?IRQ → GPIO34(可選但方便)
它是如何工作的
從概念上講,它比聽起來簡單。在已知位置放置三個錨點,然后標簽使用雙面雙向測距(DS-TWR)與每個錨點通信:
?標記ping錨1
?Anchor 1 responds
?標簽發(fā)送另一條消息
?Anchor replies with timing
?重復錨2和錨3
每個交換以納秒的精度測量往返時間。有了三個點之間的距離,你可以用三邊測量法來計算位置,基本上就是圓相交。
DS-TWR還補償了設(shè)備之間的時鐘差異,這就是為什么它比簡單的方法更準確。
錨
我把三個錨定在一個三角形上:
?錨1:左下(15.5)厘米
?錨2:右下(290,5)厘米
?錨3:頂部中心(165,625)厘米
這些坐標很重要,它們需要與Python可視化使用的坐標相匹配。每個錨運行相同的固件,但獲得唯一的ID(1,2,3)。代碼基本上是一個狀態(tài)機:等待請求,以精確的時間響應(yīng)。簡單、堅固、可靠。
標簽的固件
標簽完成了有趣的部分。它連續(xù)地在三個錨點之間循環(huán):
我使用中值濾波,因為原始UWB數(shù)據(jù)可能有噪聲。最后50個測量值的滾動緩沖,中值消除了異常值,但保持了響應(yīng)。一旦標簽有了所有錨點的新距離,它就會將所有內(nèi)容打包成JSON并通過WiFi發(fā)送。距離,信號強度,定時,時鐘偏移,都在里面調(diào)試。
可視化
在PC端,Python處理它:
?TCP服務(wù)器接收標簽數(shù)據(jù)
?通過scipy的三邊數(shù)學
?在平面圖上實時標記地塊
平面圖是背景,錨是三角形,標簽是一個移動的紅點,信號強度漂浮在每個錨的上方??粗苿雍蛯崟r更新是非常令人滿意的。
使其運行
1. Flash ESP32s:
?三個錨(id 1-3)
?一個標簽,更新WiFi證書
2. 定位硬件:
?在選定坐標安裝錨
?一切通電,標簽開始自動定位
3. 啟動Python腳本:
?安裝依賴項:matplotlib, scipy, numpy
?更新IP,將平面圖放入文件夾,運行腳本
4. 移動標簽:
?更新~每100毫秒
?藍色的痕跡顯示歷史
?RSSI表示信號質(zhì)量
真實的表現(xiàn)
精度:在良好條件下始終保持10-15cm。
好設(shè)置:
?視線清晰
?穩(wěn)定的錨
適當?shù)奶炀€延遲校準(16350適用于我)
壞的設(shè)置:
?吊牌和錨之間的金屬物體
?移動的錨
?電源噪聲
?天線失調(diào)
超寬帶處理多徑比大多數(shù)要好,但大型金屬表面偶爾仍會干擾讀數(shù)。
改進空間
?為可靠性/ 3D增加第4個錨
?為多個標簽實現(xiàn)TDoA
?Web界面而不是matplotlib
?使用RSSI檢測NLOS
?優(yōu)化電池使用功率
DWM3000可以處理所有這些,它主要是固件工作。
麻煩嗎?
?天線延遲校準:耗時太長。16350適合我;測試你的。
?WiFi干擾:流量過大會減慢更新速度。把測距和網(wǎng)絡(luò)分開。
?電源:使用干凈的3.3V與去耦帽。
?坐標系統(tǒng):Python腳本和錨點位置必須匹配。我花了一個小時翻轉(zhuǎn)Y坐標。
為什么超寬帶很酷?
?低功耗:電池休眠模式
?安全:內(nèi)置防欺騙
?Fast:以毫秒為單位
?可伸縮:如果是mac管理,則有許多標簽
?不完美:需要視線,校準,比藍牙更貴。但在精確的室內(nèi)定位方面,無人能敵。
最終的想法
說實話,這比我想象的要簡單。DWM3000是一個完整的模塊是一個救星。最難的部分是計算時間和奇怪的WiFi問題。
如果你嘗試,建議:
?從基本的測距示例開始
?先用一個錨釘定位
?調(diào)試時記錄所有內(nèi)容
?在移動到真實空間之前,在一個開放的區(qū)域進行測試
本文編譯自hackster.io