你的位置:首頁 > RF/微波 > 正文

快速實(shí)現(xiàn)精度達(dá)10厘米的實(shí)時(shí)定位系統(tǒng)

發(fā)布時(shí)間:2018-06-05 責(zé)任編輯:wenwei

【導(dǎo)讀】無線電定位系統(tǒng)已成為幾乎所有類型的移動(dòng)設(shè)備和相關(guān)應(yīng)用的標(biāo)配功能。在眾多無線電定位方法中,基于超寬帶 (UWB) 射頻通信的實(shí)時(shí)定位系統(tǒng) (RTLS) 扮演了中樞角色,確保在 GPS 等更為人熟悉的技術(shù)無法提供覆蓋時(shí),也能獲取定位信息。
 
隨著更高精度 RTLS 需求的日益增長,開發(fā)人員發(fā)現(xiàn)自己被困在雙向測距或到達(dá)時(shí)間差 (TDOA) 定位等復(fù)雜的高精度方法之中。
 
Decawave 的集成式模塊和軟件為開發(fā)人員提供了一種更簡單的 RTLS 解決方案,能夠輕而易舉地提供更精確的定位結(jié)果。
 
本文將回顧包括雙向測距和 TDOA 在內(nèi)的 RTLS 應(yīng)用及算法,并討論不同 RTLS 方法的相關(guān)實(shí)現(xiàn)權(quán)衡。之后,本文將介紹一種 Decawave UWB 收發(fā)器,重點(diǎn)說明使用該器件進(jìn)行設(shè)計(jì)的具體要求。最后,本文將探討 Decawave 軟件架構(gòu)和配套的固件開發(fā),說明在 Decawave 平臺(tái)上開發(fā)用戶應(yīng)用的具體方法。
 
RTLS 系統(tǒng)的作用
 
精密 RTLS 已成為在辦公大樓、倉庫、制造廠和裝配線中用于確定或跟蹤人員及移動(dòng)資產(chǎn)位置的有效方法。依據(jù)此方法,一個(gè)移動(dòng)對象(標(biāo)簽)使用低速率無線個(gè)人局域網(wǎng) (LR-WPAN) 標(biāo)準(zhǔn) IEEE 802.15.4-2011 中規(guī)定的標(biāo)準(zhǔn)格式和 UWB 技術(shù),與固定位置的設(shè)備(定位點(diǎn))交換信息。通過確定標(biāo)簽與多個(gè)定位點(diǎn)之間的距離,相關(guān)應(yīng)用可以確定標(biāo)簽相對這些已知定位點(diǎn)的位置,進(jìn)而確定標(biāo)簽的絕對位置。
 
RTLS 方法
 
RTLS 應(yīng)用使用多種方法確定距離。在最簡單的方法中,應(yīng)用或標(biāo)簽可以使用大多數(shù)收發(fā)器提供的接收信號(hào)強(qiáng)度指示器 (RSSI) 參數(shù),來評估標(biāo)簽相對發(fā)射定位點(diǎn)的位置。由于存在多種可能影響鏈路預(yù)算的因素,此方法最多只能提供粗略的位置估計(jì)。相比之下,許多基于 RTLS 的新興應(yīng)用要求將絕對位置確定到幾厘米的精度。
 
高精度 RTLS 使用飛行時(shí)間方法,而這類方法幾乎不受射頻信號(hào)強(qiáng)度大幅變動(dòng)的影響。依據(jù)此方法,可通過測量射頻信號(hào)從標(biāo)簽傳遞到多個(gè)定位點(diǎn)所需的時(shí)間,來確定標(biāo)簽的位置。利用射頻信號(hào)通過空氣傳播時(shí)的已知傳播延遲,RTLS 應(yīng)用可以將飛行時(shí)間轉(zhuǎn)換為距離。
 
例如,如果標(biāo)簽到所有三個(gè)定位點(diǎn)之間的飛行時(shí)間完全相同,那么按理說,這種情況僅在標(biāo)簽與這些定位點(diǎn)等距時(shí)才會(huì)出現(xiàn)。由于應(yīng)用知道各個(gè)定位點(diǎn)的確切位置,因此它能確定標(biāo)簽的絕對位置。
 
