Сеть мониторинга
С прошивки 1.3.16 (данные UBX с 1.3.18) · Радио: Радио ESP-Now
Несколько референсных станций MS2net могут наблюдать за объектом, который может сместиться: склоном оползня, подпорной стеной, мостом, зданиями рядом со стройплощадкой. На каждой наблюдаемой точке закрепляется станция, работающая как ровер: она непрерывно, днём и ночью, измеряет своё положение в RTK и записывает его на свою карту microSD. Сравнение положений за часы, дни и недели показывает, сместилась ли точка, насколько и когда.
Чтобы измерять в RTK, каждому роверу нужны поправки источника: базы, стоящей на устойчивом грунте, или шлюза, который берёт их с NTRIP-кастера. Поправки доходят до всех по радио ESP-Now, без маршрутизатора, без кабелей между точками и без SIM-карты на каждой станции. Там, куда радио не достаёт, ровер работает ещё и как ретранслятор.
На этой странице объясняется, что происходит внутри сети: как передаются данные, как станции следят друг за другом, что делает сеть, когда станция выключается, и как данные каждой станции доходят до сборщика. Поля страницы настройки описаны в разделе Радио ESP-Now.
Как передаются данные
Рисунок 1 — Поправки от источника к роверам
В первой половине анимации источник — база, во второй — шлюз; в настоящей сети передаёт только один источник одновременно.
- Источник готовит поправки. База вычисляет их своим модулем GNSS по своим фиксированным координатам; шлюз получает их от кастера через свой WiFi.
- Разбивает их на пронумерованные пакеты. Каждый пакет длиной не более 250 байт несёт поправки, порядковый номер, который растёт на единицу с каждым пакетом, и контроль, вычисленный по содержимому. С заводскими частотами группа пакетов уходит раз в секунду.
- Отправляет каждый пакет дважды, с разницей в несколько миллисекунд, всем станциям в зоне действия. Радио не подтверждает приём: вторая копия покрывает пакет, потерянный из-за помехи.
- Каждый ровер оставляет первую копию и отбрасывает вторую, узнавая её по номеру. Пакет с неверным контролем отбрасывается. Хорошие поправки без изменений идут в модуль GNSS ровера, который с ними выходит в RTK fix.
- Каждый ровер записывает своё положение на свою карту microSD. Измерения остаются там: радио несёт поправки к роверам и строки состояния, описанные ниже; данные GNSS станции уходят к центру, только если это попросить, через сборщик. Файлы забирают с каждой станции через Файлы.
Все станции должны быть на одном радиоканале. Источник передаёт на канале своей сети WiFi, если она у него есть; роверы держат WiFi выключенным и сами находят канал, слушая по очереди каналы с 1 по 13 по 2 секунды (всего около 26 с). С сетевым ключом каждый пакет подписан, и станция принимает только пакеты, подписанные её собственным ключом: две соседние сети не смешиваются. Пакеты не шифруются. Подробности — в разделе Радио ESP-Now › Пакеты и сетевой ключ.
Станции сообщают, кто они
Рисунок 2 — Телеметрия: каждая станция каждые 2 с
Каждые 2 секунды каждая станция, база или ровер, отправляет всем остальным короткую строку состояния:
- свой ID, последние четыре цифры своего радиоадреса (например,
173E), тот же, что в имени Bluetooth и на дисплее; - свою роль: база, шлюз, ретранслятор или ровер. Станция называет себя базой, шлюзом или ретранслятором только пока ей есть что передать: база, ещё занятая самоопределением, или ретранслятор, который ничего не получает, называют себя ровером и никого не привлекают;
- сколько она работает, свободную память и версию прошивки;
- на ровере — ретранслятор, у которого он просит поправки, или никакой;
- с прошивки 1.3.18 — своё положение (широта, долгота, высота) и тип решения: 3D, RTK float или RTK fix.
Каждая станция хранит услышанные строки в таблице, с сигналом каждой и секундами с последней.
Именно эта таблица позволяет сети перестраиваться самой, и её же читают, чтобы проверить сеть:
вживую в последовательном меню r или на странице настройки, которая показывает станции,
слышимые за минуту до входа в настройку (в настройке ESP-Now выключен). Столбцы описаны в
разделе Радио ESP-Now › Слышимые станции.
Как она перестраивается сама
Ни одна станция не командует остальными, и ничего не нужно настраивать на каждой станции отдельно: каждая решает сама по своей таблице и по потоку поправок. Вот что происходит в трёх важных случаях.
Ровер не слышит источник
Рисунок 3 — Ровер просит ретранслятор
- Каждые 5 секунд ровер подводит итог по источнику: сколько пакетов он услышал и скольких номеров не хватает. Если он не слышал его совсем или потерял больше одного пакета из пяти, ему нужна помощь.
- В своей строке состояния он просит ретранслятор, который слышит лучше всего среди тех, кому есть что передать (просит 9C04 в анимации).
- Ретранслятор читает запрос и начинает повторять: каждый новый пакет, который он получает, он отправляет заново, без изменений, с тем же номером, дважды. Каждый запрос действует 15 секунд, и ровер обновляет его с каждой строкой, то есть каждые 2 с: полоска под ретранслятором заполняется при каждом запросе.
- Когда ровер снова хорошо слышит источник, он перестаёт просить; через 15 с после последнего запроса ретранслятор перестаёт повторять, и эфир освобождается.
Ретранслятор, который плохо слышит источник, сам так же просит другой ретранслятор, так что поправки при необходимости проходят несколько скачков. Пакеты никогда не ходят по кругу: каждая станция узнаёт по номеру уже полученный пакет, от кого бы он ни пришёл, и отбрасывает его. Ретранслятор, который не слышит ни одного ровера с прошивкой 1.3.16 или новее, повторяет всегда, чтобы обслуживать старые роверы, которые не умеют просить.
Отказ ретранслятора
Рисунок 4 — Отказ ретранслятора: переход на другой
Часы в правом верхнем углу показывают время сети: долгие ожидания проходят быстро.
- Используемый ретранслятор выключается (разряженная батарея, неисправность, удар): поправки перестают доходить до ровера, а его строки состояния — до всех.
- Через 3 секунды без поправок ровер снова ищет канал, с 1 по 13, около 26 секунд: он не знает, в чём дело — в ретрансляторе или в канале.
- Закончив поиск, он останавливается на канале, где слышал источник или ретранслятор с поправками, и просит ретранслятор, который слышит лучше всего. Выключенный больше не кандидат: станция, молчащая 15 с, больше не выбирается.
- Новый ретранслятор начинает повторять, и ровер снова в RTK fix примерно через полминуты после отказа.
Если других ретрансляторов в зоне действия нет, ровер продолжает искать канал, пока снова не услышит источник или ретранслятор. Тем временем он остаётся без поправок: запись продолжается, но положения не в RTK fix. Когда ретранслятор снова включится, ровер сам его найдёт.
Отказ шлюза
Рисунок 5 — Отказ шлюза: его сменяет резервный
Можно поставить два шлюза или больше: один передаёт, остальные в резерве.
- При нескольких шлюзах передаёт только тот, у которого наименьший ID. Остальные всё равно получают кастер и используют его для себя (они тоже роверы и измеряют свою точку), но пока слышат, что передаёт шлюз с наименьшим ID, молчат.
- Передающий шлюз выключается или теряет Интернет либо кастер: его поправки прекращаются.
- Резервный отсчитывает тишину. Через 15 секунд без него начинает передавать поправки своего кастера шлюз с наименьшим ID среди оставшихся.
- Тем временем роверы через 3 с без поправок ищут канал; они находят новый источник и снова в RTK fix через полминуты — минуту после отказа, в зависимости от канала.
Шлюз молчит и тогда, когда слышит поправки базы: при базе и шлюзе шлюз остаётся резервом базы и сменяет её через 15 с после того, как база замолкает. База, ещё занятая самоопределением, не передаёт поправок и никого не заставляет молчать. Чтобы всё это работало, шлюзы должны слышать друг друга: одна и та же сеть WiFi (а значит, один канал) и радиосвязь между ними.
Если отказывает другая станция
| Что происходит | Что делает сеть |
|---|---|
| выключается ровер | Для остальных станций ничего не меняется. Он исчезает из таблиц после минуты молчания; его карта microSD хранит всё, что он записал до этого момента. |
| выключается база | Роверы остаются без поправок и ищут канал. Если есть резервный шлюз, он начинает передавать через 15 с; если нет, роверы ждут возвращения базы и потом продолжают сами. |
| шлюз теряет Интернет | Без данных от кастера он больше не передаёт поправки: для роверов это как если бы он был выключен, и резервный шлюз со своим подключением сменяет его через 15 с. |
| питание возвращается | Каждая станция перезапускается в своём Режиме при включении и сама возвращается в сеть: роверы снова находят канал, ретрансляторы снова отвечают на запросы. |
| станция в последовательном меню | Пока последовательное меню открыто, станция не отправляет строк состояния. Ретранслятор, оставленный в меню дольше 15 с, больше не выбирается: прочитайте нужное и выйдите. |
| станция в настройке | В настройке ESP-Now выключен: ретранслятор в настройке не повторяет, и зависящие от него роверы остаются без поправок, пока он не вернётся в режим ровера. |
Данные каждой станции — сборщику
С прошивки 1.3.18
Рисунок 6 — Данные UBX роверов идут к сборщику
Каждая станция и так записывает своё положение на свою карту microSD. С прошивки 1.3.18 она может также передавать свои данные GNSS по ESP-Now станции, работающей как сборщик, которая сохраняет их все на своей карте microSD: чтобы получить данные всего объекта, достаточно подойти к одной станции.
- У каждой передающей станции включено Передавать UBX по ESP-Now. Она упаковывает в пакеты сообщения NAV-PVT (положение), RXM-RAWX (сырые измерения) и RXM-SFRBX (навигационные данные спутников), которые выдаёт её модуль GNSS: только те, что включены в Частоты сообщений, с их частотой.
- Каждый пакет несёт ID станции и номер и уходит дважды с интервалом 10 мс, как поправки. Прошивки старше 1.3.18 его не распознают и отбрасывают.
- Ретрансляторы повторяют их всегда, даже без запросов: данные дальней точки доходят до сборщика через ретранслятор (D45C в анимации). Каждая станция отбрасывает копии, узнавая их по станции-источнику и номеру.
- Сборщик с включённым
Собирать UBX из ESP-Now раз в секунду
записывает данные каждой станции в отдельный файл, по одному на станцию и на день:
ESPNOW_<ID>_<ггммдд>.ubx, напримерESPNOW_5A21_261008.ubx(ESPNOW_5A21.ubx, пока часы не установлены). Собственные данные сборщика туда не попадают: он и так записывает их, как каждая станция. - Файлы скачивают со сборщика через Файлы и обрабатывают так же, как файлы, записанные каждой станцией.
Строки состояния несут и положение каждой станции с типом решения (3D, RTK float, RTK fix): таблица слышимых станций сборщика показывает, где находится каждая точка, даже без сообщений UBX.
Каждая ячейка Частоты сообщений говорит, через сколько измерений выходит сообщение: при
заводских измерениях 4 Гц значение 4 означает раз в секунду. В последовательном меню три
сообщения находятся в 2 → 4 (NAV, пункт 16 PVT) и 2 → 3 (RXM, пункт 3 RAWX и пункт
6 SFRBX).
| На стенде | Что доходит |
|---|---|
| в установившемся режиме | Доходит 99 % переданных байтов. |
| целые сообщения | В файле 95 % байтов — целые сообщения. Потерянный пакет портит всё сообщение, часть которого он нёс, а RXM-RAWX занимает около пяти пакетов; программы обработки пропускают испорченные сообщения и используют остальные. |
| при запуске | Если источник перезапускается, роверы ищут канал, и в это время теряется больше. |
Файл сборщика — не точная копия: полная копия остаётся в файле, записанном на карту microSD каждой станции. Сколько станций могут передавать одновременно — в разделе Ограничения.
Роли вкратце
| Станция | Где | Как настроить | Подробности |
|---|---|---|---|
| База | На устойчивом грунте, вне зоны, которая может сместиться, в прямой видимости точек | Режим Base с Фиксированная, Радио в ESP-Now | Поправки RTK › База и ровер по ESP-Now |
| Шлюз | Вместо базы или как её резерв: там, где есть WiFi с Интернетом | Ровер с включёнными клиентом NTRIP и Шлюз ESP-Now, Радио в ESP-Now | Радио ESP-Now › Шлюз |
| Ровер | На каждой наблюдаемой точке, закреплённый на столбике или кронштейне | Ровер, Радио в ESP-Now, Шлюз ESP-Now выключен, запись включена | Запись на microSD |
| Ретранслятор | Там, куда сигнал источника не доходит: между источником и самыми дальними точками | Ровер с отмеченным Ретранслятор ESP-Now; он тоже измеряемая точка | Радио ESP-Now › Ретранслятор |
| Сборщик | Там, куда доходят данные всех станций, напрямую или через ретранслятор | База или ровер с Собирать UBX из ESP-Now и картой microSD; по желанию | Данные каждой станции — сборщику |
Достаточно одного источника поправок: базы или шлюза. База, шлюз и ретранслятор — тоже референсные станции MS2net с той же прошивкой: роль определяют настройки.
Как развернуть
- Обновите каждую станцию до прошивки 1.3.16 или новее (1.3.18 для данных UBX), все вместе (Обновление прошивки). Что вы видите: версию в разделе Какая версия установлена.
- Выберите один сетевой ключ для объекта и введите его в
Настройка радио на каждой станции, затем Сохранить. Что вы видите: последовательное
меню
rпоказывает(set). - Подготовьте источник: базу на устойчивом грунте, в режиме Фиксированная и с Радио в ESP-Now, или шлюз (Радио ESP-Now › Шлюз). Что вы видите: на базе светодиод NET мигает голубым, пока уходят поправки.
- На каждой станции точки установите Радио в ESP-Now и оставьте Шлюз ESP-Now выключенным. В разделе Запись на microSD оставьте включённым Запись на microSD и поднимите Максимальное время записи (мин) до длительности кампании: с завода запись останавливается через 24 часа. Установите Режим при включении в Rover, затем Сохранить и Выход. Что вы видите: на дисплее Rover.
- Закрепите каждую станцию на её точке, антенной GNSS под открытым небом, и включите её. Что вы видите: в течение нескольких десятков секунд значок ESP-Now чередуется со стрелкой вниз, затем светодиод RTK горит постоянно (RTK fix).
- Там, где станция не получает поправки, поставьте ретранслятор между ней и источником (Радио ESP-Now › Ретранслятор). Что вы видите: в слышимых станциях этот ровер показывает ID ретранслятора в столбце Ретранслятор, и ровер выходит в RTK fix.
- Если нужен сборщик: на каждой станции, которая должна передавать свои
данные, включите NAV-PVT, RXM-RAWX и RXM-SFRBX в
Частоты сообщений с нужной частотой и Передавать UBX
по ESP-Now в Настройка радио (
r→8), затем Сохранить. Что вы видите: в последовательном менюrстрокаUBX since start, где растут отправленные байты. - На станции-сборщике, со вставленной картой microSD, включите Собирать UBX из ESP-Now
(
r→9), затем Сохранить и Выход. Что вы видите: в её менюrрастутheard from othersиsaved, а в Файлы появляется по файлуESPNOW_<ID>_<ггммдд>.ubxна каждую передающую станцию. - Проверьте всю сеть из последовательного меню
rодной станции, как в разделе Как её проверить, затем выйдите из меню. Что вы видите: все станции в списке, возраст от 0 до 2 с, одинаковая прошивка.
Как её проверить
Каждая станция хранит таблицу слышимых станций: ID
станции, роль, сигнал, секунды с последней строки, ретранслятор, которого просит каждый ровер,
прошивка, время работы, свободная память и, с прошивки 1.3.18, положение с типом решения.
Откройте последовательное меню r на любой станции
сети и прочитайте её; затем выйдите из меню, потому что станция в меню не отправляет строк.
| Что видно | Что это значит |
|---|---|
| все на месте | Видна каждая станция сети, с возрастом от 0 до 2 с и одинаковой прошивкой: сеть полная. |
| одной нет | Эта станция выключена, вне зоны действия, у неё другой сетевой ключ или прошивка старше 1.3.16. |
| слабый сигнал | Ниже -80 дБм связь на пределе: поднимите антенны или поставьте ретранслятор. |
| запрошен ретранслятор | Ровер с ID в столбце Ретранслятор не слышит источник и зависит от этого ретранслятора: держите ретранслятор включённым. |
| два шлюза | Две станции с ролью Шлюз дольше 15 с не слышат друг друга, и роверы между ними слышат два источника: оставьте один шлюз или сблизьте их до зоны взаимной слышимости. |
| данные UBX | На сборщике строка UBX since start считает байты, услышанные от других станций (heard from others), и сохранённые (saved). Если растёт число в скобках после saved, данным не хватает места на карте microSD: её нет, она заполнена или медленная. |
Находится ли каждый ровер в RTK fix, показывает сама станция —
светодиод RTK и дисплей. На ретрансляторе и на шлюзе
последовательное меню r также сообщает, повторяют ли они или передают, а счётчики пакетов
описаны в разделе Радио ESP-Now › Счётчики.
Ограничения
| Ограничение | Что это значит |
|---|---|
| дальность | ESP-Now достаёт не более чем на несколько сотен метров в прямой видимости, с препятствиями намного меньше (Дальность и связь). Каждый ретранслятор добавляет шаг, и каждый скачок — это ещё одна станция, которая должна оставаться включённой. |
| мощность | Макс. мощность WiFi (с завода 11 дБм) ограничивает и ESP-Now: она держит излучаемую мощность в пределах правил, а при меньшей мощности дальность меньше. |
| данные | Каждый ровер записывает на свою карту microSD; по ESP-Now до сборщика доходят только NAV-PVT, RXM-RAWX и RXM-SFRBX, и не все целыми. Полные файлы забирают с каждой станции (Файлы); для последующей обработки выберите Частоты записи (Запись на microSD). |
| привязка | Положения отсчитываются от координат источника. Держите базу в режиме Фиксированная всю кампанию (Самоопределение или фиксированная); положения, измеренные с поправками шлюза, могут отличаться от измеренных с базой: отмечайте, когда меняется источник. |
| пропуски | При отказе ретранслятора или источника зависящие от него роверы остаются без поправок от полуминуты до минуты, пока снова не найдут канал: в данных этот отрезок не в RTK fix. |
| полоса | RXM-RAWX, RXM-SFRBX и NAV-PVT раз в секунду дают около 1,6 КБ в секунду на станцию, на том же канале, что и поправки, и каждый ретранслятор передаёт их заново: не больше десятка станций, передающих сырые измерения раз в секунду. |
| память | Передавать UBX по ESP-Now занимает 4 КБ памяти, Собирать UBX из ESP-Now — 8 КБ, только пока они включены. |
| восемь станций | Каждая станция помнит восемь других: если станция слышит больше восьми, её таблица показывает только восемь последних услышанных, и ретранслятор она выбирает среди них. Копии данных UBX тоже распознаются для восьми станций-источников одновременно: если передающих станций больше, копия, пришедшая с опозданием от ретранслятора, может попасть в файл дважды. |
| прошивка | Каждой станции нужна прошивка 1.3.16 или новее: более старый ровер не просит ретранслятор, и ретранслятор обслуживает его только пока в зоне действия нет ни одного ровера 1.3.16 или новее. Для передачи, повтора и сбора данных UBX нужна 1.3.18: более старые прошивки отбрасывают эти пакеты. |