Smalltim OSD and autopilot (часть 1)
Тим, показания лучше делать аналоговыми (палочки), визуально более информативно…
У меня нет и не было никогда приемников с выходом RSSI, так что вопрос: оно так сработает?
В принципе - да, но есть несколько тонкостей.
- При выключенном передатчике RSSI показывает уровень шума в диапазоне.
У меня дома (RSSI с R617FS, к примеру) это значение колеблется от 40 до 60 мВ. А на поле бывает и 20-30 мВ. Максимум (передатчик рядом с приемником) - 0.46 В. - Нижнее значение RSSI при котором наступает FailSafe может в воздухе быть меньше, чем значение при отключенном передатчике на земле.
- Показания RSSI (по крайней мере с FUTABA) это логарифмическая величина. По моим оценкам 2-х кратное уменьшение напряжения соответсвует 10-ти кратному падению уровня.
И, наконец, последнее. RSSI намного менее показателен, чем количество потерянных пакетов. 😃 Если Тимофей под словом RSSI понимал вход получающий усредненные значения потерь пакетов - то все прекрасно будет работать по его логике.
А можно ли реализовать такое: В момент инициализации, телеметрия запоминал точку старта и выводила прямую (Виртуальная ВПП), а после старта могла бы просчитать необходимый угол снижения, направление глиссаду так сказать на эту прямую. тем самым помогая пилоту приземлится.
Как я себе представляю:
Стою я на прямой дороге, включаю борт, направляю нос модели по пути дороги, появляется прямая наложенная поверх дороги. Взлетаю, наслаждаюсь полетом. Включаю посадочный режим, появлятся направление на прямую и рекомендация снижаться или набрать высоту или сделать круг. То-есть не просто вектор на точку старта а глиссаду.
Я думаю это полезна функция которая сразу выбьет вашу систему в лидеры не смотря на то-что для меня Вы уже лидер.
Вот только давайте не будем засорять проблему пакетами, ЛОГ-декодерами и т.д. Мы с Тимом обсуждали тему РССИ. Для эстетов можно ввести переключатель чувствительности шкалы сигнала - логарифм с накоплением или линейный с накоплением (типа прикола с выбором ГПС или бародатчика). Однозначно надо делать сглаживание показателя РССИ и я думаю не подбирать кондей в параллель, а математическим способом, благо ресурсов Меги должно хватить. Отображать надо 10 палками, причем после палок обязательно процент писать. В автопилотном куске можно сделать условие включения при определенном уровне РССИ и вариант отображения. ИМХО. Неплохо бы чтобы на определенном уровне РССИ (и ниже) значок начинал мигать.
Кстати, как отписался Томас, его система имеет выход с линейной характеристикой…
Неплохо бы чтобы на определенном уровне РССИ (и ниже) значок начинал мигать. Кстати, как отписался Томас, его система имеет выход с линейной характеристикой…
Дима, а тебе RSSI (уровень принимаемого сигнала) зачем вообще нужен? Сформулируй, пожалуйста, как ты собираешся этот сигнал в полете интерпретировать?
И про Томаса: он именно RSSI выдает, или все-же качество сигнала (например, по критерию потерь пакетов)? И в каком виде выдает (какой разъем, диапазон напряжения, форма, степень усреднения и т.п.)?
Отвечаю:
У меня нет автопилота и не факт, что я буду его ставить на все 4 самолета. Поэтому возникло желание хоть как-то контролировать состояние радиолинка. Согласен, что не лучший вариант.
Как оценивает РССИ у Томаса не знаю, но сейчас ему задам вопрос. Выглядит в виде 4-го штырька серворазъема последнего канала от 0,5 вольта (максимум) до 0,29 вольта (минимум)
У меня нет автопилота и не факт, что я буду его ставить на все 4 самолета. Поэтому возникло желание хоть как-то контролировать состояние радиолинка. Согласен, что не лучший вариант.
Вот именно! По RSSI можно узнать много нового. Например, насколько далеко приемник находится от передатчика. Или особенности прохождения сигнала в данных атмосферных условиях. Единственно, чего через RSSI нельзя узнать наверняка, это как скоро приемник намерен потерять связь! Потому и спрашиваю, может Томас все-же не RSSI выдает а более важную информацию?
Увы, нет ! Хотя пишет, что есть нога на чипе, с которой можно получить сигнал по потерянным пакетам…
А можно ли реализовать такое: В момент инициализации, телеметрия запоминал точку старта и выводила прямую (Виртуальная ВПП), а после старта могла бы просчитать необходимый угол снижения, направление глиссаду так сказать на эту прямую. тем самым помогая пилоту приземлится.
Как я себе представляю:
Стою я на прямой дороге, включаю борт, направляю нос модели по пути дороги, появляется прямая наложенная поверх дороги. Взлетаю, наслаждаюсь полетом. Включаю посадочный режим, появлятся направление на прямую и рекомендация снижаться или набрать высоту или сделать круг. То-есть не просто вектор на точку старта а глиссаду.
Я думаю это полезна функция которая сразу выбьет вашу систему в лидеры не смотря на то-что для меня Вы уже лидер.
Тим, а в принципе глиссада это есть своего рода гипотенуза? теоретически возможно ведь ведение автопилота по ней на посадку? как вариант… было бы очень интересно… тут конечно упираешься в точность GPS координат и бародатчиков…
Да, гипотенуза. Но садиться автоматом, основывась на баро или ГПС я б не рискнул.
Нарисовать глиссаду или что-нибудь, что помогает садиться, на экране телеметрии - можно, почему бы и нет.
Про автопилот.
Переписал классы работы с настройками.
Ужесточил до безобразия стратегию работы с настройками, теперь сделать что-то неосознанно или по ошибке очень трудно.
Сделал слив всего комплекта настроек из автопилота в Контрольную Панель и заливку из Панели в автопилот.
Сделал сохранение всего комплекта настроек из Панели в файлы настроек *.apsettings и чтение из файлов в Панель.
Настройки делятся на группы, соответствующие страницам Панели. Сохранить и прочитать можно только группу целиком.
Контрольная Панель является промежуточным звеном между файлом и автопилотом. Как и раньше, загрузив в Панель файл настроек или самостоятельно изменив настройки в Панели, пользователь должен залить настройки из Панели в автопилот.
Калибровки, внимание, не сохраняются. Это сделано для того, чтобы чужие калибровки каналов RC передатчика, датчиков телеметрии, компаса и т.д., не натворили делов. Надеюсь, не надо объяснять, что будет вытворять автопилот, откалиброванный, например, с инвертированным газом, если подсунуть ему передатчик с неинвертированным газом.
При работе с настройками в силе следующие правила:
-
Если какие-то настройки не слиты в Панель из автопилота, или не сброшены в значения по умолчанию или не залиты раньше из файла, то они не сохраняются в файл.
-
Если какие-то настройки не слиты в Панель из автопилота, не сброшены в значения по умолчанию или не залиты из файла, то они не заливаются в автопилот.
-
Если каких-то настроек в файле нет или не распознаются или файл поврежден, то они не читаются в Панель.
Таким макаром можно сохранить и передать товарищу или выложить в Сеть хоть весь комплект настроек, хоть только одну страничку настроек. Аналогично, взяв файл настроек у товарища или из Сети, можно прочитать файл и все настройки, что есть , попадут в Панель. Потом можно все их залить в автопилот или залить только то, что хочется.
Формат файла настроек - человекопонятный, поддерживающий любые языки, и даже позволяющий вручную редактировать настройки, хотя это и не рекомендуется - если где-нибудь накосячить, соотсветствующая настройка при чтении файла не распознается и не применится.
Файл с настройками по умолчанию выглядит примерно так:
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 = Неизвестно
Круто! Судя по времени регистрации поста у Тима со сном все в порядке.
Интересно, как продвигается работа с аппаратной частью ?
Продвигается потихоньку.
Добавил в контроль высоты второй вариант в добавление к существующему. Теперь пилот может при включении либо сразу стремиться занимать целевую высоту (как раньше), либо линейно набирать/снижать высоту при полете домой или от точки к точке.
Добавил интегральный компонент в управление тангажом с его настройкой в Панели.
Реорганизовал немножко настройки в Панели, чтоб не было путаницы между настройками навигации и настройками контроля моделью.
Думаю над возможностью сохранения калибровок. Коллеги, это надо?
Напомню, калибровки - это калибровки компаса, RC передатчика, датчиков телеметрии. Они живут во внешней памяти и выживают при любых манипуляциях с пилотом, включая, например, полное стирание логов или перепрошивку пилота/телеметрии.
Продвигается потихоньку.
Плохо ! Лучше приобрести и ждать софта. имхо. тогда ажиотажа не будет при старте продаж !!!Добавил в контроль высоты второй вариант в добавление к существующему. Теперь пилот может при включении либо сразу стремиться занимать целевую высоту (как раньше), либо линейно набирать/снижать высоту при полете домой или от точки к точке.
Для чего ? Экономия акка или облет деревьев ?
Добавил интегральный компонент в управление тангажом с его настройкой в Панели.Реорганизовал немножко настройки в Панели, чтоб не было путаницы между настройками навигации и настройками контроля моделью.
Думаю над возможностью сохранения калибровок. Коллеги, это надо?
Напомню, калибровки - это калибровки компаса, RC передатчика, датчиков телеметрии. Они живут во внешней памяти и выживают при любых манипуляциях с пилотом, включая, например, полное стирание логов или перепрошивку пилота/телеметрии.
Сделай, лишним не будет…
😃
Думаю над возможностью сохранения калибровок. Коллеги, это надо?
Пригодится. Либо надо делать какую-то сигнализацию отсутствия калибровки, а то после очередной перепрошивки, лекго забыть перекалиброваться. 😉
А я вот считаю, что аппаратно сделать автопилот на пирометрах может кто угодно. Будет вполне нормальный такой себе летающий автопилот. А вот всё остальное, что делает продукт действительно качественным - это правильный софт. И это, по сравнению с пайкой железки, поверь мне, не в 5 и не в 10 раз больше времени и мозгов требует…
Теперь пилот может при включении либо сразу стремиться занимать целевую высоту (как раньше), либо линейно набирать/снижать высоту при полете домой или от точки к точке. Для чего ? Экономия акка или облет деревьев ?
Чтобы было больше шансов долететь домой и раньше вернуться в зону действия РУ или видео.
А еще помню, как мой бедный Изя на сбросе всего-то 200 м высоты до 110 км/ч разогнался. Еще бы метров 100 и без крыльев остался. 😃
>Пригодится. Либо надо делать какую-то сигнализацию отсутствия калибровки, а то после очередной перепрошивки, лекго забыть перекалиброваться.
Это как это? У тебя при перепрошивке слетают калибровки?
>110 км/ч разогнался
Фигня! Мой до 130 разгонялся 😜
А вот всё остальное, что делает продукт действительно качественным - это правильный софт. И это, по сравнению с пайкой железки, поверь мне, не в 5 и не в 10 раз больше времени и мозгов требует…
Совершенно верно. Софт уже давно берет 90% трудозатрат. И создает огромную инерцию в развитии любой системы. 😉
У тебя при перепрошивке слетают калибровки?
Только при глобальной смене версии, с изменением структуры данных.
А я вот считаю, что аппаратно сделать автопилот на пирометрах может кто угодно. Будет вполне нормальный такой себе летающий автопилот. А вот всё остальное, что делает продукт действительно качественным - это правильный софт. И это, по сравнению с пайкой железки, поверь мне, не в 5 и не в 10 раз больше времени и мозгов требует…
Вопрос в готовом продукте - ты прав на 100%, что по мне - купил и забыл проблему со встречами/доставками/подъездами, извини, но мне проблемно, т.к. выходные заняты, в будние на машине к тебе проблемно прорываться… Сейчас время пока есть, но какими темпами у нас наше предприятие превращается в мануфактуру 18-го века - страшно подумать. Наш директор по ходу забыл, что это не фирма, где сотрудникам можно жестко действовать на нервы и понятие ТЗ (трудовое законодательство) отсутствует. Извини за всплеск души…😃
>И создает огромную инерцию в развитии любой системы.
Потому и была написана новая панель, объектно-ориентированная, с афигенно прописанными классами. Так что добавлять новые фичи - просто приятная работа. Сохранение-загрузку настроек в файл и пилот через USB я, например, сделал суммарно часов за 5.
>Только при глобальной смене версии, с изменением структуры данных.
Понял. Я сейчас немного изменил подход, всё новое ложится в конец, не смещая данные.
Нам нужен правильный, доведённый до относительного совершенства и удобства применения софт. Долго ждали - ещё немного подождём.
Но все-таки, Тим, как у тебя дела с “железом”? Процесс идёт?