Лабораторный стенд для отработки алгоритмов определения движения микроспутника по снимкам звездного неба

( Laboratory Facility for Verification Attitude Determination Algorithms Using Starry Sky Pictures
Preprint, Inst. Appl. Math., the Russian Academy of Science)

Овчинников М.Ю., Середницкий А.С., Овчинников А.М.
(M.Yu.Ovchinnikov, A.S.Serednitskiy, A.M.Ovchinnikov)

ИПМ им. М.В.Келдыша РАН

Москва, 2006
Работа выполнена при финансовой поддержке Российского фонда фундаментальных исследований (проект № 06-01-00389), Роснауки (Гос.контракт № 02.434.11.7061), Президентской программы поддержки Ведущих научных школ России (проект № НШ-2448.2006.1)

Аннотация

Описан стенд, созданный в ИПМ им. М.В.Келдыша РАН. Главным элементом стенда является камера на активных пикселях (APS-камера). Стенд предназначен для проведения испытаний и анализа разрабатываемых алгоритмов определения ориентации и навигации наноспутника, на борту которого установлена APS-камера. В работе рассматривается устройство стенда, выбор APS-камеры, предлагается реализация программы имитации звездного неба. Представлен алгоритм определения ориентации по снимкам звездного неба.

Abstract

Laboratory facility developed at the KIAM RAS is presentet. The core of the facility is an active-pixel camera. The facility is purposed for verification and research of the attitude determination and navigation algorithms been under development for a nanosatellite equiped with onboard APS-camera. Lay-out of the facility, APS-camera selecting, realization of starry sky imitation are considered. Algorithm for attitude determination using starry sky pictures is shown.

Содержание

 

 

 

 

 

 

1.

  Введение  ………………………………………………………………...

3

2.

  Устройство стенда  ......………………………………………………….

3

3.

  Выбор камеры  ………………………………………..…..…………..…

5

4.

  Устройство камеры  ….…………………………………....…………….

7

5.

  Отображение звездного неба на экране монитора  …………………...

9

6.

  Алгоритмы определения ориентации по снимкам звездного неба  ...

22

7.

  Литература  ……………………………………………………………..

31

 

1. Введение

Одним из путей уменьшения размеров и массы системы управления малогабаритными спутниками заключается в симплексировании датчиков и исполнительных органов. Примером служит использование управляющих токовых катушек в качестве измерительных элементов магнитометра, а также звездной камеры для навигации и определения ориентации спутника [1]. В настоящей работе рассматривается возможность использования камеры на активных пикселях (APS-камеры) [2] для решения задач навигации и определения ориентации. Для проведения лабораторных испытаний разрабатываемых алгоритмов и программного обеспечения, необходимых для функционирования системы навигации и определения ориентации, в Институте прикладной математики им.М.В.Келдыша РАН на основе коммерческой APS-камеры создан стенд.

2. Устройство стенда

В состав стенда входят два персональных компьютера и APS-камера. Солнце имитируется лампой с маской, имеющей калиброванное отверстие.

На мониторе одного из компьютеров симулируется картина звездного неба, как бы его видела камера, установленная на спутнике, который движется по орбите. Другой компьютер служит для приема и хранения изображений, поступающих с камеры, в поле зрения которой находится монитор первого компьютер. На текущем этапе разработки алгоритмов сохраняется изображение, поступающее с камеры в один и тот же файл через заданные промежутки времени. Это позволяет сделать непрерывным процесс съема и сохранения информации, поступающей с камеры, и передачу сохраненной информации программе, которая обрабатывает цифровое изображение[2].

Чтобы убедиться, что камера способна «видеть» и выдавать на выходе изображение, на котором можно увидеть звезды, планеты и Солнце, предлагается провести следующий эксперимент. Запускается программа имитации движения спутника. Включается имитатор Солнца. Лампа устанавливается относительно монитора таким образом, чтобы на картинке, передаваемой камерой, присутствовали одновременно изображение лампы и монитора, на котором имитируется звездное небо. Если на картинке, выдаваемом камерой, одновременно видно изображение имитатора Солнца и изображение звезд на мониторе, то можно приступать к апробированию алгоритмов и программного обеспечения.

Рис.1. Схема стенда

