來源:Nordic半導體
隨著 nRF7000 Wi-Fi 協同 IC 的推出,我們現在可以提供具有 Wi-Fi、蜂窩物聯網和 GNSS 功能的完整硅到云定位解決方案。nRF7000 針對 Wi-Fi 網絡掃描進行了優化,與 nRF91 系列蜂窩物聯網模組配合使用,可實現基于 SSID 的 Wi-Fi 定位。Nordic基于SSID的Wi-Fi定位可以在室內和室外、城市和郊區以極其省電的方式獲取精確的位置信息。這是對全球導航衛星系統(GNSS)的重要補充,尤其是在建筑物和密集城區,GNSS 可能會因信號衰減和中斷而失效。
本博文將介紹我們基于 SSID 的 Wi-Fi 定位解決方案的工作原理以及如何開始測試。然后,我們將使用 nRF9160 DK、nRF7002 EK和 PPK2 執行并展示實際功耗和準確性測量,以比較 nRF Cloud 提供的不同定位服務的性能。
背景知識
1Wi-Fi 定位服務
Wi-Fi 是一種著名的無線網絡技術,用于設備的局域網和互聯網接入。Wi-Fi 通過 Wi-Fi 網絡為家庭、辦公室和學校等環境提供便捷的無線互聯網接入服務。
Wi-Fi 定位是一種地理定位功能,可讓支持 Wi-Fi 的設備利用附近 Wi-Fi 網絡的數據確定自己的大致位置。它的工作原理是檢索附近網絡的 SSID、BSSID 和信號強度等 Wi-Fi 網絡信息,并將這些信息與已知位置的 Wi-Fi 網絡數據庫進行比較。
Wi-Fi 定位系統包含以下關鍵組件:
用戶設備中的 Wi-Fi 無線電設備,用于檢測附近的網絡。
將 MAC 地址等 Wi-Fi 網絡信息映射到位置的數據庫。該數據庫由定位服務提供商維護。
通過查找數據庫中的匹配模式并計算信號強度來估計位置的算法。
當設備查詢定位服務時,它會提供它能看到的所有 Wi-Fi 網絡的數據。該服務會在其數據庫中查找這些網絡,找到相關位置,并根據相似性和信號強度估算設備的位置。
2nRF Cloud Wi-Fi 定位服務
nRF Cloud 提供的定位服務專為 Nordic 硅芯片量身定制,具有快速、省電的定位功能。它們可以幫助需要定位數據而又不需要高功耗的設備和應用。提供多種定位技術,包括 Assisted-GPS、Predictive-GPS、Single-Cell、Multi-Cell 和 Wi-Fi 定位。
通過利用 nRF Cloud 的優化定位算法,基于 Nordic SoC 和 模組的產品可在定位用例中實現高性能和超低功耗。對于 Wi-Fi 定位請求,nRF Cloud 可借助 Wi-Fi 數據庫計算設備位置,該數據庫包含不同 Wi-Fi 網絡的坐標。然后,設備位置將從 nRF Cloud發送到客戶云或返回到設備。
3nRF70 系列
Nordic Semiconductor 于今年年初發布了我們的 Wi-Fi 產品系列 nRF70 系列。該系列推出的首款芯片是 nRF7002,它是一款超低功耗雙頻無線協同 IC,可為另一款主芯片添加低功耗 Wi-Fi6 功能。
此外,我們最近還推出了專用于該用例的 nRF7000。這是一款雙頻 Wi-Fi 配套 IC,不發送數據,但可以進行主動和被動掃描,純粹用于 Wi-Fi 定位目的。結合我們的 nRF9160 蜂窩物聯網模組和 nRF Cloud服務,nRF7000 可通過嗅探本地 Wi-Fi 接入點的 SSID 實現基于 Wi-Fi 的定位服務。
Wi-Fi 定位服務流程
nRF Connect SDK 中的 Cellular: Location示例演示了如何使用 nRF Cloud 提供的不同定位服務。
讓我們測試一下 nRF Cloud Wi-Fi 定位服務如何在室內環境中工作。
硬件:nRF9160 DK、nRF7002 EK、PPK2。
軟件:nRF Connect SDK v2.4.2、MFW v1.3.5、nRF Connect for Desktop 中的 Power Profiler 應用程序。
硬件連接設置如下圖所示。在 Power Profiler 應用程序中,配置 PPK2 源表模式,為 DK 上的 nRF9160模組供電并記錄其電流消耗變化。

