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

Brandvik

Тим, показания лучше делать аналоговыми (палочки), визуально более информативно…

baychi
smalltim:

У меня нет и не было никогда приемников с выходом RSSI, так что вопрос: оно так сработает?

В принципе - да, но есть несколько тонкостей.

  1. При выключенном передатчике RSSI показывает уровень шума в диапазоне.
    У меня дома (RSSI с R617FS, к примеру) это значение колеблется от 40 до 60 мВ. А на поле бывает и 20-30 мВ. Максимум (передатчик рядом с приемником) - 0.46 В.
  2. Нижнее значение RSSI при котором наступает FailSafe может в воздухе быть меньше, чем значение при отключенном передатчике на земле.
  3. Показания RSSI (по крайней мере с FUTABA) это логарифмическая величина. По моим оценкам 2-х кратное уменьшение напряжения соответсвует 10-ти кратному падению уровня.

И, наконец, последнее. RSSI намного менее показателен, чем количество потерянных пакетов. 😃 Если Тимофей под словом RSSI понимал вход получающий усредненные значения потерь пакетов - то все прекрасно будет работать по его логике.

denisry

Уважаемы smalltim.

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

slides

Вот только давайте не будем засорять проблему пакетами, ЛОГ-декодерами и т.д. Мы с Тимом обсуждали тему РССИ. Для эстетов можно ввести переключатель чувствительности шкалы сигнала - логарифм с накоплением или линейный с накоплением (типа прикола с выбором ГПС или бародатчика). Однозначно надо делать сглаживание показателя РССИ и я думаю не подбирать кондей в параллель, а математическим способом, благо ресурсов Меги должно хватить. Отображать надо 10 палками, причем после палок обязательно процент писать. В автопилотном куске можно сделать условие включения при определенном уровне РССИ и вариант отображения. ИМХО. Неплохо бы чтобы на определенном уровне РССИ (и ниже) значок начинал мигать.

Кстати, как отписался Томас, его система имеет выход с линейной характеристикой…

baychi
slides:

Неплохо бы чтобы на определенном уровне РССИ (и ниже) значок начинал мигать. Кстати, как отписался Томас, его система имеет выход с линейной характеристикой…

Дима, а тебе RSSI (уровень принимаемого сигнала) зачем вообще нужен? Сформулируй, пожалуйста, как ты собираешся этот сигнал в полете интерпретировать?
И про Томаса: он именно RSSI выдает, или все-же качество сигнала (например, по критерию потерь пакетов)? И в каком виде выдает (какой разъем, диапазон напряжения, форма, степень усреднения и т.п.)?

slides

Отвечаю:
У меня нет автопилота и не факт, что я буду его ставить на все 4 самолета. Поэтому возникло желание хоть как-то контролировать состояние радиолинка. Согласен, что не лучший вариант.

Как оценивает РССИ у Томаса не знаю, но сейчас ему задам вопрос. Выглядит в виде 4-го штырька серворазъема последнего канала от 0,5 вольта (максимум) до 0,29 вольта (минимум)

baychi
slides:

У меня нет автопилота и не факт, что я буду его ставить на все 4 самолета. Поэтому возникло желание хоть как-то контролировать состояние радиолинка. Согласен, что не лучший вариант.

Вот именно! По RSSI можно узнать много нового. Например, насколько далеко приемник находится от передатчика. Или особенности прохождения сигнала в данных атмосферных условиях. Единственно, чего через RSSI нельзя узнать наверняка, это как скоро приемник намерен потерять связь! Потому и спрашиваю, может Томас все-же не RSSI выдает а более важную информацию?

slides

Увы, нет ! Хотя пишет, что есть нога на чипе, с которой можно получить сигнал по потерянным пакетам…

poldeco
denisry:

Уважаемы smalltim.

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

Тим, а в принципе глиссада это есть своего рода гипотенуза? теоретически возможно ведь ведение автопилота по ней на посадку? как вариант… было бы очень интересно… тут конечно упираешься в точность GPS координат и бародатчиков…

