изменение скорости обновления с помощью gpsd и python
Я использую прорыв Adafruit ultimate GPS с моей малиной Pi 2 с помощью python2.7.9, GPSD и пакет python-gps. Я успешно получаю обновления gps на 1Hz через последовательный порт.
Это устройство предположительно способно к обновлениям 10Hz, которые я хотел бы включить. Согласно таблице данных (см. Фрагмент ниже), это может быть установлено последовательной командой.
моя проблема в том, что я не могу найти достаточную документацию для модуля python-gps или GPSD, который сказал бы мне, как я должен отправлять команды GPS через последовательный с моим скриптом python. Кто-нибудь может указать мне правильное направление?
1 ответов
я только что взял gps из той же семьи, что и ваша. (MTK) они используют $PMTK
строки контроля. Любой поиск PMTK protocol
дает бесконечные ресурсы. Предел-сам gps.
для одноразового преобразования стандартный метод из корневого терминала execute echo -e "$PMTK220,200*2C\r\n" > /dev/ttyAMA0
, или везде, где прибор прикреплен, для ответа 5Hz. The
-
-e
флаг позволяет анализировать обратную косую черту(ы) -
$
начало NMEA предложение -
P
проприетарный -
MTK
тип данных NMEA -
220
тип пакета -
200
пакетные данные -
*
конец данных -
2C
контрольную сумму -
\r\n
конец предложения NMEA
здесь скрипты и другие проекты доступно также, но все требуют, чтобы gpsd не контролировал gps. Gpsd предотвратит отправку управляющей строки в gps.
кроме того, если у вас есть -b
флаг /etc/default/gpsd
gpsd не будет записывать на устройство, когда оно подключено. Он выберет общий NMEA водитель, и не напишет никакие строки управления К ГПС.
вы можете скользить позади и манипулировать скоростью с помощью управляющих строк из оболочки. gps будет извергать данные, но gpsd не будет подтверждать скорость.
похоже, gpsd предпочитает 1 второе время. Даже если gps способен к более быстрым циклам, даже если вы уже используете другие методы для повторной установки скорости, и это делает так, gpsd нужно сказать, что скорость изменилась.
вот тут gpsctl -c 0.2
(no sudo) вступает в игру. Он упакован в пакет gpsd.
если есть только одно устройство, подключенное к gpsd, в Примере gpsctl изменит это устройство на 0,2 секунды сроки циклов и передать это в gpsd. Время в секундах. Да, его можно установить довольно медленно / быстро, но нет возможности подделки. Если он не может этого сделать, он не сделает этого и не скажет вам, что он не может/не может, если нет фатальной ошибки.
скорость порта не является проблемой, пока есть возможности. Кто-то, кто подсчитал однажды, сказал, что 4800 БОД достаточно для одного чтения данных за одну секунду, необходимую для отправки данных. Это зависит от нагрузки, но это работает для правило. 10Hz может сделать 38400 БОД по умолчанию для многих систем. Я попробовал, но ничего не получилось.
вы просто хотите убедиться, что gpsd не договорился до 9600 бод, прежде чем вы сможете увеличить скорость, на всякий случай. gpsctl -s XXXX
(чтобы установить скорость передачи данных, при которой GPS излучает пакеты) возвращает ошибку для меня.
даже без -b
флаг в настройке gpsd по умолчанию, это новая gps мой не остается запертым в более высоких обновлениях частоты между отключениями питания. Я должен повторить команду. Это может быть плохая батарея, ошибка оператора, или я не понимаю, что этот дефект является функцией, чтобы не защелкнуть gps вне досягаемости для других систем. (Причина -b
)
вот как вы меняете ответ от gps, который использует gpsd, или как я это сделал.
отвечая на ваш вопрос, однако, чтобы изменить скорость ответа gps через gpsd с Python
import subprocess
subprocess.call(['gpsctl', '-c', '0.2']) # Digits are the time in seconds.
попробуйте и увидите. С помощью gpsctl -c 0.25
возвращает четверть секунды показания gps и т. д..
Для справки два Python gpsd клиентские демонстрационные скрипты к которому я только что добавил обновление отчета об устройстве gpsd, (нажмите d
для обновления и просмотра чисел из новой настройки.)
они Python 2.7-3.5 gpsd python client, когда функция находит дом в демо-скрипты, это будет выглядеть примерно так:
def hertz(hz):
"""Change or enumerate a Faster/Slower gps refresh rate if device is able"""
from subprocess import call
inverse = str(1 / hz)
call((['gpsctl', '-c', inverse]))