Автор Тема: Синхронизация времени  (Прочитано 21936 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Артём

Синхронизация времени
« : 07 Октябрь 2013, 23:51:37 »
0
Тут будет лирическое отступление
Читать далее...
Итак, казалось бы, какие трудности могут быть с привязкой наблюдений к точному времени в век доступных GPS-приемников, коль скоро известно, что работа всей системы GPS (как и ГЛОНАСС и Galileo) основана на обработке спутниковых сигналов, в которые время «вшито» с точностью, как минимум, до долей микросекунд. Но обычный «туристический» GPS-приемник не имеет необходимых средств, чтобы вывести настолько точные временные метки наружу. Существуют специальные приемники, имеющие выход строба «1PPS», который передает информацию о начале секунды с точностью до микросекунд, и этот сигнал можно использовать для отсчета времени, если наблюдательное оборудование (камера, например), умеет это делать. Но обычно у любителя ничего такого под рукой нет, а типичный GPS-приемник смартфона или подключаемый к компьютеру «туристический», обеспечивают точность на уровне секунды. До сих пор популярен 9,6-килобитный протокол обмена, где передача одного информационного сообщения занимает десятки миллисекунд, и происходит раз в секунду, а этот интервал еще и выдерживается с небольшой точностью.
Вторая проблема произрастает из невысокой точности большинства встроенных в бытовые компьютеры (а также фотоаппараты) часов реального времени. Ситуация, когда часы устройства убегают или отстают на несколько секунд в сутки вполне типична, а в отдельных случаях суточный дрейф достигает нескольких десятков секунд. Таким образом, к сожалению, нельзя полагаться при таймингах астрономических явлений на единожды сделанную синхронизацию дольше нескольких часов (а то и минут, в зависимости от требований точности), и приходится выполнять эту синхронизацию регулярно.
Ну и третья пичалька произрастает от того, что, хотя компьютер и «быстро думает» по человечьим меркам, но выполняет несколько (десятков) программных процессов одновременно, переключаясь между ними одним (двумя, четырьмя, двенадцатью) процессором(ами) под командованием операционной системы, которая не всегда может гарантировать, что определенное приложение (например, которое записывает картинку с камеры) получит управление в определенный момент. Это напрямую относится к Windows XP/7/8, которые не являются операционными системами реального времени. Отсюда следует, что, во-первых, всегда есть задержка между получением картинки, ее привязкой ко времени и фактической выгрузкой на носитель, и, во-вторых, эта задержка далеко не всегда остается предсказуемой. Тут можно было бы сесть и заплакать. Но когда слезы высохнут, можно попробовать оценить масштабы временных ошибок для разных вариантов наблюдений.

1. Визуальные «ручные» или фотографические дрейфовые наблюдения без компьютера. Наблюдателю нужно привязать секундомер или часы фотоаппарата к точному времени. Традиционный способ — радиосигналы точного времени, например, передаваемые «Маяком» или специальными радиостанциями ( http://ru.wikipedia.org/wiki/RWM , http://ru.wikipedia.org/wiki/Бета_(служба_времени) ). Некоторые из них требуют специальных декодеров. В западной части России принимается сигнал немецкого ретранслятора DCF77 ( http://ru.wikipedia.org/wiki/DCF77 ) , по которому синхронизируются некоторые модели электронных часов. По факту для наших краев с бытовым оборудованием доступен только «Маяк», причем его надо слушать эфирным приемником, а не по Интернет-радио, т.к. в последнем случае добавляется задержка буферизации в несколько секунд. Поскольку основным «синхронизирующим агентом» является сам наблюдатель, то именно он «переносит» момент точного времени на секундомер или камеру, нажимая кнопку. В принципе, можно использовать и экран GPS-приемника с секундным отсчетом или иные часы, если есть уверенность в их высокой точности, и на крайний случай — показания предварительно синхронизированных часов компьютера (тут обычно не известна задержка отображения информации и она может достигать половины секунды). Во всех этих случаях главным «тормозом» является нервная система наблюдателя и инерционность кнопок и дисплеев (особенно охлажденных ЖКИ) или интерфейсного ПО. При этом можно ожидать точности в районе 0,2 — 0,8 сек. Синхронизацию желательно выполнить незадолго до явления (для данного покрытия — в шесть или семь часов вечера).

2. Фото/видеонаблюдения с фиксацией компьютером. Условимся, что время компьютера впечатывается в кадр программным образом (описанной ранее приличной GPS-впечатывалки в наличии нету). Камера не может мгновенно передать картинку в память компьютера. Темп считывания, скорость интерфейса связи, производительность компьютера и архитектура программы накладывают определенные ограничения. Как раз в этом случае, эта задержка (между съемкой и впечатыванием времени в кадр) может быть более-менее определенно измерена и ее среднее можно учесть. Метод прост — фокусируем камеру (ставим максимальную скорость считывания и разумную выдержку 20-40 мс) на экране компьютера, куда выводится изображение с этой камеры, и где в кадр впечатывается метка времени. Помимо «бесконечного коридора» можем получить в кадре две метки времени, разнесенные промежутком задержки (как правило, он кратен периоду обновления экрана, например 17 мс @ 60Гц). Эта задержка сильно изменяется в зависимости от камеры, софта, разрешения, производительности компьютера и т.п. (ее лучше бы измерить на своем сетапе) и имеет порядок 10 — 100 мс (но это не точность абсолютной привязки, а лишь некая дельта, из этой привязки вычитаемая!).
Читать далее...
К примеру, я потестил такой «визуальной петлей» QHY5L-II в EZPlanetary при 800х600, получил среднюю задержку 83 мс (+/-16 мс); на 320х240 было 42 мс (время считывания с сенсора уменьшилось). QHY5V в QGVideo32 показала время задержки меньше времени обновления экрана (< 17 мс), а FireCapture c Genius Trek320R – 95 мс. Тестилось на одном компьютере, на других значения будут немного другими.

Вряд ли изготовители ПО пытаются в софте учесть эти задержки (для иных, кроме покрытий целей такая точность не востребована). В принципе, точность на уровне 0,1 секунды — уже неплохо, лучше ведь «ручного» метода. Но тут всплывают другие вопросы.

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

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

Простой клиент NTP встроен в Windows (закладка «Время Интернета»), но он не очень удобен для точной синхронизации. Можно установить программу NetTime ( http://www.timesynctool.com/ ), она более гибка в настройках (и есть подозрение, что смена секунд на индикаторе внутри программы сделана более равномерно, чем на обычной панели Windows, что может иметь значение, если компьютер используется как часы для ручной синхронизации секундомера).

Источниками сигналов точного времени для NTP являются точные GPS-приемники, атомные часы и прочие высокоточные источники. Эти устройства образуют так называемый «нулевой слой» (stratum 0) NTP, но они не могут обслуживать запросы клиентов непосредственно, поэтому они синхронизируют часы NTP-серверов первого слоя (stratum 1), которые и являются самым точным «отвечающим» уровнем иерархии NTP. Однако понятно, что число клиентов в Сети велико, а атомных часов — как раз наоборот, и stratum 1 быстро ушел бы в DOS. Поэтому, «считается приличным», прицеплять к stratum 1 серверы следующих слоев — stratum 2, 3 и т. п., которые и обслуживают сотни и тысячи клиентов. С одной стороны, чем больше номер слоя, тем потенциально менее точно идут его часы, но с другой — тем выше вероятность хорошей связи с этим слоем, т. к. он может быть ближе по маршруту. Список серверов можно найти в Интернете. Для нашего региона может представлять интерес сервер ntp.deman.ru, который, по описанию, расположен в Новосибирске, относится к stratum 1 и имеет на нулевом уровне GPS-приемник со стробом 1PPS. И хотя моветон цеплять клиентов на stratum 1, «ради науки» и на небольшой промежуток времени, думаю, это будет оправдано.  В качестве запасного варианта можно предложить ntp.kuzspa.ru (пока оно работает), стоящий в Новокузнецке в сети РЦТК. Это сервер stratum 2 или 3 (в зависимости от доступности верхних слоев). Грубое соотнесение данных двух этих серверов (и обычного GPS) не показывает больших разногласий (хотя оно таки грубое, да).

Окно NetTime выглядит так:


В нем отображены: текущее время, время предыдущей попытки синхронизации, время предыдущей успешной синхронизации и вычисленная поправка к часам, оставшееся время до следующей попытки, строчка об успешности синхронизации и режиме работы (приложение/служба). Ниже таблица со списком серверов, их состоянием, вычисленной поправкой к часам, задержкой маршрута (кабельные каналы, как правило, быстрее реагируют, чем беспроводные) и описанием ошибки, если таковая была. Кнопка  «Update Now» принудительно запускает синхронизацию.

Кстати, по умолчанию, туда забиты серверы открытого пула NTP (0.nettime.pool.ntp.org и т. п.), которые выбираются автоматически из большого числа серверов stratum 2 и выше. Это обеспечивает хорошую доступность, и в принципе, нормальную точность. Но можно изменить настройки («Settings...») для нашей задачи, как на рисунке. Здесь занесены упомянутые серверы и уменьшен интервал автообновления (Update interval) до 5 минут. За это время большая ошибка не должна набежать. Хотя технически можно установить автообновление и через несколько секунд, это приведет к повышенному трафику (в том смысле, что та сторона может вас отрубить как сильно «беспокойного» клиента) и может привести к искажению информации о длительности покрытия (если автообновление случится посреди покрытия и коррекция, к примеру с +50 мс перепрыгнет на –50 мс, то вы потеряете или обретете лишние 100 мс). Собственно при попытке закрыть окно с такими настройками NetTime строго напомнит нам о том, что не надо напрягать чужие серверы почем зря и предложит автоматически исправить «ошибки». Ответим вежливым, но строгим «нет». Теперь NetTime, пока есть связь, через определенные интервалы будет корректировать часы компьютера. Если при наблюдениях не предвидится возможности использовать сеть, то стоит экспериментально загодя измерить, на какую среднюю величину в час дрейфуют часы вашего компьютера, чтобы потом вычислить поправку времени.

Грубая комбинация задержек фиксации, описанных выше, и обычной точности NTP приводит к величине максимальной ошибки в районе 150 мс. Правда, без специальной методики и оборудования, все задержки учесть тут не удастся ввиду сложности системы и непостоянства задержек. Также важно испытать все заранее и «привыкнуть» к числам, присущим вашему оборудованию.

Оффлайн Владимир_А

  • Ветеран
  • *****
  • Сообщений: 1 403
  • робот, просто робот
    • Просмотр профиля
Re: Синхронизация времени
« Ответ #1 : 08 Октябрь 2013, 16:51:05 »
0
Артем, большое спасибо за статью. Синхронизация времени для это наблюдения - больной вопрос. Камера у меня прийти вроде как успеет, а железка для впечатывания времени в кадр - нет. Интересно, можно какими-то софтом это сделать, ну ,в смысле, сразу впечатать время и координаты в видеопоток. Есть идея на счет использования UFO capture (программы для ловли метеоров), она вроде время в кадре прописывает.
Если долго всматриваться в бездну,
можно неплохо провести время.

Оффлайн Артём

Re: Синхронизация времени
« Ответ #2 : 08 Октябрь 2013, 16:58:24 »
0
Я так понимаю, картинка с камеры пойдет в компьютер через ТВ-тюнер/видеограббер? Многие такие устройства имеют обычный WDM драйвер, поэтому можно записывать картинку программой для планетной съемки FireCapture ( http://firecapture.wonderplanets.de ). Она умеет писать время в кадре. Координаты - нет, но они за сеанс изменяться же не будут, их можно потом любым видеоредактором привинтить. Можно и на UFOCapture, если детектор движения отключить и писать все потоком.

Оффлайн Артём

Re: Синхронизация времени
« Ответ #3 : 15 Октябрь 2013, 12:52:59 »
0
К слову, в мануале от видеотаймера IOTA-VTI ( http://videotimers.com/home.html ) также указывают на необходимость калибровки задержки камеры при использовании этого видеотаймера. Там это можно сделать с использованием встроенного светодиода, довольно точно воспроизводящего строб 1PPS. Необходимость вызвана тем, что и аналоговые камеры могут вносить лишние задержки, если в них используется интегрирование нескольких полей (полукадров). Иногда камеры могут также выдавать импульс кадровой синхронизации до того, как прекратится экспозиция поля, правда величина этой подвижки мала и на общей точности сказывается мало, но может удивлять при калибровке.

Счас можно найти GPS-модуль типа Tistar15 за 5-7 баксов (модуль десятилетней давности, распродают). К нему, правда, нужна еще активная GPS-антенна, но это тоже примерно столько же еще. Прелесть в том, что там есть строб 1PPS (с точностью 1 мкс и сравнимым джиттером). Запитать это можно от батареек или 3V БП. К компу подключается посредством идентичного EQModовскому USB-SerialTTL адаптеру. Осталось только вывести этот 1PPS на светодиод и можно будет калибровать задержки камер более точно.

Строб появляется при 3d fix'е (мин. 4 спутника) и держится до 30 секунд после исчезновения сигнала.

UPD: Пригрезилась такая концепция "доступного" GPS-видеотаймера (от 600 руб за модуль и антенну + материалы и принадлежности "двойного" назначения). Строб GPS 1PPS выводится на светодиод через формирователь импульса/перезапускаемый одновибратор (задающий время свечения, около 5 мс, регулируется RC-цепью в обвязке одновибратора). К светодиоду приклеена жилка оптоволокна (добывается из промышленных или бытовых оптических кабелей или новогодних украшений). Жилка заведена в корпус камеры или в фокусер и закреплена так, чтобы засвечивать часть сенсора (один из углов, в идеале группу пикселей) или все поле. Допустим, съемка идет с экспозициями около 20 мс (характерное время одного поля для PAL). В момент начала очередной секунды вспыхивает светодиод и дает на соответствующем кадре засветку угла или всего поля (что хуже). Получается точность в пределах 5 - 25 мс (в зависимости от скорости и манеры считывания сигнала с сенсора). Попадая в компьютер, кадр обретает временную метку (часы, допустим, синхронятся с этим же приемником с точностью в пределах пары сотен миллисекунд). Здесь будет видна разница (задержка) обработки кадра, но номер секунды, по идее, будет правильным (вот это, как выясняется, довольно проблемное место под виндой, тут подумать еще надо). В пределах секунды, до следующей вспышки, время вычисляется с учетом длины экспозиции, средней задержки и количества кадров между секундными вспышками. В принципе, метод годен и для автономных камер с собственной регистрацией (типа бытовых видеокамер). Если реакция пользователя дает возможность установить часы камеры хотя бы с точностью 0,4 сек, также можно будет вычислять точное время, соотнося вспышки и часы в кадре. Достоинства метода - синхронизация по GPS; в пределе не нужен компьютер и сеть; хорошая и предсказуемая точность. Недостатки - эквилибристика с железяками; надобность модификации, хотя бы и обратимой, камеры или фокусера; требуется обработка, чтобы получить информацию о времени; засветка сенсора может портить фотометрию объекта на одном кадре в секунду. Зато дешево)
UPD2: Собрано в коробочку с выходом на обычный оптический кабель (как для SPDIF, TOS-Link), который можно купить в любом магазине с кабелями для аудиоаппаратуры (гнездо куплено в Дельте за 35 руб). В коробке сидит Tistar15 и одновибратор, расширяющий продолжительность строба до 5 мс. Конец оптоволокна "освобожден" от разъема (на фотке еще нет) и в таком виде пригоден для размещения вблизи сенсора (эта часть пока не проработана). При небольшой апертуре (типа фотообъектива), строб-сигнал заметен на фоне дневной картинки даже при размещении оптоволокна перед апертурой. Ночью должно быть лучше...

Оффлайн Артём

Re: Синхронизация времени
« Ответ #4 : 27 Октябрь 2013, 21:05:44 »
0
http://www.lammertbies.nl/comm/info/GPS-time.html
Под *nix, в отличие от винды, можно сделать хорошую синхронизацию по GPS.

Оффлайн Артём

Re: Синхронизация времени
« Ответ #5 : 02 Ноябрь 2013, 01:36:25 »
0
Часы с синхронизацией от GPS на Arduino http://quaxio.com/arduino_gps/
С небольшими модификациями заработало и с Tistar15, нужно померить разницу показаний дисплея с секундным стробом и получатся всегда точные часы. (Хотя пока есть стабильная разница между этими часами и данными NTP аж в 1,5 секунды. Ну полсекунды - это задержка получения и обработки данных и отображением на дисплее (физическая инертность ЖК + универсальная и явно не быстрая библиотека LiquidCrystal). А с оставшимся временем сложнее, скорее всего в посылку NMEA-0183 вшита предыдущая секунда, надо как-то разбираться...)

Неплохая библиотека для парсинга NMEA-0183 http://arduiniana.org/libraries/tinygps/

Оффлайн Владимир_А

  • Ветеран
  • *****
  • Сообщений: 1 403
  • робот, просто робот
    • Просмотр профиля
Re: Синхронизация времени
« Ответ #6 : 02 Ноябрь 2013, 13:05:09 »
0
Я в сторону вот этого смотрю - http://www.blackboxcamera.com/pic-osd/sprite.htm
Если долго всматриваться в бездну,
можно неплохо провести время.

Оффлайн Артём

Re: Синхронизация времени
« Ответ #7 : 02 Ноябрь 2013, 15:55:06 »
0
Интересный вариант, дешевше американского и с выносной антенной. Тока вот лампочку "1PPS" бы ему еще (при желании, наверно можно "добыть" сигнал из недр девайса самостоятельно и вывести на панельку).

Оффлайн Артём

Re: Синхронизация времени
« Ответ #8 : 05 Ноябрь 2013, 23:32:22 »
0
А с оставшимся временем сложнее, скорее всего в посылку NMEA-0183 вшита предыдущая секунда, надо как-то разбираться...
Чота с этим ваще мутно, сходу не въехал. Замутил по мотивам ссылок выше "часы" на ардуине, добавив "безынерционный" светодиодный дисплей для последней цифры секунды (реально экономит около 1/4 сек по сравнению с ЖКИ). Есть две прошивки, отличающиеся способом обработки входных строк, и два GPS-приемника (Tistar15 и Holux GPSlim236), у которых разные скорости и "манеры" передачи строк. Итого четыре варианта поведения) А уж соотнесение этого с, по идее, точным стробом 1PPS дает новый простор для мыслей, и отчасти подтверждает, что секунда в NMEA вшита не текущая. Похоже, надо прям исследование затевать...

Оффлайн Денис

  • Ветеран
  • *****
  • Сообщений: 7 700
  • Astrodrome.ru
    • Просмотр профиля
Re: Синхронизация времени
« Ответ #9 : 06 Ноябрь 2013, 00:18:30 »
0
С соответствующей статьёй, отзывами и докладом на Сибастро.
Удачи в наблюдениях!

Astronomiae aeternam, vita brevis est!

Оффлайн Артём

Re: Синхронизация времени
« Ответ #10 : 06 Ноябрь 2013, 00:25:03 »
0
Да я про "исследование" в шутку. Этож так, маргинальные потуги, а кому нужна точность, те покупают нормальное железо, где это все штатно поверено, опломбировано и гарантировано.

Оффлайн Звёздочка

  • Ветеран
  • *****
  • Сообщений: 15 151
  • "Самый активный астрофотограф - 2016"
    • Просмотр профиля
Re: Синхронизация времени
« Ответ #11 : 06 Ноябрь 2013, 00:37:33 »
0
Умница ты, Админ Изобреталкович Самоделкин. :kiss: :bravo:
Желаю побыстрее до победного конца победить собираемый девайс.

Оффлайн Артём

Re: Синхронизация времени
« Ответ #12 : 20 Ноябрь 2013, 16:10:37 »
0
Девайс побежден почти полностью, но "извини, Марио, твоя Принцесса в другом замке"...
В общем, через NMEA с простого GPS-приемника нельзя получать время с точностью, большей чем 0,3 - 0,6 сек, что на ПК, что на МК (при том, что обычный навигационный софт под Windows не умеет или не может точно перенести это время на системные часы и, как правило, они устанавливаются с отставанием на ~1,5 сек). NMEA можно использовать совместно с 1PPS для синхронизации местного NTP-сервера. Пример реализации такого сервера на RaspberryPi: http://rdlazaro.info/compu-Raspberry_Pi-RPi-stratum0.html
В итоге, с учетом врожденной "нереальновременности" винды, оказывается наиболее предсказуемым вариант синхронизации часов компьютера по NTP (по надежной проводной связи с малой задержкой; сети Wi-Fi и 3G гораздо более непредсказуемы). При этом начало секунды по 1PPS совпадает с временной меткой кадра с точностью не хуже 0,1 сек, а нередко и 0,05 сек (сопоставимо со временем экспозиции кадра и грануляцией программных временных меток). Т.е., синхронизировав часы компьютера по NTP, по стробу 1PPS и меткам кадров можно узнать разность между ними и она будет оставаться более-менее постоянной в течение последующих нескольких минут. Иначе говоря, для точности не хуже 0,1-0,05 сек достаточно приличного NTP-сервера, GPS не нужен. Более высокая точность достигается уже применением специфических аппаратных средств.
Если на месте наблюдений отсутствует проводное подключение к сети, то тогда самым доступным точным способом будет собственный NTP-сервер на основе GPS-приемника (как по ссылке выше). Напомню, что речь идет о непрофессиональном оборудовании, не приспособленном на уровне железа к фиксации точных временных меток (USB-камеры без собственных часов под управлением Windows).

Оффлайн Артём

Re: Синхронизация времени
« Ответ #13 : 13 Февраль 2014, 12:27:58 »
0
Эта задержка сильно изменяется в зависимости от камеры, софта, разрешения, производительности компьютера и т.п. (ее лучше бы измерить на своем сетапе) и имеет порядок 10 — 100 мс (но это не точность абсолютной привязки, а лишь некая дельта, из этой привязки вычитаемая!).
Причем тут складывается задержка считывания и обработки картинки с камеры, когда в нее впечатывается временная метка, и задержка отображения этого на экране, которая тоже может достигать нескольких десятков миллисекунд.

Пример реализации такого сервера на RaspberryPi: http://rdlazaro.info/compu-Raspberry_Pi-RPi-stratum0.html
Но тут надо иметь в виду, что на RPi Ethernet-интерфейс сидит на асинхронной шине USB, что добавляет какие-то лишние миллисекунды.

В качестве запасного варианта можно предложить ntp.kuzspa.ru (пока оно работает), стоящий в Новокузнецке в сети РЦТК. Это сервер stratum 2 или 3 (в зависимости от доступности верхних слоев).
Сервер пока отключен из-за новомодных DDoS-атак посредством NTP-серверов. Подобное может быть некоторое время и другими публичными серверами времени.

Оффлайн Артём

Re: Синхронизация времени
« Ответ #14 : 17 Сентябрь 2017, 16:21:37 »
0
Интересная штучка, используется для калибровки задержки в съемочном тракте