smalltim

Да, гипотенуза. Но садиться автоматом, основывась на баро или ГПС я б не рискнул.
Нарисовать глиссаду или что-нибудь, что помогает садиться, на экране телеметрии - можно, почему бы и нет.

Про автопилот.

Переписал классы работы с настройками.

Ужесточил до безобразия стратегию работы с настройками, теперь сделать что-то неосознанно или по ошибке очень трудно.

Сделал слив всего комплекта настроек из автопилота в Контрольную Панель и заливку из Панели в автопилот.

Сделал сохранение всего комплекта настроек из Панели в файлы настроек *.apsettings и чтение из файлов в Панель.

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

Контрольная Панель является промежуточным звеном между файлом и автопилотом. Как и раньше, загрузив в Панель файл настроек или самостоятельно изменив настройки в Панели, пользователь должен залить настройки из Панели в автопилот.

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

При работе с настройками в силе следующие правила:

  1. Если какие-то настройки не слиты в Панель из автопилота, или не сброшены в значения по умолчанию или не залиты раньше из файла, то они не сохраняются в файл.

  2. Если какие-то настройки не слиты в Панель из автопилота, не сброшены в значения по умолчанию или не залиты из файла, то они не заливаются в автопилот.

  3. Если каких-то настроек в файле нет или не распознаются или файл поврежден, то они не читаются в Панель.

Таким макаром можно сохранить и передать товарищу или выложить в Сеть хоть весь комплект настроек, хоть только одну страничку настроек. Аналогично, взяв файл настроек у товарища или из Сети, можно прочитать файл и все настройки, что есть , попадут в Панель. Потом можно все их залить в автопилот или залить только то, что хочется.

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

Файл с настройками по умолчанию выглядит примерно так:

aaa.apsettings:

<group>autopilot_control_panel.pp_pcontrol = Управление моделью
   <param>model_type = type0
   <param>use_elevon_mixer = False
   <param>roll_limit = 30 град
   <param>pitch_limit = 15 град
   <param>heading_change_speed_limit = 180 град/сек
   <param>heading_type = GPS
   <param>heading_prediction = 0 сек
   <param>target_altitude = 100 м
   <param>baro_gps_altitude = GPS
   <param>throttle_speed_control = throttle
   <param>throttle = 50 %
   <param>target_speed = 45 км/ч
   <param>baro_gps_speed = GPS
   <param>min_throttle = 30 %
   <param>throttle_boosted = 100 %
   <param>throttle_boosted_time = 15 сек
   <param>roll_p = 20 %
   <param>pitch_p = 20 %
   <param>roll_d = 50 %
   <param>pitch_d = 50 %
   <param>heading_p = 25 %
   <param>altitude_p = 10 %
<group>autopilot_control_panel.pp_engagement = Включение/выключение автопилота
   <param>on_distance_higher_altitude_lower = Расстояние > 500 м, Высота < 100 м
   <param>on_distance_higher = 1500 м
   <param>on_altitude_higher = 1500 м
   <param>on_v1_lower = Не используется
   <param>on_v2_lower = Не используется
   <param>on_mah_higher = 1700 мАч
   <param>on_time_higher = 3600 сек
   <param>on_rc_loss = True
   <param>off_distance_lower = Не используется
   <param>off_time_higher = 1800 сек
   <param>off_rc_pickup = True
<group>autopilot_control_panel.pp_assist = Стабилизация
   <param>assist_mode = Mode1
   <param>assist_percentage = 50 %
   <param>assist_maxroll = 45 град
   <param>assist_maxpitch = 30 град
   <param>pyro_correction_roll = 0 град
   <param>pyro_correction_pitch = 0 град
<group>autopilot_control_panel.pp_logging = Бортовой журнал
   <param>logging_interval = type3
   <param>flightnum = 0
   <param>recordnum = 0
   <param>recordaddress = 0
   <param>recordsize = 0 байт
   <param>logtime = Неизвестно
