Стабилизация квадрокоптера (PID)
А ты мультивийный код не глядел? Мне кажется даже в каких то видео суть акро это с пульта давать скорость вращения. Если стик 0 то скорость вращения 0 и коптер летит хоть вверх ногами, но не вращаясь. Акро проще англа по коду и не использует акселерометр
Мне кажется усложняешь. И не пойму зачем вообще интегрировать в акро
Хорошо сколько PID у нас в прошивке 1 или 2. Один для акро другой для стаба и для каждого свои D P И I.
Это не так. Суть PID пусть пока без всяких внешних данных это стабилизация осей. Он превращает коптер в гираскоп, который трудно наклонить по осям.
Если мы даем ему задание в виде нового угла , он его выполняет и держит этот угол . Ему пофиг каким образом мы передали ему это задание. Если угол не меняется он его держит , если меняется то вращаясь следит за ним.
Почему не использовать аксель если он есть, он же используется в стабе. Интегрировать надо , чтобы было постоянное вращение . Так как у нас будет постоянный прирост угла .
Если дать со стика 20гр.с и коптер начнет вращаться со скоростью 20гр.с то ошибка будет 0 и он будет бесконечно вращаться с этой скоростью пока не отпустишь стик. Кароч нам надо третьего чувака для дискуссии😁
Если дать со стика 20гр.с и коптер начнет вращаться со скоростью 20гр.с то ошибка будет 0 и он будет бесконечно вращаться с этой скоростью пока не отпустишь стик. Кароч нам надо третьего чувака для дискуссии😁
Всё правильно описал. Но ошибка не всегда будет 0.
Инт_угла=Инт_угла + Угол_пульта*0.01
Ошибка=Интеграл_гир - Инт_угла
С пульта дали данные , не важно как мы их называем, углом или скоростью угла. Эти данные вызывают ошибку для PID. Он воздействую на моторы вызывает вращение .
Угол вращения определяем интегрируя гиры. И пока Интеграл_гир не уберёт ошибку будет вращение на приращение угла.
Да блин всё просто.
Инт_угла=0 + 20*0.01= 0.2 ошибка 0.2 град ,
PID поворач. ось на 0.2 гр Интеграл_гир=0.2 гр ошибка=0
Инт_угла=0.2 + 20*0.01= 0.4 ошибка 0.2 град ,
PID поворач. ось на 0.2 гр Интеграл_гир=0.4 гр ошибка=0
Инт_угла=0.4 + 20*0.01= 0.6 ошибка 0.2 град
PID поворач. ось на 0.2 гр Интеграл_гир=0.6 гр ошибка=0
Инт_угла=Инт_угла + 20*0.01 этот процесс происходит у меня 330 раз в сек. и за 1 сек Инт_угла =66 град , полный оборот будет за 5 сек.
Чтобы оборот был за 1 сек. нужна скорость 360 гр/сек. Надо либо увеличить коэффициент до 0.0537 либо дать с пульта число 109
Меняя коэффициент , меняем скорость вращения при одинаковом наклоне стика пульта.
Но существует конечная скорость вращения которая упирается в настройки DIP. Если не использовать контролируемую скорость мы не затормозим в нужный момент.
Есть разница между приращением 0.2 гр за 3 мсек или 1гр за 3мсек. Существует инерция рамы , инерция ВМГ, инерция обратной связи по гирам.
У себя на стенде сделал измерение динамики тяги в импульсе.
Мотор 2204 винт 5.1x4.6x3 ,выход ВМГ на заданную тягу происходит примерно 0.15 сек .
Проверил возврат в стаб, работает супер, даже вверх ногами чёткий возврат.
Сначала ступил , корректировал акселем по одному измерению , забыл что шума там дофига. Стал корректировать по 100 измерениям и все стало идеально.
Я не говорю что у этот вариант работать не будет. Но и не пойму чем плох вариант с угловыми скоростями. Есть D для торможения при отпускании, если не брать переход из акро в стаб, т.к. не думал про него. Я написал прогу только для англа, т.к. сразу в акро было бы не просто
У нас пид не работает впринципе с угловыми скоростями .
У него нет задачи удерживать стабильную скорость вращения. У него задание
не допускать вращение , держать заданный угол.
Вот к примеру в стабе стик двигаем вперёд. У нас угол будет менятся о 0 до 45гр к примеру. Мы можем стик передвинуть медленно , ну скажем за 5 сек.
Если пульт дает 50 пакетов в сек. то в каждом пакете будут идти углы
с приращением в 45/5/50=0.18 град. И за 5 сек коптер наклонится на 45 гр. Система стабилизации будет увеличивать угол наклона шагами по 0.18 гр. до 45 . А если представить что стик у нас круговой и вращается бесконечно , тогда и коптер будет вращатся бесконечно. Но такого стика нет и это как бы
вращение реализовано через интеграл. И нет никакой разницы между стабом
и акро в способе изменения угла наклона. Это просто приращение угла.
Но в стабе это ограничено углом наклона, жёстко привязанным к положению стика. Начальное вращение что в акро что в стабе это одинаковые процессы. Единственное отличие в стабе это коррекция гир по акселю .
Переход в акро , это всего 4-и строчки кода
## код
if(kom3==0) {
## Код только для стаба
Инт_угла_x=Инт_угла_x *0.98 + Угол_пульта_x*0.02;
Инт_угла_y=Инт_угла_y *0.98 + Угол_пульта_y*0.02;
}
if(kom3==1) // переход в акро режим
{
Инт_угла_x=Инт_угла_x + Угол_пульта_x*коф_скор_вращения;
Инт_угла_y=Инт_угла_y + Угол_пульта_y*коф_скор_вращения;
}
Ошибка_x=Интеграл_гир_x - Инт_угла_x
Ошибка_y=Интеграл_гир_y - Инт_угла_y
Вроде одинаково , но в этой формуле мы просто сглаживаем данные с пульта
Инт_угла_x=Инт_угла_x *0.95 + Угол_пульта_x*0.05;
Если резко дать угол или бросить стик , то на ПИД не поступит слишком большая ошибка .
Это работает и при возврате из акро в стаб.
К примеру повернули его на 180 гр. и переключились.
На пид не пошла ошибка в 180 гр. , а стала пуступать дозированно
У нас пид не работает впринципе с угловыми скоростями .
Вот я говорю нет 3 мнения. Мне кажется пид работает с чем угодно меняющемся со временем и что надо стабилизировать
Заметил такой эффект. У меня есть автогаз по углу наклона.
формула ( 1/(cos (угол_пульта ) - 1 ) * кофф. Как только даю наклон
автоматом добавляется газ , коэффициент меняем с крутилки на пульте. Можно добиться идеально ровного полёта при подаче угла наклона. Но вот обратно если бросить стик , угол равен 0 , добавочный газ тоже ноль .Квад продолжает
полёт по инерции и его закидывает вверх по высоте . Это может быть эффект крыла у пропов или это остаточная тяга моторов , что скажете.
Квад продолжает
полёт по инерции и его закидывает вверх по высоте . Это может быть эффект крыла у пропов или это остаточная тяга моторов , что скажете.
Может это
ooobskspetsavia.ru/…/rabota-nesushhix-vintov-pri-k…
Мне кажется либо писать сложную фигню на знаке прироста, т.е. при уменьшении угла газ должен сбрасываться даже ниже чем есть, потом поднимать до нормы. Либо регули с активным торможением. Коп же опускается сначала медленно даже на нулевом газе
Привет всем . Активное торможение на регах есть. С пульта приходит команда на уменьшение угла . Газ успевает сбросить за 0.1 сек. и за это время PID не
вернёт угол так быстро. Значит всё дело в набегающем потоке.
Достаточно всего небольшого импульса тяги чтобы его понесло вверх . Можно дописать интеграл в минус газа от величины прироста по формуле .
А как это работает в прошивках у большинста ПК. Есть ли обратная связь через ускорение акселерометра. Я как то делал и когда его сверху резко давил он сопротивлялся и если снизу то уменьшал обороты. Стоял практически на месте .Но при движении с наклонами будет наверно сложно это реализовать.
Коп же опускается сначала медленно даже на нулевом газе
Это чтото новое, у меня газ мгновенно уменьшает обороты и при 0 полный стоп.
А у меня тормоза нет)кстати а если отслеживать вертикальную сост. ускорения. Как раз ее интеграл,т.е скорость подъема должна быть 0 при неизменном газу, хотя аксел обычно фильтруют так что он очень медленный
хотя аксел обычно фильтруют так что он очень медленный
Я делал так : усреднял аксель по Z в интервале 1-2 сек , находил величину вектора гравитации. И параллельно вычислял среднее за меньшее время, чтобы уловить ускорения. Разница между ними шла на приращение тяги всех двигателей. Он чётко реагировал на толчки сверху или снизу. Но только на резкие ускорения.
По ходу нет быстрых, точных и высотных датчиков по котрым можно это делать
По ходу нет быстрых, точных и высотных датчиков по котрым можно это делать
У меня барометр ms5611 , там нет заявленной точности ±10 см. Шумит ±40 см и может прыгнуть до 1 м. Долго не мог заставить держать высоту. И стал просто периодически обнулять P PID высоты и стало лучше. Понял что нужно импульсное управление высотой. Большая инерция , и мало выборок. Если их ещё и фильтровать по совсем плохо. Его надо как бы пинать немного вниз вверх , а I высоты накапливать подольше . Показания с него беру 2 раза в сек. Там в коде стояла задержка на 10мсек после запроса на приём данных. И я её убрал и разбил код на 3 отдельные функции. Каждая выполняется через несколько циклов общего кода и получается задежка автоматически а не паузой общего кода.
Пора уж samerfly делать)))
Пора уж samerfly делать)))
Блин ну очень напрягает пока в полётах по камере это сам угол наклона камеры.
Приземлятся очень паршиво , не видно земли когда мы в горизонте.
Была идея сделать квад с сервами на наклон осей ВМГ , чтобы сам корпус был
всегда в горизонте. Решили бы сразу кучу проблем. Но руки не дошли.
А сам софт для данной рамы фигня. Трудно сделать такую конструкцию жёсткой
и лёгкой. Я тут сменил на камере FOXER линзу на 3.8мм с углом 75 град.
И стало намного лучше. Он уделал Игла 2. Теперь ищу линзу на 6мм чтоб стало 50-55 гр поле зрения. Как народ летает с 120 гр не понимаю , у меня всё размыто и мелко , особенно в движении.
Размер кода для ПК 26.3 кБайт , а в пульте 17 кбайт.
Сделать серву для камеры на крутилку. Я код ваще утрамбовывал в 8к, а пульт то ваще пару кб)) у меня 90гр. Иногда хочется шире видеть , но начнет искажаться все. Вопросик не в тему, в очках летаешь? В каких?
Сделать серву для камеры на крутилку. Я код ваще утрамбовывал в 8к, а пульт то ваще пару кб)) у меня 90гр. Иногда хочется шире видеть , но начнет искажаться все. Вопросик не в тему, в очках летаешь? В каких?
У меня шлем 7" с исправленной прошивкой для коррекции формата аналогово входа. Вместо 7" изображение стало примерно 5.5" ( по центру экрана ) и влезло больше информации от камеры. Так комфортнее , жалею что не купил 5" . Получается использую не все 1280х800 а меньше.
Сегодня протестировал удержние высоты. Работает не плохо.
Держит в пределах 50 см чисто по бародатчику . Также настроил спасение при потере пульта. При потере сигнала переводит газ в режим висения, опускается до высоты взлёта + 1 метр и отрубает двигатели. Пришлось много раз настраивать PID по высоте. В итоге всё отлично. С любой высоты спускается до 1 метра и вырубается. А летать начал просто шикарно. Автомат газа работет отлично. Если его настроить до 30 гр. то при 35-40 мы начнём снижатся . Сегодня как бы пересел с механики на автомат. В стабе управляется всего одним стиком по YAW. Разворот на месте на любой скорости. При небольшой скорости и не большому YAW отлично делает круги , с направлением морды в центр. Всё дело в правильном PID по YAW .
До этого был недо ID. Вроде работал , но не то. Сейчас если его руками вращать то он возвращается в первоначальный азимут. Не важно на сколько его повернуть 30 или 130 градусов. И пришлось применить для управления по YAW интеграл . Фото ПК , вес 5 гр, на ардуино нано сверху припаян 10DOF GY-86 . Гира 6050 выпаиваится отлично. Уже поменял, сдохла ось Z акселя при падении . Менял такие микрухи первый раз и удачно, всё заработало . В общем такой ПК ничем не уступает другим на мощных чипах. Да нет ОСД ,но как то не надо . Напряжение передаёт , пульт пищит при определенном напряжении , при малом RSSI включается вибро в пульте. Сейчас более 20 параметров меняю в кваде с пульта. Данные с GPS забираю по I2С, передаю на пульт. Всё выводится на экран. Следующий этап полёты по GPS .
Ну круууто, чо тут еще скажешь!)