Smalltim OSD and autopilot (часть 1)

baychi
smalltim:

выкину ppm и начальные широту-долготу-высоту по гпс, будет 100 байт. Всё, кроме текущих широты-долготы-высоты ГПС заменю на 16- или 8-битные целые с фиксированной точкой, будет в итоге 63 байта.

Было бы хорошо одну и ту-же структуру записи использовать для лога и для выдачи наружу через цифровой интерфейс типа UART (для GSM модема, дополнительного контроллера и т.п). Эти же данные можно и через видеотракт гнать для следящей антенны, как ты раньше хотел. Посему GPS координаты точки старта я бы оставил. 16 бит вместо float - поддерживаю (8 даже для PPM - маловато, не говоря об АЦП). Насчет ужимания вообще, - главное не переборщить. Лучше оставить запасные поля (например дополнить размер структуры до степени двойки), чем потом менять формат от версии к версии. Даже 128 байт размера вполне достаточно. Ведь 5 Гц запись лога нужна в основном для отладки самого АП, для обычного разбора полетов достаточно 1-2 Гц.

slides

А зачем все время гнать нулевую точку ? или я понял чего-то не так…

baychi
slides:

А зачем все время гнать нулевую точку ?

Для следящей антенны, например. Что-бы знала, где она сама стоит. Или нужно ставить GPS на следящее устройство, или запоминать текущие координаты перед началом полета (это возможно, но потребует лишних действий от пилота идополнительного интелекта на станции слежения, например как не потерять цифры при случайном рестарте). Ну и на перспективу, дополнительная группа GPS координат может пригодится при полете по точкам.

Dronavt

В программировании я не силен, но ИМХО, имея записанную точку старта в логе, можно парировать ситуацию, рассмотренную некоторое время назад. А именно, аварийную перезагрузку АП в воздухе с потерей координат старта 😊?

baychi
Dronavt:

имея записанную точку старта в логе, можно парировать ситуацию, расмотренную некоторое время назад. А именно, аварийную перезагрузку АП в воздухе с потерей координат старта

Самим АП? Можно, наверное, только как отличить рестарт от штатного отключения питания?
Кстати, вопрос к Тимофею, сторожевой таймер Меги задействован? И вообще алгоритм АП как нибудь самоконтролируется?
Например, я в своих железках (на базе DSP) делаю в фоновом цикле постоянный “контроль контекста”: проверяю маски прерываний, указатель стека и некоторые стратегические регистры. А при обнаружении нестыковок - делаю запись в лог ошибок и рестарт программы.
Ведь сбои процессора могут быть вызваны не только ошибками в программе, но и помехами по питанию или входам, и даже космическими лучами. 😃

slides

А кто против стартовой точки в АП ? Ну и пусть она сидит где-то в регистре памяти, нафиг ее гнать-то в логе и вниз транслировать. У игла проблема решена элементарно. Кладем самолет у антенны, он стартует ГПС, фиксит. После этого включаем наземную станцию. При отсутствии движения станция запоминает точку старта. В Игле предусмотрен учет “диаметра пятна” в пределах которого не происходит слежения за самолетом. По умолчанию 5 метров. И проблемы я тут никакой не вижу, даже если рестарт АП. Какая связь между логами и рестартом ?

baychi
slides:

Какая связь между логами и рестартом ?

Дима, представь себе, что самолет в воздухе, а у твоего Игла пропало питание (акк сдох, ветром антенну уронило, бродячая собака разъем выдернула и т.п.). Питание помошник восстановил, а координаты где взять?
Для АП таже проблемма. Рестарт в воздухе - это потрея коодинат базы. А если они есть в логе,хотя бы в перспективе их можно восстановить.

slides

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

baychi
slides:

Вручную слабо уж если такой косяк проскочил

Вручную что? Координаты базы в следящую станцию вводить будешь? 😃

slides:

Просто если вопрос встал об экономии места, я считаю эта инфа реально не нужна.

Главное “с водой не выплеснуть ребенка”.

slides
baychi:

Вручную что? Координаты базы в следящую станцию вводить будешь? 😃

Неа, поднять свой зад и перезагрузить/заменить акк/поднять упавшую антенну/убить собаку и т.д. и ручками направить на зону улета самолета. Не хуже получится, если уж такое ЧП. А самолетка не упадет, она же на стабилизаторе лететь может !

smalltim

>Кстати, вопрос к Тимофею, сторожевой таймер Меги задействован? И вообще алгоритм АП как нибудь самоконтролируется?

Нет, не задействован. Нет, каким-то специальным образом не контролируется. Нет проверок рантайм структур на целостность или на соответствие контрольных сумм. Рантайм структуры четко разделены на “те, которым доверяем” и “те, которым не доверяем”. “Те, которым не доверяем” - это данные , обновляемые из прерываний. Для математики Х раз в секунду делается копия этой структуры. Можно на этапе создания копии ввести какие-нибудь проверки.
Для структур, лежащих во внешней памяти или для данных, приходящих снаружи/уходящих наружу по каждому чиху делаются проверки контрольных сумм.

