OSD на ATmega1281

ReM

Как вычислить направление до какой-то точки? Например до точки старта как в OSD. Т.е. именно направление (или угол), чтобы стрелка правильно показывала.

RW9UAO

угол - тригонометрически. получается прямоугольный треугольник. оба катета известны, их отношение - это арктангенс. из него можно получить, как угол, так и гипотенузу. вычислять лучше таблично или CORDIC. перевод гипотенузы из градусов в метры делается с коррекцией широты/долготы. ведь 1 градус в москве и архангельске имеют разную длину =)

msv

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

void calc_los(void)
{
unsigned long dx, dy;
u_int course;
static u_char div_wp=0;

if(gGPS_mode!=3) return;
if(gGPS_speed<gMainConfig.MinValidSpeed) return;
if(gGPS_lat_start>=gGPS_lat.Val) dy=gGPS_lat_start-gGPS_lat.Val;
else dy=gGPS_lat.Val-gGPS_lat_start;
if(gGPS_lon_start>=gGPS_lon.Val) dx=gGPS_lon_start-gGPS_lon.Val;
else dx=gGPS_lon.Val-gGPS_lon_start;
dy*=GRAD_METER_CONST; dy/=1000;
dx*=gGPS_lon_gm; dx/=1000;
gGPS_los=lsqrt((dx*dx)+(dy*dy));
//course
if(gGPS_los>gMainConfig.MinLos)
  {
  if(dx>=dy) course=90-(dy*45)/dx;
  else course=(dx*45)/dy;
  if(gGPS_lat_start<gGPS_lat.Val)
    {
    if(gGPS_lon_start>=gGPS_lon.Val) course=180-course;
    else course=180+course;
    }
  else if(gGPS_lon_start<gGPS_lon.Val) course=360-course;
  gGPS_course_base=course;
  }
// wp
if(++div_wp>=5)
  {
  div_wp=0;
  if(gGPS_lat_wp>=gGPS_lat.Val) dy=gGPS_lat_wp-gGPS_lat.Val;
  else dy=gGPS_lat.Val-gGPS_lat_wp;
  if(gGPS_lon_wp>=gGPS_lon.Val) dx=gGPS_lon_wp-gGPS_lon.Val;
  else dx=gGPS_lon.Val-gGPS_lon_wp;
  dy*=GRAD_METER_CONST; dy/=1000;
  dx*=gGPS_lon_gm; dx/=1000;
  gGPS_wp+=lsqrt((dx*dx)+(dy*dy));
  gGPS_lat_wp=gGPS_lat.Val;
  gGPS_lon_wp=gGPS_lon.Val;
  }
}

Как видите для расчета арктангеса используется линейная интерполяция на участках 45град. Погрешность оценивал, точно не помню, но что-то меньше 2град, что для моей задачи вполне достаточно.

msv

Наверное точнее не интерполяция, а линейная аппроксимация…
Отвечу на вопросы в личке здесь: Посчитать константу GRAD_METER_CONST и расчет глобальной переменной gGPS_lon_gm (считается один раз после инициализации GPS ) - “задание на дом”. Остальные переменные вроде бы очевидные, если не понятно спрашивайте…

cvy7
Mishanya:

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

Полностью согласен !

msv

Люди, покаюсь… В принципе изначально не было в планах доводить проект до законченной конструкции с полным представлением всех исходников итп. Очень рассчитываю на обмен мнениями, идеями, как по железу, так и по алгоритмам. Много ценных замечаний и идей получаю в личке (чего только стоит шедевральный цикл вывода в строке за 3 такта на пиксель от уважаемого abalex), за что всем авторам большое спасибо.
От себя, например, могу доложить, что датчик температуры TMP36 категорически не хочет работать в зоне облучения 1гГц видеопередатчика. Боялся, что будут проблемы с GPS, а тут какой-то г-ный датчик температуры на несколько дней все затормозил…
В приципе сейчас все готово, лайнер снаряжен, осталось дождаться ходовых акков с ХС и хорошей погоды для проведения летных испытаний. Правда вес мой 1,5м ероплан, на котором уже отлетал 1,5 сезона, прибавил значительно, ужо засомневался, а взлетит-ли… 😃 Ну май уже скоро, там и посмотрим…

cvy7

Я это к тому что поразвивать этот проект в вертолетно-коптерном направлении- там специфики своей много очень, ее по любому прописывать заново, просто если мы все будем одних и тех же барабашек вылавливать, быстрее их не выловим.
По поводу термодатчика: он в металле? кондер на ногах стоит? хотя по меньшей мере странно, гиры в коптере гораздо более чувствительны к полям, и измерения на уровне одного отсчета АЦП, 3,3мв, прямо под платой стоит видеопередатчик с оторваным экраном(перегревается иначе) 0,5вт, а рядом с платой антенна двухстороннего радиолинка 0,5 вт 433мгц на основе rfm12bp, все это летает, не дрыгается.

В рабочих проектах правда давно уж применяем DS18S20. На него весь стек проверенный мной есть. Но в данном случае это врятли будет работоспособно, у него свой реалтайм жесткий

PS/ хотя я сейчас уже на распутье (концептуальном), а стоит ли делать так. Сейчас имею радиолинк с потенциалом 3 км в городе! двухсторонний на основе кода Слона(www.1slon.ru/rc24868.htm). Потенциал линка заведомо превышает все мои возможные полеты на коптере, дом просвечивает, небольшой холмик тоже, имея высоту, горизонт стрелку и LOS, подогнать к себе коптер можно (хотя сложно:) ) ППП, потенциал видео (0,5 вт на 2,4ГГц) заведомо меньше. Поэтому напрашивается osd делать на земле, в том числе и при пропадении синхронизации с камеры, а это уж явно не AVR. либо ASIC, либо ПЛИС.

msv

Первый раз этот датчик использовал в своем пульте с 35Мгц передатчиком. Тоже заработал только после того, как повесил на питание и на выход непосредственно на датчик емкости.
А тут… датчик на маленький платке, питание и выход зашунтированы емкостями SMD, все в глухом экране, на шлейфе ферритовое колечко… На расстоянии ближе ~1м от антенны на выходе вместо постоянки, какие-то прямоугольники… Блин… все законы физики неверны… Купил другой - такая же фигня… Уж не так мне нужен этот датчик, просто было уже интересно… повесил доп. нагрузочный резистор, запитал от отдельного источника, еще что-то мудрил, уже не помню… Прямо не датчик температуры, а сверхвысокочувствительный датчик эл.магнитного поля…
C DS18S20 некогда обмениваться, Вы правы. Во всяком случае неохота городить еще один критичный реал-тайм процесс… Пока сделал на делителе с KTY81. Нелинейность плюс/минус километр, ну как индикатор пока пойдет…

msv

Облетал вчерась свой бпла… Ощущений/адреналину море…
Самолетик с возросшей нагрузкой справился на 5. Даже лучше стало. Возросла скорость (что мне тоже понравилось), увеличилась стабильность и даже появилась некоторая “солидность” в полете.
Горизонт работает без нареканий. FMA- марку держит…
Фиговенькое качество видео… И камерка не так что сильно (хотя для своих 25-баков вполне достойно…), дальше все заметно ухудшает радиоканал, потом пинакл с очень низким динамическим диапазоном, ну и под конец добивает картинку кодер… Надо поиграться уровнями видео-сигнала, а вот с радиоканалом не знаю что делать, слишком много выпадений похоже из-за интерференций. Конечно нужно антенну поприличнее слепить на приеме, но не уверен, что это радикально решит проблему.
По телеметрии нарекания только к значению высоты. Почему-то за 10мин полета обновилось значение 2(!) раза… Или с модуля так редко идут GGA, или в парсинге что-то попутал… Странно, все нормально вроде бы было…
Режим стабилизации- первый раз после включения - восторг! Идет как вкопанный широченной дугой (неидеальное триммирование) несмотря на довольно сильные порывы ветра. А вот второй раз включил, вроде бы все нормально, но после команды на крен с пульта, валится на крыло… Потом при анализе видео понял, что все правильно… Самолет шел с выключенными двигами на планировании. После включения стабилизации, система долго и довольно успешно пыталась выдерживать нулевой тангаж практически доведя полет до парашютирования. Но дача крена… да еще с ветерком… это уже было через-чур… Есть о чем подумать…
Автопилот- далеко не отлетал, но с 300м уверенно, взревев двигами ( все четко по алгоритму, для поддержания близкого к 0 тангажа на вираже, было включено ~70% газа), развернул самолет на базу, сбросил газ (тк. текущая высота, хоть и неверная, была больше целевой) спланировал прямехонько к нам.
Летал с визуальным контролем, тк. просто хотел для начала проверить работу всех систем. В конце поддался на уговоры сына/ассистента, поуправлять по картинке на ноуте в машине. Залез в машину и только начал приходить в себя пытаясь ориентироваться в непривычной ситуации, отключается ноут… Сдохли батареи… Выскакиваю из машины… Где!!! Сын, несмотря на предварительный инструктаж (если я в машине- ты наблюдаешь за ним визуально!), тоже оказывается глядел через плечо на ноут… Несколько секунд ужаса… и треск дерева в который попал самолет, как ни странно было облегчением… 😃 Сильно серьезных повреждений нет, но морду придется переклеить…

mandigit

Хорошо-бы фото/видеоматериалы прикладывать для наглядности!?

cvy7

msv, с видео - надо 2-3 приемника, антенны их в 3х плоскостях, с приемников вытащить RSSI на мегу, мегой переключать например с помощью 74hc4051, тогда все стабильно будет км на 3 на 0,5 вт передатчика, я в этой штуке еще и OSD запихал.

msv

Хорошо-бы фото/видеоматериалы прикладывать для наглядности!?

Все правильно, но уж шибко не терпелось поделиться хотя бы на словах… 😃
Качество видео с борта фиговенькое, может попытаюсь со временем что-нибудь нарезать. А вот с земли есть красивые кадры, но писали на DVD-R, жалко пока финализировать. Попозже смонтируем…

огда все стабильно будет км на 3

Ок, подумаю… Пока летал на 300м, и был удивлен кол-вом выпадений, причем независящим от расстояния. Вообще направленная антеннка, по идеи и интерференцию должна поприбить…

mandigit

2msv
Скажите, а блок работы с видео вы сами проектировали или брали что-то за основу. Интересно, исходя из каких соображений?
на входе 1881 фильтр странно обустроен (в моем понимании сначала должен стоять фильтр НЧ из резистора и конденсатора, после него разделительный конденсатор, как впрочем и прорисовано в даташите)
Я то-же себе блок OSD делаю. Набросал схему, работает, но зависит от абсолютных уровней виделсигнала - если интересно - брошу на форум.
Насчёт горизонта - пока склоняюсь к тому, что будет достаточно adxl202 1 штука и крен и тангаж контролировать.

PS хорошо, что вы продолжаете публиковать свои достижения - интересно читать. Насчёт качества картинки - цели сравнивать с промышленными или отработанными системами нет - кто в этом разбирается - плохое качество картинки не смутит, хотя многоминутные клипы из этого лучше не делать 😒

msv

Не хочу утомлять низким качеством картинки, выложу только минутку полета.
Пунктирная линия на авиагоризонте появляется в режимах помощника и автопилота- целевые крен/тангаж. 3 маленькие шкалы- значения на выходе каналов управления (по сути положение серв) Все остальное, вроде бы понятно…

Писали навстречу, получилось - мгновенный ответ… 😃
Видео-модулятор сам сочинял. Из каких соображений… ну что бы работало… 😃 А что не понятно? спрашивайте…
Где стоит кондер ФНЧ, до разделительного или после для електичесва не играет значения…
Что такое adxl202? Конечно могу глянуть дш…

mandigit

По видеомодулятору - сформулирую вопросы - задам. Привожу схему моего модулятора.

ваше видео дает хорошее представление о получившемся OSD - хорошо, что с помощью графики можно выводить сложные картинки, разрешение чувствуется, что недостаточно.

ADXL - называют акселерометр, но они разные бывают, а детали, как правило не уточняются. Применяют для измерения угла наклона в двух плоскостях. В паре с гироскопом позволяет строить эффективные устройства для определения угла наклона. Сам по себе возможно будет достаточен, что-бы определять угол в тепличных условиях (незначительные угловые ускорения, наклоны до 45град)

msv

Графика слабовата, согласен… С другой стороны пиксель по высоте в принципе не уменьшить, по ширине можно на 1/3 поуже сделать, правда надо смотреть влезу ли по быстродействию. Ну это уже в след. версии возможно буду мудрить.
Я думаю Вы понимаете, что с авиагоризонт, построенный на принципе измерения ускорений, будет не слишком полезный показометр. А уж функцию стабилизации (ради чего он и нужен) точно осуществить не получится.
По схеме Вашего модулятора, чес. говоря не очень понял… Зачем диод D7? Это какая-то хитрая привязка к уровню чёрного? Не врублюсь, как это может работать, он же всегда открыт… Номиналы резисторов тоже вызывают сомнения, этож какой мощности должен быть источник модулирующих сигналов… Вы собираетесь отдельно программно формировать сигналы черного и белого?

UserM
msv:

С другой стороны пиксель по высоте в принципе не уменьшить,

Почему?

msv

В PAL всего 312,5 строк в полукадре… OSD обрабатывает каждую строку в полукадре.

AgiSer

Сергей, А как у Вас (в меге) организован PPM_IN?

UserM

msv, Вы под графику выделяете память (видео буфер) , а потом по прерыванию выводите?

mandigit
msv:

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

А я-то надеялся 😇

msv:

По схеме Вашего модулятора, чес. говоря не очень понял… Зачем диод D7? Это какая-то хитрая привязка к уровню чёрного? Не врублюсь, как это может работать, он же всегда открыт… Номиналы резисторов тоже вызывают сомнения, этож какой мощности должен быть источник модулирующих сигналов… Вы собираетесь отдельно программно формировать сигналы черного и белого?

Диод D7 нужен для компенсации падения напряжения на транзисторе Q2/ Он действительно всегда открыт 😃, но работа у него такая. В зависимости от приходящего видеосигнала меняется ток через резистор R22, который обеспечивает сопротивление видеосигналу 50 Ом. Это приводит к колебаниям напряжения между резистором R22 и D7 и в точке R23 D7 (на 0,7В выше).
Схема - рабочая (во всяком случае, для данной частоной видеокамеры).
Да, программно формировать сигналы черного и белого.