Использование триангуляции сотовых вышек и Wi-Fi для определения местоположения без GPS

Многие решения IoT включают одно основное требование: точно знать, где они находятся в мире.

Хотя для определения местоположения обычно используется модуль GNSS/GPS, есть сценарии, в которых GPS не является надежным или практичным. На самом деле, я приведу три точных сценария:

  1. Развертывание в помещении, где получение спутниковой привязки GPS невозможно.
  2. Использование физического корпуса, который препятствует фиксации GPS.
  3. Маломощные решения, которые не могут позволить себе потребление энергии GPS.

В Blues Wireless, когда мы говорим о сборе координат широты/долготы, мы обычно обращаемся к встроенным GPS возможностям Cellular Notecard, которые мы настоятельно рекомендуем в качестве первого (и часто единственного) способа определения местоположения.

Однако сегодня я хочу более подробно рассмотреть менее известную возможность Notecard: Триангуляция сотовых вышек и Wi-Fi.

Триангуляция

Если вы проходили базовые курсы тригонометрии или геометрии, вы уже знаете, что триангуляция — это процесс определения местоположения путем построения треугольников к интересующей вас точке из ряда других известных точек.

Notecard предоставляет встроенные возможности использования триангуляции несколькими различными способами: триангуляция сотовых вышек, триангуляция Wi-Fi или оба способа!

Определение местоположения сотовых вышек

Если у вас есть опыт работы с Notecard Cellular, вы, вероятно, заметили параметры tower_, которые появляются в событиях Notehub:

"tower_when": 1656000634,
"tower_lat": 43.074087500000005,
"tower_lon": -89.44282812499999,
"tower_country": "US",
"tower_location": "Shorewood Hills WI",
"tower_timezone": "America/Chicago",
"tower_id": "310,410,17169,77315594",
Войти в полноэкранный режим Выход из полноэкранного режима

Значения tower_lat и tower_lon представляют собой приблизительное местоположение единственной сотовой вышки, к которой была подключена эта Notecard в данный момент времени tower_when. Хотя это хорошее (приблизительное) местоположение, само по себе оно бесполезно при попытке определить точное местоположение устройства.

Например, вот примерное положение сотовой вышки, использованной в недавнем запросе, относительно моего местоположения:

Триангуляция сотовых вышек

В сценариях, где GPS непригоден, выполнение триангуляции сотовых вышек с помощью Notecard может значительно улучшить ситуацию благодаря волшебному API card.triangulate.

Чтобы включить триангуляцию сотовых вышек на нотекарте Cellular, просто выполните этот запрос:

{
  "req": "card.triangulate",
  "mode": "cell"
}
Войти в полноэкранный режим Выйти из полноэкранного режима

В следующий раз, когда Notecard установит новую сессию с Notehub, информация о каждой видимой сотовой вышке будет загружена и обработана. Новый набор данных о местоположении будет появляться в каждом событии Notehub с предварением tri_, как показано ниже:

"tri_when": 1656011112,
"tri_lat": 43.07113895,
"tri_lon": -89.43272533,
"tri_location": "Shorewood Hills WI",
"tri_country": "US",
"tri_timezone": "America/Chicago",
"tri_points": 16,
Войти в полноэкранный режим Выход из полноэкранного режима

Вот обновленная оценка местоположения, основанная только на триангуляции сотовых вышек:

Как вы можете видеть, фактическое местоположение значительно улучшилось, и будет только улучшаться по мере того, как будет видно больше вышек сотовой связи.

ПРИМЕЧАНИЕ: Важно знать, что триангуляция сотовых вышек сопровождается нетривиальным снижением мощности, поскольку сканирование модема на наличие близлежащих сотовых вышек может занять почти столько же времени, сколько вся синхронизация. Триангуляция также происходит только во время подключения к Notehub, и нет способа «повторной триангуляции» во время непрерывной сессии Notehub.

Триангуляция по Wi-Fi

Если ваш главный MCU имеет встроенный модуль Wi-Fi (например, ESP32), вы можете выполнить сканирование точки доступа Wi-Fi (AP) и отправить эти данные на Notecard для выполнения триангуляции Wi-Fi.

ПРИМЕЧАНИЕ: Wi-Fi триангуляция — это экспериментальная, техническая функция предварительного просмотра от Blues Wireless, которая бесплатна
для использования сегодня, но может использовать потребительские кредиты в
в будущем.

Формат вызова card.triangulate немного отличается при использовании Wi-Fi триангуляции. Обратите внимание, что при включении триангуляции можно использовать cell, wifi или оба варианта с wifi,cell.

{
  "req": "card.triangulate",
  "mode": "wifi",
  "text": "+CWLAP:(4,"Blues",-51,"74:ac:b9:12:12:f8",1)n+CWLAP:(3,"AAAA-62DD",-70,"6c:55:e8:91:62:e1",11)n+CWLAP:(4,"Blues",-81,"74:ac:b9:11:12:23",1)n+CWLAP:(4,"Blues",-82,"74:ac:a9:12:19:48",11)n+CWLAP:(4,"Free Parking",-83,"02:18:4a:11:60:31",6)n+CWLAP:(5,"GO",-84,"01:13:6a:13:90:30",6)n+CWLAP:(4,"AAAA-5C62-2.4",-85,"d8:97:ba:7b:fd:60",1)n+CWLAP:(3,"DIRECT-a5-HP MLP50",-86,"fa:da:0c:1b:16:a5",6)n+CWLAP:(3,"DIRECT-c6-HP M182 LaserJet",-88,"da:12:65:44:31:c6",6)nn"
}
Вход в полноэкранный режим Выход из полноэкранного режима

Что это за страшное поле text? Это список точек доступа Wi-Fi, заканчивающийся новой строкой и повторяющий вывод команды AT+CWLAP ESP32.

Получение данных о точках доступа с помощью Arduino

Если вы умеете выдавать AT-команды своему MCU, вы можете послать AT+CWLAP и отформатировать ответ в соответствии с приведенными выше требованиями. Однако не многие из нас так хорошо знакомы с синтаксисом AT, поэтому мы предоставляем следующие материалы
Библиотека Notecard Auxiliary Wi-Fi Arduino
для более простого способа программного получения списка точек доступа Wi-Fi с помощью
вашего MCU с поддержкой Wi-Fi и отправки их на Notecard одной командой:

// Update Notecard Triangulation Data
aux_wifi.updateTriangulationData();
Вход в полноэкранный режим Выход из полноэкранного режима

Получение данных о точках доступа с помощью CircuitPython

Разрабатываете с помощью CircuitPython? Вот пример функции, которая использует встроенную библиотеку wifi для сбора тех же данных WAP при использовании с MCU ESP32:

import wifi
import binascii

def get_wifi_access_points():
    """ returns a set of visible access points, corresponds to esp32 AT+CWLAP format """
    # https://docs.espressif.com/projects/esp-at/en/latest/esp32/AT_Command_Set/Wi-Fi_AT_Commands.html#cmd-lap

    all_wifi_aps = ""

    for network in wifi.radio.start_scanning_networks():

        wifi_ap = "+CWLAP:("

        if wifi.AuthMode.ENTERPRISE in network.authmode:
            wifi_ap += "5"
        elif wifi.AuthMode.PSK in network.authmode:
            wifi_ap += "6"
        elif wifi.AuthMode.WPA3 in network.authmode:
            wifi_ap += "6"
        elif wifi.AuthMode.WPA2 in network.authmode:
            wifi_ap += "3"
        elif wifi.AuthMode.WPA in network.authmode:
            wifi_ap += "2"
        elif wifi.AuthMode.WEP in network.authmode:
            wifi_ap += "1"
        else:
            wifi_ap += "0"

        bssid = binascii.hexlify(network.bssid).decode("ascii")
        bssid = ':'.join(bssid[i:i+2] for i in range(0,12,2))

        wifi_ap = wifi_ap + ","" + str(network.ssid) + ""," + str(network.rssi) + ","" + bssid + ""," + str(network.channel) + ")n"

        all_wifi_aps += wifi_ap

    wifi.radio.stop_scanning_networks()

    return all_wifi_aps
Вход в полноэкранный режим Выход из полноэкранного режима

Wi-Fi триангуляция в действии

Насколько отличаются мои результаты при использовании триангуляции Wi-Fi? Единственной точкой доступа, которую смог найти ESP32, был мой собственный маршрутизатор. Однако даже при использовании только одной точки доступа вот результаты:

"tri_when": 1656011112,
"tri_lat": 43.07113895,
"tri_lon": -89.43272533,
"tri_location": "Shorewood Hills WI",
"tri_country": "US",
"tri_timezone": "America/Chicago",
"tri_points": 16,
Вход в полноэкранный режим Выход из полноэкранного режима

Что становится удивительно точным при отображении на карте!

Wi-Fi триангуляция становится еще более ценной, когда вы понимаете, что требования к питанию минимальны, и она добавляет всего 1-2 секунды к времени синхронизации с Notehub.

Обязательно ознакомьтесь с документацией разработчика по триангуляции сотовых вышек и Wi-Fi, поскольку в Notehub есть дополнительные настройки, которые вы можете изменить в зависимости от того, как вы используете триангуляцию в своем решении.

Триангуляция с помощью Wi-Fi Notecard

До сих пор все эти инструкции были связаны с использованием нотной карты сотовой связи. А что если вы используете Wi-Fi Notecard (которая не имеет встроенного модуля GNSS/GPS)?

К счастью, триангуляция Wi-Fi включена на Wi-Fi Notecard по умолчанию, никаких изменений в конфигурации не требуется!

После настройки Wi-Fi Notecard вот какие результаты были получены в данном случае:

"tri_when": 47,
"tri_lat": 43.07121864,
"tri_lon": -89.43263674,
"tri_location": "Shorewood Hills WI",
"tri_country": "US",
"tri_timezone": "America/Chicago",
"tri_points": 3,
Вход в полноэкранный режим Выход из полноэкранного режима

Что, опять же, при отображении на карте, шокирующе близко к моему местоположению:

Резюме

Хотя GPS является стандартом де-факто для определения точного местоположения IoT-устройства и всегда должен быть первым вариантом при сборе данных о местоположении, возможности триангуляции Notecard предоставляют варианты, когда GPS недоступен.

Счастливого картографирования с Notecard и Notehub! 📍🗺

Оцените статью
devanswers.ru
Добавить комментарий