快速實(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 需求的日益增長(zhǎng),開發(fā)人員發(fā)現(xiàn)自己被困在雙向測(cè)距或到達(dá)時(shí)間差 (TDOA) 定位等復(fù)雜的高精度方法之中。
Decawave 的集成式模塊和軟件為開發(fā)人員提供了一種更簡(jiǎn)單的 RTLS 解決方案,能夠輕而易舉地提供更精確的定位結(jié)果。
本文將回顧包括雙向測(cè)距和 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)對(duì)象(標(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)簽相對(duì)這些已知定位點(diǎn)的位置,進(jìn)而確定標(biāo)簽的絕對(duì)位置。
RTLS 方法
RTLS 應(yīng)用使用多種方法確定距離。在最簡(jiǎn)單的方法中,應(yīng)用或標(biāo)簽可以使用大多數(shù)收發(fā)器提供的接收信號(hào)強(qiáng)度指示器 (RSSI) 參數(shù),來評(píng)估標(biāo)簽相對(duì)發(fā)射定位點(diǎn)的位置。由于存在多種可能影響鏈路預(yù)算的因素,此方法最多只能提供粗略的位置估計(jì)。相比之下,許多基于 RTLS 的新興應(yīng)用要求將絕對(duì)位置確定到幾厘米的精度。
高精度 RTLS 使用飛行時(shí)間方法,而這類方法幾乎不受射頻信號(hào)強(qiáng)度大幅變動(dòng)的影響。依據(jù)此方法,可通過測(cè)量射頻信號(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)簽的絕對(duì)位置。
但是,要測(cè)量標(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 方法采取簡(jiǎn)單的方式應(yīng)對(duì)這一問題,即對(duì)標(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 僅對(duì)定位點(diǎn)進(jìn)行同步,從而消除了與移動(dòng)標(biāo)簽同步相關(guān)的難點(diǎn)。為確定位置,RTLS 應(yīng)用使用跨多個(gè)定位點(diǎn)測(cè)得的標(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)致位置測(cè)量出現(xiàn)幾厘米的差別。
雙向測(cè)距
雙向測(cè)距 RTLS 方法完全不需要精確的時(shí)間同步,但在標(biāo)簽中引入了傳輸能力要求。這種方法通過支持標(biāo)簽和定位點(diǎn)彼此交換定時(shí)信息,來規(guī)避不同時(shí)基帶來的不確定性。標(biāo)簽和定位點(diǎn)無需同步它們的時(shí)基,而是使用一種簡(jiǎn)短的雙向信息傳輸協(xié)議,實(shí)現(xiàn)精確地確定飛行時(shí)間和準(zhǔn)確地計(jì)算標(biāo)簽位置。
依據(jù)此方法,標(biāo)簽發(fā)射簡(jiǎn)短的標(biāo)識(shí)信號(hào),向周圍的定位點(diǎn)“亮明身份”。每個(gè)收到標(biāo)簽的初始標(biāo)識(shí)信息的定位點(diǎn)隨即與標(biāo)簽合作進(jìn)行簡(jiǎn)短的雙向數(shù)據(jù)交換,用于確定飛行時(shí)間,而無需考慮定位點(diǎn)與標(biāo)簽之間存在的時(shí)基差。
Decawave 在其雙向測(cè)距 RTLS 協(xié)議中,從發(fā)現(xiàn)階段和測(cè)距階段的角度定義了此過程(圖 1)。在發(fā)現(xiàn)期間,標(biāo)簽定期傳送簡(jiǎn)短的標(biāo)識(shí)信號(hào)(即眨眼信號(hào)),并等待來自定位點(diǎn)的響應(yīng)。在標(biāo)簽和定位點(diǎn)彼此識(shí)別后,配對(duì)的標(biāo)簽和定位點(diǎn)使用簡(jiǎn)短的雙向信息交換,其中包含了測(cè)距所需的信息。
圖 1:在 Decawave 的雙向測(cè)距協(xié)議中,標(biāo)簽和定位點(diǎn)交換一系列消息,以完成發(fā)現(xiàn)并提供測(cè)距信息。(圖片來源:Decawave)
對(duì)于開發(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 仍針對(duì) 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ā)器,并支持雙向測(cè)距和 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é)。
對(duì)于符合標(biāo)準(zhǔn)的應(yīng)用,開發(fā)人員可以從一系列工作模式中進(jìn)行選擇,以滿足特定的雙向測(cè)距和 TDOA 操作使用實(shí)例。這些工作模式預(yù)先組合了數(shù)據(jù)速率、有效載荷大小和預(yù)先配置的前導(dǎo)碼長(zhǎng)度。例如,適用于遠(yuǎn)程應(yīng)用的模式組合了較低的數(shù)據(jù)速率以及有利于在干擾或較弱信號(hào)中完成發(fā)現(xiàn)和測(cè)距的較長(zhǎng)前導(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)。如果需要長(zhǎng)期保持非活動(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ù)包等較長(zhǎng)的幀組件消耗了大部分功耗(圖 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í)間較長(zhǎng),因此接收幀所需的功耗要求甚至高于傳輸操作。(圖片來源: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)碼嗅探等功能對(duì)于電池供電型標(biāo)簽而言尤其重要。開發(fā)人員可在 RTLS 操作期間應(yīng)用多種節(jié)能方法。其中一種方法利用的是圖 1 所示雙向測(cè)距協(xié)議中存在的不同已知延遲。
例如,在發(fā)現(xiàn)階段,定位點(diǎn)對(duì)標(biāo)簽“眨眼信號(hào)”的測(cè)距初始化應(yīng)答會(huì)在一定的延遲后發(fā)生。開發(fā)人員可基于幀率和其他參數(shù)估算此延遲,在其定位點(diǎn)設(shè)計(jì)中測(cè)量其實(shí)際值,甚至在其定位點(diǎn)設(shè)計(jì)中構(gòu)建特定的響應(yīng)延遲時(shí)間。然后,開發(fā)人員可以在預(yù)期的延遲時(shí)間內(nèi)安全地將標(biāo)簽接收器保持關(guān)閉狀態(tài),要搜尋響應(yīng)則將接收器開啟,如果測(cè)距初始化應(yīng)答未在合理的窗口內(nèi)到達(dá),則將接收器再次關(guān)閉。
類似地,開發(fā)人員可以采取措施來限制在測(cè)距過程中需要將無線電保持開啟狀態(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)和測(cè)距階段。標(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ā)人員可以對(duì)該模塊進(jìn)行配置,在 LIS2DH12 感應(yīng)到模塊處于靜止?fàn)顟B(tài)時(shí),DW1000 收發(fā)器以低功耗模式運(yùn)行。當(dāng) LIS2DH12 檢測(cè)到移動(dòng)時(shí),收發(fā)器可以恢復(fù)為響應(yīng)模式,這時(shí) DW1000 收發(fā)器將恢復(fù)正常的更新速率。
開發(fā)人員還可以進(jìn)一步優(yōu)化其 RTLS 應(yīng)用,基于對(duì)象的速度和加速度來控制更新速率。例如,緩慢移動(dòng)的標(biāo)簽可能只需較低的更新頻率便可保持必要的定位精度。隨著標(biāo)簽速度的增加,應(yīng)用可通過提高位置更新速率進(jìn)行響應(yīng)。
RTLS 開發(fā)
除了能夠支持動(dòng)態(tài)更新速率等 RTLS 特性之外,該模塊還提供了基本的 RTLS 開發(fā)優(yōu)勢(shì)。例如,DW1000 收發(fā)器針對(duì)電源去耦、天線網(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í)器件采用了高度簡(jiǎn)化的設(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)傳感器)簡(jiǎn)化了 RTLS 開發(fā)。(圖片來源:Decawave)
軟件模型
類似地,該模塊還利用其預(yù)裝的 Decawave 定位和網(wǎng)絡(luò)堆棧 (PANS) 庫固件大幅簡(jiǎn)化了軟件開發(fā)與集成。PANS 庫基于 MCU 的片載低功耗藍(lán)牙 (BLE) 堆棧而構(gòu)建,包含開源 eCos 實(shí)時(shí)操作系統(tǒng) (RTOS)、一個(gè)網(wǎng)絡(luò)層,以及支持 BLE 服務(wù)、RTLS 管理服務(wù)和雙向測(cè)距 (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),從而對(duì)該模塊進(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)換為對(duì) PANS 庫的通用 API 調(diào)用,來實(shí)現(xiàn)對(duì) PANS 庫的訪問。在此角色中,通用層提供了對(duì) PANS 庫的通用接口。
圖 9:Decawave 通過廣泛的 API 提供 PANS 庫訪問,每個(gè) API 提供對(duì)底層線程化執(zhí)行模型的簡(jiǎn)單訪問。(圖片來源:Decawave)
線程化架構(gòu)
在此架構(gòu)中,DWM1001 固件軟件使用線程化模型,基本上為堆棧中的每個(gè)模塊和庫都提供了單獨(dú)的線程。堆棧頂部四個(gè)模塊各自的線程將解析請(qǐng)求傳遞到通用 API 解析器線程,該線程則驗(yàn)證每條請(qǐng)求并調(diào)用 PANS 庫,從而生成相應(yīng)的響應(yīng)。通用 API 線程進(jìn)而使用發(fā)起調(diào)用時(shí)提供的回調(diào)函數(shù),將結(jié)果返回到位于堆棧頂部的調(diào)用模塊。
盡管這一多層系統(tǒng)看似非常復(fù)雜,但從開發(fā)人員的編程模型看卻相對(duì)簡(jiǎn)單。將 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)一步簡(jiǎn)化了開發(fā)人員與此系統(tǒng)的交互。開發(fā)人員使用系統(tǒng)內(nèi)建的用戶專用應(yīng)用線程,而不需要與多個(gè)線程和 API 交互。
如列表 1 所示,開發(fā)人員使用一個(gè)簡(jiǎn)單的 API 調(diào)用 (dwm_thread_create) 來調(diào)用注冊(cè)了用戶應(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ā)人員只需一對(duì)簡(jiǎn)單的 API 調(diào)用便可注冊(cè)并啟動(dòng)其用戶應(yīng)用線程。(代碼來源:Decawave)
Decawave 提供了用戶應(yīng)用線程和回調(diào)示例代碼。該示例代碼捆綁在一個(gè) Oracle Virtual Box 虛擬機(jī)映像中,其中包含了完整的工具鏈、庫和簡(jiǎn)單的示例應(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) 注冊(cè)了回調(diào)。注冊(cè)回調(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)用線程例程中注冊(cè)回調(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ù)所需的簡(jiǎn)單調(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 方法基于相對(duì)簡(jiǎn)單的原理,但這些方法的實(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)。
推薦閱讀:
特別推薦
- 授權(quán)代理商貿(mào)澤電子供應(yīng)Same Sky多樣化電子元器件
- 使用合適的窗口電壓監(jiān)控器優(yōu)化系統(tǒng)設(shè)計(jì)
- ADI電機(jī)運(yùn)動(dòng)控制解決方案 驅(qū)動(dòng)智能運(yùn)動(dòng)新時(shí)代
- 倍福推出采用 TwinSAFE SC 技術(shù)的 EtherCAT 端子模塊 EL3453-0090
- TDK推出新的X系列環(huán)保型SMD壓敏電阻
- Vishay 推出新款采用0102、0204和 0207封裝的精密薄膜MELF電阻
- Microchip推出新款交鑰匙電容式觸摸控制器產(chǎn)品 MTCH2120
技術(shù)文章更多>>
- 意法半導(dǎo)體推出首款超低功耗生物傳感器,成為眾多新型應(yīng)用的核心所在
- 是否存在有關(guān) PCB 走線電感的經(jīng)驗(yàn)法則?
- 智能電池傳感器的兩大關(guān)鍵部件: 車規(guī)級(jí)分流器以及匹配的評(píng)估板
- Quobly與意法半導(dǎo)體攜手, 加快量子處理器制造進(jìn)程,實(shí)現(xiàn)大型量子計(jì)算解決方案
- DigiKey和MediaTek強(qiáng)強(qiáng)聯(lián)合,開啟物聯(lián)網(wǎng)邊緣AI和連接功能新篇章
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索