Doob 2 749 Опубликовано: 14 мая, 2017 (изменено) GPS это куча оборудования, трата энергии и времени, но иногда может понадобится там, где нет встроенного акселерометра, как у робота. Попробуем разобраться, как настроить и построить сеть спутников, по которым можно вычислить свои координаты. Где-то была готовая программа, но я ее не нашел, поэтому восстановил основной функционал, по примеру КомпутерКрафта. Для начала нужен компьютер с установленной OpenOS.Скачиваем для него программатор хостов: pastebin get ZD8GysNP /bin/fgps.luaЭта программа позволяет устанавливать прошивку для спутников-микроконтроллеров, которые будут рассылать свои координаты по запросу.Далее, соберем несколько микроконтроллеров с беспроводными картами, при необходимости обеспечим их энергией. Теперь надо установить прошивку для первой партии: узнаем координаты, где будет стоять очередной хост вставляем EEPROM в компьютер запускаем программатор, с указанием координат через пробел (например: fgps 1652 64 -152) Прошитые карточки вставляем в микроконтроллеры (в сетке крафта) и расставляем в соответствии с координатами, указанными при прошивке. Самое главное - не перепутать координаты. Если навести курсор на микроконтроллер и зажать LSHIFT, то будет виден лейбл биоса, который является подсказкой для его позиции. Когда первая партия размещена и активированна, остальные хосты можно прошивать без указания координат - они определят позицию сразу при включении (если они будут в радиусе действия четырех рабочих хостов)Но лучше, конечно, чтобы каждый хост знал свои точные координаты. Ибо в случае небольшой ошибки в начале постройки, по мере расширения сети, погрешность будет увеличиваться, т. к. поправка будет производится по неверно вычисленным координатам хостов. Теперь проверим работу системы в деле.Возьмем, например, планшет с беспроводным модемом.Скачаем библиотеку GPS: pastebin get Dja9ZceV /lib/gps.luaЗапустим консоль Lua.Загрузим библиотеку: local gps = require('gps') И попробуем получить координаты: gps.locate(true) (параметр DEBUG передаваемый в функцию работает как и в ComputerCraft - выводит все вспомогательные сообщения) Каждый хост, при старте устанавливает wake-up сообщение и включается только чтобы ответить на запрос координат. Такой подход экономит огромное количество энергии и позволяет добиться полной автономности хостов - встроенной солнечной панели вполне хватает для работы.Для стабильной работы надо будет добавить data-карту и реализовать протокол управления спутниками по прошитому открытому ключу, чтобы удобно было прошивать новые координаты при перемещении хоста на новое место. Изменено 18 мая, 2017 пользователем Doob 8 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob Автор темы 2 749 Опубликовано: 7 августа, 2019 Немного переработал, починил один баг с микроконтроллерами (оказывается, у них по wake-up надо грузить прокси через assert, сильное колдунство) Добавил поддержку debug-card. Записал видосик с примером настройки. Скрытый текст wget https://raw.githubusercontent.com/DOOBW/OC-GPS/master/usr/bin/gps.lua /bin/gps.lua && wget https://raw.githubusercontent.com/DOOBW/OC-GPS/master/usr/lib/gps.lua /lib/gps.lua 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 197 Опубликовано: 4 октября, 2019 Стоит отметить, что в новых версиях появилась беспроводная карта 1 уровня. Т.е. можно по идее юзать корпус микроконтроллера 1 уровня. Но у этой карты есть ограничение на количество открытых портов = 1 по умолчанию. Для работы GPS этого будет достаточно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 197 Опубликовано: 4 октября, 2019 Затестил GPS, с карточкой 2 лвл. Результаты неутешительные: погрешности в пределах +-1 блок, пробовал ставить 3-10 спутников в разных позициях вокруг тестовой области Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob Автор темы 2 749 Опубликовано: 5 октября, 2019 Может есть погрешность при установке координат спутников? Спутники слишком близко стоят? А вообще, при трех спутниках можно получить позицию с вероятностью 50%. В этом алгоритме, для компенсации выдергивается еще один спутник, так что получается 25%. А если координаты спутников немного сбились, то вообще ничего не получается. По четырем спутникам можно получить позицию 100%, но эта штука не особо популярная, я просто портировал код с ComputerCraft. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 197 Опубликовано: 6 октября, 2019 В 05.10.2019 в 06:37, Doob сказал: Спутники слишком близко стоят? Примерно в пределах куба 20*20*20, пробовал ставить дальше - дебаг показывает, что планшет достучался только до двух. Как будто используется недостаточная сила сигнала отправки. Расставлял спутники примерно, как на твоем видео - один на земле, другие два на столбах Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах