Клиначев Н.В.

Астероид – генератор сканов поверхности

3D-сцена. Астероид. Расстояние: [PgDn] [PgUp]
Режим отображения сетки / поверхности [G]
Видеокамера / Сканирующий лидар [L]
Новый астероид [F5]. КА [мышь]

Организация защиты Земли от астероидов требует решения множества технических задач. Одна из них – это разработка алгоритма для микропроцессорной системы, которая, в автоматическом режиме (без участия человека), может выбрать на астероиде место посадки для космического аппарата (КА). Отладка подобной технической системы требуется наличия программного инструмента генерации астероидов разной формы и двумерных сканов их поверхности. Сканы, с какой-то погрешностью, должны соответствовать изображениям, которые можно получить с помощью видеокамеры и сканирующего лидара (лазерного дальномера). Данная веб-страница является таким инструментом.

Генерация сканированных изображений астероида. Принятые допущения

Выше по тексту, 3D-сцена визуализирует астероид. Сцена включает три объекта: астероид, наблюдатель (КА с видеокамерой и лидаром) и источник направленного света (солнечное освещение). В начале координат расположен вращающийся астероид. Вправо направлена ось X. Вверх – ось Y. Из плоскости экрана – ось Z. Вектор, направленный в сторону солнечного освещения имеет координаты [-1, +1, +1]. Видеокамера и лидар КА находятся на положительной полуоси Z и направлены к центру координат (на астероид). Используя клавиатуру, клавиши [PgDn] / [PgUp], можно перемещать КА вдоль оси Z. Для переключения приборов – видеокамера / лидар – задействована клавиша [L].

+----------------------------------------+
|           Параметры 3D-сцены           |
+----------------------------------------+
Размер астероида по оси Y            1 ед.
Расстояние до камеры                 4 ед.
Расстояние измеряемое лидаром        5 ед.
Квантование данных лидара           40 кв.
Обзор камеры по вертикали           45 °
+----------------------------------------+

Для получения сканов поверхности астероида используются классические, для 3D-графики, решения – это засветка направленным источником света (ламинарное освещение) и точечным источником. Поскольку для навигации нет смысла использовать цветную видеокамеру, исходный цвет поверхности астероида – монотонный серый. При отрисовке изображения фиксируемого видеокамерой, цвет каждого пикселя умножается на косинус угла между нормалью к поверхности астероида и нормализованным вектором, направленным в сторону источника света (нормализованный вектор имеет единичную длину, а нормаль – это нормализованный вектор перпендикулярный к поверхности). В результате поверхность тем ярче, чем меньше угол отражения от неё. Этот метод хорошо проиллюстрирован в источнике [#].

Для получения сканов лидара был модифицирован метод засветки поверхности точечным источником света [#], который, в данном случае, расположен в одной точке с наблюдателем. Суть модификации заключается в том, что цвет пикселя, от черного до белого, в сканированном изображении, устанавливается пропорциональным расстоянию между лазером и точкой на поверхности астероида. Паспорт на лидар гарантирует максимальное измеряемое расстояние. Этому числовому значению соответствует черный цвет. Минимальному измеряемому расстоянию – белый цвет. Напомним, что исходная задача – это не измерение расстояния, а выбор места посадки. В связи с чем, при подготовке сканов поверхности к последующей цифровой обработке, имеет смысл грубое округление результатов измерений лидара (например, до 40 квантов). Есть так же, смысл в том, что бы при сканировании поверхности использовать сетку с большим шагом, например, 30x30 пикселей. В этом случае задача поиска максимально ярких и больших по площади участков поверхности упрощается и решается микроконтроллером имеющим малую площадь кристалла (высокую радиационную стойкость) и малое энергопотребление.

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

Порядок использования видеокамеры и лидара при посадке на астероид

Технические параметры видеоматриц и лидаров таковы, что на большом удалении от астероида для его поиска и навигации лидар бесполезен, но можно использовать видеокамеру (возможно с фотовспышкой). А вблизи, для выбора места посадки, даже цветная видеокамера менее полезна, чем лидар. Если же вернуться к задаче поиска астероида на большом удалении, то цветная видеоматрица, в условиях когда искомый объект фиксирует лишь небольшая группа пикселей, опять же, ни чем не лучше чёрно-белой.

Задачу выбора места посадки можно продолжить решать, дорабатывая программный код встроенный в данный веб-документ. А задача поиска астероида в пространстве ставит ряд вопросов, для ответа на которые необходима другая 3D-сцена (с подвижным КА, который вращается по заданной программе с целью стабилизации или сканирования, с астероидом, с Солнцем и с фотовспышкой).

Литература

  1. Gregg Tavares. WebGL 3D – Направленное освещение // WebGL Fundamentals website. – URL: https://webglfundamentals.org/webgl/lessons/ru/webgl-3d-lighting-directional.html (дата обращения: 23.01.2018).
  2. Gregg Tavares. WebGL 3D – Точечное освещение // WebGL Fundamentals website. – URL: https://webglfundamentals.org/webgl/lessons/ru/webgl-3d-lighting-point.html (дата обращения: 23.01.2018).
  3. Илья Кантор. Кривые Безье // Современный учебник Javascript (веб-сайт). – URL: https://learn.javascript.ru/bezier (дата обращения: 23.01.2018).
  4. Mike 'Pomax' Kamermans. A Primer on Bezier Curves // – URL: https://pomax.github.io/bezierinfo (дата обращения: 23.01.2018).
  5. Viktor Kovacs. JSModeler Bezier Surface Example // – URL: http://kovacsv.github.io/JSModeler/documentation/examples/bezier.html (дата обращения: 23.01.2018).
  6. Dave Miller, Kathleen Mattson. WebGL 1.0 API Quick Reference Card // – URL: https://www.khronos.org/files/webgl/webgl-reference-card-1_0.pdf (дата обращения: 23.01.2018).
  7. John Kessenich, Dave Baldwin, Randi Rost. The OpenGL Shading Language. Version: 4.30 // – URL: http://www.opengl.org/registry/doc/GLSLangSpec.4.50.pdf (дата обращения: 23.01.2018).

2018.01.23