1. 程式人生 > >DWM1000 多個目標定位討論 --[藍點無限]

DWM1000 多個目標定位討論 --[藍點無限]

1 單個目標定位模式

定位實現基於DWM1000 基礎API 實驗SS-TWR或者DS-TWR方法,非官方定位原始碼,官方定位原始碼使用的是大狀態機。

當單個目標定位基本流程是TAG 與ANTHOR0 基於SS/DS-TWR計算距離,然後依次再 ANTHOR1 ANTHOR2計算距離,分別步驟如下圖的0 , 1 ,2 ,其中每一步都會有poll、response 以及finnal 多條資訊。

而且,通過程式碼知道,tag 傳送一定資訊後,會進入等待狀態,而anthor0 傳送一條資訊後也會進入等待狀態,但是由於TAG分別與各個ANTHOR通訊,所以中間的等待狀態不會被破壞。

2 多個目標定位模式

下圖是一個多目標定位簡圖,圖中 有兩個TAG,3個ANTHOR,其中每個TAG依然單獨分別按照順序與ANTHOR0/1/2 通訊

但是會出現如下幾種特殊情況需要處理:

1 TAG0 可能和 TAG1 同時給某一個ANCHOR傳送資訊,這個同時是相對廣義的,因為通過程式碼發現,TAG和ANCHOR 之間測距需要一段時間,交換多條資訊後才能實現,假如TAG0 和 ANTHOR已經建立連線,正在交換資訊,若TAG1 也傳送Poll 資訊給ANTHOR0時,ANTHOR0 需要丟棄TAG1 的資訊。

處理方法:當ANTHOR 接收到一條Poll資訊後,更新目標TAG ID,若後面再接收到資訊TAG ID與poll 資訊TAG ID一致回覆finnal 資訊,否則認為衝突不做處理,若連續接收到兩條poll 資訊,更新目標TAG ID,以最後一次的TAG ID為準。

 

2 更為嚴重的是,TAG1 傳送的任何資訊TAG0都會收到,當然可以和上面一樣比較TAG ID後可以丟棄,但是會導致TAG0 退出正常的測距迴圈(每次TAG 和 ANTHOR 進行測距,多條資訊依次傳送,當TAG傳送一條資訊後進入等待狀態,若此時收到TAG1的資訊,那TAG0就會退出與ANTHOR之間測距),這樣的嚴重後果是,兩個TAG相互發送資料,導致每個TAG均不能完成任何依次完成的測距。

處理辦法:這個問題有一點類似“多核”問題,需要引入"鎖"或者“訊號量”的概念,ANTHOR 可以認為是資源。

1 程式初始化,TAG0預設獲得"鎖"或者“訊號量”,與三個ANTHOR 傳送資訊,測試距離,當測距後。

2 TAG0 傳送釋放訊號量資訊,若網路中有其他TAG,收到該資訊後,回覆給TAG0(只有TAG可以回覆該資訊),且將TAG ID回覆給TAG0,可以擴充套件其他資訊。

3 TAG0 收到訊號量請求資訊後,傳送“訊號量”釋放資訊,“訊號量”釋放資訊包含TAG ID以及其他擴充套件資訊。

4 TAG收到訊號量後,與系統中的三個ANTHOR進行資料交換,進行測距,測距完成後,傳送釋放“訊號量”資訊

5 TAG0 收到釋放訊號量資訊,回收訊號量,並回復給之前TAG

6 TAG0 根據網路狀況,決定自己測距,還是繼續釋放訊號量給其他TAG