Added documentation

This commit is contained in:
Edward Emelianov
2021-10-29 20:40:38 +03:00
parent 39b9cee77c
commit b2a3d68513
10 changed files with 471 additions and 41 deletions

View File

@@ -1,13 +1,16 @@
\documentclass[a4paper,12pt]{extarticle}
\usepackage{/home/eddy/ed}
\usepackage{afterpage}
\usepackage{longtable}
\def\t#1{\texttt{#1}}
\def\look#1{(см.\,стр.\,\pageref{#1}, п.\,\ref{#1})}
\nocolon
\author{Емельянов Э.~В. \and Фатхуллин Т.~А.}
\title{Система управления оптоволоконным спектрографом 1-м телескопа}
\begin{document}
\maketitle
\maketitle\tableofcontents
\section{Описание}
Основой системы управления прибором является мини-компьютер под управлением ОС Gentoo Linux, расположенного
на подвесной части. В подвесной части расположены три шаговых двигателя (управляются по CAN-шине): управление
@@ -25,6 +28,16 @@
Данный демон\footnote{\url{https://github.com/eddyem/astrovideoguide_v3/tree/main/LocCorr}} предназначен для анализа
изображений, определения координат центроидов и выдачи управляющих сигналов на корректирующую аппаратуру.
Для сборки утилиты используется \t{cmake}: в рабочей директории проекта создается поддиректория, далее в ней
необходимо запустить \t{cmake ..}, после чего~-- \t{make} и \t{su -c "make install"}. Утилита имеет следующие зависимости:
\begin{description}
\item[libusefull\_macros] библиотека\footnote{\url{https://github.com/eddyem/snippets\_library}} с функциями парсинга
командной строки, отладочными макросами, логгированием и т.п.;
\item[libcfitsio] для работы с FITS-файлами;
\item[libflycapture и libflycapture-c] поддержка светоприемников Grasshopper;
\item[набор библиотек pylonbase] поддержка светоприемников Basler.
\end{description}
В качестве входных изображений могут быть файлы формата FITS, JPEG или PNG (посредством \t{inotify} производится
мониторинг обновления одного файла либо появления новых файлов в указанной директории), CMOS-светоприемники
Basler или Grasshopper. Возможно добавление других источников, для этого необходимо в директории проекта создать
@@ -70,36 +83,63 @@ Basler
\subsubsection{Аргументы командной строки демона}
\begin{description}
\item[-A, --maxarea=arg]
максимальная площадь (в пикселях) объекта (по умолчанию~150000);
\item[-C, --canport=arg]
порт локального сервера \t{canserver} (по умолчанию~4444);
\item[-D, --ndilat=arg]
количество дилатаций при обработке изображения (по умолчанию~2);
\item[-E, --neros=arg]
количество эрозий при обработке изображения (по умолчанию~2);
\item[-H, --height=arg]
высота рабочего участка изображения;
\item[-I, --minarea=arg]
минимальная площадь (в пикселях) объекта (по умолчанию~400);
\item[-L, --logXY=arg]
файл для логгирования вычисленных координат центроидов;
\item[-A, --maxarea=arg]
максимальная площадь (в пикселях) объекта (по умолчанию~150000);
\item[-C, --canport=arg]
порт локального сервера \t{canserver} (по умолчанию~4444);
\item[-D, --ndilat=arg]
количество дилатаций при обработке изображения (по умолчанию~2);
\item[-E, --neros=arg]
количество эрозий при обработке изображения (по умолчанию~2);
\item[-H, --height=arg]
высота рабочего участка изображения;
\item[-I, --minarea=arg]
минимальная площадь (в пикселях) объекта (по умолчанию~400);
\item[-L, --logXY=arg]
файл для логгирования вычисленных координат центроидов;
\item[-N, --naverage=arg]
количество изображений для вычисления средних координат центроида (от~1 до~25);
\item[-P, --pidfile=arg]
файл с PID сервера (по умолчанию \t{/tmp/loccorr.pid});
\item[-T, --intthres=arg]
порог яркости изображений при сортировке ($(I_1-I_2)/(I_1+I_2)$, по умолчанию~0.01)
\item[-W, --width=arg]
ширина рабочего участка изображения;
\item[-X, --xtarget=arg]
координата~$X$ цели (оптоволокна, щели);
\item[-Y, --ytarget=arg]
координата~$Y$ цели;
\item[-b, --blackp=arg]
доля пикселей с низкой интенсивностью, которая будет отброшена при эквализации гистограммы
(если включена эквализация обработанного кадра);
количество изображений для вычисления средних координат центроида (от~1 до~25);
\item[-P, --pidfile=arg]
файл с PID сервера (по умолчанию \t{/tmp/loccorr.pid});
\item[-T, --intthres=arg]
\item[-c, --confname=arg]
имя файла конфигурации (по умолчанию \t{loccorr.conf});
\item[-e, --equalize]
выполнять эквализацию обработанного кадра;
\item[-h, --help]
вызвать данную справку;
\item[-i, --input=arg]
название объекта для мониторинга новых изображений (имя файла или директории,
<<grasshopper>> или <<basler>> при захвате с КМОП-камеры);
\item[-W, --width=arg]
\item[-j, --jpegout=arg]
название файла, куда будет записано обработанное изображение (по умолчанию
\t{./outpWcrosses.jpg});
\item[-X, --xtarget=arg]
координата~$X$ цели (оптоволокна, щели);
\item[-Y, --ytarget=arg]
координата~$Y$ цели;
\item[-b, --blackp=arg]
доля пикселей с низкой интенсивностью, которая будет отброшена при эквализации гистограммы
(если включена эквализация обработанного кадра);
\item[-c, --confname=arg]
\item[-l, --logfile=arg]
файл, в который будет вестись логгирование;
\item[-p, --proc=arg]
имя модуля процессинга коррекций (<<pusirobo>>);
\item[-v, --verbose]
повысить уровень информативности логгирования (каждый~\t{-v} повышает на~1);
\item[-x, --xoff=arg]
сдвиг по оси~$X$ рабочего участка изображения;
\item[-y, --yoff=arg]
сдвиг по оси~$Y$ рабочего участка изображения;
\item[--ioport=arg]
номер порта сокета для подключения управления (по умолчанию 12345);
\item[--maxexp=arg]
максимальная экспозиция (в миллисекундах, по умолчанию 500);
\item[--minexp=arg]
минимальная экспозиция (в миллисекундах, по умолчанию 0.001).
\end{description}
\subsubsection{Конфигурационные параметры}
@@ -281,7 +321,8 @@ relay=newval - Send relay commands (Rx=0/1, PWMX=0..255)
\t{moveU} и \t{moveV}~--- относительные значения. Если требуемое значение за диапазоном перемещения, будет
возвращено \t{FAILED}.
Запрос \t{imdata} возвращает состояние граббера:
\subsubsection{Калибровка корректора положения звезды}
Калибровка выполняется автоматически в режиме \t{stpstate=setup}. Для начала ее проведения необходимо установить
все подвижки в среднее положение, навести телескоп на относительно яркую звезду, сфокусироваться телескопом,
установить звезду как можно более близко к метке рабочего оптоволокна и включить процедуру калибровки.
@@ -396,9 +437,14 @@ $$
разные порты USB. В случае, если базовое устройство перестанет корректно работать, автоматически произойдет
переподключение к резервному.
Компилируется при помощи \t{cmake}. Из внешних зависимостей имеет лишь библиотеку
\t{libusefull\_macros}\footnote{\url{https://github.com/eddyem/snippets\_library}} .
\subsubsection{Аргументы командной строки}
положения по обеим осям. Таким образом, смещению по оси~$U$ на $N_U$~шагов будут соответствовать изменения
координат~$\D{y_u}$ и~$\D{x_u}$, а смещению по оси~$V$ на $N_V$~шагов~---~$\D{x_v}$ и~$\D{y_v}$.
\begin{description}
\item[-P, --pid=arg] PID устройства преобразователя;
\item[-V, --vid=arg] VID устройства;
\item[-e, --echo] включить опцию <<эха>> введенных пользователем команд;
\item[-i, --device=arg] название файла устройства преобразователя;
@@ -408,7 +454,8 @@ $$
\item[-s, --speed=arg] скорость соединения по CAN-шине (в бодах);
\item[-v, --verbose] повысить уровень подробностей логгирования (каждая \t{-v} повышает уровень на 1);
\item[--pidfile=arg] имя PID-файла процесса (по умолчанию: \t{/tmp/canserver.pid}).
В результате вычислим искомые коэффициенты по уравнению~\eqref{maineq}.
\end{description}
\subsubsection{Сетевой протокол}
В целях безопасности сетевое соединение для подключения клиентов открывается исключительно на локальном
@@ -543,8 +590,11 @@ application because of the present device state'
всем подключенным клиентам.
Для перемещения в заданное абсолютное положение дадим команду~\t{absmove}:
\begin{verbatim}
\subsection{Демон \t{spec\_server}}
\input{spec_server.tex}
\subsection{Интерфейс наблюдателя}
\input{webinterface.tex}
\section{Электронные компоненты}
\subsection{Преобразователь USB--CAN}\label{canusb}
@@ -718,4 +768,41 @@ typedef enum{
запуска микроконтроллера (little endian \t{uint32\_t}).
\end{description}
\end{verbatim}
\section{Запуск утилит в автоматическом режиме}
Управляющий узлами спектрографа мини-ПК установлен на подвесной части. При подключении к новой сети
необходимо сначала сконфигурировать сетевой интерфейс. По умолчанию LAN1 настроен на IP \t{192.168.3.226/23} с
шлюзом \t{192.168.2.11} и DNS \t{192.168.2.111}. Интерфейс LAN2 настроен на \t{10.0.0.1/8} и может использоваться для
диагностических целей. Пароль корневого пользователя: \t{root@spec}, пароль пользователя \t{eddy}, под которым
запускаются сервисы: \t{eddy@spec}.
Для того, чтобы сервисы запускались автоматически, в \t{/etc/local.d} находится скрипт \t{utils.start}:
\begin{verbatim}
#!/bin/sh
CONFDIR="/etc/spectrograph"
LOGDIR="/var/log/spectrograph"
sudo -u eddy /home/eddy/Doc/Pusirobo/canserver/mk/canserver \
-l ${LOGDIR}/canserver.log -vv -s 250 2>/dev/null >/dev/null &
sleep 1
sudo -u eddy /home/eddy/Doc/LocCorr_new/mk/loccorr -vv -i basler \
-p pusirobo -c ${CONFDIR}/loccorr.conf -L
${LOGDIR}/XY.log -l ${LOGDIR}/loccorr.log -j /dev/shm/image.jpg \
2>/dev/null >/dev/null &
sleep 1
sudo -u eddy /home/timur/PROGRAMS/C++/build-INASAN-SPEC/spec_server \
${CONFDIR}/server-config.dat 2>/dev/null >/dev/null &
\end{verbatim}
Конфигурационные файлы находятся в каталоге \t{/etc/spectrograph}, логгирование производится в каталог
\t{/var/log/spectrograph}. Для ротации логов настроен logrotate. Его конфигурация располагается в файле
\t{/etc/logrotate.d/spectrograph}:
\begin{verbatim}
/var/log/spectrograph/*.log {
size 1M
rotate 10
compress
notifempty
missingok
}
\end{verbatim}
\end{document}