Cellular: Location 示例中最初的 location_wifi_get() 函數可用于請求 Wi-Fi 定位服務。啟用附加日志配置有助于了解請求過程
# Add the following lines to the end of prj.conf CONFIG_LOCATION_LOG_LEVEL_DBG=y CONFIG_NRF_CLOUD_REST_LOG_LEVEL_DBG=y CONFIG_REST_CLIENT_LOG_LEVEL_DBG=y CONFIG_NRF_CLOUD_LOG_LOG_LEVEL_DBG=y CONFIG_NRF_CLOUD_LOG_LEVEL_DBG=y
讓我們來了解一下如何使用 location_wifi_get() 請求 Wi-Fi 定位服務。我們將這一過程分為三個步驟來解釋 Wi-Fi 定位服務請求過程。

步驟 1:掃描 Wi-Fi 接入點信息
在此步驟中,配置 Wi-Fi 定位服務,設備開始掃描附近的 Wi-Fi 接入點。結果顯示,設備在奧斯陸Nordic Semiconductor辦公樓附近或內找到了 14 個 Wi-Fi 接入點。
Requesting Wi-Fi locationwithGNSSandcellular fallback... [0019.903,594]location: location_core_config_log: Location configuration: [0019.911,682] location: location_core_config_log: Methods count:1 [0019.919,342] location: location_core_config_log: Interval:0 [0019.926,605] location: location_core_config_log: Timeout:300000ms [0019.934,356] location: location_core_config_log: Mode:0 [0019.941,223] location: location_core_config_log: List of methods: [0019.948,913] location: location_core_config_log: Method#0 [0019.956,146] location: location_core_config_log: Method type: Wi-Fi (3) [0019.964,660] location: location_core_config_log: Timeout:30000ms [0019.972,686] location: location_core_config_log: Service: Any (0) [0020.044,921] location: location_request_info_create: Wi-Fiandcellular methods arenotone after the otherinmethod list so they arenotcombined [0020.059,448] location: location_core_location_get_pos: Requesting locationwith'Wi-Fi'method [0020.069,458] location: location_core_location_get_pos: Starting request timerwithtimeout=300000 [0020.079,711] location: location_core_timer_start: Starting timerwithtimeout=30000 [0020.088,745] location: scan_wifi_start: Triggering start of Wi-Fi scanning [0024.832,458] location: scan_wifi_result_handle: scan result#1 stored: ssid XXXX, channel 108, mac 24daxx:xx [0024.845,184] location: scan_wifi_result_handle: scan result#2 stored: ssid XXXX, channel 108, mac 24daxx:xx [0024.858,093] location: scan_wifi_result_handle: scan result#3 stored: ssid XXXX, channel 11, mac 24daxx:xx [0024.870,910] location: scan_wifi_result_handle: scan result#4 stored: ssid XXXX, channel 11, mac 24daxx:xx [0024.883,483] location: scan_wifi_result_handle: scan result#5 stored: ssid XXXX, channel 1, mac 24daxx:xx [0024.896,209] location: scan_wifi_result_handle: scan result#6 stored: ssid XXXX, channel 1, mac 24daxx:xx [0024.908,935] location: scan_wifi_result_handle: scan result#7 stored: ssid XXXX, channel 1, mac 24daxx:xx [0024.921,417] location: scan_wifi_result_handle: scan result#8 stored: ssid XXXX, channel 64, mac 24daxx:xx [0024.933,990] location: scan_wifi_result_handle: scan result#9 stored: ssid XXXX, channel 64, mac 24daxx:xx [0024.946,807] location: scan_wifi_result_handle: scan result#10 stored: ssid XXXX, channel 6, mac 8a85xx:xx [0024.959,442] location: scan_wifi_result_handle: scan result#11 stored: ssid XXXX, channel 100, mac 24daxx:xx [0024.972,167] location: scan_wifi_result_handle: scan result#12 stored: ssid XXXX, channel 6, mac 3409xx:xx [0024.984,649] location: scan_wifi_result_handle: scan result#13 stored: ssid XXXX, channel 132, mac 24daxx:xx [0024.997,619] location: scan_wifi_result_handle: scan result#14 stored: ssid XXXX, channel 132, mac 24daxx:xx [0025.010,284] location: scan_wifi_done_handle: Scan request donewith14Wi-Fi Aps
步驟 2:請求 nRF Cloud Wi-Fi 定位
nRF9160 會將 Wi-Fi 接入點信息(包括 MAC 地址、SSID、信號強度和信道)編碼為 JSON 文件。然后,JSON 文件將被發送到 nRF Cloud,nRF Cloud 將使用這些數據檢查 Wi-Fi 定位數據庫,并使用特定算法計算設備位置。結果包含緯度、經度、精確度等信息。有關 API 請求和響應格式,請參閱 nRF Cloud REST API 文檔。
[0025.028,015]location: cloud_service_location_get: Cloud service location parameters: [0025.037,170] location: cloud_service_location_get: Service:0 [0025.044,494] location: cloud_service_location_get: Timeout:25060ms [0025.052,337] location: cloud_service_nrf_pos_get:Sending positioningrequest(REST) [0025.160,125] nrf_cloud_codec_internal: nrf_cloud_location_req_json_encode: JSON: {"wifi":{"accessPoints":[{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-41,"channel":108},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-41,"channel":108},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-48,"channel":11},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-49,"channel":11},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-63,"channel":1},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-70,"channel":1},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-70,"channel":1},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-72,"channel":64},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-72,"channel":64},{"macAddress":"8a85xx:xx","ssid":"XXXX","signalStrength":-73,"channel":6},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-75,"channel":100},{"macAddress":"3409xx:xx","ssid":"XXXX","signalStrength":-76,"channel":6},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-85,"channel":132},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-85,"channel":132}]}} [0025.283,142] rest_client: rest_client_request: Requesting destination HOST: api.nrfcloud.com at port443, URL: /v1/location/ground-fix [0025.296,966] rest_client: rest_client_request: Payload: {"wifi":{"accessPoints":[{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-41,"channel":108},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-41,"channel":108},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-48,"channel":11},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-49,"channel":11},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-63,"channel":1},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-70,"channel":1},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-70,"channel":1},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-72,"channel":64},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-72,"channel":64},{"macAddress":"8a85xx:xx","ssid":"XXXX","signalStrength":-73,"channel":6},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-75,"channel":100},{"macAddress":"3409xx:xx","ssid":"XXXX","signalStrength":-76,"channel":6},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-85,"channel":132},{"macAddress":"24daxx:xx","ssid":"XXXX","signalStrength":-85,"channel":132}]}}[00:01:25.417,358] rest_client: rest_client_sckt_connect:Doinggetaddrinfo()withconnect addr api.nrfcloud.com port 443 [0025.435,699] rest_client: rest_client_sckt_connect:getaddrinfo() 52.70.xxx.xxx [0025.445,892] rest_client: rest_client_sckt_connect: Connecting to api.nrfcloud.com port 443 +CSCON: 1 [0026.902,130] rest_client: rest_client_http_response_cb: HTTP: All datareceived(content/total:79/328), status: 200 OK [0026.914,245] rest_client: rest_client_request: API call response len: http status: 200, 79 bytes [0026.926,025] location: location_core_event_cb_fn: Location acquired successfully: [0026.934,844] location: location_core_event_cb_fn: method: Wi-Fi(3) [0026.942,901] location: location_core_event_cb_fn: latitude: 59.920980 [0026.950,988] location: location_core_event_cb_fn: longitude: 10.689317 [0026.959,136] location: location_core_event_cb_fn: accuracy: 15.0 m [0026.966,857] location: location_core_event_cb_fn: date: 2023-08-31 [0026.974,609] location: location_core_event_cb_fn: time: 1340.035 UTC [0026.982,879] location: location_core_event_cb_fn: Google maps URL: https://maps.google.com/?q=59.920980,10.689317 Got location: method: Wi-Fi latitude: 59.920980 longitude: 10.689317 accuracy: 15.0 m date: 2023-08-31 time: 1340.035 UTC Google maps URL: https://maps.google.com/?q=59.920980,10.689317
步驟 3:設備進入休眠狀態
當 RRC 非活動定時器到期時,nRF9160 將進入 RRC 空閑狀態。我將活動定時器 (T3324) 設置為 0 (CONFIG_LTE_PSM_REQ_RAT=“00000000”) 以幫助設備進入 RRC 空閑狀態后立即進入 PSM 以節省功耗。RRC 閑置定時器由移動網絡運營商配置(此處挪威電信為 5 秒)。如果 MNO 支持快速釋放功能 (AS-RAI),設備可通過發送 RAI 通知基站釋放它們之間的無線連接,從而立即進入 RRC 空閑狀態。這將進一步降低總功耗。您可以從這篇博客中了解有關 RAI 的更多信息:
最大限度延長蜂窩物聯網的電池壽命: 對 eDRX、PSM 和 AS-RAI 的分析。
https://www.nordicsemi.cn/blog/maximizing-battery-lifetime-in-cellular-iot-an-analysis-of-edrx-psm-and-as-rai/

