Файл: Цуканов Александр Валерьевич Выпускная квалификационная работа бакалавра.pdf
Добавлен: 24.10.2023
Просмотров: 216
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
4.2 Тестирование работы программного комплекса в MATLAB
Для тестирования полученного программного комплекса в качестве ограничений для переменных состояния и управлений были взяты характеристики БПЛА российского производства Орлан10 [7]. В частности были взяты минимальная и максимальная скорости, ограничения на высоту,
перегрузки и угол крена. Ограничения на углы курса и наклона траектории были выбраны так, чтобы выполнялась гладкая замена переменных
{|
ᵱ
|<π/2; |
ᵱ
|<π}. Ограничения на дальность полёта и боковое отклонение были выбраны так, чтобы БПЛА имел запас расстояния для выполнения сложных и длинных манёвров.
Список полученных ограничений выглядит так:
300 ≤ H ≤ 5000;
10000 ≤ L ≤ 10000;
10000 ≤ Z ≤ 10000 75 ≤ V ≤ 170;
89
≤
ᵱ
≤
89
;
179
≤
ᵱ
≤
179
3
≤
n
X
≤ 3;
0.2
≤
n
Y
≤
6
;
60
≤
ᵯ
≤
60
Далее приведён список манёвров, на которых был тестирован программный комплекс:
Манёвр 1. Разворот БПЛА на 90 градусов.
Значения переменных состояния и управлений в начальной и конечной точках траектории:
H
L
Z
V
ᵱ
ᵱ n
x n
y
ᵯ при t=0 900 0
0 120 0
0 0
1 0 при t=Δt
900 500 200 110 0
90 0
1 0
25
Время, необходимое для того, чтобы совершить этот манёвр t = 15.988 с.
Угол наклона траектории
ᵱ
равен нулю на всём участке траектории.
Рис. 6. Вид траектории в пространстве.
Рис. 7. График земной скорости БПЛА V и график курсового угла
ᵱ.
26
Рис. 8. Графики продольной перегрузки n
x
и поперечной перегрузки n
y
Рис. 9. График угла крена
ᵯ.
Манёвр 2. Смена эшелона (набор высоты).
Значения переменных состояния и управлений в начальной и конечной точках траектории:
H
L
Z
V
ᵱ
ᵱ n
x n
y
ᵯ при t=0 900 0
0 120 0
0 0
1 0 при t=Δt
1200 1000 0 110 0
0 0
1 0
27
Время, необходимое для того, чтобы совершить этот манёвр t = 26.7124 с.
Курсовой угол
ᵱ
а также угол крена
ᵯ
равны нулю на всём участке траектории.
Рис. 10. Вид траектории в пространстве.
Рис. 11. График земной скорости БПЛА V и график угла наклона траектории
ᵱ.
28
Рис. 12. Графики продольной перегрузки n
x
и поперечной перегрузки n
y
Манёвр 3. Уход от лобового столкновения (смена бокового смещения).
Значения переменных состояния и управлений в начальной и конечной точках траектории:
H
L
Z
V
ᵱ
ᵱ n
x n
y
ᵯ при t=0 1200 0 0
120 0
0 0
1 0 при t=Δt
1200 200 200 120 0
0 0
1 0
Время, необходимое для того, чтобы совершить этот манёвр t = 8.4741 с.
Угол наклона траектории
ᵱ
равен нулю на всём участке траектории.
29
Рис. 13. Вид траектории в пространстве.
Рис. 14. График земной скорости БПЛА V и график курсового угла
ᵱ.
30
Рис. 15. Графики продольной перегрузки n
x
и поперечной перегрузки n
y
Рис. 16. График угла крена
ᵯ.
Манёвр 4. Разворот на 170 градусов и сброс высоты.
Значения переменных состояния и управлений в начальной и конечной точках траектории:
H
L
Z
V
ᵱ
ᵱ n
x n
y
ᵯ при t=0 1200 0 0
110 0
0 0
1 0 при t=Δt
900 0
300 130 0
170 0 1
0 31
Время, необходимое для того, чтобы совершить этот манёвр t = 17.3959 с.
Рис. 17. Вид траектории в пространстве.
Рис. 18. График земной скорости БПЛА V
32
Рис. 19. График угла наклона траектории
ᵱ и график курсового угла ᵱ
Рис. 20. Графики продольной перегрузки n
x
и поперечной перегрузки n
y
Рис. 21. График угла крена
ᵯ.
33
ВЫВОДЫ
В данной работе разработан программный комплекс построения оптимальной пространственной траектории БПЛА. В ходе выполнения ВКР
была рассмотрена математическая модель управляемого движения БПЛА.
Для построения траектории, описываемой начальными и конечными значениями переменных состояния, была рассмотрена задача терминального управления и представлены уравнения вычисления соответствующих необходимой траектории управлений. Для построения траектории движения
БПЛА и решения поставленной задачи были использованы полиномы пятой степени. Был разработан и реализован программный комплекс в вычислительном пакете MATLAB r2016a, использующий алгоритм поиска оптимальной по времени траектории и реализующих её управлений.
Известно (см. введение), что алгоритмы, встроенные в бортовой компьютер БПЛА, должны работать в режиме реального времени. В среднем поиск с точностью до четвёртого знака после запятой выполнялся за 0.3
секунды. Зачастую, такая точность не является необходимой, а это значит,
что можно достичь ещё большего быстродействия работы, снижая точность поиска (например, до двух знаков после запятой). Быстродействие с точностью до второго знака оказалось впечатляющим. В среднем поиск занимал 0.05 секунды, что может сказать о его пригодности в сфере управления БПЛА.
Тестирование полученного программного комплекса показало, что чаще всего БПЛА сталкивается с проблемой нехватки скорости для реализации ещё более быстрого манёвра. Реже реализация быстрейшей траектории упирается в ограничение летательного аппарата по углу крена.
Наиболее редко встречалась проблема того, что значение перегрузок превышало допустимые пределы.
34
Работа программного комплекса показала,
что он может использоваться для синтеза оптимальных траекторий движения БПЛА,
причём в режиме реального времени.
35
ЗАКЛЮЧЕНИЕ
В ходе выполнения работы был создан программный комплекс,
предлагающий оптимальную по времени траекторию полёта БПЛА при условии выполнения ограничений на переменные состояния и управляющие воздействия. Для этого был представлен обзор литературы по тематике исследования. Была описана математическая модель управляемого движения
БПЛА, которую и было решено использовать впоследствии. Было представлено решение задачи терминального управления полётом БПЛА,
разработан алгоритм поиска оптимальной по времени траектории. Создание программного комплекса в целом, а также моделирование алгоритма и тестирование полученного приложения было проведено в пакете MATLAB.
Полученные результаты могут быть использованы для создания алгоритмов возвращения БПЛА на базу в случае потери связи с оператором и для построения систем автоматического управления беспилотными летательными аппаратами. В дальнейшем данный программный комплекс может быть улучшен и дополнен путём внедрения функций управления с обратными связями, функций построения сложных траекторий, состоящих из базовых манёвров и др.
36
СПИСОК ЛИТЕРАТУРЫ
1. П.Д. Крутько. Обратная задача динамики управляемых систем:
Нелинейные модели.
‒
1988 2. В.С. Моисеев. Теория управления беспилотными летательными аппаратами.
‒
2013.
3. А. Колесников. Новые нелинейные методы управления полетом.
‒
2013.
4. Т.С. Касаткина. Преобразования аффинных систем к каноническому виду с использованием замен независимой переменной.
‒
2013 5. Канатников А.Н., Шмагина Е.А. Задача терминального управления движением летательного аппарата // Нелинейная динамика и управление: Сборник статей.
‒
2010.
6. Онлайн документация вычислительного пакета
MATLAB.
http://www.mathworks.com/help/matlab/index.html
7. СТЦ Орлан10 // Авиационная энциклопедия. http://www.airwar.ru/enc/bpla/orlan10.html
37
ПРИЛОЖЕНИЕ
Листинг кода:
Код функции
optimum_finder.m:
1.
Time_0 =
sqrt
((
H_FinH_0
)
^
2
+
(
L_FinL_0
)
^
2
+
(
Z_FinZ_0
)
^
2
)
/
(
V_MAX/
3.6
)
;
2.
Time_Fin =
(
Time_0+
5
)
*
15
;
3.
deltaTime =
0.5
;
4.
precision =
0.0001
;
5.
flagFound = false;
6.
flagTimeout = false;
7.
curTime = Time_0;
8.
g =
9.80665
;
9.
trueVector = true
(
1
,
1001
)
;
10.
% START VIRTUAL CONTROL
11.
v_0 =
[
Nx_0 12.
Ny_0*cosd
(
gamma_0
)
13.
Ny_0*sind
(
gamma_0
)]
;
14.
% FINAL VIRTUAL CONTROL
15.
v_Fin =
[
Nx_Fin
16.
Ny_Fin*cosd
(
gamma_Fin
)
17.
Ny_Fin*sind
(
gamma_Fin
)]
;
18.
% SPEED INTO METERS PER SECOND
19.
V_0 = V_0/
3.6
;
20.
V_Fin = V_Fin/
3.6
;
21.
% START CONDITION IN NEW TERMS
22.
y10 = H_0;
23.
y20 = L_0;
24.
y30 = Z_0;
25.
y10f = V_0*sind
(
theta_0
)
;
26.
y20f = V_0*cosd
(
theta_0
)
*cosd
(
psi_0
)
;
27.
y30f =
1
*V_0*cosd
(
theta_0
)
*sind
(
psi_0
)
;
28.
y10s = g + g*v_0
(
1
)
*sind
(
theta_0
)
+ g*v_0
(
2
)
*cosd
(
theta_0
)
;
29.
y20s = g*v_0
(
1
)
*cosd
(
theta_0
)
*cosd
(
psi_0
)
g*v_0
(
2
)
*sind
(
theta_0
)
*cosd
(
psi_0
)
+ g*v_0
(
3
)
*sind
(
psi_0
)
;
30.
y30s = g*v_0
(
1
)
*cosd
(
theta_0
)
*sind
(
psi_0
)
+ g*v_0
(
2
)
*sind
(
theta_0
)
*sind
(
psi_0
)
+ g*v_0
(
3
)
*cosd
(
psi_0
)
;
31.
% FINAL CONDITION IN NEW TERMS
32.
y1F = H_Fin;
33.
y2F = L_Fin;
34.
y3F = Z_Fin;
35.
y1Ff = V_Fin*sind
(
theta_Fin
)
;
36.
y2Ff = V_Fin*cosd
(
theta_Fin
)
*cosd
(
psi_Fin
)
;
38
37.
y3Ff =
1
*V_Fin*cosd
(
theta_Fin
)
*sind
(
psi_Fin
)
;
38.
y1Fs = g + g*v_Fin
(
1
)
*sind
(
theta_Fin
)
+ g*v_Fin
(
2
)
*cosd
(
theta_Fin
)
;
39.
y2Fs = g*v_Fin
(
1
)
*cosd
(
theta_Fin
)
*cosd
(
psi_Fin
)
g*v_Fin
(
2
)
*sind
(
theta_Fin
)
*cosd
(
psi_Fin
)
+ g*v_Fin
(
3
)
*sind
(
psi_Fin
)
;
40.
y3Fs = g*v_Fin
(
1
)
*cosd
(
theta_Fin
)
*sind
(
psi_Fin
)
+ g*v_Fin
(
2
)
*sind
(
theta_Fin
)
*sind
(
psi_Fin
)
+ g*v_Fin
(
3
)
*cosd
(
psi_Fin
)
;
41.
42.
while
((
not
(
flagFound
))
&&
(
curTime<=Time_Fin
))
43.
trajectory_finder;
44.
end
45.
46.
if
(
curTime>Time_Fin
)
47.
flagTimeout = true;
48.
end
Код функции
1 2 3
trajectory_finder.m:
1.
time =
0
:curTime/
1000
:curTime;
2.
delta = curTime;
3.
% FINDING COEFFICIENTS OF POLINOMIAL
4.
A =
[
delta^
3
delta^
4
delta^
5
;
5.
3
*delta^
2
4
*delta^
3
5
*delta^
4
;
6.
6
*delta
12
*delta^
2
20
*delta^
3
]
;
7.
B1 =
[
y1F y10 delta*y10f
0.5
*delta^
2
*y10s;
8.
y1Ff y10f delta*y10s;
9.
y1Fs y10s
]
;
10.
B2 =
[
y2F y20 delta*y20f
0.5
*delta^
2
*y20s;
11.
y2Ff y20f delta*y20s;
12.
y2Fs y20s
]
;
13.
B3 =
[
y3F y30 delta*y30f
0.5
*delta^
2
*y30s;
14.
y3Ff y30f delta*y30s;
15.
y3Fs y30s
]
;
16.
C1 = linsolve
(
A, B1
)
';
17.
C2 = linsolve
(
A, B2
)
';
18.
C3 = linsolve
(
A, B3
)
';
19.
% BUILDING A TRAJECTORY
20.
H = y10 + y10f*time +
0.5
*y10s*time.^
2
+ C1
(
1
)
*time.^
3
+ C1
(
2
)
*time.^
4
+ C1
(
3
)
*time.^
5
;
21.
L = y20 + y20f*time +
0.5
*y20s*time.^
2
+ C2
(
1
)
*time.^
3
+ C2
(
2
)
*time.^
4
+ C2
(
3
)
*time.^
5
;
22.
Z = y30 + y30f*time +
0.5
*y30s*time.^
2
+ C3
(
1
)
*time.^
3
+ C3
(
2
)
*time.^
4
+ C3
(
3
)
*time.^
5
;
23.
% CALCULATING OTHER POLYNOMIALS
24.
V =
sqrt
((
y10f + y10s*time +
3
*C1
(
1
)
*time.^
2
+
4
*C1
(
2
)
*time.^
3
+
5
*C1
(
3
)
*time.^
4
)
.^
2
+
(
y20f + y20s*time +
3
*C2
(
1
)
*time.^
2
+
4
*C2
(
2
)
*time.^
3
+
5
*C2
(
3
)
*time.^
4
)
.^
2
+
(
y30f + y30s*time +
3
*C3
(
1
)
*time.^
2
+
4
*C3
(
2
)
*time.^
3
+
5
*C3
(
3
)
*time.^
4
)
.^
2
)
;
25.
sinTheta =
(
y10f + y10s*time +
3
*C1
(
1
)
*time.^
2
+
4
*C1
(
2
)
*time.^
3
+
5
*C1
(
3
)
*time.^
4
)
./V;
39
1.
time =
0
:curTime/
1000
:curTime;
2.
delta = curTime;
3.
% FINDING COEFFICIENTS OF POLINOMIAL
4.
A =
[
delta^
3
delta^
4
delta^
5
;
5.
3
*delta^
2
4
*delta^
3
5
*delta^
4
;
6.
6
*delta
12
*delta^
2
20
*delta^
3
]
;
7.
B1 =
[
y1F y10 delta*y10f
0.5
*delta^
2
*y10s;
8.
y1Ff y10f delta*y10s;
9.
y1Fs y10s
]
;
10.
B2 =
[
y2F y20 delta*y20f
0.5
*delta^
2
*y20s;
11.
y2Ff y20f delta*y20s;
12.
y2Fs y20s
]
;
13.
B3 =
[
y3F y30 delta*y30f
0.5
*delta^
2
*y30s;
14.
y3Ff y30f delta*y30s;
15.
y3Fs y30s
]
;
16.
C1 = linsolve
(
A, B1
)
';
17.
C2 = linsolve
(
A, B2
)
';
18.
C3 = linsolve
(
A, B3
)
';
19.
% BUILDING A TRAJECTORY
20.
H = y10 + y10f*time +
0.5
*y10s*time.^
2
+ C1
(
1
)
*time.^
3
+ C1
(
2
)
*time.^
4
+ C1
(
3
)
*time.^
5
;
21.
L = y20 + y20f*time +
0.5
*y20s*time.^
2
+ C2
(
1
)
*time.^
3
+ C2
(
2
)
*time.^
4
+ C2
(
3
)
*time.^
5
;
22.
Z = y30 + y30f*time +
0.5
*y30s*time.^
2
+ C3
(
1
)
*time.^
3
+ C3
(
2
)
*time.^
4
+ C3
(
3
)
*time.^
5
;
23.
% CALCULATING OTHER POLYNOMIALS
24.
V =
sqrt
((
y10f + y10s*time +
3
*C1
(
1
)
*time.^
2
+
4
*C1
(
2
)
*time.^
3
+
5
*C1
(
3
)
*time.^
4
)
.^
2
+
(
y20f + y20s*time +
3
*C2
(
1
)
*time.^
2
+
4
*C2
(
2
)
*time.^
3
+
5
*C2
(
3
)
*time.^
4
)
.^
2
+
(
y30f + y30s*time +
3
*C3
(
1
)
*time.^
2
+
4
*C3
(
2
)
*time.^
3
+
5
*C3
(
3
)
*time.^
4
)
.^
2
)
;
25.
sinTheta =
(
y10f + y10s*time +
3
*C1
(
1
)
*time.^
2
+
4
*C1
(
2
)
*time.^
3
+
5
*C1
(
3
)
*time.^
4
)
./V;
39
26.
theta = asind
(
sinTheta
)
;
27.
cosTheta = cosd
(
theta
)
;
28.
sinPsi =
(
y30f + y30s*time +
3
*C3
(
1
)
*time.^
2
+
4
*C3
(
2
)
*time.^
3
+
5
*C3
(
3
)
*time.^
4
)
./
sqrt
((
y20f + y20s*time +
3
*C2
(
1
)
*time.^
2
+
4
*C2
(
2
)
*time.^
3
+
5
*C2
(
3
)
*time.^
4
)
.^
2
+
(
y30f + y30s*time +
3
*C3
(
1
)
*time.^
2
+
4
*C3
(
2
)
*time.^
3
+
5
*C3
(
3
)
*time.^
4
)
.^
2
)
;
29.
cosPsi =
(
y20f + y20s*time +
3
*C2
(
1
)
*time.^
2
+
4
*C2
(
2
)
*time.^
3
+
5
*C2
(
3
)
*time.^
4
)
./
sqrt
((
y20f + y20s*time +
3
*C2
(
1
)
*time.^
2
+
4
*C2
(
2
)
*time.^
3
+
5
*C2
(
3
)
*time.^
4
)
.^
2
+
(
y30f + y30s*time +
3
*C3
(
1
)
*time.^
2
+
4
*C3
(
2
)
*time.^
3
+
5
*C3
(
3
)
*time.^
4
)
.^
2
)
;
30.
psy = atan2d
(
sinPsi, cosPsi
)
;
31.
v1 =
((
y10s +
6
*C1
(
1
)
*time +
12
*C1
(
2
)
*time.^
2
+
20
*C1
(
3
)
*time.^
3
+ g
)
.*sinTheta +
(
y20s +
6
*C2
(
1
)
*time +
12
*C2
(
2
)
*time.^
2
+
20
*C2
(
3
)
*time.^
3
)
.*cosTheta.*cosPsi
(
y30s +
6
*C3
(
1
)
*time +
12
*C3
(
2
)
*time.^
2
+
20
*C3
(
3
)
*time.^
3
)
.*cosTheta.*sinPsi
)
/ g;
32.
v2 =
((
y10s +
6
*C1
(
1
)
*time +
12
*C1
(
2
)
*time.^
2
+
20
*C1
(
3
)
*time.^
3
+ g
)
.*cosTheta
(
y20s +
6
*C2
(
1
)
*time +
12
*C2
(
2
)
*time.^
2
+
20
*C2
(
3
)
*time.^
3
)
.*sinTheta.*cosPsi +
(
y30s +
6
*C3
(
1
)
*time +
12
*C3
(
2
)
*time.^
2
+
20
*C3
(
3
)
*time.^
3
)
.*sinTheta.*sinPsi
)
/ g;
33.
v3 =
((
y20s +
6
*C2
(
1
)
*time +
12
*C2
(
2
)
*time.^
2
+
20
*C2
(
3
)
*time.^
3
)
.*sinPsi +
(
y30s +
6
*C3
(
1
)
*time +
12
*C3
(
2
)
*time.^
2
+
20
*C3
(
3
)
*time.^
3
)
.*cosPsi
)
/ g;
34.
tanGamma = v3./v2;
35.
gama = atand
(
tanGamma
)
;
36.
cosGamma = cosd
(
gama
)
;
37.
Nx = v1;
38.
Ny = v2./cosGamma;
39.
% CONVERTING SPEED BACK INTO KM/H
40.
V = V*
3.6
;
41.
if
isequal
((
V >= V_MIN
)
&
(
V <= V_MAX
)
&
(
theta >= theta_MIN
)
&
(
theta <= theta_MAX
)
&
(
psy >= psi_MIN
)
&
(
psy <= psi_MAX
)
&
(
H >= H_MIN
)
&
(
H <= H_MAX
)
&
(
L >= L_MIN
)
&
(
L <= L_MAX
)
&
(
Z >=
Z_MIN
)
&
(
Z <= Z_MAX
)
&
(
Nx >= Nx_MIN
)
&
(
Nx <= Nx_MAX
)
&
(
Ny >= Ny_MIN
)
&
(
Ny <= Ny_MAX
)
&
(
gama >= gamma_MIN
)
&
(
gama <= gamma_MAX
)
, trueVector
)
42.
if
(
deltaTime >=
2
*precision
)
43.
curTime = curTime deltaTime;
44.
deltaTime = deltaTime/
2
;
45.
elseif
(
deltaTime > precision
)
46.
curTime = curTime deltaTime;
47.
deltaTime = precision;
48.
else
49.
flagFound = true;
50.
end
51.
else
52.
curTime = curTime + deltaTime;
53.
end
40