但是,要測量標(biāo)簽發(fā)射器的傳播時(shí)間,定位點(diǎn)接收器需要使用與標(biāo)簽相同的時(shí)基,才能正確評估標(biāo)簽消息中內(nèi)嵌的時(shí)間信息。如果定位點(diǎn)的時(shí)基滯后或領(lǐng)先于標(biāo)簽的時(shí)基,則計(jì)算的距離將會(huì)分別比實(shí)際距離更近或更遠(yuǎn)。
 
一種 RTLS 方法采取簡單的方式應(yīng)對這一問題,即對標(biāo)簽發(fā)射器和定位點(diǎn)接收器進(jìn)行時(shí)間同步,確保每個(gè)定位點(diǎn)接收消息的時(shí)基與標(biāo)簽相同。即使在最佳情況下,實(shí)現(xiàn)時(shí)間同步也很有挑戰(zhàn),而在無線標(biāo)簽四處移動(dòng)的 RTLS 應(yīng)用中,這根本就不切實(shí)際。
 
另一種方法 TDOA 僅對定位點(diǎn)進(jìn)行同步,從而消除了與移動(dòng)標(biāo)簽同步相關(guān)的難點(diǎn)。為確定位置,RTLS 應(yīng)用使用跨多個(gè)定位點(diǎn)測得的標(biāo)簽信號(hào)到達(dá)時(shí)間之差。例如,考慮之前三個(gè)定位點(diǎn)(A1、A2 和 A3)圍繞一個(gè)標(biāo)簽等距離分布的示例。在標(biāo)簽移動(dòng)后,如果各個(gè)定位點(diǎn)的 TDOA 被發(fā)現(xiàn)分別為 0、1 納秒 (ns) 和 0,則表示該標(biāo)簽在遠(yuǎn)離定位點(diǎn) A2 的直線方向上移動(dòng)了約 30 厘米 (cm)(假設(shè)射頻傳播的速度為光速)。TDOA 的定位點(diǎn)同步要求與嘗試同步定位點(diǎn)和標(biāo)簽相比,難度要小得多。但即便如此,此方法的精度仍取決于高度精確的同步。即便是一納秒的同步差,也可能導(dǎo)致位置測量出現(xiàn)幾厘米的差別。
 
雙向測距
 
雙向測距 RTLS 方法完全不需要精確的時(shí)間同步,但在標(biāo)簽中引入了傳輸能力要求。這種方法通過支持標(biāo)簽和定位點(diǎn)彼此交換定時(shí)信息,來規(guī)避不同時(shí)基帶來的不確定性。標(biāo)簽和定位點(diǎn)無需同步它們的時(shí)基,而是使用一種簡短的雙向信息傳輸協(xié)議,實(shí)現(xiàn)精確地確定飛行時(shí)間和準(zhǔn)確地計(jì)算標(biāo)簽位置。
 
依據(jù)此方法,標(biāo)簽發(fā)射簡短的標(biāo)識(shí)信號(hào),向周圍的定位點(diǎn)“亮明身份”。每個(gè)收到標(biāo)簽的初始標(biāo)識(shí)信息的定位點(diǎn)隨即與標(biāo)簽合作進(jìn)行簡短的雙向數(shù)據(jù)交換,用于確定飛行時(shí)間,而無需考慮定位點(diǎn)與標(biāo)簽之間存在的時(shí)基差。
 
Decawave 在其雙向測距 RTLS 協(xié)議中,從發(fā)現(xiàn)階段和測距階段的角度定義了此過程(圖 1)。在發(fā)現(xiàn)期間,標(biāo)簽定期傳送簡短的標(biāo)識(shí)信號(hào)(即眨眼信號(hào)),并等待來自定位點(diǎn)的響應(yīng)。在標(biāo)簽和定位點(diǎn)彼此識(shí)別后,配對的標(biāo)簽和定位點(diǎn)使用簡短的雙向信息交換,其中包含了測距所需的信息。
 
快速實(shí)現(xiàn)精度達(dá)10厘米的實(shí)時(shí)定位系統(tǒng)
圖 1:在 Decawave 的雙向測距協(xié)議中,標(biāo)簽和定位點(diǎn)交換一系列消息,以完成發(fā)現(xiàn)并提供測距信息。(圖片來源:Decawave)
 
對于開發(fā)人員而言,實(shí)現(xiàn)這些精確設(shè)計(jì)的消息交換協(xié)議及其底層 UWB 無線電子系統(tǒng)帶來的挑戰(zhàn)可能令人生畏。但憑借 Decawave DWM1001 模塊,開發(fā)人員只需很少的額外工作,就能快速向其應(yīng)用中添加精確的 RTLS 功能。
 
集成式 RTLS 模塊
 
Decawave DWM1001 模塊可完整實(shí)現(xiàn) RTLS,將 Decawave DW1000 UWB 收發(fā)器與一個(gè) Nordic Semiconductor NRF52832 無線 MCU 和一個(gè) STMicroelectronics LIS2DH12 3 軸運(yùn)動(dòng)傳感器集成在一起。盡管 DW1000 提供符合 IEEE 802.15.4-2011 標(biāo)準(zhǔn)的射頻信號(hào)發(fā)送功能,但 NRF52832 MCU 仍針對 RTLS 應(yīng)用執(zhí)行其內(nèi)嵌的固件。LIS2DH12 傳感器在電源管理中扮演著重要的角色。
 
在任何復(fù)雜的射頻應(yīng)用中,射頻設(shè)計(jì)往往都會(huì)帶來一些最艱巨的挑戰(zhàn),尤其在要求極小封裝和極低功耗的移動(dòng)應(yīng)用中。DWM1001 模塊通過充分利用 DW1000 收發(fā)器提供的集成式射頻設(shè)計(jì)(圖 2)解決了這些問題。
 
快速實(shí)現(xiàn)精度達(dá)10厘米的實(shí)時(shí)定位系統(tǒng)
圖 2:Decawave DW1000 收發(fā)器集成了無線電信號(hào)路徑和數(shù)字控制邏輯,以提供一個(gè)完整的符合 IEEE802.15.4-2011 標(biāo)準(zhǔn)的系統(tǒng)。(圖片來源:Decawave)
 
DW1000 提供集成了射頻前端的完整 UWB 收發(fā)器,能夠支持六個(gè)從 3.5 GHz 到 6.5 GHz 的 IEEE802.15.4-2011 通道,標(biāo)準(zhǔn)比特率為 110 Kb/s、850 Kb/s 和 6.81 Mb/s。該器件的集成數(shù)字控制子系統(tǒng)用于管理收發(fā)器,并支持雙向測距和 TDOA RTLS 系統(tǒng),定位精度可達(dá) 10 厘米。利用集成的一次性可編程存儲(chǔ)器 (OTP),開發(fā)人員可以存儲(chǔ)用于校準(zhǔn)和糾錯(cuò)的數(shù)據(jù),同時(shí)器件的可配置不間斷存儲(chǔ)器 (AON) 會(huì)在器件處于下文所述的低功耗狀態(tài)期間保留配置數(shù)據(jù)。
 
在工作期間,該設(shè)備發(fā)送和接收標(biāo)準(zhǔn) IEEE802.15.4-2011 幀,其中包含同步標(biāo)頭 (SHR)、物理層標(biāo)頭 (PHR),以及構(gòu)成總體物理層服務(wù)數(shù)據(jù)單元 (PSDU) 的多達(dá) 127 字節(jié)的數(shù)據(jù)。除了標(biāo)準(zhǔn)幀以外,該設(shè)備還支持專有幀格式,該幀格式為需要發(fā)送更大數(shù)據(jù)有效載荷、但不要求符合 IEEE802.15.4-2011 標(biāo)準(zhǔn)的應(yīng)用提供了多達(dá) 1023 個(gè)數(shù)據(jù)字節(jié)。
 
對于符合標(biāo)準(zhǔn)的應(yīng)用,開發(fā)人員可以從一系列工作模式中進(jìn)行選擇,以滿足特定的雙向測距和 TDOA 操作使用實(shí)例。這些工作模式預(yù)先組合了數(shù)據(jù)速率、有效載荷大小和預(yù)先配置的前導(dǎo)碼長度。例如,適用于遠(yuǎn)程應(yīng)用的模式組合了較低的數(shù)據(jù)速率以及有利于在干擾或較弱信號(hào)中完成發(fā)現(xiàn)和測距的較長前導(dǎo)碼。反之,具有較高數(shù)據(jù)速率和較短前導(dǎo)碼的模式則支持短程應(yīng)用。其他模式以不同大小的數(shù)據(jù)有效載荷支持這類遠(yuǎn)程和短程應(yīng)用的特征。
 
功耗最小化
 
在實(shí)踐中,開發(fā)人員會(huì)選擇幀大小盡可能短的工作模式,以最大限度減小總體功耗,并讓器件快速恢復(fù)低功耗狀態(tài)。DW1000 提供了多種低功耗模式。在非活動(dòng)期內(nèi),可以將器件置于待機(jī)模式,此模式的電流消耗僅為 19 毫安 (mA)。如果需要長期保持非活動(dòng)狀態(tài),開發(fā)人員可將器件置于低功耗休眠模式,此時(shí)的電流消耗僅約 1 微安 (μA),而深度睡眠模式的電流消耗更是不超過 100 納安 (nA)(典型值 50 nA)。
 
但與任何射頻設(shè)計(jì)一樣,收發(fā)器工作期間的功耗會(huì)顯著增大。例如,要傳輸符合 IEEE802.15.4-2011 標(biāo)準(zhǔn)的幀,同步標(biāo)頭和數(shù)據(jù)包等較長的幀組件消耗了大部分功耗(圖 3)。
 
快速實(shí)現(xiàn)精度達(dá)10厘米的實(shí)時(shí)定位系統(tǒng)
圖 3:Decawave DW1000 的 RTLS 幀傳輸會(huì)導(dǎo)致各個(gè)幀組件的功耗顯著增大,這促使設(shè)計(jì)人員開始尋求具有最短的有用同步標(biāo)頭和數(shù)據(jù)有效載荷的工作模式。(圖片來源:Decawave)
 
與接收器操作相關(guān)的功耗甚至更大,這給功耗受限型設(shè)計(jì)帶來了更艱巨的挑戰(zhàn)(圖 4)。開發(fā)人員可以將 DW1000 設(shè)定為在發(fā)送或接收操作后恢復(fù)其中一種低功耗狀態(tài)。即便如此,標(biāo)準(zhǔn)協(xié)議和幀的性質(zhì)使得用于降低幀操作期間功耗的選擇很少。
 
快速實(shí)現(xiàn)精度達(dá)10厘米的實(shí)時(shí)定位系統(tǒng)
圖 4:由于前導(dǎo)碼查尋階段的持續(xù)時(shí)間較長,因此接收幀所需的功耗要求甚至高于傳輸操作。(圖片來源:Decawave)
 
DW1000 提供了獨(dú)特的節(jié)能功能來降低前導(dǎo)碼 RX 階段的功耗。開發(fā)人員可以為器件編制專門的前導(dǎo)碼嗅探模式,而不是讓接收器一直保持工作狀態(tài)。這種情況下,DW1000 定期為接收器通電,查找前導(dǎo)碼,如果未找到前導(dǎo)碼則恢復(fù)待機(jī)狀態(tài)(圖 5)。
 
快速實(shí)現(xiàn)精度達(dá)10厘米的實(shí)時(shí)定位系統(tǒng)
圖 5:開發(fā)人員可通過使用 DW1000 的嗅探功能來降低與接收器操作相關(guān)的功耗,使得器件在待機(jī)模式與接收器活動(dòng)模式之間交替變化。(圖片來源:Decawave)
 
前導(dǎo)碼嗅探等功能對于電池供電型標(biāo)簽而言尤其重要。開發(fā)人員可在 RTLS 操作期間應(yīng)用多種節(jié)能方法。其中一種方法利用的是圖 1 所示雙向測距協(xié)議中存在的不同已知延遲。
 
例如,在發(fā)現(xiàn)階段,定位點(diǎn)對標(biāo)簽“眨眼信號(hào)”的測距初始化應(yīng)答會(huì)在一定的延遲后發(fā)生。開發(fā)人員可基于幀率和其他參數(shù)估算此延遲,在其定位點(diǎn)設(shè)計(jì)中測量其實(shí)際值,甚至在其定位點(diǎn)設(shè)計(jì)中構(gòu)建特定的響應(yīng)延遲時(shí)間。然后,開發(fā)人員可以在預(yù)期的延遲時(shí)間內(nèi)安全地將標(biāo)簽接收器保持關(guān)閉狀態(tài),要搜尋響應(yīng)則將接收器開啟,如果測距初始化應(yīng)答未在合理的窗口內(nèi)到達(dá),則將接收器再次關(guān)閉。
 