比較實踐中的定位服務
nRF Cloud 中提供的定位服務在定位精度和功耗方面性能各異,您可以根據自己的應用需求選擇最適合的服務。

圖:定位服務的定位精度和功耗
功耗:GNSS 定位服務在定位搜索過程中的耗電量約為 50mA,在沒有輔助的情況下,搜索過程可能會持續幾十秒到幾分鐘。即使有 A-GPS 數據輔助,首次定位時間(TTFF)仍需數秒。基于 Wi-Fi 和蜂窩網絡的定位服務耗電量要少得多,因為它們會從 Wi-Fi 接入點或蜂窩基站收集周圍數據,然后將收集到的數據發送到 nRF Cloud進行設備定位。這些過程純粹是互聯網通信,因此功耗大大低于全球導航衛星系統操作。
準確性:但在精確度方面,情況恰恰相反。全球導航衛星系統的定位精度高于其他兩種系統,而 Wi-Fi 的定位精度則高于蜂窩定位服務。
在為應用選擇合適的定位服務時,功耗和準確性是最重要的考慮因素,但您還應考慮室內/室外環境使用、Wi-Fi 和蜂窩網絡覆蓋等因素,以選擇最佳的定位服務或在它們之間進行切換。下表列出了不同 nRF Cloud 定位服務的性能,并根據準確性、延遲和功耗等因素進行了衡量。

