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

GPS

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

Недавно столкнулся с тем, что апгрейд навигации, предоставляемый модом, достаточно убог, при этом он занимает компонент-слот и относительно затратен для крафта. Был удивлен тем, что еще никто не запилил систему геопозиционирования (gps), собственно, написал ее сам.

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

 

Использование клиентом:

Требуется беспроводная плата.

Клиент(то, что хочет получить свои координаты через gps) броадкастит одно сообщение с содержанием "gps_request" на порт 312 (можно поменять, менять надо в коде реле), через некоторое время, если сообщение достигло всех 4 реле, он получает в ответ сообщение на порт 312 (опять же, можно поменять, на этот раз в коде контроллера), содержание сообщения: строка "gps_response", число x, число y, число z; где x,y,z - координаты клиента, x и y по горизонтали, z - высота.

 

Использование сервером:

Сервер состоит из компьютера-контроллера с установленной OpenOS и четырех микроконтроллеров, которые я буду называть (и уже называл) "реле".

Реле должны иметь беспроводную и сетевую платы, а также процессор и память (я грузил 2 планки 1 уровня, но даже одной должно хватить). Помимо этого в них должен быть биос с программой(2 ссылка), соответствующей определенному реле. Программа должна быть отредактирована под соответствующее реле (4 переменных в начале, координаты, где (по крайней мере в моей системе) y полагается горизонтальной осью, и идентификационная строка реле, которая должна быть уникальна для конкретной системы (иначе не будет работать)). Предпочтительно на каждом реле по разу запустить wakesetter (программа, третья ссылка).

Каждый реле должен быть подсоединен к компьютеру-контроллеру кабелем, помимо этого все 4 реле должны быть некомпланарны (расположены так, чтобы нельзя было провести одну плоскость через все 4 реле) .

Компьютер-контроллер должен иметь помимо базовых составляющих, необходимых для работы, беспроводную и сетевую платы.

Для запуска системы нужно лишь запустить программу gps_controller (1 ссылка), которая разбудит реле в сети с ней и начнет выполнять свою функцию. Программа является блокирующей, т.е. не позволяет пользоваться компьютером, на котором установлена, пока сама работает.
Программа будет выводить print'ом пойманные сигналы от реле, выводить им же координаты, когда сигналов достаточно (когда все 4 реле поймали запрос); уведомлять о таймауте зафейлившихся запросов (когда запрос достиг не всех реле, программа выжидает 2 секунды, чтобы удостовериться в том, что сигналов от остальных реле на его счет она не получит, и удаляет его из таблицы обработки). Ну и, естественно, отвечать на запросы координат.

 

Принцип работы:

Когда реле получает запрос от клиента, оно передает свои координаты, идентификатор и расстояние до клиента контроллеру.

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

Подробнее о вычислении: известны 4 точки и расстояние от пятой точки до каждой из них. Тогда мы можем построить по сфере на каждой точке с радиусом, соответствующим расстоянию до пятой, причем эти 4 сферы пересекутся, и пересекутся только в этой точке. Пересечение очевидно, ибо все они проходят через эту точку. Единственность пересечения гарантируется некомпланарностью центров(в трехмерном пространстве), доказывать ее мне лень, примите как факт.
Запишем гмт пересечения сфер системой уравнений (каждое вида (X-xi)^2+(Y-yi)^2+(Z-zi)^2 = Ri^2, где Ri - i-тое расстояние, xi,yi,zi - координаты i-той точки, X,Y, Z - координаты искомой(-ых) точки(-ек)), получим 4 уравнения в системе, вычтем из первого, из второго третье, из третьего четвертое, получим систему линейных уравнений на 3 уравнения, при условии некомпланарности точек и верных входных данных она совместна и имеет единственное решение, находим его через метод Крамера. Задача решена.

 

Код:
контроллер: http://pastebin.com/QD44ZWBv
реле: http://pastebin.com/eAzPst2s

прога, которую желательно по разу запустить (записать на биос чип, вставить в микроконтроллер и включить его) на каждом из реле, она позволяет контроллеру их включать через сообщение на модем ("gps awake"): http://pastebin.com/XijvUbB9

 

Скрины:

Как может выглядеть сервер: post-94-0-32857700-1489170533_thumb.png

Скрин того, что он выводит во время работы: post-94-0-70279500-1489170549_thumb.png

Скрин клиента (планшет) с простым кодом для проверки: post-94-0-58532900-1489170560_thumb.png

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

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


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