類似地,開發(fā)人員可以采取措施來限制在測距過程中需要將無線電保持開啟狀態(tài)的時(shí)間。例如,開發(fā)人員可以在設(shè)備中預(yù)加載所有需要的數(shù)據(jù),并使用直接存儲(chǔ)器訪問來加快 DW1000 與主機(jī)內(nèi)存之間的數(shù)據(jù)傳輸。
 
雖然這些低級優(yōu)化可以提高增量節(jié)能,但開發(fā)人員還可通過動(dòng)態(tài)更改位置更新速率進(jìn)一步改善節(jié)能效果。標(biāo)簽停止移動(dòng)后,便沒有必要繼續(xù)執(zhí)行高能耗的發(fā)現(xiàn)和測距階段。標(biāo)簽可以安全地進(jìn)入低功耗休眠狀態(tài),并在其開始移動(dòng)后喚醒,繼續(xù)以標(biāo)稱速率進(jìn)行更新。
 
通過集成 LIS2DH12 運(yùn)動(dòng)傳感器,DWM1001 模塊支持動(dòng)態(tài)速率調(diào)整,并且支持兩種運(yùn)動(dòng)相關(guān)的工作模式:低功耗和響應(yīng)模式。開發(fā)人員可以對該模塊進(jìn)行配置,在 LIS2DH12 感應(yīng)到模塊處于靜止?fàn)顟B(tài)時(shí),DW1000 收發(fā)器以低功耗模式運(yùn)行。當(dāng) LIS2DH12 檢測到移動(dòng)時(shí),收發(fā)器可以恢復(fù)為響應(yīng)模式,這時(shí) DW1000 收發(fā)器將恢復(fù)正常的更新速率。
 
開發(fā)人員還可以進(jìn)一步優(yōu)化其 RTLS 應(yīng)用,基于對象的速度和加速度來控制更新速率。例如,緩慢移動(dòng)的標(biāo)簽可能只需較低的更新頻率便可保持必要的定位精度。隨著標(biāo)簽速度的增加,應(yīng)用可通過提高位置更新速率進(jìn)行響應(yīng)。
 
RTLS 開發(fā)
 
除了能夠支持動(dòng)態(tài)更新速率等 RTLS 特性之外,該模塊還提供了基本的 RTLS 開發(fā)優(yōu)勢。例如,DW1000 收發(fā)器針對電源去耦、天線網(wǎng)絡(luò)匹配、基準(zhǔn)振蕩器和其他元器件采行了多種特定的接口要求(圖 6)。類似地,NRF52832 無線 MCU 和 LIS2DH12 運(yùn)動(dòng)傳感器也存在自己的接口設(shè)計(jì)需求。
 
快速實(shí)現(xiàn)精度達(dá)10厘米的實(shí)時(shí)定位系統(tǒng)
圖 6:Decawave DW1000 收發(fā)器采用嚴(yán)格的接口要求,從而確??煽康碾娫础⑸漕l和定時(shí)信號(hào)。(圖片來源:Decawave)
 
盡管類似這樣的高級器件采用了高度簡化的設(shè)計(jì),但在要求以最低功耗實(shí)現(xiàn)最高性能的設(shè)計(jì)中,設(shè)計(jì)人員要想優(yōu)化集成,仍可能面臨嚴(yán)峻的挑戰(zhàn)。DWM1001 模塊將集成要求降低至少數(shù)幾個(gè)電源、接地和數(shù)字接口的連接(圖 7)。
 
快速實(shí)現(xiàn)精度達(dá)10厘米的實(shí)時(shí)定位系統(tǒng)
圖 7:Decawave DWM1001 模塊通過提供完全集成的設(shè)計(jì)(集成了 DW1000 收發(fā)器與無線 MCU 和運(yùn)動(dòng)傳感器)簡化了 RTLS 開發(fā)。(圖片來源:Decawave)
 
