Телеметрия (часть 1)

serj
Dikoy:

2smalltim
Может я конечно туплю, но поворот есть умножение матриц.
//-------
Как выведен ваш способ?.. Мне просто интересно 😃

Мне кажется, смеситель Тимофея сильно похож на смеситель элевонов 😃

smalltim

>синусов/косинусов 45 градусов, то есть 0,7.

Точно. А синус и косинус 45 градусов это единица делить на корень из двух. Примерно Ваши 0.7

[x 0]  (исходная матрица)
[0 y]

*

[cos45 -sin45] (матрица поворота)
[sin45  cos45]

итого у Вас

a= (x/V2+y/V2) = (x+y)/V2
b= (x/V2-y/V2) = (x-y)/V2

Dikoy

Блин, я всё время забываю, что у Вас на АЦП сразу делта 😃 А я заточил иптематику на индивидуальную обработку датчиков.
Упростил свою систему и получил почти то же, только минус где-то теряется… Ну да ладно. Потом отлажу.

smalltim

Прошивка для телеметрии v232nb - для плат без бародатчиков.
Можно использовать и v232, но тогда в соответствующих местах экрана будут бессмысленные числа или нули.

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

Так что, кому надо, забирайте v232nb:

smalltim

Решил сделать пару заманушных скриншотов 😃

Как побочный продукт организации своего потока, обрабатывающего HID-репорты, вышло так, что в процессе скачки памяти автопилота можно плату отресетить или вообще отключить от USB - поток будет продолжать вертеться, и если плату подключить обратно, через долю секунды всё прочухается и скачка продолжится с того места, где прервалась 😃
Ну или можно насильно прервать скачку, просто закрыв окно. Ничего не зависнет, не сломается и не утечет 😃

Только вот HID медленный, зараза. Я засекал время: скачка 2 МБ набортной памяти занимает в среднем минуту и 25 секунд. Ну да ладно, переживем.

slides
smalltim:

Решил сделать пару заманушных скриншотов 😃

Как побочный продукт организации своего потока, обрабатывающего HID-репорты, вышло так, что в процессе скачки памяти автопилота можно плату отресетить или вообще отключить от USB - поток будет продолжать вертеться, и если плату подключить обратно, через долю секунды всё прочухается и скачка продолжится с того места, где прервалась 😃
Ну или можно насильно прервать скачку, просто закрыв окно. Ничего не зависнет, не сломается и не утечет 😃

Только вот HID медленный, зараза. Я засекал время: скачка 2 МБ набортной памяти занимает в среднем минуту и 25 секунд. Ну да ладно, переживем.

😈 Да он издевается над нами !!!😃

Dikoy

Проздравьте мине! Вчера был первый автоматический вылет! 😃
Сыкотно было аж жуть, но ничё… Из крена машину выводит! Машинки позамёрзли, сажал аппарат в снег фактически одним элероном 😃
Пока из недостатков - очень тормознутая система получилась. Надо уменьшать фильтрацию и подбирать ПИД… Бум думать.

smalltim

Поздравляю!

Насколько именно тормозная система получилась?
Я закладываюсь на обновление ширины PPM на выходе (в режиме автопилота) не меньше чем 25 раз в секунду, абсолютный мимнимум - 10 раз в секунду.
Если автопилот работает не как автопилот, а просто в режиме стабилизации самика, задержка с обработкой и выдачей на сервы управления от человека должна быть не больше 5 мсек, 10 мсек - абсолютный максимум.

smalltim

У меня пока продвигается всё очень неторопливо. Сегодня добил и всячески проверил функции произвольного чтения/записи во внешний флеш.
Следующий этап - логика и сами функции калибровок компаса, пирометров и входных-выходных PPM.

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

UPD:
Если кому интересно, наткнулся на мерзкую вещь в AVRGCC, связанную с типом констант.

вот такой, например, код нифига не сработает:
u32 a;

if(a>1000){…}

а вот такой сработает:
u32 a;

if(a>(u32)1000){…}

Гады, столько крови попортили…

Dikoy

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

Тормознутось опрелелялась органолептически 😃 То есть раскачкой в руке. Если вертануть самолёт максимально быстро, что позволяет рука и прочность самолёта, то машинки начинают отрабатывать только когда самик уже почти достиг 90 градусов. То есть во-1 ПИД плохо настроен (опережение маленькое), во-2 идут задержки, связаные с работой кода (та же запись во флеш отъедает время).
Код у меня сейчас - шедевр. Когда получил пирометры, чтобы не париться, взял один проект с работы под кей, выкинул лишнее оставив движок (Модбас коммуникация по всем МКашным портам) и насадил код чтения пирометров туда. В итоге за пару дней их завёл. Ну и далее наращивал всё на этом движке. А там только движок 20 кБ после компиляции занимает 😃
Сейчас планирую вынести функционал управления в отдельный проект, соптимизировать математику, выкинуть лишнее. Тогда и оценю задержки.
А насчёт обновления ШИМа - вычисление периода ППМ идёт в прерывании, ШИМ аппаратный, с двойной буфферизацией. По расчётам задержка прохождения сигнала не должна превысить один период ППМ. По крайней мере когда я проверял передачу через кей на земле, на глаз задержек не заметил. Только элероны немного дрожали (ошибка измерения) но на полёт это не влияет.
В общем, на следующих выходных должно стать ясно, что там со скоростью.

smalltim

У меня функции чтения/записи берут линейный адрес во флеше, указатель на буфер, и сколько в буфер писать/читать.

А как ПИД может тормозить? Там И что ли большое? У меня И вообще не предусматривается, только ПД. А изначально хотел вообще просто ООС с постоянным коэффициентом вкрячить и всё. То есть, П. 😃

Скажите, Гуру, плавающая точка (float?) (double?) на AVR GCC достойна того, чтобы ее использовать, или лучше оставить всё по старинке, в целых числах?

Artie
smalltim:

вот такой, например, код нифига не сработает:
u32 a;

if(a>1000){…}

а вот такой сработает:
u32 a;

if(a>(u32)1000){…}
Гады, столько крови попортили…

а как себя ведет

if (a>1000l)
или
if (a>1000ul) ?

… А то, может быть это не бага, а … 😉

smalltim:

Скажите, Гуру, плавающая точка (float?) (double?) на AVR GCC достойна того, чтобы ее использовать, или лучше оставить всё по старинке, в целых числах?

float от double там, кажется, вообще не отличаются 😃, но в целом библиотека вполне нормальная.

Целесообразность же работы в интах или флоатах определяется балансом доступных времени (бо плавучка медленна) и места (бо библиотеки жрут место) с одной стороны, и желанием (а иногда и возможностью) перевода всей необходимой арифметики в целые числа - с другой…

Dikoy

Пид определяет опережение по угловой скорости 😉 А т.к. у меня датчики читаются относительно редко, то угловая скорость занижена, от сюда тормозная реакция.
Например, когда я отключил ФСС по углам, работать стало намного шустрее. Кстати, сейчас величину ФСС выбираю динамически по настроечной дельте. Чем меньше дельта, тем длиньше ФСС. В солнечные выходные дельта была 1300, то есть 26 градусов, и разницу в поведении модели с ФСС и без него я не заметил. А вот в прошлые выходные, в туман, было заметно и очень.

Вахтанг
Dikoy:

Ну неужели так трудно дать ссылку?.. Гугль на Икар 1600 выдаёт _Институт Конъюнктуры Аграрного Рынка. _

А зачем в гугле? на нашем форуме!
rcopen.com/forum/f90/topic108958/693
Народ летатет с фотиком, а нашу камеру самик даже не почувствует! правда еше вес добавляет остальная электроника, но в сумме, я думаю, не тяжелее фотика!

Dikoy

Сейчас провёл исследование. Дёргал в коде лапкой и смотрел осциллом (кей, кварц 8 МГц). Получил интересные цифры…
Во-1 атмельский usb_task выполняется всего 20 мкС (при подключённом USB 30 мкС). Это радует.
во-2:
Мой движок отъедает всего 100 мкС, что тожде радует 😃
ВСЯ моя математика, написаная Х знает как на флОтах, тратит 800 мкС от момента получения значения температуры до зарядки ШИМа посчитанным значением 😁
А вот функция чтения пирометров лопает аж 2,5 мС! 😃 Вот это, блин, грустно… Думаю, как соптимизировать…
Но в целом неплохо. Весь мейнлуп, с математикой, фильтрами, записью во флеш и т.д. проходит за 6,2 мС, то есть за один период ШИМ сигнала пересчитываем значения 3 раза. Так что убирание движка и всего лишнего большого выигрыша не даст, значит буду оптимизировать что есть…

Dikoy

ПС. Взвесил самолёт. С аппой тянет на 570 грамм. Аппа в сумме 90 грамм (только моя, самодельная).

NailMan

Вопрос к Smalltim:
Вот приехала моя видеоаппаратура с камерой KX191. Судя по отображению картинки на разные источники включая широкоформатные было замечено что камера широкоформатная, что удивительно. Разрешение ейное 520 линий.

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

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

Если не туда запостил - звиняйте… 😃

Скриншот
nailalex.dyndns.org/hobby/…/vlcsnap-159336.jpg

Судя по картинке инфа просто съехала вниз куда-то. С китайской камеры дешевой(все-в-одном LYD-209) и с любых других источников накладывается как положено.

V_Labanauskas

To: NailMan, Smalltim

А небудет ли проблема приататсиа в разрешении камеры: тогда 540 ТВлине долзно бит есцио хуже.
Интерестно какую камеру Смаллтим исползует, ТВлине?

NailMan

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

smalltim

>А небудет ли проблема приататсиа в разрешении камеры: тогда 540 ТВлине
>долзно бит есцио хуже.
>Интерестно какую камеру Смаллтим исползует, ТВлине?

>Странно, но на очках отображается иначе нежели в плеере, там смещение низ
>меньше, точнее срезается меньше. Половина текста под миникартой все таки
>видно. Вечером попробую на тв-тюнере захватить видео.

Камера у меня KT&C KPC-S20CB:
nix.ru/…/KT_KPC_S20CB_Supermini_Camera_500x582_Col…

Производитель KT&C
Модель KPC-S20CB

Описание
Цветная камера в металлическом корпусе для систем видеонаблюдения.
Выдержка 1/100000–1/50 с
Разрешение 380 горизонтальных линий.
Отношение сигнал/шум 45 дБ
Разрешение CCD 500 x 582
Размеры матрицы 1/4”
Минимальная освещенность 1.0 Lux
Фокусное расстояние объектива 3.6 мм
Светосила объектива 1/2.0
Фокусировка Ручная
Сенсор SuperCCD (Super HAD CCD)
Номинальный ток 120 мА
Напряжение питания 12 В

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

Кстати, в прошивке 232 (на данный момент самая свежая) низ поднят относительно 227 как раз для китайских говнокамер и всяческих очков.
Могу поднять еще, не вопрос. Номер строки меняется за 15 секунд, еще 15 секунд - на компиляцию прошивки.

И, это, не путайте теплое с мягким.
Есть три различных параметра, которые означают совершенно разное.

  1. Разрешение светочувствительной матрицы. У KPC-S20CB это 500 x 582 пикселов
  2. “Четкость” видеокартинки : 380 ТВ-линий. Что такое ТВ-линии см., например, здесь: tehconsul.ru/data/articles/video/17.html
  3. Число ТВ-строк. Должно быть 525 у NTSC и 625 у PAL/SECAM. Моя телеметрия привязывается именно к временнЫм параметрам ТВ-строк в видеосигнале.
NailMan

А распиновка разъема программирования ISP стандартная Atmel-овская или какая-то своя? Не нашел в описаниях на девайс на какой ноге 10пинового разъема какой сигнал.

В наличии только Yaap и его программатор на 5 резисторах. Мегу8 он знает(шью им mega8-16PI(PU) для USB-шнурков). Распиновку на шлейф подаю как у атмеловских программаторов сделано для совместимости.

Попробую сегодня 232 зашить.