Мои читатели уже знают, что ручной пеленгатор и дополненная реальность созданы друг для друга. Простой фон из видео позволяет существенно упростить работу оператора. Тем не менее, находятся люди, которые испытывают трудности при поиске источников радио-излучения амплитудным пеленгатором с простым видео-фоном. Упрощение процесса требует более тесного комплексирования пеленгатора с "тяжелой" доп-реальностью. Несмотря на появление таких технологий, как ARKit и ARCore, наиболее доступной остается Google Tango.
Дополненная реальность тяготеет к красивой картинке, поэтому внутри не только технические детали, но и видео-ролики работы пеленгатора в одном из красивейших мест Петербурга.
Технология Google Tango много раз описана на Хабре, лучшие описания здесь и здесь. В нашем случае из ряда составляющих технологии используется только возможность отслеживания перемещений и ориентации (Motion Tracking). Возможность выделения плоских и других поверхностей нам, собственно, не нужна. Ведь источник, в данном случае устройство WiFi, может находиться за стеной и при этом вполне себе пеленговаться. Хотя понятно, что, если перед камерой Tango ничего нет, то и отследить перемещения и ориентацию она (Танга — она) не сможет. Может быть в будущем можно будет автоматически строить 3D-карту окружающего пространства и сохранять ее вместе с видео, как результат работы, но пока это фантастика.
Можно кратко обосновать использование для ориентации пеленгатора именно технологии визуально-инерциальной одометрии (Visual-Inertial Odometry) их лучшей точностью, по сравнению с только инерциальными системами. Данные координат и ориентации, поставляемые
устройством с Tango являются локальными, они привязаны к точке начала работы. Но, в пределах сессии, они, в отличие от инерциальных данных, обладают намного большей точностью.
Подопытным был назначен пеленгатор WiFi точек доступа, описанный ранее. Он предназначен для поиска нелегальных точек доступа (rogue AP) и устройств интернета вещей на базе WiFi. Хотя Bluetooth и давит новыми технологиями, типа Mesh, благодаря Мировой Кузнице Всего Сущего, экономически очень оправдано использование вещей на базе WiFi. Это подтверждается статьями на Хабре: здесь и здесь.
Пеленгатор на обычном Андроиде работает так:
Если кому интересно, смотрите исходники на github.com/xnzr и разные видео. К сожалению, я не профессионал в видео, и ролики не очень качественные, за что я заранее прошу меня простить. Но показать работу этого пеленгатора можно только на видео.
Начнем с железа. Первый Танго-планшет был от Google, он так и назывался — Google Tango Tablet. Сначала была эпическая история добывания сего чуда в Россию. Официально это было нельзя. Я был вынужден завести фейковый аккаунт на Gmail из Финляндии, заказывать в Гугль-магазине из Финляндии на почтовый ящик в Финляндии. И я посчитал за счастье, что добыл девайс такой малой кровью. А вы говорите — санкции. Тогда еще никаких санкций не было, а занавес уже был. С той стороны.
Но на этом дело не кончилось. Оказалось, что USB-порт этого чуда не тянет даже малютку-пеленгатора. Пришлось изобретать внешний съемный пауер-банк для питания пеленгатора и спец-кабель для него. Выглядело это ужасно (пеленгатора на фото нет, видны только четыре его посадочные липучки 3M Dual-Lock):
Ну, к черту эмоции. Дальше все пошло хорошо. Работа над софтом затянулась, как часто бывает. И вскоре (О, слава тебе, великий Гугль и лучший друг его Lenovo) появился Lenovo Phab 2 Pro! Единственный доступный в России и, видимо, последний планшет с Google Tango. Гаджет крепко сбитый, мощный и большой, что важно для пеленгатора. При этом он дешевле гаджетов с поддержкой ARCore, в среднем, на 10 т.р. Пеленгатор сидит на нем красиво:
Поэтому Google Tango Tablet был помещен в саркофаг музей ручных ДР-пеленгаторов до лучших времен. И да пребудет с ним банк силы (power bank).
Теперь про софт. Он, как всегда, доступен в исходниках, по адресу github.com/xnzr/xnzr-tango. Суть довольно проста: если порог по разнице уровней двух антенн, означающий, что источник находится близко к нормали к плоскости пеленгатора, превышен, то в пространство втыкается красная стрела. Эти стрелы не стираются, а копятся в пространстве, что позволяет не отслеживать привязку пеленгационного параметра к местности
Отображением стрел занимаются классы SagittaStorage и OpenGlCylinder.
Когда пеленгатор сообщает, что он направлен на источник WiFi, мы запрашиваем текущую "позу" нашего Tango устройства (точнее, не саму позу, а только матрицу перехода):
TangoSupport.TangoMatrixTransformData depthTarea =
TangoSupport.getMatrixTransformAtTime(pointCloud.timestamp,
TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE,
TangoPoseData.COORDINATE_FRAME_CAMERA_DEPTH,
TangoSupport.TANGO_SUPPORT_ENGINE_OPENGL,
TangoSupport.TANGO_SUPPORT_ENGINE_TANGO,
0);
if (depthTarea.statusCode == TangoPoseData.POSE_VALID) {
mRenderer.addPeleng(depthTarea.matrix);
}
И складываем в CopyOnWriteArrayList (это многопоточная версия ArrayList).
Каждый кадр мы по очереди применяем к цилиндру сохранённые матрицы и рисуем цилиндр во всех сохранённых "позах":
public void draw(GL10 gl) {
for (float[] mm : mModelMatrixList) {
mSagittaObject.setModelMatrix(mm);
mSagittaObject.draw(gl);
}
}
Как я уже писал выше, единственный способ показать работу такого пеленгатора — видео. В качестве WiFi точки доступа был мой смартфон с включенной функцией общего доступа к интернет. Пеленгатор принимает пакеты Beacon Frame и отдает данные планшету, который отображает их в красные стрелы дополненной реальности (КСДР). Ссылки на ролики испытаний приведены ниже. Ролики сняты в Летнем саду в будний день в обед, поэтому народу было не много, что избавило меня от ненужных приключений и дало изумительный фон с элементами античной обнаженки. Можно смотреть даже детям.
Первый,
второй,
третий
и еще,
и еще,
и еще.
Тем, кто не любит смотреть видео, рекомендую посмотреть фото (в полном разрешении, большой объем файлов): 1, 2, 3, 4, 5, 6, 7, 8 и 9.
Естественно, можно в софте находить пересечение красных стрел и строить и отображать область пространства, где вероятнее всего находится источник. Можно сказать, что на сегодня есть не просто новый интерфейс с стиле дополненной реальности для пеленгатора, а база для полностью автоматического поиска источников радиоизлучения с отображением результатов в 3D. Далее можно будет также сделать более наглядным и представление результатов моего фазового пеленгатора помех спутниковой навигации, описанного здесь и здесь.
Хочу заметить, что мне помогал в части софта Михаил Лукин, он же Ktator, (за что ему огромное спасибо!), который, надеюсь, продолжит публикации на Хабре по дополненной реальности для радио-пеленгаторов. Я попробую сосредоточиться на железе.
Автор: Игорь Царик (Igor Tsarik)