快速實作準確性達 10 公分的即時定位系統
資料提供者:DigiKey 北美編輯群
2018-05-17
無線電定位系統在幾乎各種行動裝置和相關應用上已成為相當普遍的功能。在各種無線電定位方法中,以超廣頻 (UWB) RF 通訊做為基礎的即時定位系統 (RTLS),在 GPS 等更令人熟悉的技術無法提供涵蓋範圍的情況下,就扮演關鍵角色,可確保定位資訊的可用性。
市場對於更加準確的 RTLS 需求日漸增加,但開發人員也面臨高度精密方法的複雜度困境,例如雙向測距或到達時間差 (TDOA) 定位等方法。
Decawave 的整合式模組與軟體為開發人員提供更簡易的 RTLS 解決方案,能以最不費心力的方式提供更準確的定位結果。
本文將查看 RTLS 應用與演算法,包括雙向測距與 TDOA,並探討不同 RTLS 方法之間在實作上的取捨。接著會介紹 Decawave UWB 收發器,並著重於設計時的特定需求。文章最後會探討 Decawave 軟體的架構及附隨韌體的開發事宜,說明在 Decawave 平台上開發使用者應用所需的特定技術。
RTLS 系統扮演的角色
精準 RTLS 會竄起,是因為能有效判定位置,或是在辦公室大樓、倉庫、製造廠和組裝線上追蹤人員或活動資產。使用此方法時,活動物體 (標籤) 會使用低速無線個人區域網路 (LR-WPAN) 標準 IEEE 802.15.4-2011 所指明的標準格式與 UWB 技術,來和固定位置的裝置 (錨點) 交換資訊。判定標籤與不同錨點之間的距離,應用系統即可判定標籤與這些已知錨點的相對位置,進而得知標籤的絕對位置。
RTLS 方法
不同的 RTLS 應用採用多種技術來判定距離。在最簡單的方法中,應用或標籤可使用多數接收器皆有提供的接收訊號強度指標 (RSSI) 參數,來評估標籤相對於發射錨點的位置。由於有許多因素都會影響到鏈路預算,這個方法充其量也只能提供位置的粗略估算。然而,許多新興的 RTLS 型應用卻需要精準度在數公分內的絕對位置判定能力。
高精準度 RTLS 採用飛時測距方法,即使 RF 訊號強度明顯變化,也幾乎不會受到影響。在此方法中,測量 RF 訊號需要多少時間從標籤傳遞到不同錨點,即可判定標籤的位置。RTLS 應用可透過 RF 訊號在空氣中傳播時的已知傳播延遲,將飛行時間轉化成距離。
舉例而言,若發現標籤和三個錨點中的每一個之間的飛行時間完全相同,這種狀況只有在標籤與這些錨點都等距時才會合理發生。由於應用知道每個錨點的確切位置,因此能判定標籤的絕對位置。
但若要測量標籤發射器的傳播時間,錨點接收器必須使用與標籤相同的時間基準,才能正確評估嵌入於標籤訊息中的時間資訊。若錨點的時間基準延遲或領先於標籤的時間基準,計算出的距離分別會比實際距離更短或更長。
有個 RTLS 方法能以相當直接的方式來解決此問題,也就是讓標籤發射器與錨點接收器的時間同步,確保每個錨點接收訊息的時間基準與標籤一樣。然而實行時間同步的難度很高,而且在無線標籤到處移動的 RTLS 應用中根本不切實際。
另一個 TDOA 方法則只會同步錨點,因此不會出現活動標籤同步化的相關難題。為了判定位置,RTLS 應用會針對從多個錨點測得的標籤訊號,利用其到達時間的差異。舉例來說,在前述三個錨點 (A1、A2 及 A3) 圍繞標籤等距排列的考量下。在標籤移動之後,若發現每個錨點的 TDOA 各為 0、1 奈秒 (ns) 和 0,則代表標籤已經在直線距離上離開錨點 A2 大約 30 公分 (cm) (假設 RF 以光速傳播)。比起嘗試同步錨點和標籤,TDOA 的錨點同步需求容易處理得多。即便如此,此方法的準確度需仰賴極為精準的同步作業。即使是一奈秒的同步差異,都會在位置量測上產生數公分的差異。
雙向測距
雙向測距 RTLS 方法雖然完全不需精準的時間同步作業,但對標籤的傳輸能力有所要求。此方法能讓標籤與錨點互相交換計時資訊,因此能避開不同時間基準的不確定性。標籤和錨點並非將其時間基準同步,而是採用簡短的雙向發訊協定,能精準判定飛行時間並準確計算標籤位置。
透過這個方法,標籤會傳送一個簡短的識別訊號,向周邊的錨點宣示自己的身份。每個收到標籤初始識別訊息的錨點,接著會和標籤進行簡短的雙向資料交換,用以判定飛行時間 (無論錨點與標籤本身的時間基準差異如何)。
Decawave 在雙向測距 RTLS 協定中,將流程制訂成探索階段和測距階段 (圖 1)。在探索期間,標籤會定期發送簡短的識別訊號 (又稱閃爍),並等候錨點的回應。在標籤與錨點辨別出彼此之後,此配對的標籤和錨點會雙向交換含有必要資訊的簡短訊息,以便計算距離。