Однако использование статичного источника, имитирующего Солнце, не позволяет симулировать полную картину видимого камерой участка небесной сферы, так как в связанной с движущимся спутником системе координат движутся и звезды, и планеты, и Солнце. Поэтому необходимо либо выводить на экран монитора изображения всех этих объектов с учетом их взаимного движения по небесной сфере, либо комбинировать два монитора - с изображением звездного неба и с изображением планет и Солнца. С этой целью рассматривается возможность реализации другой модификации стенда (рис.2). В нем используется полупрозрачное зеркало, на которое будет проецироваться изображение с еще одного монитора или с лампы. На изображении, получаемом на выходе камеры, будут находиться планеты или Солнце на фоне звездного неба, разнесенные на заданный угол. Тем самым, с помощью одной камеры можно смотреть в двух разных направлениях, угол между которыми регулируется лишь углом установки полупрозрачного зеркала. В этом случае появляется возможность наряду с предписанным участком звездного неба, куда направлена камера, осуществить поиск и захват планеты или Солнца, даже если в силу каких-то обстоятельств, движение спутника будет таким, что никакие крупные небесные тела не попадают в основное поле зрение камеры.

Рис.2. Схема стенда с геометрической имитацией звездного неба и крупных небесных тел с использованием двух компьютеров

В том случае, если небесное тело (например, Земля) попадает в основное поле зрения камеры, и нет возможности ни определить расстояние до планеты, ни увидеть хотя бы минимально необходимое для определения ориентации количество звезд, картина звездного неба через дополнительное поле зрения камеры может помочь решить задачу определения ориентации. Если же в дополнительное поле зрения попадают и звезды, и часть небесного тела, до которого мы можем определить расстояние, то можно использовать дополнительное поле зрение как основное и временно отказаться от использования основного поля зрения камеры до тех пор, пока мы не сможем использовать его хотя бы для определения ориентации.

3. Выбор камеры

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

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

Появилась возможность произвольного доступа к каждому пикселю сенсора ‑ подобно тому, как по параллельной схеме работает оперативное запоминающее устройство, что позволяет КМОП-сенсору считывать не всю матрицу целиком, а лишь некоторые области. Этот метод называется методом оконного считывания (window-of-interest, windowing readout).

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

Еще одно преимущество APS-технологии состоит в том, что значительно снижается потребляемая мощность и уменьшается число составных частей, необходимых для сборки готовых изделий. Поскольку одна микросхема выполняет все функции камеры от регистрации фотонов до побитового формирования кода изображения, то устройства, основанные на технологии КМОП, отличаются повышенной надежностью.

При всех вышеописанных достоинствах главным же преимуществом КМОП-датчиков является их стоимость. КМОП ‑ это стандартная технология изготовления микросхем, микроконтроллеров, микропроцессоров, освоенная тысячами производителей. Матрица пикселей может быть размещена на одной «платформе» вместе с элементами цифровой электроники, формирователем тактовых импульсов, АЦП, что является ее большим преимуществом перед ПЗС-датчиками [2].

4. Устройство камеры

Для создания стенда потребовалась камера, удовлетворяющая ряду условий. Среди них следует выделить разрешение получаемой картинки и интерфейс для ее связи с компьютером.

На первом этапе использовалась камера Fuga-1000 [3] на основе APS- сенсора. Ее основные характеристики приведены в табл.1.

Параметр

Значение

Единица измерения

Размер пикселя

8

Мкм

Размер матрицы

9.1х9.9

Мм

Тип пикселя

Неинтегрированный, логарифмический

 

Заполнение (Fill factor)

70

%

Количество пикселей

1024х1024

 

Динамический диапазон

>120

дБ

Минимальная освещенность

<10-4

Люкс

Спектральный диапазон

400-1000

Нм

Направление сканирования

Слева (0) направо (1023)

Снизу (0) вверх (1023)

X-сканирование

Y-сканирование

Производитель

Fill-Factory

 

Табл.1. Основные характеристики APS-камеры Fuga-1000 [3]

Камера Fuga-1000 имела LPT-интерфейс. При разрешении 1024х1024 скоростные характеристики LPT-порта не позволяли передать изображение в компьютер с требуемой скоростью, что осложняло работу алгоритмов распознавания для навигации и определения ориентации спутника.

Для сокращения времени пересылки полученного изображения и уменьшения интервала времени между полученными кадрами, камера Fuga-1000 была заменена на веб-камеру фирмы Philips (табл.2), уступающей по характеристикам матрицы камеры Fuga-1000, но имеющую существенно большую скорость съемки.

Параметр

Значение

Единица измерения

Сенсор

1/4" CMOS

 

Размер пикселя

8

мкм

Размер матрицы

5.08х3.81

мм

Видео разрешение

352 x 288 (CIF)

пиксель

