control

Управляйте командами для UAV

Описание

пример

Примечание

Эта функция требует, чтобы вы установили Библиотеку UAV для Robotics System Toolbox™. Чтобы установить дополнения, используйте roboticsAddons и выберите желаемое дополнение.

controlStruct = control(uavGuidanceModel) возвращает структуру, которая получает все соответствующие команды управления для заданной модели руководства UAV. Используйте выход этой функции, чтобы гарантировать, что у вас есть соответствующие поля для вашего управления. Используйте команды управления в качестве входа к derivative функция, чтобы получить производную времени состояния UAV.

Примеры

свернуть все

В этом примере показано, как использовать multirotor модель руководства, чтобы симулировать изменение в состоянии UAV из-за ввода команд.

Примечание: Чтобы использовать алгоритмы UAV, необходимо установить Библиотеку UAV для Robotics System Toolbox®. Чтобы установить, используйте roboticsAddons.

Создайте модель руководства мультиротора.

model = multirotor;

Создайте структуру состояния. Задайте местоположение в мировых координатах.

s = state(model);
s(1:3) = [3;2;1];

Задайте команду управления, u, это задало список и тягу мультиротора.

u = control(model);
u.Roll = pi/12;
u.Thrust = 1;

Создайте стандартную среду без ветра.

e = environment(model);

Вычислите производную времени состояния, учитывая текущее состояние, управляйте командой и средой.

sdot = derivative(model,s,u,e);

Симулируйте состояние UAV использование ode45 интегрирование. y поле выводит фиксированное крыло состояния UAV как 13 n матрицей.

simOut = ode45(@(~,x)derivative(model,x,u,e), [0 3], s);
size(simOut.y)
ans = 1×2

          13        3536

Постройте изменение в углу вращения на основе симуляции выход. Угол вращения (X Углов Эйлера) является 9-й строкой simOut.y вывод .

plot(simOut.y(9,:))

Постройте изменение в Y и положениях Z. С заданной тягой и углом вращения, мультиротор должен пролететь и потерять некоторую высоту. Положительное значение для Z ожидается, когда положительный Z снижается.

figure
plot(simOut.y(2,:));
hold on
plot(simOut.y(3,:));
legend('Y-position','Z-position')
hold off

Можно также построить траекторию мультиротора с помощью plotTransforms. Создайте векторы перевода и вращения из симулированного состояния. Downsample (каждый 300-й элемент) и транспонирует simOut элементы, и преобразуют Углы Эйлера в кватернионы. Задайте mesh как multirotor.stl файл и положительное Z-направление как "down". Отображенное представление показывает перевод UAV в направлении Y и потерю высоты.

translations = simOut.y(1:3,1:300:end)'; % xyz position
rotations = eul2quat(simOut.y(7:9,1:300:end)'); % ZYX Euler
plotTransforms(translations,rotations,...
    'MeshFilePath','multirotor.stl','InertialZDirection',"down")
view([90.00 -0.60])

В этом примере показано, как использовать fixedwing модель руководства, чтобы симулировать изменение в состоянии UAV из-за ввода команд.

Примечание: Чтобы использовать алгоритмы UAV, необходимо установить Библиотеку UAV для Robotics System Toolbox®. Чтобы установить, используйте roboticsAddons.

Создайте модель руководства фиксированного крыла.

model = fixedwing;

Установите воздушную скорость транспортного средства путем изменения структуры от state функция.

s = state(model);
s(4) = 5; % 10 m/s

Задайте команду управления, u, это обеспечивает воздушную скорость и дает угол вращения pi/12.

u = control(model);
u.RollAngle = pi/12;
u.AirSpeed = 5;

Создайте стандартную среду без ветра.

e = environment(model);

Вычислите производную времени состояния, учитывая текущее состояние, управляйте командой и средой.

sdot = derivative(model,s,u,e);

Симулируйте состояние UAV использование ode45 интегрирование. y поле выводит фиксированное крыло состояния UAV на основе этой симуляции.

simOut = ode45(@(~,x)derivative(model,x,u,e), [0 50], s);
size(simOut.y)
ans = 1×2

     8   904

Постройте изменение в углу вращения на основе симуляции выход. Угол вращения является 7-й строкой simOut.y вывод .

plot(simOut.y(7,:))

Можно также построить траекторию фиксированного крыла с помощью plotTransforms. Создайте векторы перевода и вращения из симулированного состояния. Downsample (каждый 30-й элемент) и транспонирует simOut элементы, и преобразуют Углы Эйлера в кватернионы. Задайте mesh как fixedwing.stl файл и положительное Z-направление как "down". Отображенное представление показывает UAV, делающий постоянный поворот на основе постоянного угла вращения.

downsample = 1:30:size(simOut.y,2);
translations = simOut.y(1:3,downsample)'; % xyz-position
rotations = eul2quat([simOut.y(5,downsample)',simOut.y(6,downsample)',simOut.y(7,downsample)']); % ZYX Euler
plotTransforms(translations,rotations,...
    'MeshFilePath','fixedwing.stl','InertialZDirection',"down")
hold on
plot3(simOut.y(1,:),-simOut.y(2,:),simOut.y(3,:),'--b') % full path
xlim([-10.0 10.0])
ylim([-20.0 5.0])
zlim([-0.5 4.00])
view([-45 90])
hold off

Входные параметры

свернуть все

Модель руководства UAV, заданная как fixedwing или multirotor объект.

Выходные аргументы

свернуть все

Управляйте командами для UAV, возвращенного как структура.

Для БПЛА мультиротора модель руководства аппроксимирована как отдельные контроллеры PD для каждой команды. Элементы структуры являются командами управления:

  • Roll - Угол вращения в радианах.

  • Pitch - Передайте угол в радианах.

  • YawRate - Уровень отклонения от курса в радианах в секунду. (D = 0. P только контроллер)

  • Thrust - Вертикальная тяга UAV в Ньютонах. (D = 0. P только контроллер)

Для БПЛА фиксированного крыла модель принимает, что UAV летит при условии скоординированного поворота. Уравнения модели руководства принимают нулевой занос. Элементы структуры:

  • Height - Высота над землей в метрах.

  • Airspeed - Скорость UAV относительно ветра в метрах в секунду.

  • RollAngle - Угол вращения вдоль тела передает ось в радианах. Из-за условия скоординированного поворота направляющийся угловой уровень основан на углу вращения.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2018b

Для просмотра документации необходимо авторизоваться на сайте