圖 1:在 Decawave 的雙向測距協定中,標籤和錨點會交換一系列的訊息,以完成探索並提供測距資訊。(圖片來源:Decawave)
對開發人員來說,要實行這些精心設計的訊息交換協定以及其固有的 UWB 無線電子系統,可能會面臨艱鉅的挑戰。但若使用 Decawave DWM1001 模組,開發人員不用額外花費太多心力,便能在其應用中迅速增添精準的 RTLS 能力。
整合式 RTLS 模組
Decawave DWM1001 模組提供了完整的 RTLS 實作,整合了 Decawave DW1000 UWB 收發器與 Nordic Semiconductor NRF52832 無線 MCU,以及 STMicroelectronics LIS2DH12 三軸動作感測器。DW1000 提供符合 IEEE 802.15.4-2011 的 RF 發訊,而 NRF52832 MCU 會針對 RTLS 應用執行其嵌入式韌體。LIS2DH12 感測器在電源管理方面扮演著重要的角色。
在任何複雜的 RF 應用中,RF 設計通常都會帶來一些嚴峻的挑戰,特別是在需要最小覆蓋區和最低功耗的行動應用中。DWM1001 模組充分運用 DW1000 收發器提供的整合式 RF 設計,來應付這些問題 (圖 2)。

圖 2:Decawave DW1000 收發器整合了無線電訊號路徑與數位控制邏輯,提供符合 IEEE802.15.4-2011 的完整系統。(圖片來源:Decawave)
DW1000 提供完整的 UWB 收發器,整合了 RF 前端,可支援六個 3.5 GHz 至 6.5 GHz 的 IEEE802.15.4-2011 通道,標準位元速率為 110 Kbits/s、850 Kbits/s 及 6.81 Mbits/s。此裝置的整合式數位控制子系統會管理此收發器,並支援雙向測距和 TDOA RTLS 系統,位置精準度達 10 公分。整合的一次性可編程記憶體 (OTP) 能讓開發人員儲存用於校正和錯誤修正的資料,而裝置的可配置常開記憶體 (AON) 會在裝置處於低功率狀態 (如下所述) 期間保留配置資料。
在作業中,裝置會傳送和接收標準 IEEE802.15.4-2011 訊框,其中含有一個同步標頭 (SHR)、實體層標頭 (PHR),以及構成整體 PHY 服務資料單元 (PSDU) 的最多 127 位元組資料。除了標準訊框,裝置還支援可提供高達 1023 資料位元組的自行研發訊框格式,適合需要傳送更大資料酬載且無需遵循 IEEE802.15.4-2011 的應用。
若是合規應用,開發人員有一系列運作模式可選,並搭配預設的數據傳輸率、酬載大小以及前文長度組合,經過預先配置以符合雙向測距和 TDOA 作業的特定使用情境。舉例來說,預定用於遠距應用的模式結合了低數據傳輸率與長前文,有利於在有干擾或微弱訊號下進行探索與測距。相反地,具有高數據傳輸率和短前文的模式可支援短距應用。其他模式則透過不同大小的資料酬載支援這些遠距與短距特性。
功率最小化
實際上,開發人員會盡可能使用最小的訊框大小,以便達到最低的整體功耗,以便裝置快速返回到低功率狀態。DW1000 提供幾種低功率模式。在無作用期間,裝置會進入閒置模式,此時僅消耗 19 毫安培 (mA) 電力。若長時間無活動,開發人員可讓裝置進入低功率睡眠模式,此時僅耗用大約 1 微安培 (μA),或是深度睡眠模式,最多指消耗 100 奈安培 (nA) (一般情況下耗用 50 nA)。
但和任何 RF 設計一樣,功耗會在收發器作業期間大幅上升。例如,若要傳輸一個符合 IEEE802.15.4-2011 的訊框,多數的功耗都來自於同步標頭和資料封包等較長的訊框組成項目 (圖 3)。