<group>autopilot_control_panel.pp_magnetic = Настройки компаса
   <param>magnetic_inclination = 0 град
<group>autopilot_control_panel.pp_lostppm = Определение потери RC сигнала
   <param>lostppm_channelnum = channel1
   <param>outofrangeppm_channelnum = channel1
   <param>range_expansion = 10 %
<group>autopilot_control_panel.pp_controlchannel = Настройка управляющего канала
   <param>action0 = type0
   <param>action1 = type1
   <param>action2 = type2
<group>autopilot_control_panel.pp_alarm = Предупреждения на экране телеметрии
   <param>on_altitude_lower = 100 м
   <param>on_altitude_higher = 500 м
   <param>on_distance_higher = 1000 м
   <param>on_v1_lower = 9.0 v
   <param>on_v2_lower = 9.0 v
   <param>on_mah_higher = 1000 мАч
   <param>on_time_higher = 1800 сек
<group>autopilot_control_panel.pp_telemetry_layout #1 = Раскладка параметров на экране - Экран 1
   <param #0> "Качество/наличие RC сигнала" = 32,32
   <param #1> "Время полета" = 57,32
   <param #2> "Строка состояния" = 11,32
   <param #3> "Скорость по GPS" = 0,41
   <param #4> "Шкала скорости по GPS" = 4,35
   <param #5> "Высота по GPS" = 28,41
   <param #6> "Шкала высоты по GPS" = 26,35
   <param #7> "Скорость по бародатчику" = 128,47
   <param #8> "Шкала скорости по бародатчику" = 6,3
   <param #9> "Высота по бародатчику" = 156,47
   <param #10> "Шкала высоты по бародатчику" = 24,3
   <param #11> "Курс по GPS" = 12,33
   <param #12> "Курс по компасу" = 54,1
   <param #13> "Угол на точку старта по GPS" = 12,48
   <param #14> "Угол на точку старта по компасу" = 54,16
   <param #15> "Искусственный горизонт" = 6,35
   <param #16> "Растояние от точки старта" = 109,51
   <param #17> "Количество спутников GPS" = 96,51
   <param #18> "Широта/долгота GPS" = 96,53
   <param #19> "Температура" = 96,56
   <param #20> "Ток" = 105,56
   <param #21> "Расход батареи (число)" = 113,56
   <param #22> "Расход батареи (индикатор)" = 6,0
   <param #23> "Напряжение 1" = 122,54
   <param #24> "Напряжение 2" = 91,55
   <param #25> "Напряжение 3" = 91,56
   <param #26> "Вариометр по GPS" = 31,35
   <param #27> "Вариометр по бародатчику" = 30,3
<group>autopilot_control_panel.pp_telemetry_layout #2 = Раскладка параметров на экране - Экран 2
   <param #0> "Качество/наличие RC сигнала" = 32,32
   <param #1> "Время полета" = 57,32
   <param #2> "Строка состояния" = 11,32
   <param #3> "Скорость по GPS" = 0,41
   <param #4> "Шкала скорости по GPS" = 4,35
   <param #5> "Высота по GPS" = 28,41
   <param #6> "Шкала высоты по GPS" = 26,35
   <param #7> "Скорость по бародатчику" = 128,47
   <param #8> "Шкала скорости по бародатчику" = 6,3
   <param #9> "Высота по бародатчику" = 156,47
   <param #10> "Шкала высоты по бародатчику" = 24,3
   <param #11> "Курс по GPS" = 12,33
   <param #12> "Курс по компасу" = 54,1
   <param #13> "Угол на точку старта по GPS" = 12,48
   <param #14> "Угол на точку старта по компасу" = 54,16
   <param #15> "Искусственный горизонт" = 6,35
   <param #16> "Растояние от точки старта" = 109,51
   <param #17> "Количество спутников GPS" = 96,51
   <param #18> "Широта/долгота GPS" = 96,53
   <param #19> "Температура" = 96,56
   <param #20> "Ток" = 105,56
   <param #21> "Расход батареи (число)" = 113,56
   <param #22> "Расход батареи (индикатор)" = 6,0
   <param #23> "Напряжение 1" = 122,54
   <param #24> "Напряжение 2" = 91,55
   <param #25> "Напряжение 3" = 91,56
   <param #26> "Вариометр по GPS" = 31,35
   <param #27> "Вариометр по бародатчику" = 30,3