圖表中的表格列出了不同定位服務的最佳精度;實際精度在實踐中會有所不同。例如,在高樓林立的城市中,由于反射和建筑物會干擾 GNSS 信號,GNSS 定位服務的精度可能比 Wi-Fi 低。根據應用需求選擇正確的定位服務方法并通過測量評估實際位置精度和功耗非常重要。
為了幫助您了解如何在實踐中進行評估,我們對使用不同定位方法時的功耗進行了測量。測量仍然基于 nRF Connect SDK 樣本 Cellular: Location。測試地點位于Nordic Semiconductor奧斯陸辦公樓的樓頂。
1基于蜂窩的定位服務
定義了以下新函數 location_cellular_get(),用于測試蜂窩定位服務。
/**
*@briefRetrieve location with cellular location service.
*/
staticvoidlocation_cellular_get(void)
{
int err;
structlocation_configconfig;
enumlocation_methodmethods[] = {LOCATION_METHOD_CELLULAR};
location_config_defaults_set(&config,ARRAY_SIZE(methods), methods);
printk("Requesting cellular location...
");
err =location_request(&config);
if(err) {
printk("Requesting location failed, error: %d
", err);
return;
}
location_event_wait();
}
蜂窩定位服務的功耗結果與 Wi-Fi 定位服務非常相似。下圖顯示了蜂窩定位服務的 PPK2 測量結果。

以下是測試的日志輸出。該蜂窩定位服務請求的總功耗為 122.48 mC,精確度為 1708.0 m。
Requestingcellular location... Gotlocation: method: Cellular latitude:59.920624 longitude:10.689719 accuracy:1708.0m date:2023-09-04 time:12:47:23.399UTC Googlemaps URL: https://maps.google.com/?q=59.920624,10.689719
2基于 Wi-Fi 的定位服務
以下捕獲使用 location_wifi_get 函數請求 Wi-Fi 定位服務。該事件的總功耗為 125.85mC,日志顯示精確度為 30.0m。

Gotlocation: method: Wi-Fi latitude:59.919015 longitude:10.688577 accuracy:30.0m date:2023-09-04 time:12:47:51.753UTC Googlemaps URL: https://maps.google.com/?q=59.919015,10.688577
2使用 A-GPS提供基于GNSS 的定位服務
樣本中的原始函數 location_gnss_low_accuracy_get() 用于 GNSS 定位服務請求,并啟用了 A-GPS 輔助功能。
低精度模式可讓 GNSS 展示較寬松的固定接受標準,以節省功耗。GNSS 定位服務有三種精度模式:低精度、正常精度和高精度。精度越高,設備的耗電量就越大,但根據經驗,我們知道所有精度模式的耗電量都高于 Wi-Fi 和蜂窩定位服務。
在 GNSS 定位服務測量中,我們預計即使 GNSS 的低精度模式也會比 Wi-Fi 和蜂窩定位服務提供更好的定位精度,因此在測量中使用了低精度模式,我們可以看到 GNSS 與其他定位服務 “最接近 ”的功耗差異。結果確實證明了這一假設。A-GPS 數據只請求一次,以加快 TTFF 的速度。請注意,只要設備中的歷書和星歷數據仍然有效,就不需要 A-GPS 請求。
PPK2 測量結果顯示,在沒有 A-GPS 數據請求過程的情況下,該事件的總電荷量為 316.71mC,日志顯示精度為 16.9m。

Gotlocation: method: GNSS latitude:59.920928 longitude:10.689040 accuracy:16.9m date:2023-09-04 time:12:48:34.586UTC Googlemaps URL: https://maps.google.com/?q=59.920928,10.689040
結果
下面是我們在奧斯陸Nordic Semiconductor 辦公室屋頂進行的功耗和精度測量結果。

我們可以看到,這些測量結果正確反映了 “位置服務的定位精度和功耗 ”圖中的內容。在一般情況下,Wi-Fi 是一種很好的定位服務方法,它能以較低的功耗獲得很高的精度。
請注意,圖表中的表格列出了不同定位服務的最佳精度;實際精度在實踐中會有所不同。例如,在高樓環繞的城市中,由于反射和建筑物會干擾 GNSS 信號,GNSS 定位服務的精度可能比 Wi-Fi 低。根據應用需求選擇正確的定位服務方法并通過測量評估實際定位精度和功耗非常重要。
-
物聯網
+關注
關注
2942文章
47414瀏覽量
409125 -
無線網絡
+關注
關注
6文章
1497瀏覽量
68491 -
wi-fi
+關注
關注
15文章
2385瀏覽量
128974 -
Nordic
+關注
關注
9文章
243瀏覽量
48793
原文標題:【儒卓力為您帶來Nordic博文分享系列】您的下一款定位神器,何必是GPS?Nordic帶您解鎖Wi-Fi SSID的隱藏潛能
文章出處:【微信號:儒卓力,微信公眾號:儒卓力】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄

解讀Nordic基于SSID的Wi-Fi定位解決方案
評論