Обо мне
    Резюме
    Портфолио
    Услуги
    Контакты
    Астро
    Схемотехника
    Мультикоптеры
    Автономный дом
Язык:

Грубое определение текущего положения телескопа

11/12/2015 02:36:35
moEncoder

Есть у меня телескоп. Причём, хоть телескоп мой единственный и несомненно, самый любимый из телескопов (единственный же!), во время съёмки Неба я не вижу куда он направлен. Нет, ну то есть я, конечно, предполагаю. Порой с высочайшей точностью, что подтверждается актуальными снимками неба. И всё же, часто во время астросессии возникают моменты, когда надо быть уверенным в ориентации на все сто :). С ориентацией вообще шутки плохи.

Был в моей астропрактике один случай, оставивший шрам на телескопе, да и меня расстроивший. Обычно, перед закрытием крыши обсерватории, я удалённо включал свет и глядил во внутреннюю вебку. Я убеждался, что телескоп стоит горизонтально и крыша не заденет его. Но в это утро я проснулся и доверившись расчётному положению телескопа, не глядя включил мотор закрытия крыши. Шараааааааах, сказала крыша, буквально перепрыгнувшая в лихой чехарде через спину телескопу.

С тех пор я всегда, какая б отвратительная связь не была, сначала смотрю в камеру, а уж потооом :). И всё же, в любой момент времени хочется знать, куда именно направлен телескоп. Точности в пяток градусов достаточно. А уж если будет точность в градус - вообще отлично!
В дорогих монти на валу ставят энкодеры. В принципе, как написал выше, достаточно очень слабых энкодеров. И я так и думал поступить. То хотел нарисовать координатные круги и считывать их вебкой, то изучал магнитные энкодеры, используемые, например, в штангенциркулях.

А потом я увлёкся мультикоптерами. Это такие радиоуправляемые игрушки с несколькими моторами. Сейчас их модно называть "Дронами". У меня есть несколько коптеров. Каждый из них точно знает своё положение в пространстве. Свой азимут (рудер) и высоту (тангаж). Ещё он знает свой крен, но применимо к телескопу это не имеет значения.

Как же он разбирается где низ, где верх? С помощью трёхосевого акселерометра (мерялки ускорения). Наверняка вы видели строительный уровень. Тот всегда знает где верх! Что-то похожее делает микросхема трёхосевого акселерометра.

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

Взял за основу самую дешёвую коптерную платку Crius SE (фото не моё, но у меня что-то похожее), в которую уже залит код опроса датчиков и управления коптером (проект MultiWii). В этой плате есть 3D акселерометр, 3D магнитометр и средней точности барометр. Там есть ещё достаточно точный 3D гироскоп, активно используемый для коррекций моторов коптера. Но нам он ни к чему. Вот эта платка на али, например: http://www.aliexpress.com/item/Big-Sales-LHM040-CRIUS-MultiWii-Standard-Edition-Flight-Controller-Board-MWC-SE-V2-5-for-Multicopter/32375940982.html (ищем: Crius mwc se, если эта ссылка уже не работает).

К платке можно скачать код firmware в исходниках на сях под Atmega8 (среда Arduino). Так же в рамках проекта multiwii есть java-приложение для калибровки, настройки и контроля текущих показаний датчиков. Пришлось чуть повозиться, чтобы запустить старое приложение на новой винде, но гугл помог и в этом. (нужно было прописать путь к жабе, а не к её javapath-каталогу - http://www.multiwii.com/forum/viewtopic.php?f=18&t=5685#p57804)

Подключил платку к USB, запустил Gui, откалибровал компАс, покрутил платку, проверил, что нарисованный "коптер" крутится от поворота платы. Графики показаний датчиков меняются. На USB-UART платке радостно моргают светодиоды - идёт обмен между компом и платкой.

Было лень с нуля разбираться с протоколом, хоть он и описан здесь: http://www.multiwii.com/wiki/index.php?title=Multiwii_Serial_Protocol . Так что скачал какой-то снифер (перехватчик) ком-порта, получил пакет запроса и пример ответов. Протокол простой. Скорость соединения по-умолчанию 115200. Всякие чётности и прочее не настраивал, думаю 8N1, как обычно.

Получаю данные по давлению и ориентации в пространстве / времени. Жаль на коптере не нужна температура и скорость / направление ветра :). Впрочем, и так хорошо.

Впрочем, протокол всё равно пришлось понять. Но всё же приятно видеть посылки в снифере и переводить существующие данные на русский, а не наоборот.

Вопросы от GUI к платке:

24 4D 3C 00 64 64 24 4D 3C 00 73 73 24 4D 3C 00   $M<.dd$M<.ss$M<.

65 65 24 4D 3C 00 66 66 24 4D 3C 00 67 67 24 4D   ee$M<.ff$M<.gg$M

3C 00 68 68 24 4D 3C 00 69 69 24 4D 3C 00 6A 6A   <.hh$M<.ii$M<.jj

24 4D 3C 00 6B 6B 24 4D 3C 00 6D 6D 24 4D 3C 00   $M<.kk$M<.mm$M<.

6E 6E 24 4D 3C 00 FE FE 24 4D 3C 00 6C 6C         nn$M<.юю$M<.ll

Ответы платы:

24 4D 3E 07 64 DC 03 00 00 00 00 00 BC 24 4D 3E   $M>.dЬ......ј$M>

08 73 09 0A 0B 03 06 05 10 0C 6F 24 4D 3E 0B 65   .s........o$M>.e

DC 0A 00 00 07 00 00 00 00 00 00 BF 24 4D 3E 12   Ь..........ї$M>.

66 E1 FF 1A 00 ED 01 00 00 00 00 01 00 5B 00 9D   fбя..н.......[.ќ

FE 0D 02 AA 24 4D 3E 10 67 00 00 00 00 00 00 00   ю..Є$M>.g.......

00 00 00 00 00 00 00 00 00 77 24 4D 3E 10 68 E8   .........w$M>.hи

03 E8 03 E8 03 E8 03 00 00 00 00 00 00 00 00 78   .и.и.и.........x

24 4D 3E 10 69 DC 05 DC 05 DC 05 DC 05 DC 05 DC   $M>.iЬ.Ь.Ь.Ь.Ь.Ь

05 DC 05 DC 05 79 24 4D 21 00 6A 6A 24 4D 21 00   .Ь.Ь.y$M!.jj$M!.

6B 6B 24 4D 3E 06 6D E0 FF FF FF 00 00 74 24 4D   kk$M>.mаяяя..t$M

3E 05 6E 00 00 00 00 00 6B 24 4D 3E 08 FE 00 00   >.n.....k$M>.ю..

00 00 00 00 00 00 F6 24 4D 3E 08 6C DE FF 1D 00   ......ц$M>.lЮя..

5E FF 00 00 F9                                    ^я..щ

Перевожу на русский диалог между GUI и платой:

- ты какой версии multiwii? (0x64, 100)
- ... (ответ нам не важен)

- моторы куда подключены? (0x73, 115)
- ... (ответ нам не важен)

- самый главный вопрос. Дай данные датчиков! (0х66, 102)
- самый главный ответ :)

- дай данные по порядку серв (0х67, 103)
- ... (ответ нам не важен)

- дай данные по порядку моторов (0х68, 104)
- ... (ответ нам не важен)

- дай данные по тому, что пришло с пульта (0х69, 105)
- ... (ответ нам не важен)

- дай данные GPS, если он подключен (0х6A, 106)
- ... (ответ нам не важен)

- дай расстояние, на которое коптер отлетел от дома (0х6B, 107)
- ... (ответ нам не важен. Надеюсь, телескоп не отлетит больше) :)

- дай высоту и вертикальную скорость (0х6D, 109)
- это полезно. Для погодной станции. Барометр.

Ответ: 24 4D 3E 06 6D [E0 FF FF FF] [00 00] 74. Первое число в скобках - искомое. Высота коптера в сантиметрах (давление);

- дай данные по питанию, уровню приёма с пульта и т.п. (0х6E, 110)
- ... (ответ нам не важен)

- (0хFE, 254). Этот запрос не вижу в описании

- дай текущее положение коптера (0х6C, 108)
- а вот это как раз именно то, что нужно! Даже ответ на 102й запрос не так важен. Пусть multiwii сама переводит данные датчиков в итоговые координаты.

Ответ на 108й запрос:

- 24 4D: префикс MultiWii;
- 3E: направление данных от платки в комп;
- 08: длина посылки 8 байт (а в описании 6. Вот и верь описаниям);
- 6C: код команды;
- DE FF: угол X (знать бы что это);
- 1D 00: угол Y (знать бы что это);
- 5E FF: азимут
- 00 00: четвёртый uint ответ нули. Может GPS? Гадать не буду. Нули в моей плате;
- F9: CRC для проверки корректности пакета. На который я забью. А вы так не делайте, ай-яй-яй так делать :).

 

Поставил Visual Studio 2010 (что было под рукой, надо будет качнуть посвежее), и на C# наваял небольшую программку.

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

  • текущие альт-азимутальные координаты, считанные с энкодера;
  • текущие альт-азимутальные координаты, считанные с монтировки телескопа;
  • кнопка "калибровка". Когда мы точно знаем, что координаты телескопа верны, можно нажать эту кнопку. Текущие данные из ASCOM будут корректировать показания датчиков платки;
  • кнопка "Из Энкодера в Телескоп" (переименовать бы, не пойму как назвать). Основная кнопка, которая текущие грубые показания азимута и высоты, полученные от энкодера, записывает в голову телескопу.

Ещё есть менюшка, в которой два пункта. Настройки и вход. В настройках:

  • выбор ком-порта платки из имеющихся в системе;
  • выбор телескопа - запускает стандартный аском диалог выбора монти.

Программка говорит по usb-ком-порту с устройством, общается с телескопом, с пользователем. Дружелюбная такая :)

[скрин программы, как доделаю]

[ссылка для скачивания, как доделаю]

Прога, как и всё написанное на C#, требует микрософт dotnet redistributable. В данном случае 4.0.


Архив

Телефон: +7 (928) 425-32-10
e-mail: