Идея улучшения стаб. мода
Возникла идея добавить немного “ума” в алгоритм стабилизации (в стаб. мод. или левел мод. по другому). Сперва решил написать это в мультивии ветке, потому как эксперементировать собираюсь на нем, но решил создать отдельную тему, чтобы взвесить все за против, почерпнуть идеи и возможно узнать, вдруг подобное уже реализовано в других проектах.
И так стаб. мод. хорош тем, что в идеале при отпускании стиков, коптрер пытается выравняться по горизонту, НО при этом когда горизонт достигнут, он пролжает двигаться в прежнем направлении по инерции… В случае с ГПС проблема разрешается понятно и легко (ну или легче) 😃 А если на борту только гира и аксель?!
В общем идея такова: добавить логику противодействия при отпускании ролл/питч стиков, типа отпустили стик, а коптер привстает на дыбы для более быстрой оставновки. Ясное дело что в состояние покоя его таким образом не вывести, но если это поможет при отпускании стиков (на скорости) остановить его с точностью в 60-80% то былоб очень даже ничаво. Т.к. при движении выше 20-30 км/ч и если зарулиться потеряв управление, мне лично не помогало просто кинуть стики… Ну и как правило крЭшшш…
Как можно реализовать:
- Сохраняем историю манипуляций стиками последние 2-3 секунды с шагом примерно 100мс (учитывая среднюю скорость реакции человека в 300мс). Почему 2-3 секунды? Это примерное время чтобы коптер достиг желаемой скорости при отклонении стика, т.е. когда его ускорение уже стремится к нулю а скорость постоянна…
- Проверяем стики на ноль (т.е. когда они в центре). Если стик в нуле, ищем его максимальное зафиксированное отклонение в истории.
- Находим амплитуду отклонения стика и примерное время воздействия с этой амплитудой.
- Формируем/симулируем обратное отклонение стика в соответствии с вычисленной амплитудой, временем воздействия на стик и коэф. (подбираем эмпирически). Возможно сюда даже придеццо прикрутить ПД-регулятор. Т.е. не только обратное пропорциональное воздествие, но и дифф. для увеличения воздействия в начале переходного процесса.
Нюансы:
- Компенсация не применяется на мелкие и быстрые отклонения. Подразумевается что это корректировки пилота не требующие обратного воздействия.
- При отклонении стиков от нуля, немедленный сброс компенсации. К примеру, оператор отклонил по РОЛЛ на 30гр., а потом в обратную сторону на -20гр.
Очевидные минусы:
- в умерернный или сильный ветер это будет только мешать, т.к. будет давать компенсацию по направлению ветра. Т.е. к примеру пилот держит аппарат под углом для корректировки на ветер. Затем отпускает стик и обратная компенсация как пружина толкает его по ветру. Потому желателен штиль, либо лишь слабый ветерок. Я в принципе только так и летаю, иначе сломанные винты и гнутые лучи не приносят удовольствия 😃.
Что думаете?!
Может, надо раздельно суммировать отклонения*время по осям за последние * секунд?
Roll: -30*1сек, +20*1сек, -20*0.5сек = -20
Pitch: 0, 0, +10*3сек = +30
Значит, противодействием будет плавнонарастающее и затухающее отклонение Roll --20, Pitch -+30
- нормализация. Чтобы не зарулился под 45 градусов.
Саш, я б не включал у себя такую функцию,
я бы бросил все силы на чтонибудь типа усовершенствования режима с гпс или с каким то сенсором оптическим, вместо сонара, неудели нет лазерных дальномеров под ардуину? 😃
Саш, я б не включал у себя такую функцию,
я бы бросил все силы на чтонибудь типа усовершенствования режима с гпс или с каким то сенсором оптическим, вместо сонара, неудели нет лазерных дальномеров под ардуину? 😃
Кстати на счет лазерных дальномеров тоже мысль посещала. Но гуглеж выдает какие-то странные ценники. Дешевле, наверное, разобрать китайский дальномер без отражателя будет.
Вот вот, расставить их правильно и держать позицию по ним, даже хотя бы с помощью белого круга на земле, но чтоб он оттуда даже на полметра не вылезал.
И еще момент, почему бы на коптере не разметить пару гир на концах перпендикулярных лучей, чтобы помогали основной гире по центру понимать, колбасит коптер или нет? или так не угловые, а линейные скорости?
Для этого на концах лучей аксели надо ставить.
Ну аксели, они сейчас стоят копейки же, пару акселей то можно поставить.
Кстати на счет лазерных дальномеров тоже мысль посещала. Но гуглеж выдает какие-то странные ценники. Дешевле, наверное, разобрать китайский дальномер без отражателя будет.
Лазер - это сильно! От дальномера китайского наврядли подойдет.Лежит такой. В нем единственный плюс - безопасный лазер. А вот вариант подобие мышки лазерной…и код обработки уже не раз прописан … Плюс хорошо зарекомендовалось в Флайменторе и в Хеликомандере (правда там по картинке, стаб. изображения). Но принцип похож. Пусть для начало не высоко, потом и оптику подтянуть можно. Еще можно использовать стаб изображения через оптику фотика , как то так это представляется… В нем ведь это все есть. И по уровню выше будет чем у Хелика. И хелик бы высако держал , но оптика не позволяет
Нет, вот именно надо чтобы высоко и стабильно 😃 Знаем мы эти мульки с мышками, нужен чтобы на 50метрах висел точно 😃
Знаем мы эти мульки с мышками, нужен чтобы на 50метрах висел точно
Тогда брать оптику и матрицу от фотика, как основу. Может и правда кто сделает. Сложно это конечно
А надо ли хорошую оптику и матрицу, если по лучам развесить лазеры на расстояние уже около 30см, требование к качеству оптики как бы снижается, нет?
А надо ли хорошую оптику и матрицу, если по лучам развесить лазеры на расстояние уже около 30см, требование к качеству оптики как бы снижается, нет?
Тут ничего не могу сказать… здесь у меня темное пятнышко. Хотя каКчество оптики никто не отменял. И добавлю, из теории наведения лазерных систем …по интенсивности отраженного луча. С лазером именно это используется в силу физических свойств. И совсем нет необходимости вешать несколько лазеров, Нужно будет еще и импульсное кодироване вводить каждому источнику. Все только усложнится при этом
Может, надо раздельно суммировать отклонения*время по осям за последние * секунд?
Roll: -30*1сек, +20*1сек, -20*0.5сек = -20
Pitch: 0, 0, +10*3сек = +30
Значит, противодействием будет плавнонарастающее и затухающее отклонение Roll --20, Pitch -+30
- нормализация. Чтобы не зарулился под 45 градусов.
"
stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4;
stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; //вот это оно и есть
stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4;
stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; //вот это оно и есть
"
EE_Parameter.Stick_D - а это переменная которую нужно подбирать!
EE_Parameter.Stick_D
На “крутилку” пульта установить, в полете с пульта “подкручивать”.
Может, надо раздельно суммировать отклонения*время по осям за последние * секунд?
Roll: -30*1сек, +20*1сек, -20*0.5сек = -20
Pitch: 0, 0, +10*3сек = +30
тут надо хорошо подумать + проверять на практике… пример: держим ролл на +30 и через секунду коптер набрал макс. скорость. Стик не отпускаем… скорость таже… прошло 2 сек… И если все просуммируем, то результат для формирования противодействия по Ролл будет не верным (в 2 раза болше). Т.е. суммировать по идее надо только “первую” секунду, пока идет набор скорости. Как вариант фиксировать например можно не изменяемые отклонения стика в течении делта тайм (0.5 сек к примеру)…
Значит, противодействием будет плавнонарастающее и затухающее отклонение Roll --20, Pitch -+30
не обязателно плавное противодействие… изменять/корректировать же будем отклониния стиков… т.е. потом это все пройдет через ПИД регулятор… у меня такие настройки - как резко не дергай стики, наклоны отрабатывает плавно (высокий “Д” параметр…в мултибии он не классик и задает “плавность”)
- нормализация. Чтобы не зарулился под 45 градусов.
тут поясните если можно
"
stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4;
stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; //вот это оно и есть
stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4;
stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; //вот это оно и есть
"
EE_Parameter.Stick_D - а это переменная которую нужно подбирать!
я так понял это из микрокоптера?
forum.mikrokopter.de/topic-20272.html
дома поразбираюсь… сейчас на работе…
- нормализация. Чтобы не зарулился под 45 градусов.
тут поясните если можно
Александр, я про ограничения управляющего воздействия. Чтобы не “насуммировало” 90 градусов.
Даже хороший алгоритм я бы сверху ограничил в рамки.
Александр, я про ограничения управляющего воздействия. Чтобы не “насуммировало” 90 градусов. Даже хороший алгоритм я бы сверху ограничил в рамки.
проблемы не будет т.к. управляющее воздействие будем вносить в отклонения стиков, а ограничение на макс. угол отклонения уже есть в ПИД регуле
// 50 degrees max inclination
errorAngle = constrain(2*rcCommand[axis],-500,+500) - angle[axis] + accTrim[axis]; //16 bits is ok here