Стабилизация квадрокоптера (PID)

Samer

Привет всем . Активное торможение на регах есть. С пульта приходит команда на уменьшение угла . Газ успевает сбросить за 0.1 сек. и за это время PID не
вернёт угол так быстро. Значит всё дело в набегающем потоке.
Достаточно всего небольшого импульса тяги чтобы его понесло вверх . Можно дописать интеграл в минус газа от величины прироста по формуле .
А как это работает в прошивках у большинста ПК. Есть ли обратная связь через ускорение акселерометра. Я как то делал и когда его сверху резко давил он сопротивлялся и если снизу то уменьшал обороты. Стоял практически на месте .Но при движении с наклонами будет наверно сложно это реализовать.

Donkrat:

Коп же опускается сначала медленно даже на нулевом газе

Это чтото новое, у меня газ мгновенно уменьшает обороты и при 0 полный стоп.

Donkrat

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

Samer
Donkrat:

хотя аксел обычно фильтруют так что он очень медленный

Я делал так : усреднял аксель по Z в интервале 1-2 сек , находил величину вектора гравитации. И параллельно вычислял среднее за меньшее время, чтобы уловить ускорения. Разница между ними шла на приращение тяги всех двигателей. Он чётко реагировал на толчки сверху или снизу. Но только на резкие ускорения.

Donkrat

По ходу нет быстрых, точных и высотных датчиков по котрым можно это делать

Samer
Donkrat:

По ходу нет быстрых, точных и высотных датчиков по котрым можно это делать

У меня барометр ms5611 , там нет заявленной точности ±10 см. Шумит ±40 см и может прыгнуть до 1 м. Долго не мог заставить держать высоту. И стал просто периодически обнулять P PID высоты и стало лучше. Понял что нужно импульсное управление высотой. Большая инерция , и мало выборок. Если их ещё и фильтровать по совсем плохо. Его надо как бы пинать немного вниз вверх , а I высоты накапливать подольше . Показания с него беру 2 раза в сек. Там в коде стояла задержка на 10мсек после запроса на приём данных. И я её убрал и разбил код на 3 отдельные функции. Каждая выполняется через несколько циклов общего кода и получается задежка автоматически а не паузой общего кода.

Samer
Donkrat:

Пора уж samerfly делать)))

Блин ну очень напрягает пока в полётах по камере это сам угол наклона камеры.
Приземлятся очень паршиво , не видно земли когда мы в горизонте.
Была идея сделать квад с сервами на наклон осей ВМГ , чтобы сам корпус был
всегда в горизонте. Решили бы сразу кучу проблем. Но руки не дошли.
А сам софт для данной рамы фигня. Трудно сделать такую конструкцию жёсткой
и лёгкой. Я тут сменил на камере FOXER линзу на 3.8мм с углом 75 град.
И стало намного лучше. Он уделал Игла 2. Теперь ищу линзу на 6мм чтоб стало 50-55 гр поле зрения. Как народ летает с 120 гр не понимаю , у меня всё размыто и мелко , особенно в движении.
Размер кода для ПК 26.3 кБайт , а в пульте 17 кбайт.

Donkrat

Сделать серву для камеры на крутилку. Я код ваще утрамбовывал в 8к, а пульт то ваще пару кб)) у меня 90гр. Иногда хочется шире видеть , но начнет искажаться все. Вопросик не в тему, в очках летаешь? В каких?

Samer
Donkrat:

Сделать серву для камеры на крутилку. Я код ваще утрамбовывал в 8к, а пульт то ваще пару кб)) у меня 90гр. Иногда хочется шире видеть , но начнет искажаться все. Вопросик не в тему, в очках летаешь? В каких?

У меня шлем 7" с исправленной прошивкой для коррекции формата аналогово входа. Вместо 7" изображение стало примерно 5.5" ( по центру экрана ) и влезло больше информации от камеры. Так комфортнее , жалею что не купил 5" . Получается использую не все 1280х800 а меньше.

Samer

Сегодня протестировал удержние высоты. Работает не плохо.
Держит в пределах 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 .

Samer

По снижению интересные моменты. Если P больше чем надо то он быстро снижается и при подходе к заданной высоте D просто не успевает его остановить . А если D большая то происходит снижение ступеньками метра по 3. Снижается , останов далее все снова. И мысль следующая надо просто сразу ограничивать P до общего суммирования . А то получается при большой высоте даже с малым P , слишком большая дельта на уменьшение газа. Сильно уменьшаем P и плохо реагирует при малой ошибке ±1 метр.

Приращение_газа= constrain ( (p_h + d_h + i_h) , -7,7 ) ;

А так лучше :

i_h = constrain( ( i_h + I_PID_высоты*ошибка_высоты),-2,2);
d_h= constrain( D_PID_высоты*(ошибка_высоты-стар_ошибка_высоты),-6,6);
p_h= constrain( P_PID_высоты * ошибка_высоты ,-3,3 );

Приращение_газа= p_h+ d_h+i_h;

Мы сразу ограничим физически скорость снижения , без реальных полётов очень сложно все предусмотреть.

Donkrat

Constrain как помню это если больше Х то Х?
Ну да теория без практики бесполезна

Samer
Donkrat:

Constrain как помню это если больше Х то Х?

Два последних числа это диапазон допустимых значений.
По GPS. К GPS датчику по UART подключена ардуина.
На ней софт , который обрабатывает NMEA протокол. Он все проверяет , из строк получает числовые значения , широта, долгота, курс, число спутников, выcота, скорость. И все эти данные по запросу основного ПК передаёт . Включение по I2C . На GPS ардуине прописан I2C адрес , она типа конвертора. Основной ПК совсем не загружен обработкой NMEA .
Это аналогично как например забирать данные с гироскопа, единственный минус шина I2c общая с гирой и барометром, надо делать не слишком длинный провод.
Кусок кода на удержание или возврат написал давно, но проверить всё не получалось.
Данные GPS передаю не в виде градусов , а метрами , в 4-х байтах широта и в 4-х долгота. Так проще обрабатывать без перевода. Всё эти данные в обратном UART от ПК передаю на пульт . Там обратное конвертирование в градусы. На картах вбиваю с пульта широту и долготу и совпадение до метра. Ну и на пульте также курс домой, курс движения , курс носа .
Возился долго с удержание высоты. Теперь можно пробовать . Хочу сделать без компаса. Калибровкой курса носа по курсу GPS.

Donkrat

Вообще мне понравился майхоббилог, рассказывает медленно, с толком. Мне кажется любым видео настроишь, лишь бы сама сборка была точно в порядке и не глядеть на цифры, а только на процесс и суть настройки.
По поводу компаса тоже не нравится этот торчок на раме. Единственное если завис далеко и не можешь сразу сориеньироваться где дом, либо постоянно лететь с какой то скоростью