Разрешение при фотографировании

640 x 480 (VGA)

пиксель

Минимальная освещенность

< 10

люкс

Автоматический баланс белого

2500 – 7500

K

Встроенный объектив

5.2mm f2.6 H40º

 

Максимальная частота кадров (при разрешении 352 x 288)

30

кадров/сек

USB кабель

2

М

Потребляемая мощность

0.45

Вт

Глубина цвета

24

бит

Табл.2. Технические характеристики камеры Philips PCVC720K [4]

От коммерческого варианта камеры использовались микросхема с сенсором, электронная “обвязка” и USB кабель. Кроме того, для улучшения качества получаемого изображения и гибкой регулировки диапазона расстояний, на которых можно производить съемку, встроенный объектив был заменен на трансфокатор TV10Z0516 компании Camware [5] (табл.3).

Модель

TV10Z0516

Формат матрицы

1/3”

Формат резьбы

CS

Фокусное расстояние (мм)

5-50

Диапазон диафрагмы

1.6 -

Диапазон угла обзора

64º-6.9º

Минимальное расстояние для съемки (м)

0.3

Размеры (мм)

44 (диаметр объектива) х61.5

Масса (г)

130

Табл.3. Характеристики объектива-трансфокатора [5]

Новый объектив потребовал изготовления другого корпуса. Этот корпус должен иметь компактные размеры, допускать установку на штативе, а в дальнейшем и на макете спутника. Без промежуточных приспособлений он должен обеспечивать установку точного расстояния между трансфокатором и чувствительным элементом камеры. Требуется юстировка матрицы по отношению к оптической оси объектива во избежание погрешностей при измерениях. Корпус и подставка под печатную плату с электроникой были изготовлены нашими партнерами их ZARM’a (г.Бремен, Германия) с возможностью варьировать расстояние между матрицей и объективом в зависимости от типа крепления.

4. Отображение звездного неба на экране монитора

          Перейдем к описанию алгоритма для отображения звездного неба на экране монитора. Алгоритм реализован в среде программирования Visual C++. Net 2003. Используется звездный каталог [6].

Для определения углового движения спутника применяется установленная на его борту камера и специализированные алгоритмы, в основе которых лежит обработка снимков звездного неба. Для реализации и испытания этих алгоритмов требуется программа, имитирующая движение спутника по заданной орбите вокруг Земли. В результате работы программы на экране монитора должен отображаться фрагмент звездного неба, который мог быть получен с помощью камеры, установленной на борту спутника.

          Для отображения звездного неба на экране монитора используется звездный каталог, выделенный в отдельный файл. В нем содержится информация о звездах, которые могут быть зафиксированы камерой. При реализации алгоритма использовался текстовый файл со строками, каждая из которых содержит данные о прямом восхождении, склонении и звездной величине небесного тела. Число строк равно количеству звезд, включенных в каталог. Прямое восхождение – это угол положения объекта в плоскости небесного экватора, отсчитываемый от точки Весеннего равноденствия. Склонение – это угол от плоскости небесного экватора до объекта. Звездная величина – это безразмерная величина, характеризующее блеск небесного светила, то есть каждая строка полностью определяет его положение и блеск.

          Информация из звездного каталога помещается в специальную файловую структуру, которая носит название StarsInfo. Эта структура содержит четыре поля данных: nStars - количество звезд, считанных из файла), Ascension - массив прямых восхождений всех звезд, Declination - массив склонений всех звезд, Magnitude - массив звездных величин всех звезд. Для того чтобы получить данные о звезде с номером n, необходимо обратиться к полям Ascension, Declination и Magnitude с одним и тем же индексом n. При считывании из файла значений величин прямого восхождения и склонения проводятся дополнительные преобразования. В звездном каталоге прямое восхождение хранится в формате часы:минуты:секунды, а склонение - в формате градусы:минуты:секунды. При заполнении структуры StarsInfo обе величины переводятся в градусы. Это вызвано особенностями при графическом выводе картины звездного неба. После того как структура StarsInfo сформирована, поля данных сортируются в порядке, заданном пользователем. Сортировка звезд производится для того, чтобы установить соответствие с программой идентификации углового движения, в которой также используется файл звездного каталога и имеется возможность сортировать звезды. Возможны четыре типа сортировки данных структуры StarsInfo:

1.     сортировка по возрастанию прямого восхождения;

2.     сортировка по возрастанию склонения;

3.     сортировка по возрастанию звездной величины;

4.     данные не сортируются, а хранятся в том порядке, в каком они были считаны из файла.