軟件模型
 
類似地,該模塊還利用其預(yù)裝的 Decawave 定位和網(wǎng)絡(luò)堆棧 (PANS) 庫固件大幅簡化了軟件開發(fā)與集成。PANS 庫基于 MCU 的片載低功耗藍(lán)牙 (BLE) 堆棧而構(gòu)建,包含開源 eCos 實(shí)時(shí)操作系統(tǒng) (RTOS)、一個(gè)網(wǎng)絡(luò)層,以及支持 BLE 服務(wù)、RTLS 管理服務(wù)和雙向測距 (TWR) 定位引擎的若干應(yīng)用層(圖 8)。
 
快速實(shí)現(xiàn)精度達(dá)10厘米的實(shí)時(shí)定位系統(tǒng)
圖 8:Decawave 定位和網(wǎng)絡(luò)堆棧 (PANS) 庫組合了藍(lán)牙堆棧、RTOS、網(wǎng)絡(luò)層和應(yīng)用服務(wù)層,提供了一個(gè)功能豐富的 RTLS 應(yīng)用平臺(tái)。(圖片來源:Decawave)
 
在構(gòu)建于 DWM1001 的 MCU 上運(yùn)行的固件應(yīng)用時(shí),開發(fā)人員通過綜合應(yīng)用編程接口 (API) 訪問 PANS 庫,該接口提供了各個(gè) PANS 模塊的相應(yīng)入口點(diǎn),從而對該模塊進(jìn)行配置和控制。PANS API 包含多個(gè)適用單獨(dú)模塊的 API 集,其中包括開發(fā)人員 C 代碼、串行接口庫(CPI 和 UART)以及 BLE 庫(圖 9)。
 
應(yīng)用直接與這四個(gè)高級 API 連接,進(jìn)而通過一個(gè)通用 API 解析器將這些調(diào)用轉(zhuǎn)換為對 PANS 庫的通用 API 調(diào)用,來實(shí)現(xiàn)對 PANS 庫的訪問。在此角色中,通用層提供了對 PANS 庫的通用接口。
 
快速實(shí)現(xiàn)精度達(dá)10厘米的實(shí)時(shí)定位系統(tǒng)
圖 9:Decawave 通過廣泛的 API 提供 PANS 庫訪問,每個(gè) API 提供對底層線程化執(zhí)行模型的簡單訪問。(圖片來源:Decawave)
 
線程化架構(gòu)
 
在此架構(gòu)中,DWM1001 固件軟件使用線程化模型,基本上為堆棧中的每個(gè)模塊和庫都提供了單獨(dú)的線程。堆棧頂部四個(gè)模塊各自的線程將解析請求傳遞到通用 API 解析器線程,該線程則驗(yàn)證每條請求并調(diào)用 PANS 庫,從而生成相應(yīng)的響應(yīng)。通用 API 線程進(jìn)而使用發(fā)起調(diào)用時(shí)提供的回調(diào)函數(shù),將結(jié)果返回到位于堆棧頂部的調(diào)用模塊。
 
盡管這一多層系統(tǒng)看似非常復(fù)雜,但從開發(fā)人員的編程模型看卻相對簡單。將 API 調(diào)用與獨(dú)立線程回調(diào)配合使用,有助于優(yōu)化資源利用率和總體應(yīng)用性能。
 
與此同時(shí),底層復(fù)雜性也被一系列 API 屏蔽,這些 API 將面向應(yīng)用的高級調(diào)用轉(zhuǎn)換為經(jīng)優(yōu)化的與 DWM1001 硬件進(jìn)行交互的特定線程化操作。DWM1001 編程模型則進(jìn)一步簡化了開發(fā)人員與此系統(tǒng)的交互。開發(fā)人員使用系統(tǒng)內(nèi)建的用戶專用應(yīng)用線程,而不需要與多個(gè)線程和 API 交互。
 
如列表 1 所示,開發(fā)人員使用一個(gè)簡單的 API 調(diào)用 (dwm_thread_create) 來調(diào)用注冊了用戶應(yīng)用線程函數(shù) (app_thread_entry) 的用戶應(yīng)用線程。
 
