Перейти к содержимому
Doob

GPS навигация на микроконтроллерах

Рекомендуемые сообщения

GPS это куча оборудования, трата энергии и времени, но иногда может понадобится там, где нет встроенного акселерометра, как у робота.

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

Где-то была готовая программа, но я ее не нашел, поэтому восстановил основной функционал, по примеру КомпутерКрафта.

 

Для начала нужен компьютер с установленной OpenOS.
Скачиваем для него программатор хостов: pastebin get ZD8GysNP /bin/fgps.lua
Эта программа позволяет устанавливать прошивку для спутников-микроконтроллеров, которые будут рассылать свои координаты по запросу.
Далее, соберем несколько микроконтроллеров с беспроводными картами, при необходимости обеспечим их энергией.

 

Теперь надо установить прошивку для первой партии:

  • узнаем координаты, где будет стоять очередной хост
  • вставляем EEPROM в компьютер
  • запускаем программатор, с указанием координат через пробел (например: fgps 1652 64 -152)

 

 

cJqZRna.png

FLm90O2.png

 

 

 

Прошитые карточки вставляем в микроконтроллеры (в сетке крафта) и расставляем в соответствии с координатами, указанными при прошивке.

 

 

el56Zwm.png

 


Самое главное - не перепутать координаты. Если навести курсор на микроконтроллер и зажать LSHIFT, то будет виден лейбл биоса, который является подсказкой для его позиции.

 

Когда первая партия размещена и активированна, остальные хосты можно прошивать без указания координат - они определят позицию сразу при включении (если они будут в радиусе действия четырех рабочих хостов)
Но лучше, конечно, чтобы каждый хост знал свои точные координаты. Ибо в случае небольшой ошибки в начале постройки, по мере расширения сети, погрешность будет увеличиваться, т. к. поправка будет производится по неверно вычисленным координатам хостов.

 

Теперь проверим работу системы в деле.
Возьмем, например, планшет с беспроводным модемом.
Скачаем библиотеку GPS: pastebin get Dja9ZceV /lib/gps.lua
Запустим консоль Lua.
Загрузим библиотеку: local gps = require('gps')

И попробуем получить координаты: gps.locate(true) (параметр DEBUG передаваемый в функцию работает как и в ComputerCraft - выводит все вспомогательные сообщения)

 

 

NvgOLan.png

AynOL2e.png

 



Каждый хост, при старте устанавливает wake-up сообщение и включается только чтобы ответить на запрос координат. Такой подход экономит огромное количество энергии и позволяет добиться полной автономности хостов - встроенной солнечной панели вполне хватает для работы.
Для стабильной работы надо будет добавить data-карту и реализовать протокол управления спутниками по прошитому открытому ключу, чтобы удобно было прошивать новые координаты при перемещении хоста на новое место.

Изменено пользователем Doob

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Немного переработал, починил один баг с микроконтроллерами (оказывается, у них по 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Стоит отметить, что в новых версиях появилась беспроводная карта 1 уровня. Т.е. можно по идее юзать корпус микроконтроллера 1 уровня. Но у этой карты есть ограничение на количество открытых портов = 1 по умолчанию. Для работы GPS этого будет достаточно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Затестил GPS, с карточкой 2 лвл. Результаты неутешительные: погрешности в пределах +-1 блок, пробовал ставить 3-10 спутников в разных позициях вокруг тестовой области

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может есть погрешность при установке координат спутников? Спутники слишком близко стоят?

А вообще, при трех спутниках можно получить позицию с вероятностью 50%. В этом алгоритме, для компенсации выдергивается еще один спутник, так что получается 25%. А если координаты спутников немного сбились, то вообще ничего не получается.

 

По четырем спутникам можно получить позицию 100%, но эта штука не особо популярная, я просто портировал код с ComputerCraft.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 05.10.2019 в 06:37, Doob сказал:

Спутники слишком близко стоят?

Примерно в пределах куба 20*20*20, пробовал ставить дальше - дебаг показывает, что планшет достучался только до двух. Как будто используется недостаточная сила сигнала отправки. 

Расставлял спутники примерно, как на твоем видео - один на земле, другие два на столбах

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...