快速實(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ù),來評(píng)估標(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í)基,才能正確評(píng)估標(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)使用簡短的雙向信息交換,其中包含了測距所需的信息。
圖 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)解決了這些問題。
圖 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)。
圖 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ì)使得用于降低幀操作期間功耗的選擇很少。
圖 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)。
圖 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ù)傳輸。
雖然這些低級(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ì)需求。
圖 6:Decawave DW1000 收發(fā)器采用嚴(yán)格的接口要求,從而確??煽康碾娫?、射頻和定時(shí)信號(hào)。(圖片來源:Decawave)
盡管類似這樣的高級(jí)器件采用了高度簡化的設(shè)計(jì),但在要求以最低功耗實(shí)現(xiàn)最高性能的設(shè)計(jì)中,設(shè)計(jì)人員要想優(yōu)化集成,仍可能面臨嚴(yán)峻的挑戰(zhàn)。DWM1001 模塊將集成要求降低至少數(shù)幾個(gè)電源、接地和數(shù)字接口的連接(圖 7)。
圖 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)。
圖 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è)高級(jí) API 連接,進(jìn)而通過一個(gè)通用 API 解析器將這些調(diào)用轉(zhuǎn)換為對 PANS 庫的通用 API 調(diào)用,來實(shí)現(xiàn)對 PANS 庫的訪問。在此角色中,通用層提供了對 PANS 庫的通用接口。
圖 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)用的高級(jí)調(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)。
推薦閱讀:
特別推薦
- AMTS 2025展位預(yù)訂正式開啟——體驗(yàn)科技驅(qū)動(dòng)的未來汽車世界,共迎AMTS 20周年!
- 貿(mào)澤電子攜手安森美和Würth Elektronik推出新一代太陽能和儲(chǔ)能解決方案
- 功率器件熱設(shè)計(jì)基礎(chǔ)(六)——瞬態(tài)熱測量
- 貿(mào)澤開售Nordic Semiconductor nRF9151-DK開發(fā)套件
- TDK推出用于可穿戴設(shè)備的薄膜功率電感器
- 日清紡微電子GNSS兩款新的射頻低噪聲放大器 (LNA) 進(jìn)入量產(chǎn)
- 中微半導(dǎo)推出高性價(jià)比觸控 MCU-CMS79FT72xB系列
技術(shù)文章更多>>
- 意法半導(dǎo)體推出首款超低功耗生物傳感器,成為眾多新型應(yīng)用的核心所在
- 是否存在有關(guān) PCB 走線電感的經(jīng)驗(yàn)法則?
- 智能電池傳感器的兩大關(guān)鍵部件: 車規(guī)級(jí)分流器以及匹配的評(píng)估板
- 功率器件熱設(shè)計(jì)基礎(chǔ)(八)——利用瞬態(tài)熱阻計(jì)算二極管浪涌電流
- AHTE 2025展位預(yù)訂正式開啟——促進(jìn)新技術(shù)新理念應(yīng)用,共探多行業(yè)柔性解決方案
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
生產(chǎn)測試
聲表諧振器
聲傳感器
濕度傳感器
石英機(jī)械表
石英石危害
時(shí)間繼電器
時(shí)鐘IC
世強(qiáng)電訊
示波器
視頻IC
視頻監(jiān)控
收發(fā)器
手機(jī)開發(fā)
受話器
數(shù)字家庭
數(shù)字家庭
數(shù)字鎖相環(huán)
雙向可控硅
水泥電阻
絲印設(shè)備
伺服電機(jī)
速度傳感器
鎖相環(huán)
胎壓監(jiān)測
太陽能
太陽能電池
泰科源
鉭電容
碳膜電位器