副本
  /* 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 線程模型,開發(fā)人員只需一對簡單的 API 調(diào)用便可注冊并啟動(dòng)其用戶應(yīng)用線程。(代碼來源:Decawave)
 
Decawave 提供了用戶應(yīng)用線程和回調(diào)示例代碼。該示例代碼捆綁在一個(gè) Oracle Virtual Box 虛擬機(jī)映像中,其中包含了完整的工具鏈、庫和簡單的示例應(yīng)用。該軟件包設(shè)計(jì)為與連接到 Windows PC 的 Decawave DWM1001-DEV 開發(fā)板配合使用,提供了一個(gè)用于創(chuàng)建定制 RTLS 應(yīng)用軟件的框架。
 
包含在該軟件包中的示例代碼演示了關(guān)鍵的用戶線程函數(shù)設(shè)計(jì)模式(列表 2)。在此示例中,用戶線程函數(shù) (app_thread_entry) 設(shè)置了應(yīng)用特定的配置參數(shù)(例如更新速率),并使用 API 函數(shù) dwm_evt_cb_register 及其回調(diào)函數(shù)名稱 (on_dwm_evt) 注冊了回調(diào)。注冊回調(diào)后,示例線程進(jìn)入主循環(huán) – 在此實(shí)例中為一系列延遲函數(shù)調(diào)用,用于減少資源利用。
 
副本
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 固件開發(fā)包的這個(gè)片段中,示例代碼展示了用于在用戶應(yīng)用線程例程中注冊回調(diào)和執(zhí)行主循環(huán)的基本設(shè)計(jì)模式。(代碼來源:Decawave)
 
示例回調(diào)函數(shù) (on_dwm_evt) 演示了在發(fā)生事件時(shí)調(diào)用的基本事件處理程序(列表 3)。在此代碼示例中,唯一的有效事件是有可用的新位置信息 (DWM_EVT_NEW_LOC_DATA)。在該事件的處理程序中,代碼演示了檢索可用定位點(diǎn)生成的位置數(shù)據(jù)所需的簡單調(diào)用集。完成其事件處理任務(wù)后,回調(diào)直接進(jìn)入休眠狀態(tài)。
 
副本
/**
 
 
 * 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 示例應(yīng)用片段演示的回調(diào)提供了用于訪問新位置數(shù)據(jù)的基本事件處理程序。(代碼來源:Decawave)
 
例如,在一個(gè)完整的物聯(lián)網(wǎng) (IoT) RTLS 應(yīng)用中,標(biāo)簽和定位點(diǎn)會(huì)通過鏈接到連接互聯(lián)網(wǎng)的網(wǎng)關(guān)系統(tǒng)的路由定位點(diǎn)進(jìn)行通信。Decawave 即將推出其第二版固件包,將通過基于 Linux 的軟件包提供網(wǎng)關(guān)支持,并會(huì)使用熟悉的 IoT 信息傳輸協(xié)議,包括 HTTP、WebSockets、MQTT 和 AMQP。
 
總結(jié)
 
RTLS 在廣泛的應(yīng)用中扮演越來越重要的角色。盡管 RTLS 方法基于相對簡單的原理,但這些方法的實(shí)現(xiàn)需要復(fù)雜的射頻/模擬設(shè)計(jì)、系統(tǒng)設(shè)計(jì)以及軟件開發(fā),以確保使用最小的功耗獲得最高的精度。
 
Decawave DWM1001 模塊提供了完整的 RTLS 系統(tǒng),其中結(jié)合了 Decawave 的集成式 DW1000 UWB 收發(fā)器以及無線 MCU 和運(yùn)動(dòng)傳感器。利用此模塊和配套的軟件包,開發(fā)人員可以快速實(shí)現(xiàn)高精度的電池供電型 RTLS 系統(tǒng)。
 
 
推薦閱讀:
 
電源開關(guān)的阻容吸收器設(shè)計(jì)
第二代可穿戴設(shè)備背后的傳感器技術(shù)
10分鐘了解FPGA市場現(xiàn)狀和未來趨勢
計(jì)算各種運(yùn)放電路的輸出失調(diào)
特別推薦
技術(shù)文章更多>>
技術(shù)白皮書下載更多>>
熱門搜索
?

關(guān)閉

?

關(guān)閉