Для графического представления звездного неба на основе структуры StarsInfo используется программный интерфейс для графических устройств OpenGL[7]. Этот интерфейс состоит из функций, которые позволяют задавать объекты и операции, необходимые для воспроизведения высококачественных цветных изображений. Основным его назначением является воспроизведение двух- и трехмерных объектов в буфере кадра. Эти объекты записываются в виде набора вершин, задающих геометрические объекты, или пикселей, определяющих изображения. OpenGL выполняет обработку данных для преобразования их в пиксели, чтобы окончательно сформировать требуемое изображение в буфере кадра. Рассмотрим каждый из трех этапов работы программы.

Инициализация приложения. Перед запуском программы появляется диалоговое окно, на котором отображены начальные условия движения спутника и установки видеорежима. При необходимости их можно изменить. Входными параметрами программы являются: истинная аномалия; большая и малая полуоси орбиты; аргумент перигея; аргумент восходящего узла; наклонение орбиты; тип сортировки звезд, считываемых из файла каталога.

На текущем этапе создается область вывода. Используется вся доступная область экрана монитора. Затем идет инициализация OpenGL. После этого формируется структура StarsInfo и заполняется данными, которые считываются из файла звездного каталога.

Разрешение по умолчанию - 1280 пикселей по горизонтали и 1024 пикселей по вертикали (можно выбрать один из трех видеорежимов: 1280х1024, 1024х768 или 800х600). Глубина цвета - 32 бита. На каждый пиксель отводится 32 бита - по 8 бит на каждую из четырех составляющих: красную, зеленую, синюю и альфа-компоненту (компонента прозрачности). Каждая из них может принимать значения от 0 до 255. В зависимости от их значений формируется определенный цвет пикселя и его прозрачность.

В OpenGL существуют два вида проекций – ортографическая (параллельная) и перспективная проекции[8] (рис. 3).

Рис.3. Ортографическая (слева) и перспективная (справа) проекции

Проекции задают способ проецирования трехмерного изображения на экран. При ортографической проекции каждая точка проецируется вдоль прямой, перпендикулярной к плоскости экрана. При перспективной проекции каждая точка трехмерного изображения проецируется вдоль прямой, соединяющей саму точку и точку расположения наблюдателя. Для отображения звездного неба используется перспективная проекция. Угол зрения вдоль оси X задается как отношение сторон области вывода. Угол зрения вдоль оси Y равен по умолчанию 45 градусам.

Главный цикл программы. Это основной этап работы приложения. На этом этапе производятся все вычисления, после чего формируется очередной кадр, который записывается в буфер. Затем изображение выводится из буфера кадра на экран монитора и весь цикл повторяется до тех пор, пока не будет выполнено условие выхода из цикла (нажатие клавиши ESCAPE).

До формирования очередного кадра анимации предварительно рассчитывается новое положение спутника и направление оптической оси объектива камеры. Движение центра масс спутника по эллиптической орбите описывается выражениями [9]

,  (1)

где - радиус-вектор спутника относительно центра масс Земли,  -  истинная аномалия,  - эксцентриситет орбиты,  - большая полуось орбиты,  - малая полуось орбиты, - гравитационный параметр Земли  - гравитационная постоянная,  - масса Земли. В (1) только две величины изменяются со временем – это радиус-вектор и истинная аномалия. Уравнение для истинной аномалии  интегрируется методом Рунге-Кутта 5-го порядка с постоянным шагом . Затем, для текущего значения истинной аномалии вычисляется радиус-вектор. Для отображения объекта в трехмерном пространстве OpenGL требуется задавать значения декартовых координат ,,, которые вычисляются через найденные значения  и  следующим образом[10]:

.       (2)

Здесь  - наклонение орбиты,  - аргумент восходящего узла,  - аргумент перигея,  - аргумент широты (рис.4).

Рис.4. Элементы орбиты

Наклонение орбиты, аргумент восходящего узла и аргумент перигея являются постоянными величинами для рассматриваемой модели движения спутника. Таким образом, перед формированием очередного кадра анимации вычисляется положение спутника для заданного момента времени. Эти координаты масштабируются для последующего использования их в OpenGL. Перед воспроизведением звездного неба, камера наблюдателя помещается в точку с вычисленными ранее координатами ,  и . Ориентация камеры наблюдателя в OpenGL, относительно инерциальной системой координат (ИСК), задается с помощью двух единичных векторов  и . Вектор  определяет направление оптической оси камеры, вектор  определяет поворот камеры вокруг вектора  ( должен быть перпендикулярен ). Оба вектора жестко связаны с корпусом спутника.