Во первых,  в робота это не вставить, то есть придётся каждый раз на место работы робота ставить эту конструкцию с ограниченным радиусом действия. Которая к тому же на связь через плату будет тратить не мало энергии (с стандартными конфигами)

 

Во вторых, зачем нам абсолютные координаты, если робот может сам записывать в себя относительные координаты от точки установки например. Да и намного меньше это будет тратить энергии робота. К тому же робот сам сможет определять стороны света, так как эти данные будут храниться в нём и редактироваться по ходу выполнения программы. (как-то 2 года назад видел чужую прогу с такой системой ориентирования)

 

А то что ты предложил, давно уже все знают что можно реализовать. Но какая у этого будет эффективность, вот в чём вопрос.

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


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

Недавно столкнулся с тем, что апгрейд навигации, предоставляемый модом, достаточно убог, при этом он занимает компонент-слот и относительно затратен для крафта.

 

Пожалуй будет дешевле и проще использовать апргрейд навигации, который быстро и эффективно может выдать относительные координаты в максимальном радиусе в 2048 блоков, которые легко можно превратить в абсолютные. Да и это будет не совсем транспортабельно для робота или дрона. Но в целом плюс в том что таки улучшение "Навигация" не будет занимать собой слот для улучшений.

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

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


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

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

 

 

 

Которая к тому же на связь через плату будет тратить не мало энергии (с стандартными конфигами)

Ну не знаю, я только что проверил посыл сообщения на максимальную(400, вроде максимальная) дальность броадкастом с замером энергии до и после, разница - 20 единиц энергии. А потом сделал то же самое, но вместо посыла сигнала - os.sleep(1). Второе выжрало 10 единиц энергии. Неужто такой большой расход энергии на посыл одного единственного сигнала? P.S. Вспомнил, что у меня соляра в планшете, которым я это тестировал. Но по сути (если я не великий бог рандома) оно должно уменьшить только расход при сне, а не при посыле сигнала, так что особой роли не играет.

 

 

 

Во вторых, зачем нам абсолютные координаты, если робот может сам записывать в себя относительные координаты от точки установки например. Да и намного меньше это будет тратить энергии робота. К тому же робот сам сможет определять стороны света, так как эти данные будут храниться в нём и редактироваться по ходу выполнения программы.

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

 

 

 

Да и это будет не совсем транспортабельно для робота или дрона. Но в целом плюс в том что таки улучшение "Навигация" не будет занимать собой слот для улучшений.

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

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

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


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

 

 

Общий недостаток системы в том, что оставаясь на месте, невозможно определить текущее направление робота. Требуется хотя бы одно движение. А если мы готовы пожертвовать одним движением, то один из контролеров становится лишним.

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

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

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


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

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

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

 

В нормальной GPS рандомно расставленные микроконтроллеры раз в N времени бродкастят свои координаты, пользователи сами вычисляют свои координаты (хотя вычисление по трем сферам через вектора несколько более громоздкое, но других не видел)

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

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

 

Мне на нескольких проектах популярно объяснили, что GPS никому не нужна (хотя почему ее часто юзают в ComputerCraft - не понятно) я и забил на это дело, как и на десяток других полезных проектов.

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


Ссылка на сообщение
Поделиться на других сайтах
Недавно столкнулся с тем, что апгрейд навигации, предоставляемый модом, достаточно убог, при этом он занимает компонент-слот и относительно затратен для крафта. Был удивлен тем, что еще никто не запилил систему геопозиционирования (gps), собственно, написал ее сам.

 

убог? :)  мдааа.  

 

Никто не написал gps велосипед?  А зачем этот лагодомный крендель кому-то нужен?

 

навигатор затратен для крафта? хм...  а это монструозное сооружение https://puu.sh/uDz18/465b580ed7.png дешевле в крафте? :giggle:

 

Минусы "велосипеда":

  • стационарное сооружение бесполезное
  • радиус (именно радиус а не квадрат) 400 бл. без апа дальности вайфайки.
  • требует массы телодвижений, настройки, обслуживания
  • требует постоянного и планомерного развертывания вышек (рес и затраты энергии растут в геометрической прогрессии)
  • требует кучу реса
  • жрет энергии немеряно. Робот, не зная, где ближайшая вышка, обязан выпукивать сигнал максимальной силы для надежности и устойчивой навигации, чем тратит тонны энергии.
  • вышка требует установки только в привате, иначе она прикажет "долго жить" и будет немедленно разгрифлена.
  • лагодром тот еще
  • требует обязательного наличия в роботе карты связи
  • если вышки бродкастные, или известны частоты связи (или вдруг станут кому-то известны как-то, например похищен робот), они будут тот час же заддудосены и выведены из строя гриферами
  • и прочее прочее

 

Плюсы "велосипеда":

  • не обнаружено

 

Плюсы навигатора:

  • изи крафт
  • абсолютно гибкое и самодостаточное устройство
  • если навигатор  валяется в слоте для расширения плат, гибкость использования возрастает гипер неимоверно. Можно за несколько секунд перелинковать навигатор на другую карту местности, была бы только бумага под рукой.
  • не замечено, что оно потребляет энергию
  • покрытие координат при линковке к карте макс. размера - квадрат со сторонами 4096 на 4096 боков  (4096 блоков, Карл!!!) Это больше, чем наш майнерс мир.
  • мгновенное развертывание робота на любой местности в любом измерении при наличии карты. Робот сразу начнет четко ориентироваться в пространстве, как игрок.
  • при плейсинге робота на землю и старте проги мало мальский программист напишет в прожке фичу, что робот по дефолту спросит свои реальные координаты нахождения "F3" (и уже сам рассчитает и внесет и запомнит поправки для своих относительных координат ванила карты) и в дальнейшем будет кататься, как ни в чем не бывало и получать реальные координаты мира и с ними работать или отдавать их вам, если это нужно.
  • получает директ
  • получает границы покрытия, небезопасное приближение к границам и флаги выхода за "покрытие"
  • и пр.

Минусы навигатора:

  • не обнаружено

Есть, кстати, смысл почитать про "убогий" навигатор:

http://computercraft.ru/topic/41-mod-opencomputers-obsuzhdenie/?p=10087

Навигатор - это апгрейд намбаван, как и связанка или как и чанклодеар, к слову, которые дают НЕИМОВЕРНЫЕ преимущества роботу, автономность и гибкость использования.

 

 

 

Но в целом плюс в том что таки улучшение "Навигация" не будет занимать собой слот для улучшений.

проц же тоже занимает слот. вай-файка  занимает слот. Радар занимает слот. Ну и что в этом такого. Оно все занимает слот. Бестолковое перо полета выше 8 блоков - тоже занимает слот. На робике специально выключено ограничение на полет.

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


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

Минус навигатора - время получения координат от 1 тика до 35 (иногда и до бесконечности), в зависимости от загруженности сервера, т. е. если каждый шаг проверять координаты, то неизвестно когда робот дойдет до цели. Поэтому придется после получения координат от апгрейда, при каждом шаге их изменять программно, чтобы не ждать опять неизвестное количество времени, поэтому выкидываем навигатор и считаем координаты программно, как все нормальные люди.

 

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

 

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

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

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


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

@@Doob, первый раз такое слышу, что навигатор зависает куда-то там у тебя=).  Хотя все возможно в майне. В нем и роботы зависают в воздухе при движении.

И навигатор совершенно не обязательно использовать каждое движение, крип тебя упаси от этого :)  Ты коры получил реальные, куда-то нужно поехать, посчитал офсет и директ, и выполнил сколько-то актов движения в пространстве.

 

У программной же навигации тоже есть свои минусы и плюсы. Но всяко она лучше GPS, тут и спору нет.

 

А GPS можно рассматривать только с теоретической точки зрения и программной реализации. Только в этом интерес есть маленький какой-то. Практических ценности применения и выхлопа с него - 0.

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


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

 

убог? :) мдааа.

 

Точь в точь выразил всё что хотелось выразить) А вот про плюс со слотом, это так, что бы был хоть какой-то плюс

 

Есть, кстати, смысл почитать про "убогий" навигатор:
http://computercraft.ru/topic/41-mod-opencomputers-obsuzhdenie/?p=10087

 

Пожалуй если бы не этот пост, то "многие" бы не узнали на сколько в действительности полезный апгрейд навигации и что его радиус не всего 64 блока, а целых 2048. Нужно что бы больше людей которые считают бесполезным апгрейд навигации из-за его маленького радиуса действия, узнали о его действительно максимально возможном радиусе.

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

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


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

скрины протухли. есть возможность восстановить? (хотя бы последний =)

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

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


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

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

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

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

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

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

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

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

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


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