<group>autopilot_control_panel.pp_telemetry_layout #3 = Раскладка параметров на экране - Экран 3
   <param #0> "Качество/наличие RC сигнала" = 32,32
   <param #1> "Время полета" = 57,32
   <param #2> "Строка состояния" = 11,32
   <param #3> "Скорость по GPS" = 0,41
   <param #4> "Шкала скорости по GPS" = 4,35
   <param #5> "Высота по GPS" = 28,41
   <param #6> "Шкала высоты по GPS" = 26,35
   <param #7> "Скорость по бародатчику" = 128,47
   <param #8> "Шкала скорости по бародатчику" = 6,3
   <param #9> "Высота по бародатчику" = 156,47
   <param #10> "Шкала высоты по бародатчику" = 24,3
   <param #11> "Курс по GPS" = 12,33
   <param #12> "Курс по компасу" = 54,1
   <param #13> "Угол на точку старта по GPS" = 12,48
   <param #14> "Угол на точку старта по компасу" = 54,16
   <param #15> "Искусственный горизонт" = 6,35
   <param #16> "Растояние от точки старта" = 109,51
   <param #17> "Количество спутников GPS" = 96,51
   <param #18> "Широта/долгота GPS" = 96,53
   <param #19> "Температура" = 96,56
   <param #20> "Ток" = 105,56
   <param #21> "Расход батареи (число)" = 113,56
   <param #22> "Расход батареи (индикатор)" = 6,0
   <param #23> "Напряжение 1" = 122,54
   <param #24> "Напряжение 2" = 91,55
   <param #25> "Напряжение 3" = 91,56
   <param #26> "Вариометр по GPS" = 31,35
   <param #27> "Вариометр по бародатчику" = 30,3
<group>autopilot_control_panel.pp_telemetry_layout #4 = Раскладка параметров на экране - Экран 4
   <param #0> "Качество/наличие RC сигнала" = 32,32
   <param #1> "Время полета" = 57,32
   <param #2> "Строка состояния" = 11,32
   <param #3> "Скорость по GPS" = 0,41
   <param #4> "Шкала скорости по GPS" = 4,35
   <param #5> "Высота по GPS" = 28,41
   <param #6> "Шкала высоты по GPS" = 26,35
   <param #7> "Скорость по бародатчику" = 128,47
   <param #8> "Шкала скорости по бародатчику" = 6,3
   <param #9> "Высота по бародатчику" = 156,47
   <param #10> "Шкала высоты по бародатчику" = 24,3
   <param #11> "Курс по GPS" = 12,33
   <param #12> "Курс по компасу" = 54,1
   <param #13> "Угол на точку старта по GPS" = 12,48
   <param #14> "Угол на точку старта по компасу" = 54,16
   <param #15> "Искусственный горизонт" = 6,35
   <param #16> "Растояние от точки старта" = 109,51
   <param #17> "Количество спутников GPS" = 96,51
   <param #18> "Широта/долгота GPS" = 96,53
   <param #19> "Температура" = 96,56
   <param #20> "Ток" = 105,56
   <param #21> "Расход батареи (число)" = 113,56
   <param #22> "Расход батареи (индикатор)" = 6,0
   <param #23> "Напряжение 1" = 122,54
   <param #24> "Напряжение 2" = 91,55
   <param #25> "Напряжение 3" = 91,56
   <param #26> "Вариометр по GPS" = 31,35
   <param #27> "Вариометр по бародатчику" = 30,3
<group>autopilot_control_panel.pp_versions = Версии микропрограмм
   <param>autopilot_version_string = Неизвестно
   <param>autopilot_date_string = Неизвестно