Спутник совершает вращательное движение относительно своего центра масс, поэтому координаты векторов  и  относительно ИСК меняются со временем. Рассмотрим, каким образом вычисляются их координаты. Воспользуемся динамическими уравнениями вращательного движения спутника и уравнениями Пуассона для направляющих косинусов

,            (3)

   (4)

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

       .         (5)

Таким образом, получаем матрицу направляющих косинусов, или матрицу поворота связанной со спутником системы координат (ССК) относительно инерциальной системы координат

.

Пусть вектор  задан в связанной системе координат. Тогда его проекция на оси инерциальной системы координат  определяется из следующего соотношения:

.            (6)

Используя формулу (6), можно вычислить проекции на ИСК векторов  и , заданные в ССК.

В программе имитации системы (3) и (4) интегрируются методом Рунге-Кутты 5-го порядка, и для каждого момента времени вычисляется матрица направляющих косинусов. Затем с помощью соотношения (6) определяется направление оптической оси камеры. С помощью матрицы  и координат радиус-вектора  из системы (2) вычисляется вектор местной вертикали , который используется в системе (3),

.             (7)

С помощью структуры StarsInfo, наполненной при инициализации приложения, каждый кадр воспроизводит звездное небо. Рассмотрим алгоритм, реализующий воспроизведение с помощью OpenGL. В OpenGL определены три основные системы координат: правосторонняя, левосторонняя и оконная (рис.5).

Рис.5. Системы координат, определенные в OpenGL

Первые две системы являются трехмерными и отличаются друг от друга направлением оси Z: в правосторонней системе она направлена на наблюдателя, в левосторонней - в глубину экрана. Ось X направлена вправо относительно наблюдателя, ось Y – вверх. Левосторонняя система используется функциями для задания области воспроизведения и типа проекции. Правосторонняя система координат используется во всех остальных случаях. Отображение трехмерной информации происходит в двухмерную оконную систему координат. Таким образом, для того чтобы задать положение объекта, используется правосторонняя система координат. Затем OpenGL отображает трехмерное изображение в оконную систему координат, используя заданный тип проекции и координаты положения наблюдателя, и выводит кадр на экран. При этом происходит автоматическое отсечение тех объектов, которые оказались за пределами видимости наблюдателя.

          Существуют две функции, которые позволяют задавать положение объекта. Первая функция glTranslate - перемещает центр системы координат относительно предыдущего положения в новое положение, которое задается координатами x,y,z. Вторая функция glRotate – поворачивает систему координат вокруг заданной оси на заданный угол (задается в градусах). Затем можно изобразить некий объект, центр которого будет совпадать с центром новой системы координат. Чтобы изобразить несколько объектов относительно одной и той же системы координат, используется следующая последовательность действий:

1.     запоминается текущее положение системы координат (координаты и углы поворота);

2.     система координат устанавливается в новое положение;

3.     изображается очередной объект;

4.     система координат устанавливается в начальное положение.

Этот способ используется для изображения звездного неба. Каждая звезда изображается точкой, диаметр которой пропорционален звездной величине. При этом включается сглаживание, что повышает качество изображения. Все звезды изображаются относительно инерциальной системы координат, центр которой совмещен с центром масс Земли, ось  направлена в сторону точки весеннего равноденствия, ось  направлена на северный полюс мира, ось  проводится перпендикулярно осям  и , таким образом, чтобы система  образовывали правую тройку координат (рис. 6).

При изображении звездного неба из структуры StarsInfo считываются поля Ascension (прямое восхождение) и Declination (склонение) каждой звезды. Запоминается текущее положение системы координат. Затем с помощью функции glRotate система поворачивается вокруг оси  (против хода часовой стрелки, если угол положительный) на угол прямого восхождения, и – на угол склонения вокруг оси  (в сторону Северного полюса мира, если значение угла положительное). Углы для функции glRotate должны задаваться в градусах, тогда при заполнении структуры StarsInfo прямое восхождение и склонение переводятся в градусы.

После этого система координат с помощью функции glTranslate перемещается вдоль оси  на достаточно большое расстояние, и изображается точка. После этого восстанавливается начальное положение системы координат и изображается следующая звезда.

Цвет для каждого объекта в OpenGL задается с помощью функции glColor4ub. Входными параметрами этой функции являются три составляющие цвета (красная, зеленая и синяя составляющие) и альфа-компонент (прозрачность объекта). Все звезды изображаются белого цвета (значение всех трех составляющих цвета равны максимальному значению - 255). Прозрачность для каждой звезды определяется значением звездной величины, которое хранится в поле Magnitude структуры StarsInfo. Так с помощью прозрачности имитируется яркость звезд. Если прозрачность равна

Рис.6. Инерциальная система координат

максимальному значению 255, то объект изображается абсолютно непрозрачным, что может соответствовать самой яркой звезде. Минимальное значение, равное нулю, делает объект полностью прозрачным, и он не отображается. Значение прозрачности в зависимости от звездной величины вычисляется следующим образом:

,    (8)

где ,  – максимальное значение прозрачности, равное 255,  – минимальное значение прозрачности, при котором изображаемый объект все еще остается видимым (это значение зависит от характеристик компьютера и по умолчанию равно 30),  и  – соответственно максимальное и минимальное значения звездной величины,  – значение звездной величины для текущей звезды.

Максимальное и минимальное значения звездной величины определяются при инициализации приложения. Причем, минимальное значение (оно может быть отрицательным) звездной величины соответствует самой яркой звезде, включенной в каталог. Так же при инициализации рассчитывается коэффициент . Аналогично рассчитываются диаметры точек, имитирующие звезды (диаметр и прозрачность пропорциональны звездной величине),

,    (9)

где ,  – максимальное значение диаметра точки (равно 5),  – минимальное значение диаметра точки, при котором точку можно отчетливо увидеть на экране монитора (равно 2). Так с помощью имитации яркости и размеров звезд обеспечивается реалистичность изображения звездного неба. С помощью клавиши «влево» («вправо») можно увеличивать минимальное (максимальное) значение диаметра точки. При одновременном нажатии клавиши «влево» («вправо») с клавишей SHIFT минимальное (максимальное) значение диаметра точки уменьшается. Клавишей «вверх» («вниз») можно увеличивать (уменьшать) одновременно максимальное и минимальное значения, при этом разность  остается постоянной.

          На рис.7 представлена блок-схема алгоритма отображения звездного неба средствами OpenGL. Алгоритм работает при каждом воспроизведении кадра. Обновление изображения происходит со скважностью 1 мс. Каждый раз вычисляется текущее положение наблюдателя и направление нормали, перпендикулярной к плоскости объектива (экран монитора), воспроизводится звездное небо и на экране монитора отображается фрагмент звездного неба.

          Для повышения наглядности предусмотрены дополнительные геометрические точки отсчета на экране. Если нажата клавиша SPACE, то вместе со звездным небом отображаются: точка Весеннего равноденствия (зеленая точка); Северный полюс мира (красная точка); Южный полюс мира (синяя точка); небесный экватор (красная линия); параллель, проведенная через точку весеннего равноденствия (зеленая линия); параллель, проведенная через точку, угол прямого восхождения которой равен 90 градусов (синяя линия). Каждая звезда идентифицируется своим номером в структуре StarsInfo. Повторное нажатие клавиши SPACE отменяет изображение реперных линий и точек.

    

Рис. 7. Блок-схема алгоритма отображения звездного неба

          Освобождение ресурсов. Завершение работы. Этот этап выполняется при завершении работы приложения. Освобождаются ресурсы, которые были выделены при инициализации для работы программы, а также восстанавливается видеорежим, который был установлен до запуска приложения.

На основе рассматриваемых алгоритмов в среде Visual C++ разработана программа, реализующая отображение фрагмента звездного неба в зависимости от положения наблюдателя в пространстве. На рис.8 представлен пример работы программы.

          5. Алгоритмы определения ориентации по снимкам звездного неба

Результатом съемки является видео-файл в формате avi с заданной частотой кадров. С помощью программы VirtualDub полученный видео-файл преобразуется в последовательность графических файлов формата bmp.

Графические файлы являются входными для программы распознавания углового положения спутника, которые обрабатываются последовательно. Рассмотрим задачи, которые требуется решать при идентификации звезд на снимке.

Рис.8. Пример работы программы

          После сегментации изображения формируется массив координат опознанных звезд на снимке. Координаты звезд получаются в пикселях относительно левого нижнего угла изображения. Для того, чтобы определить угловое расстояние между двумя звездами на снимке, пиксельные координаты звезд переводятся в метрические и все расчеты дальше проводятся в миллиметрах, причем начало метрической системы координат находится в точке пересечения оптической оси объектива камеры с плоскостью матрицы[11] (точка O). Ось z направлена из точки O, перпендикулярно плоскости матрицы в направлении съемки, оси x и y параллельны соответствующим осям снимка.

          Пусть  - координаты некоторой звезды в пикселях относительно левого нижнего угла снимка,  и  - размеры пикселя в миллиметрах соответственно по длине и ширине,  и - расстояния между пикселями матрицы по горизонтали и вертикали. Тогда метрические координаты, (относительно точки O) получаются из пиксельных координат по следующим формулам:

,     ;        (10)

где , - координаты точки O в миллиметрах. Тогда можно определить для каждой звезды координаты направляющих векторов при известном фокусном расстоянии  объектива камеры (рис.9), где . Стоит отметить, что - это расстояние от объектива до матрицы, равенство  вытекает из формулы линзы , где  - расстояние от объекта до объектива,  - расстояние от изображения объекта (или матрицы) до объектива (в нашем случае это расстояние - ),  - фокусное расстояние. Если снимаемые объекты находятся на бесконечно большом расстоянии (бесконечно большое расстояние для цифровых камер считается расстояние, превышающее 100-150 м), то из формулы линзы следует равенство , то есть . Поэтому при расчете угловых расстояний между звездами достаточно знать фокусное расстояние объектива камеры. Пусть звезды 1 и 2 имеют координаты соответственно  и  в метрической системе координат Oxyz. Вектор , задающий направление на первую звезду, имеет начало в точке , а конец – в точке , вектор , задающий направление на вторую звезду, имеет начало и конец в точках  и  соответственно.

Рис.9. Расчет углового расстояния между звездами на снимке

Тогда нормированные координаты векторов  и  вычисляются так:

,    (12)

. (13)

Косинус угла  между этими звездами определяется по формуле

.                 (14)

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

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

          Рассмотрим вывод на монитор изображения с помощью OpenGL. На рис.10 показано как проецируются объекты на монитор. В программе имитации звездного неба используется перспективная проекция, то есть задаются угол обзора, разрешение выводимого изображения, ближняя и дальняя плоскости отсечения и строится усеченная пирамида. Все объекты, которые попадут внутрь данной пирамиды (в поле зрения виртуальной камеры), будут отображены на мониторе. Объекты (звезды) проецируются на монитор вдоль прямой, соединяющей данный объект и точку наблюдения, где находится виртуальная камера.

Рассмотрим случай, когда изображение с видимым участком звездного неба на мониторе снимается камерой (рис.11), где введены обозначения: - расстояние от объектива до матрицы камеры,  - расстояние от объектива камеры до монитора,  - расстояние от точки наблюдения виртуальной камеры до центра экрана,  и  - звезды, полученные на матрице камеры,  и  - звезды, изображенные на экране монитора,  и  - моделируемые звезды из звездного каталога.

            Рис.10. Проецирование звезд на экран монитора

На рис.11 видно, что угол  между звездами  и  совпадает с углом между звездами  и , но отличен от угла  между звездами  и . Это означает, что если вычислять угол между звездами 1 и 2, используя формулы (12) - (14), то полученный угол между ними будет неверным. Чтобы точнее определить угловые расстояния между звездами на снимке, нужно проводить расчеты с учетом характеристик виртуальной камеры. Эту проблему можно решить двумя способами. Первый способ, достаточно простой, - это заменить при вычислении углового расстояния цифровую и виртуальную камеры на одну эквивалентную камеру. Тогда все что нужно сделать – это вычислить фокусное расстояние эквивалентной камеры. По второму способу, используя рис.11, необходимо вывести формулы для расчета , учитывающие параметры виртуальной камеры.

Рис.11. Получение изображения

          Рассмотрим первый способ вычисления фокусного расстояния для эквивалентной камеры методом наименьших квадратов. Для этого требуется снять камерой неподвижный участок звездного неба, моделируемый программой, на котором известны номера всех звезд и их угловые координаты. На этом фрагменте звездного неба должна быть точка Весеннего равноденствия (далее точка весны). Тогда можно определить оконные координаты всех звезд на снимке и точки весны и вычислить расстояния на снимке между каждой звездой и точкой весны в пикселях, а затем перевести их в метрическую систему координат. Пусть на снимке имеются n звезд с координатами  и точка весны с координатами . Расстояние между i-ой звездой и точкой весны определяется по формуле

.            (15)

В результате получим набор измеренных величин . Составим функцию зависимости расстояния от фокуса и угла между двумя объектами. Так как известно какой звезде соответствуют координаты на снимке, то можно определить с помощью звездного каталога прямое восхождение и склонение для каждой i-ой звезды. Вычислим направляющие векторы для каждой звезды на снимке

.    (16)

Косинус угла между i-ой звездой и точкой весны с вектором  равен . Вычисляем приближенное значение фокусного расстояния , где  - расстояние от объектива камеры до монитора,  - максимальная видимая высота [мм],  - высота матрицы камеры [мм]. Зависимость расстояния на снимке между i-ой звездой и точкой весны от  и координат звезд определяется по формуле , где  (рис.12). Составим функционал по методу наименьших квадратов

,                       (17)

и минимизируем его

                  (18)

Выражая фокусное расстояние через остальные значения, получим

.                (19)

Так можно вычислять фокусное расстояние камеры, эквивалентной цифровой и виртуальной камерам.

Рис.12

К недостаткам этого способа повышения точности идентификации можно отнести то, что его приходится проводить каждый раз перед началом моделирования идентификации звезд, если положение камеры относительно монитора было изменено. Преимущество вышеизложенного способа – нет необходимости вычислять угловые расстояния по снимкам, учитывая характеристики виртуальной камеры, то есть в моделировании процесса идентификации используются формулы и алгоритмы для реальных условий.

Рассмотрим второй способ. Его идея заключается в расчете угловых расстояний с учетом представления звездного неба на мониторе. Вектор  выражается (рис.11) через вектор

,                (20)

где  - длина ,  - расстояние  между объективом цифровой камеры и звездой на экране монитора [мм], - единичный вектор, направленный вдоль оси z,  - расстояние . Так как , где  - угол между осью z и вектором , то . С другой стороны, , так как . Тогда получим, что . Подставляя из формулы (12) значение , имеем

.           (21)

Подставим найденные значения в (20) и получим

 

 

                (22)
Тогда единичный вектор  равен

,       (23)

где ,  - расстояние от объектива цифровой камеры до экрана монитора,  - фокусное расстояние объектива,  - фокусное расстояние виртуальной камеры. Аналогично выводится формула для вектора ,

.     (24)

Тогда угловое расстояние определяется по формуле (14). Из формул (23)–(24), что для вычисления направляющих векторов необходимо знать  и . Параметр  определяется измерением расстояния между монитором и объективом камеры. Для определения  нужно провести дополнительные вычисления, используя измеренную высоту рабочей части монитора и угол видимости, который устанавливается в программе имитации звездного неба. Необходимость в измерении этих параметров является недостатком данного способа вычисления угловых расстояний, так как они привносят ощутимые погрешности. Кроме того, для вычисления направляющих векторов используются формулы, отличные от тех, которые предполагается использовать на спутнике в реальных условиях.

7. Литература

[1] Ch.Kuehl, M.Melf, H.Diehl, E.Gottzein. Micro- Tech.- Sensor for Attitude and Orbit Determination. AAS 03-001, 26th Annual AAS Guidance and Control Conference, 5-9 February, 2003, Breckenridge, Colorado, 18p.

[2] А.М.Овчинников, А.А.Ильин, М.Ю.Овчинников. Принцип работы и устройство активно-пиксельных датчиков. Препринт ИПМ им.М.В.Келдыша РАН, Москва, 2003г., N 95, 30c.

[3] Техническое описание камеры Fuga-1000

[4] Техническое описание вебкамеры Philips PCVC720K

[5] Техническое описание трансфокатора TV10Z0516

[6] Звездный каталог, ftp://cfa-ftp.harvard.edu/pub/gsc/Catalogs/SAO.sparc

[7] OpenGL. Официальный справочник. Пер. с англ./Под ред. Дейва Шрейндера. СПб: ООО «ДиаСофтЮП», 2002. – 512 с.

[8] Ю.Баяковский, А.Игнатенко, А.Фролов. Графическая библиотека OpenGL. Методическое пособие. http://www.rsdn.ru.

[9] А.П.Маркеев. Теоретическая механика. Наука. 1990. – 416 с

[10] http://encyclopedia.astrologer.ru

[11] И.Ю.Кирюшкин. Определение фактического углового движения нано-спутника MUNIN. // Сб. науных трудов: Некоторые проблемы фундаментальной и прикладной математики. – М.: МФТИ, 1999.




[2] В дальнейшем планируется полностью исключить эту часть алгоритма, в которой происходит сохранение поступающего с камеры изображения и считывание сохраненного файла программой, отвечающей за обработку изображения. Вместо этого планируется передавать оцифрованное изображение непосредственно с камеры на вход программы, обрабатывающей изображение.