Логика пилота не сильно тяжелая, математики немного, все критические переменные контролируются на правдоподобность. Покуда в пилоте только мой код вертится, можно бояться разве что только космических лучей. Когда начнем гонять юзерский код, всё будет строже.

Но, насколько я понимаю, если кристалл в полете бьет статикой, космическими лучами, или еще чем, то тут может произойти вообще всё что угодно и все наши проверки как мертвому припарки. Что будем делать, если статика или там дождь/град, птичья какашка убивает внешнюю память?

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

baychi
smalltim:

может произойти вообще всё что угодно и все наши проверки как мертвому припарки. Что будем делать, если статика или там дождь/град, птичья какашка убивает внешнюю память?

Ну зачем же так сразу. Если Мега убивается статикой или пожаром на борту, то совесть программиста - чиста. О смерти внешней памяти достаточно знать, что она умерла и принять меры к минмизации последствий. WDT задействовать - это правильно. Раз в жизни и незаряженное ружье стреляет, а раз в месяц и самая выверенная программа виснет. 😃

smalltim:

стартовые гпс координаты всё-таки из лога выкину

Ох, зря! Помятуя что ты номер полета уже изжил, даже анализ лога это значительно затруднит. 😦

smalltim:

Как это надежно определять - сходу не могу придумать

По логу, периоду времени с момента последней записи и ненулевой GPS скорости, что-бы отличить от пользовательского ресета для более точной фиксации спутников.

smalltim

>По логу, периоду времени с момента последней записи и ненулевой GPS скорости, что-бы отличить от пользовательского ресета для более точной фиксации спутников.

Гениально, спасибо. 3 секунды и 10кмч думаю, будет за глаза. Только вот тогда придется запретить отключение записи логов и сделать максимально долгий интервал между записями равным 1 сек. Думаю, никто не будет в обиде.

Если знать стартовые координаты ГПС, то нет необходимости вообще что-то постоянно сохранять в одно и тоже место и соответственно нет опасности протереть дырки в памяти, записывая состояние пилота ежесекундно во внешнюю память. Автокалибровочные константы датчиков можно писать в память один раз на старте автопилота, если не обнаружено состояние “ресета в полете”.

Кстати, стартовые координаты ГПС я почему выкидывать собираюсь? Потому что стартовые координаты ищутся легко по логу. Последовательным перебором записей в логе “взад” от самой поздней записи. Глядим текущие координаты и смоттрим статус автопилота.
О, по логу видно, что в записи номер Х флажок инициализации ГПС единичка, а в предыдущей записи еще не единичка. Ок, это и есть та запись, где текущие координаты стали стартовыми.

sergee
smalltim:

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

Можно еще по регистру "MCU Control and Status Register " определять по какой причине пришел сброс. Во всяком случае на PICах по аналогичному регистру сброс определяется однозначно, во всяком случае сторожевой таймер отличаем от сброса при включении или по нажатию кнопки сброс.

al88

Привет Всем!

Несколько вопроссов…😃

1.Люди подскажите какой провод идет на датчик GPRS 2-3 жильный, экранированный?
2.Можно ли разместить датчик в крыле, т.е. провод от датчика до самой телеметрии будет сантиметров 80-90 см, не скажется ли такая длина на работу датчика?
3.Имеет ли смысл ставить экранированный провод на камеру?
4.Имеется 7 канальный приемник(5 каналов используется) и надеюсь будет комплект телеметрии и автопилот, возможно ли как-то управлять поворотом и наклоном камеры, ведь как я понял каналов не осталоь(2 ост использует автопилот?😃)?

smalltim
  1. 3-жильный, неэкранированный
  2. Можно, при предварительной проверке на предмет наводок на кабель от видеопередатчика.
  3. Не имеет, а необходимо. Это, вообще, считается хорошим тоном.
  4. Автопилот сейчас использует 1 дополнительный канал. Подо что у Вас сейчас заняты 5 каналов?
al88

газ, элероны-2(может объединить? Y кабелем?). руль высоты и направления…

slides
al88:

Привет Всем!

Несколько вопроссов…😃

1.Люди подскажите какой провод идет на датчик GPRS 2-3 жильный, экранированный?

Вот это круто, давно такого не слышал ! Тим, люди уже тебе следующий шаг к разработке автопилота подсказали.

delfin000

Долго выбирал и выбрал изделие от smalltim в полной комплектации (с автопилотом). Теперь вопрос к форумчанам. долго ждали эту аппу? И сколько стоит автопилот? что то цену на него нигде не нашел. На сайте только голая плата от автопилота. Да и где быстрее ее можно взять? Просветите. Пока нашел только за пределами Москвы. А хочется просто и быстро купить без заморочек и тягомотин.
Ко всем с уважением.
P.S. Завтра беру очки, камеру, передатчик, дополнительный ресивер, а вот телеметрия…упс. Обидно както

kulikof

долго ждали эту аппу? - долго, до сих пор жду
И сколько стоит автопилот? - тон 14 примерно точно не помню
Да и где быстрее ее можно взять? - тут

А хочется просто и быстро купить без заморочек и тягомотин. - в очередь