slides

Круто! Судя по времени регистрации поста у Тима со сном все в порядке.

Интересно, как продвигается работа с аппаратной частью ?

smalltim

Продвигается потихоньку.

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

Добавил интегральный компонент в управление тангажом с его настройкой в Панели.

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

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

slides
smalltim:

Продвигается потихоньку.
Плохо ! Лучше приобрести и ждать софта. имхо. тогда ажиотажа не будет при старте продаж !!!

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

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

Думаю над возможностью сохранения калибровок. Коллеги, это надо?
Напомню, калибровки - это калибровки компаса, RC передатчика, датчиков телеметрии. Они живут во внешней памяти и выживают при любых манипуляциях с пилотом, включая, например, полное стирание логов или перепрошивку пилота/телеметрии.
Сделай, лишним не будет…

😃

baychi
smalltim:

Думаю над возможностью сохранения калибровок. Коллеги, это надо?

Пригодится. Либо надо делать какую-то сигнализацию отсутствия калибровки, а то после очередной перепрошивки, лекго забыть перекалиброваться. 😉

smalltim

А я вот считаю, что аппаратно сделать автопилот на пирометрах может кто угодно. Будет вполне нормальный такой себе летающий автопилот. А вот всё остальное, что делает продукт действительно качественным - это правильный софт. И это, по сравнению с пайкой железки, поверь мне, не в 5 и не в 10 раз больше времени и мозгов требует…

baychi
slides:

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

Чтобы было больше шансов долететь домой и раньше вернуться в зону действия РУ или видео.
А еще помню, как мой бедный Изя на сбросе всего-то 200 м высоты до 110 км/ч разогнался. Еще бы метров 100 и без крыльев остался. 😃

smalltim

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

Это как это? У тебя при перепрошивке слетают калибровки?

>110 км/ч разогнался

Фигня! Мой до 130 разгонялся 😜

baychi
smalltim:

А вот всё остальное, что делает продукт действительно качественным - это правильный софт. И это, по сравнению с пайкой железки, поверь мне, не в 5 и не в 10 раз больше времени и мозгов требует…

Совершенно верно. Софт уже давно берет 90% трудозатрат. И создает огромную инерцию в развитии любой системы. 😉

smalltim:

У тебя при перепрошивке слетают калибровки?

Только при глобальной смене версии, с изменением структуры данных.

slides
smalltim:

А я вот считаю, что аппаратно сделать автопилот на пирометрах может кто угодно. Будет вполне нормальный такой себе летающий автопилот. А вот всё остальное, что делает продукт действительно качественным - это правильный софт. И это, по сравнению с пайкой железки, поверь мне, не в 5 и не в 10 раз больше времени и мозгов требует…

Вопрос в готовом продукте - ты прав на 100%, что по мне - купил и забыл проблему со встречами/доставками/подъездами, извини, но мне проблемно, т.к. выходные заняты, в будние на машине к тебе проблемно прорываться… Сейчас время пока есть, но какими темпами у нас наше предприятие превращается в мануфактуру 18-го века - страшно подумать. Наш директор по ходу забыл, что это не фирма, где сотрудникам можно жестко действовать на нервы и понятие ТЗ (трудовое законодательство) отсутствует. Извини за всплеск души…😃

smalltim

>И создает огромную инерцию в развитии любой системы.

Потому и была написана новая панель, объектно-ориентированная, с афигенно прописанными классами. Так что добавлять новые фичи - просто приятная работа. Сохранение-загрузку настроек в файл и пилот через USB я, например, сделал суммарно часов за 5.

>Только при глобальной смене версии, с изменением структуры данных.

Понял. Я сейчас немного изменил подход, всё новое ложится в конец, не смещая данные.

Cеpж

Нам нужен правильный, доведённый до относительного совершенства и удобства применения софт. Долго ждали - ещё немного подождём.
Но все-таки, Тим, как у тебя дела с “железом”? Процесс идёт?