О самолётах и данных: ADS-B, часть 3

Я делал анимации из данных с радара и остался почти доволен.
В этой части я делаю видео посредственного качества и невысокой художественной ценности.

Задача

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

Для затравки — видео с конечным (на нынешней итерации) результатом (тыц картинку):

dump1090 visualization
dump1090 visualization

В общем — да, смотреть на статические картинки, особенно с разных интересных точек — хорошо и здорово, но хочется же и динамику наблюдать. Собственно задача была примерно такой: сделать анимацию получаемых с приёмника данных; данные должны быть накопленными за заданный интервал времени (моментальные снимки не интересны в принципе), а устаревшие данные отображаться не должны (а то слишком шумно).

Решение

Исходнички на гитхабе, невозбранно: https://github.com/at8eqeq3/adsb-viz

Часть с накоплением и удалением решилась неожиданно просто: для этого понадобился Redis и команда SETEX (https://redis.io/commands/setex). Мне это показалось более красивым визуально решением, чем какой-нибудь ограниченный по размеру FIFO буфер, потому что если уж действительно в небе ничего нет, то так оно и будет на итоговой картинке, а не залипшие, потому что их нечем вытеснить, точки. Из-за этого программу пришлось поделить на 2 части (одна кладёт в Redis, другая берёт из него), но и не страшно. Ну, а поскольку я и так решил злоупотреблять редисом, мне придумалось хранить полезную нагрузку сразу в ключах — оно так заметно быстрее работает и удобнее извлекается со SCAN.

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

Пришлось изобрести совершенно деревянный способ, показывающий только вид сверху (ну, можно поизгаляться и вид сбоку приспособить, но это не очень интересно) — pillow и Image.putpixel для всех точек, что приехали из Redis. На выходе получаем серию изображений (равномерные интервалы нам, кстати, делает питоний schedule), которые можно ffmpeg собрать в видео — примерно как вверху статьи. Там много магии с геометрическими преобразованиями и молчаливой ловлей исключений, чем я не особо-то и горжусь.

Заключение

Улучшить, по-прежнему, есть что:

 2021-01-07
авиация
визуализация данных
python