圖 3:Decawave DW1000 傳輸 RTLS 訊框時,訊框的每個組成項目都會大幅增加功耗,促使開發人員尋求具有最短且有用的同步標頭和資料酬載的作業模式。(圖片來源:Decawave)
對於電力受限的設計來說,進一步的挑戰在於接收器的操作具有更大的功耗 (圖 4)。開發人員可進行編程,讓 DW1000 在傳送或接收之後返回其中一個低功率狀態。即便如此,礙於標準協定與訊框的本質,沒有太多選項可在訊框作業期間降低功耗。

圖 4:由於前文搜尋階段耗時較長,因此接收訊框的電力需求比傳送訊框更高。(圖片來源:Decawave)
DW1000 提供獨特的省電功能,可在前文 RX 階段期間降低功耗。與其讓接收器保持運作,開發人員可將裝置設定成特殊的前文探測模式。在此模式下,DW1000 會定期為接收器供電、尋找前文,並在找不到前文時返回閒置狀態 (圖 5)。

圖 5:開發人員能使用 DW1000 的探測功能,在閒置模式與主動接收器模式之間切換,藉此降低接收器操作的功耗。(圖片來源:Decawave)
前文探測等功能,對於電池供電式標籤來說格外重要。開發人員能在 RTLS 運作期間利用多種方法來降低功率。其中一種作法是利用雙向測距協定中已知的不同延遲,如圖 1 所示。
舉例而言,錨點在探索階段中對於標籤閃爍而做出的「測距初始化」回應,就會在一定延遲之後才進行。開發人員能夠根據框速率和其他參數來估計此延遲、測量其在錨點設計中的實際值,甚至是在錨點設計中建立指定的反應-延遲時間。接著,開發人員能在預期的延遲時間內安全地將標籤的接收器維持關閉,然後再開啟以尋找回應,並在「測距初始化」回應未能在合理的時間範圍內到達時再次關閉接收器。
同樣地,開發人員可設法限制無線電在測距期間內需要開啟的時間長度。例如,開發人員可以將所有需要的資料預先載入到裝置中,並且透過直接記憶體存取,加速 DW1000 和主機記憶體之間的資料傳輸。
雖然這些低階的最佳化作法能逐漸提升省電量,但開發人員可透過動態變更位置更新率來達到更好的成果。在標籤停止移動後,繼續進行耗能的探索與測距階段沒有益處。標籤可安全地進入低功率睡眠狀態,並在開始移動時醒來,以標稱速度繼續更新。
DWM1001 模組具有整合式 LIS2DH12 動作感測器,可支援動態速率調整,並支援兩種動作相關的操作模式:低功率和反應模式。開發人員可配置模組,在 LIS2DH12 感測到模組處於靜止狀態時,讓 DW1000 收發器以低功率模式操作。當 LIS2DH12 偵測到移動時,收發器可返回反應模式,此時 DW1000 收發器會恢復到正常的更新速率。
開發人員可以根據物體的速度與加速度來控制更新速率,進一步達到 RTLS 應用最佳化。例如,慢速移動的標籤可能只需要偶爾更新,即可維持所需的定位準確度。當標籤加速時,應用能提高定位更新速率來進行回應。
RTLS 的開發
此模組除了能支援動態更新率等 RTLS 功能外,亦針對 RTLS 的開發提供基礎優勢。例如,DW1000 收發器會針對電源解耦、天線網路匹配和參考振盪器等層面,提出許多特定的介面要求 (圖 6)。同樣地,NRF52832 無線 MCU 和 LIS2DH12 動作感測器也會對介面設計有所要求。
圖 6:Decawave DW1000 收發器具有嚴格的介面要求,以確保可靠的功率、RF 和時序訊號。(圖片來源:Decawave)
雖然這類先進裝置已大幅簡化設計,但對於需要以最低功率發揮最高效能的設計,開發人員想要實現最佳化整合,仍面臨相當大的挑戰。DWM1001 模組減輕整合上的要求,簡化成幾項電源、地線及數位介面的連接 (圖 7)。

圖 7:Decawave DWM1001 模組提供全整合式設計,其中整合了 DW1000 收發器、無線 MCU 及動作感測器,能簡化 RTLS 的開發作業。(圖片來源:Decawave)
軟體模型
同樣地,此模組具有用於 Decawave 定位與網路堆疊 (PANS) 函式庫的預載韌體,能大幅簡化軟體的開發及整合。PANS 函式庫是以 MCU 的晶片上低功耗藍牙 (BLE) 堆疊為基礎,內含開源的 eCos 即時作業系統 (RTOS)、網路層,以及支援 BLE 服務、RTLS 管理服務和雙向測距 (TWR) 定位引擎的若干應用層 (圖 8)。

圖 8:Decawave 定位與網路堆疊 (PANS) 函式庫為 RTLS 應用提供多功能平台,並結合了藍牙堆疊、RTOS、網路層以及應用服務層。(圖片來源:Decawave)
為了打造可在 DWM1001 MCU 上運行的韌體應用,開發人員會透過全面性的應用程式開發介面 (API) 來存取 PANS 函式庫,而此 API 能為每個 PANS 模組提供適當的入口點,以便設定與控制模組。PANS API 包含眾多不同模組用的 API 集,其中包含開發人員 C 程式碼、序列介面函式庫 (CPI 與 UART),以及 BLE 函式庫 (圖 9)。
應用程式會直接與這四個較高層級的 API 合作,進而透過通用的 API 解析器來存取 PANS 函式庫,此解析器會將調用 (call) 動作轉變成適用於 PANS 函式庫的通用 API 調用。在此期間,通用層提供一個共用介面連接 PANS 函式庫。

圖 9:Decawave 可透過豐富的 API 運用 PANS 函式庫,各個 API 皆可輕鬆存取底層的執行緒執行模型。(圖片來源:Decawave)
執行緒架構
在此架構當中,DWM1001 韌體軟體會使用一個執行緒模型,主要是針對堆疊中的每個模組和函式庫提供一個不同的執行緒。堆疊頂端有四個模組,各模組的執行緒都會向通用 API 解析器執行緒傳送解析請求,每個請求都會經過驗證,然後調用 PANS 函式庫,以產生適當的回應。通用 API 執行緒接著會使用原先調用中所提供的回調功能,將結果回傳到堆疊頂端的調用模組。
雖然這種多層系統看似很複雜,但從開發人員的角度來看編程模型是相對簡單。在獨立執行緒上使用 API 調用和回調,有助於達到最佳化的資源利用和整體應用效能。
同時,一系列的 API 可掩蓋底層的複雜度,能將較高階的應用程式導向調用運用到特定的最佳化執行緒作業,與 DWM1001 硬體進行互動。DWM1001 編程模型可進一步簡化開發人員與此系統的互動。開發人員使用的是系統內建的專屬使用者應用程式執行緒,無需與多個執行緒和 API 互動。
如列表 1 所示,開發人員會使用簡單的 API 調用 (dwm_thread_create) 來引用使用者應用程式執行緒,而這會登錄使用者應用程式執行緒函式 (app_thread_entry)。
複製
/* Create thread */
rv = dwm_thread_create(THREAD_APP_PRIO, app_thread_entry, (void*)NULL, "app", THREAD_APP_STACK_SIZE, &hndl);
APP_ERR_CHECK(rv);
/* Start the thread */
dwm_thread_resume(hndl);
列表 1:藉由 Decawave 執行緒模型,開發人員能利用一組簡易的 API 調用來登錄並啟動使用者應用程式執行緒。(程式碼來源:Decawave)
Decawave 提供使用者應用程式執行緒及回調的範例程式碼。範例程式碼隨附於 Oracle Virtual Box 的虛擬機映像檔中,其中包含完整的工具鏈、函式庫以及簡易的範例應用程式。此軟體套裝可搭配已連接 Windows PC 的 Decawave DWM1001-DEV 開發板使用,能提供框架,以便打造客製化的 RTLS 應用程式軟體。
軟體套裝中的範例程式碼展示使用者執行緒函式的關鍵設計模式 (列表 2)。在此範例中,使用者執行緒函式 (app_thread_entry) 會設定更新速率等應用程式專屬的配置參數,並使用 API 函式 dwm_evt_cb_register 來登錄其回調,並登錄回調函式 (on_dwm_evt) 的名稱。在登錄回調後,範例執行緒會進入主要迴圈 (在此例中,是延遲函式的一系列調用,可用來減少資源的使用)。
複製
void app_thread_entry(uint32_t data)
{
.
.
.
/* Update rate set to 1 second, stationary update rate set to 5 seconds */
APP_ERR_CHECK(dwm_upd_rate_set(10, 50));
/* Register event callback */
dwm_evt_cb_register(on_dwm_evt, 0);
.
.
.
while (1) {
/* Thread loop */
dwm_thread_delay(100);
}
}
列表 2:在源自 Decawave 韌體開發套裝 的這個程式碼片段中,範例程式碼說明了在使用者應用程式執行緒常式中登錄回調以及執行主要迴圈的基本設計模式。(程式碼來源:Decawave)
範例回調函式 (on_dwm_evt) 展示了發生事件時所引用的基本事件處理常式 (列表 3)。在此程式碼範例中,唯一有效的事件是新位置資訊可用時 (DWM_EVT_NEW_LOC_DATA)。在該事件的處理常式中,程式碼展示了擷取可用錨點所產生之位置資料所需的簡易調用集。在完成事件處理作業後,回調會直接進入睡眠狀態。
複製
/**
* Event callback
*
* @param[in] p_evt Pointer to event structure
* @param[in] p_data Pointer to user data
*/
void on_dwm_evt(dwm_evt_t *p_evt, void *p_data)
{
int i;
switch (p_evt->header.id) {
/* New location data */
case DWM_EVT_NEW_LOC_DATA:
/* Process the data */
printf("\nT:%lu ", dwm_systime_us_get());
if (p_evt->data.loc.p_pos == 0) {
/* Location engine is disabled */
} else {
printf("POS:[%ld,%ld,%ld,%u] ", p_evt->data.loc.p_pos->x,
p_evt->data.loc.p_pos->y, p_evt->data.loc.p_pos->z,
p_evt->data.loc.p_pos->qf);
}
for (i = 0; i < p_evt->data.loc.anchors.dist.cnt; ++i) {
printf("DIST%d:", i);
printf("0x%04X", (unsigned int)(p_evt->data.loc.anchors.dist.addr[i] & 0xffff));
if (i < p_evt->data.loc.anchors.an_pos.cnt) {
printf("[%ld,%ld,%ld]",
p_evt->data.loc.anchors.an_pos.pos[i].x,
p_evt->data.loc.anchors.an_pos.pos[i].y,
p_evt->data.loc.anchors.an_pos.pos[i].z);
}
printf("=[%lu,%u] ", p_evt->data.loc.anchors.dist.dist[i],
p_evt->data.loc.anchors.dist.qf[i]);
}
printf("\n");
break;
default:
break;
}
/* Indicate the application has finished the tasks and can now */
dwm_sleep();
}
列表 3:這個來自 Decawave 範例應用程式的程式碼片段展示了一個回調動作,可提供基本事件處理常式以存取新的位置資料。(程式碼來源:Decawave)
舉例來說,在物聯網 (IoT) 用的完整 RTLS 應用中,標籤和錨點會透過路由錨點 (已連結至網際網路連線閘道系統) 來進行通訊。Decawave 即將推出韌體套裝的第二版,使用 HTTP、WebSockets、MQTT 及 AMQP 等常見的 IoT 訊息通訊協定,透過 Linux 架構軟體套裝來提供閘道支援。
結論
RTLS 在許多應用中扮演的角色越趨重要。雖然 RTLS 方法的基礎原理相對較簡單,但實作這些方法需要精細複雜的 RF/類比設計、系統設計以及軟體開發作業,才可確保以最低功耗達到最高的準確度。
Decawave DWM1001 模組提供完整的 RTLS 系統,其中結合 Decawave 的整合式 DW1000 UWB 收發器、無線 MCU 及動作感測器。使用這個模組與隨附的軟體套裝,開發人員就能快速實作高度準確的電池供電式 RTLS 系統。
聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。


