Эмулируйте GPS или последовательное устройство

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

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

объем Knuth 2 имеет анализ, где он пытается создать генератор случайных чисел, как Вы предполагаете, и затем анализирует, почему он перестал работать, и каковы истинные вероятностные процессы. Объем 2 исследует RNGs подробно.

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

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

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

Однако, так как случайные числа от данного генератора находятся детерминировано в известной последовательности, Ваша процедура могла бы быть представлена кем-то перерывающим генератор и находящий выравнивающуюся последовательность. Поэтому можно, вероятно, избежать распределения, сразу распознаваемого как прибывающий из конкретного генератора случайных чисел при поддержании двух генераторов. Сначала, Вы выбираете i, и затем отображаете это uniformally по одному к n, где n является самое большее размером фазы. Затем во втором Вы выбираете i раз и возвращаете результат ith. Это уменьшит Ваш размер цикла до (orginal цикл size/n) в худшем случае, но для того цикла все еще генерирует универсальные случайные числа и сделает настолько способом, который делает поиск экспоненциала выравнивания в n. Это также уменьшит независимую длину фазы. Не используйте этот метод, если Вы не понимаете то, что уменьшило цикл и независимые длины фазы, средние для Вашего приложения.

7
задан Community 20 March 2017 в 10:18
поделиться

4 ответа

В списке рассылки Python есть очень похожая ветка , в которой упоминается Windows виртуальные COM-порты и обсуждает возможности псевдотерминала Unix. Если приложение (а), которое вы хотите использовать, позволяет вам ввести определенный файл tty-устройства, это может быть самый простой путь. (Не считая того, чтобы попросить авторов предоставить API плагина для того, что вы пытаетесь сделать, или купить себе Bluetooth GPS-мышь за 20 долларов . )

Используете ли вы OS X?

Существует проект macosxvirtualserialport в коде Google, который предоставляет графическую оболочку для некоторых функций утилиты под названием socat . Я бы рекомендовал взглянуть на socat, если вы видите потенциал в маршруте псевдо-tty. Я считаю, что вы могли бы использовать socat для связывания канала от программы Python с псевдо-tty.

Большинство собственных приложений Mac будут запрашивать IOServiceMatching для устройства с kIOSerialBSDRS232Type, и я сомневаюсь, что псевдо-tty будет отображаться как Служба IOKit.

В этом случае, если вы не можете найти проект, который уже реализовал такую ​​вещь, вам нужно будет реализовать драйвер, как описано в этом потоке Как создать виртуальный COM-порт . Если вы собираетесь создать драйвер устройства, вы хотели бы основать его на IOKit из-за этого вероятного запроса IOServiceMatching. Вы можете найти проект Apple16X50Serial, упомянутый в этом посте, в верхней части списка открытого исходного кода Apple (перейдите на главную страницу и выберите более старую версию ОС, если вы хотите настроить таргетинг на что-то до -10,6).

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

Если вы хотите разрешить приложениям как читать, так и писать в эти веб-сервисы, лучшим вариантом, вероятно, будет имитация устройства Garmin. Компания Garmin более или менее документировала свой протокол в файле IntfSpec.pdf, включенном в их SDK интерфейса устройства . Опять же, вы захотите разделить столько, сколько сможете, на код пользовательского пространства.

Мне не удалось найти проект или утилиту, реализующую сторону ядра виртуального последовательного интерфейса на основе IOKit, но я бы удивлен, если где-то там не прячется никто. К сожалению, большинство ответов, которые я нашел на этот вопрос, были такими: разработчику было сказано заняться написанием kext .

Компания Garmin более или менее документировала свой протокол в файле IntfSpec.pdf, включенном в их SDK интерфейса устройства . Опять же, вам нужно разделить как можно больше на код пользовательского пространства.

Мне не удалось найти проект или утилиту, реализующую сторону ядра виртуального последовательного интерфейса на основе IOKit, но я бы удивлен, если где-то там не прячется никто. К сожалению, большинство ответов, которые я нашел на этот вопрос, были такими: разработчику было сказано заняться написанием kext .

Компания Garmin более или менее документировала свой протокол в файле IntfSpec.pdf, включенном в их SDK интерфейса устройства . Опять же, вы захотите разделить столько, сколько сможете, на код пользовательского пространства.

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

Мне не удалось найти проект или утилиту, реализующую сторону ядра виртуального последовательного интерфейса на основе IOKit, но я был бы удивлен, если бы где-то там не было ни одной. К сожалению, большинство ответов, которые я нашел на этот вопрос, были такими: разработчику было сказано заняться написанием kext .

Мне не удалось найти проект или утилиту, реализующую сторону ядра виртуального последовательного интерфейса на основе IOKit, но я был бы удивлен, если бы где-то там не было ни одной. К сожалению, большинство ответов, которые я нашел на этот вопрос, были такими: разработчику было сказано заняться написанием kext .

4
ответ дан 7 December 2019 в 07:46
поделиться

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

Устройство GPS отображается в большинстве систем как не что иное, как последовательное устройство - он же COM-порт, если вы имеете дело с Windows, / dev / ttySx, если вы используете * nix. По определению, конкретная задача последовательного порта - передавать данные по шине по одному блоку за раз. Таким образом, из этого логически следует, что если вы хотите имитировать присутствие устройства GPS, вы должны собрать данные, которые вы потребляете, и поместить их в поток, который каким-то образом действует как активный последовательный порт.

Есть, однако есть некоторые сложности, которые вы, возможно, захотите учесть:

  • Большинство устройств GPS не просто отправляют данные о местоположении; там' s также информация о местоположении спутников, качестве привязки, пеленге и т. д. С другой стороны, никто не установил никаких правил, согласно которым у вас есть , чтобы сделать все эти данные доступными. Вероятно, это еще не все, но я признаю, что мне нужно провести дополнительные исследования в этой области.
  • Я не уверен, насколько быстро вы можете получать данные при работе с Google Latitude и т. Д., Но любые задержки в получение определенно приведет к видимым паузам в потоке данных вашего "последовательного порта". Опять же, это может быть не такой большой проблемой, как кажется, потому что устройства GPS, как известно, в любом случае «рассылают» данные по шине, но я определенно буду следить за этим. Вы хотите быть уверены, что данных всегда будет в избытке, а не в недостатке.

По пути вы » Я также должен преобразовать полученные координаты в правильные предложения GPS. Вы можете найти для них спецификации, но я бы определенно подружился со стандартом NMEA - хотя это и ошибочный стандарт, с ним все равно согласны.

Надеюсь, это помогло вам, по крайней мере, немного . Есть ли какие-либо подробности, относящиеся к вашей проблеме, которые, по вашему мнению, могут быть полезны при ответе на этот вопрос?

2
ответ дан 7 December 2019 в 07:46
поделиться

Я не особо разбирался в этом, но рассматривали ли вы вариант использования SDK Skyhook ? Это может дать вам то, что вы ищете. Он доступен для всех основных настольных и мобильных ОС.

0
ответ дан 7 December 2019 в 07:46
поделиться

Взгляните на Franson GPS Gate , который, помимо прочего, позволяет подключаться к Google Earth (например, моделировать GPS и т. Д.). Это только окна, но я думаю, что вы могли бы почерпнуть из него несколько полезных идей.

1
ответ дан 7 December 2019 в 07:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: