Расчет сил квадрокоптера с помощью ПИД-регуляторов

Я новичок в PID-контроллерах и квадрокоптерах и пытаюсь написать очень простую (но реалистичную) симуляцию для квадрокоптеров. Я не пытаюсь построить настоящий контроллер Quadcopter.

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

Моя симуляция работает со скоростью 60 тиков в секунду, каждый тик обновляет PID и моделируется дрон.

Случай 1)

Этот случай не имеет ничего общего с имитацией беспилотника, я просто пытаюсь понять и почувствовать PID. Допустим, беспилотник находится в мировых координатах (0 -60 0) (Y - это ось вверх), и я хочу, чтобы он выровнялся в начале координат мира (0 0 0), поэтому он должен ускоряться вверх. Для этого случая давайте полностью проигнорируем роторы, я могу волшебным образом применить силу непосредственно к дрону. Дрон также находится в вертикальном положении и может двигаться только вверх или вниз.

Чтобы плавно ускориться к началу координат, я бы предположил, что мне нужен PID (назовем его PID0), и вычислю его с заданным значением, равным 0 (y-координата мирового происхождения), а переменной процесса - y-координата дрон. Тем не менее, выход не является силой. Я могу применить вывод непосредственно как скорость, и это работает просто отлично, но это не то, что я хочу. Нужен ли мне дополнительный PID (PID1) с заданным значением, являющимся выходом PID0, и переменной процесса, являющейся текущей скоростью дрона, для расчета силы?

Это означало бы, что мне понадобится 6 PID (в дополнение к 3 ротационным PID) для перемещения по всем осям? Это не кажется мне правильным.

Как рассчитать силу, которую нужно применить, исходя из результата PID0?

Дело 2)

Для этого случая предположим, что дрон имеет свободное движение, а линейная и угловая скорости дрона определяются силами подъема ротора и крутящими моментами ротора. Допустим, у дрона есть углы тангажа = 20, рыскание = 0 и крен = 0 (с положительным шагом, направленным вниз, то, что дрон летит вперед), и я хочу, чтобы он выровнялся с шагом = 0, рыскание = 0 и крен = 0

Чтобы вращать дрон, мне нужно было увеличить обороты на передних роторах (и / или уменьшить обороты на задних роторах).

Если я вычислю выходной сигнал PID для оси основного тона, с заданным значением, равным 0, и переменной процесса, равной 20, я получу другой угол в качестве результата. Как я могу использовать это, чтобы изменить мощность на роторах?



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

1 ответ

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

Тем не мение...

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

В сценарии 2 я мог бы предложить использовать отдельный PID с одной зависимой переменной для каждого числа оборотов ротора.

Другие вопросы по тегам