Continuamos uma série de artigos sobre como automatizar o desempenho de acrobacias em um pequeno UAV. Este artigo tem, em primeiro lugar, um objetivo educacional: aqui mostramos como criar o mais simples sistema de controle automático (ACS) usando o exemplo da tarefa de realizar acrobacias em "barril" ao controlar uma aeronave com apenas ailerons. Este artigo é o segundo de uma série de publicações "Flight UAV", que fala sobre o processo de construção de peças de hardware e software de armas de autopropulsão em forma de treinamento.

Link para o artigo anterior do ciclo:
1. “Voo UAV. Como fazer um barril "Conteúdo:
1. IntroduçãoModelo de movimentoParâmetros do modelo. Momento de inérciaParâmetros do modelo. Derivadas do momento do roloVerificação do modeloSíntese de controle para desempenho de barrilExperiência de vooObservaçõesConclusões1. Introdução
Então, decidimos implementar o "barril" no modo automático. Obviamente, para a execução automática de uma figura, é necessário formular a lei de controle correspondente. O processo de invenção será muito mais fácil e rápido, se você usar um modelo matemático do movimento da aeronave. Testar a lei de controle em um experimento de vôo, embora possível, requer muito mais tempo e pode ser muito mais caro em caso de perda ou dano ao dispositivo.
Como em pequenos ângulos de ataque e planagem da aeronave, seu movimento de rolagem praticamente não está conectado ao movimento em dois outros canais: pista e longitudinal - para completar um simples "barril", será suficiente construir um modelo de movimento apenas em torno de um eixo - o eixo
OX do SC associado. Pelo mesmo motivo, a lei de controle dos ailerons não mudará significativamente quando se trata de criar um sistema de controle completo.
Modelo de movimento
A equação de movimento da
aeronave em torno do eixo longitudinal
OX do SC associado é extremamente simples:
Ix ponto mathrm omegax=Mx,
onde
Ix É o momento de inércia sobre o eixo
OX e o momento
Mx consiste em vários componentes, dos quais, para uma descrição realista do movimento de nossas aeronaves, basta considerar apenas dois:
Mx=M omegaxx omegax+M deltaax deltaa,
onde
M omegaxx omegax - o momento devido à rotação da aeronave em torno do eixo
OX (momento de amortecimento),
M deltaax deltaa - o momento devido ao desvio dos ailerons (momento de controle). A última expressão é escrita em forma linearizada: momento do rolo
Mx linearmente dependente da velocidade angular
omegax e ângulo de deflexão de aileron
deltaa com coeficientes de proporcionalidade constantes
M omegaxx e
M deltaax em conformidade.
Como você sabe (por exemplo, do
Wiki ), uma equação diferencial linear
Ix ponto mathrm omegax=M omegaxx omegax+M deltaax deltaa
corresponde ao link aperiódico de primeira ordem
W= frackTp+1,
onde
W - função de transferência,
p - operador de diferenciação,
T O tempo é constante e
k - ganho.
Como passar de uma equação diferencial para uma função de transferência?No nosso caso, dos parâmetros da equação aos parâmetros da função de transferência, podemos proceder da seguinte maneira (sabendo que a derivada
M omegaxx negativo):
Ix ponto omegax=M omegaxx omegax+M deltaax deltaa longrightarrowIx dot omegax=− left|M omegaxx right| omegax+M deltaax deltaa
Ix ponto omegax+ left|M omegaxx right| omegax=M deltaax deltaa longrightarrow left(Ixp+ left|M omegaxx right| right) omegax=M deltaax deltaa
left( fracIx left|M omegaxx right|p+1 right) omegax= fracM deltaax left|M omegaxx right| deltaa longrightarrowT= fracIx left|M omegaxx right|,k= fracM deltaax left|M omegaxx right|.
Para o link aperiódico, a constante de tempo
T igual ao tempo durante o qual a quantidade produzida
omegax(t) com um efeito de passo único da quantidade de entrada
deltaa(t) assume um valor que difere do estado estacionário em ~ 5% e o ganho
k numericamente igual ao valor de estado estacionário do valor de saída com um efeito de etapa única:
Existem dois parâmetros desconhecidos no modelo de movimento construído: ganho
k e constante de tempo
T . Esses parâmetros são expressos através das características do sistema físico: momento de inércia
Ix bem como derivadas do momento do rolo
M omegaxx e
M deltaax :
M omegaxx=− fracIxT, colorwhite longrightarrowM deltaax=−kM omegaxx= frackIxT.
Assim, se o momento de inércia é conhecido
Ix , depois de determinar os parâmetros do modelo, é possível restaurar os parâmetros do sistema a partir deles.
Parâmetros do modelo. Momento de inércia Ix
Nossa aeronave é composta pelas seguintes partes: asa, fuselagem com plumagem, motor, bateria (bateria) e
aviônicos :

Os aviônicos incluem: a placa do piloto automático, a placa do receptor
SNA , a placa do modem de rádio, a placa do receptor de sinal do equipamento de controle, dois reguladores de tensão, um regulador de velocidade do motor e também os fios de conexão.

Devido ao baixo peso dos aviônicos, sua contribuição para o momento total de inércia pode ser negligenciada.
Como foi estimado o momento de inércia?Estimativa do momento de inércia
Ix pode ser feito da seguinte maneira. Vejamos o plano ao longo do eixo
OX :

E imagine-o na forma do seguinte modelo simplificado:
Esquema para calcular o momento de inércia Ix . No canto superior esquerdo - a bateria, canto inferior direito - o motor. O motor e a bateria estão localizados no eixo da fuselagemPode-se observar que, para criar o modelo, a quilha, a cauda horizontal, o parafuso e a aviônica foram descartados. Neste caso, permaneceu: a fuselagem, asa, bateria, motor. Medindo as massas e as dimensões características de cada parte, podemos calcular os momentos de inércia de cada parte em relação ao eixo longitudinal da fuselagem:
- asa (haste fina): Ixw= frac112mwL2w+mwy2w=1,7 cdot10−2kg cdotm2
- fuselagem (cilindro oco): Ixf=mfr2f=2,8 cdot10−4kg cdotm2
- bateria (placa): Ixa= frac112ma left(h2a+w2a right)=3,4 cdot10−4kg cdotm2
- motor (disco): Ixe= frac12mer2e=2,3 cdot10−5kg cdotm2
O valor total do momento de inércia da aeronave em relação ao eixo
OX é obtido adicionando os momentos de inércia das partes:
Ix=Ixw+Ixf+Ixa+Ixe=1,8 cdot10−2kg cdotm2
Estimando a contribuição de cada uma das partes da aeronave para o momento total de inércia
Ix , resultou o seguinte:
- asa - 96,3%,
- a fuselagem - 1,6%,
- motor e bateria - 2%,
Percebe-se que a principal contribuição para o momento total de inércia
Ix faz uma asa. Isso se deve ao fato de a asa ter um tamanho transversal bastante grande (extensão da asa - 1 m):

Portanto, apesar do peso modesto (cerca de 20% da massa total de decolagem da aeronave), a asa tem um momento significativo de inércia.
Parâmetros do modelo. Derivadas do momento do rolo M omegaxx e M deltaax
O cálculo das derivadas do momento do rolo é uma tarefa bastante difícil associada ao cálculo das características aerodinâmicas das aeronaves por métodos numéricos ou usando técnicas de engenharia. A aplicação do primeiro e do segundo requer tempo significativo, custos intelectuais e computacionais, justificados no desenvolvimento de sistemas de controle para aeronaves de grande porte, onde o custo do erro ainda excede o custo da construção de um bom modelo. Para a tarefa de controle de UAV, cuja massa não excede 2 kg, essa abordagem dificilmente se justifica. Outra maneira de calcular esses derivados é um experimento de voo. Dado o preço baixo de nossas aeronaves, bem como a proximidade de um campo adequado para esse experimento, a escolha era óbvia para nós.
Depois de escrever o firmware no piloto automático para controle manual e registro de parâmetros, montamos a aeronave e a preparamos para o teste:

No experimento de vôo, foi possível obter dados sobre o ângulo de desvio dos ailerons e a velocidade angular de rotação da aeronave. O piloto controlava a aeronave no modo manual, voando em círculo, giros e "barris", e o equipamento de bordo registrava e enviava as informações necessárias para a estação terrestre. Como resultado, as dependências necessárias foram obtidas:
omegax(t) (graus / s) e
deltaa(t) (b / p). Valor
deltaa(t) representa o ângulo de desvio do aileron normalizado: um valor de 1 corresponde a um desvio máximo e um valor de -1 corresponde a um mínimo:

Como determinar agora
M omegaxx e
M deltaax a partir dos dados recebidos? A resposta é medir os parâmetros transitórios nos gráficos.
omegax(t) e
deltaa(t) .
Como foram determinados os coeficientes k e T?Ganho
k foi determinado atribuindo o valor do valor de estado estacionário da velocidade angular ao valor do desvio de aileron:
Dependências do ângulo de deflexão de aileron e da velocidade angular de rotação no tempo obtidas no experimento de vôoNa figura anterior, as seções do valor em estado estacionário da velocidade angular correspondem aproximadamente, por exemplo, aos segmentos próximos aos instantes de tempo 422, 425 e 438 s (marcados em vermelho escuro na figura).
Constante de tempo
T determinado a partir dos mesmos gráficos. Para isso, foram encontradas seções de uma mudança acentuada no ângulo de deflexão do aileron e, em seguida, foi medido o tempo pelo qual a velocidade angular assume um valor que difere do valor do estado estacionário em 5%.
O resultado da determinação dos valores da constante de tempo e ganho é o seguinte:
T=0,075 texts ,
k=−575 textdeg/s . Estes valores dos coeficientes com um valor conhecido do momento de inércia
Ix os seguintes valores das derivadas do momento angular correspondem:
M omegaxx=− fracIxT=−0,24 frac textN cdot textm textgraus/s, colorbranco longrightarrowM deltaax=−kM omegaxx= frackIxT=−138 frac textN cdot textm text[].
Verificação do modelo
Então, tendo construído um modelo, cuja base é um elo aperiódico
W= frac−5750,75p+1,
pode ser verificado aplicando um sinal na entrada
delta(t) obtido a partir da experiência de voo e comparar o sinal de saída do modelo com o valor
omegax(t) também obtido no experimento.
Como foi feita a simulação?Escolhemos a ferramenta para modelagem, principalmente, com base na possibilidade de repetir os resultados por uma ampla gama de leitores: isso significa principalmente que o programa deve ser de domínio público. Em princípio, o problema de modelar o comportamento do link aperiódico de primeira ordem pode ser resolvido criando sua própria ferramenta do zero. Mas como no futuro o modelo se tornará mais complicado, a criação do seu próprio instrumento pode desviar a tarefa principal - a criação de armas de autopropulsão. Dado o princípio de abertura da ferramenta, escolhemos o
JSBsim .
Na seção anterior, obtivemos os valores dos coeficientes
M deltaax e
M omegaxx . Nós os usamos para simular o movimento da aeronave. Desde o
último artigo, lembramos que a configuração do modelo de aeronave no
JSBsim é definida usando um arquivo
XML . Crie seu próprio modelo:
<?xml version="1.0"?> <fdm_config name="OP1" version="2.0" release="BETA"> <metrics> <wingarea unit="M2"> 0.2 </wingarea> <wingspan unit="M"> 1.0 </wingspan> <chord unit="M"> 0.2 </chord> <htailarea unit="M2"> 0.03 </htailarea> <htailarm unit="M"> 0.5 </htailarm> <vtailarea unit="M2"> 0.03 </vtailarea> <vtailarm unit="M"> 0.5 </vtailarm> <location name="AERORP" unit="M"> <x> -0.025 </x> <y> 0 </y> <z> 0.05 </z> </location> </metrics> <mass_balance> <ixx unit="KG*M2"> 0.018 </ixx> <iyy unit="KG*M2"> 0.018 </iyy> <izz unit="KG*M2"> 0.018 </izz> <emptywt unit="KG"> 1.2 </emptywt> <location name="CG" unit="M"> <x> 0 </x> <y> 0 </y> <z> 0 </z> </location> </mass_balance> <ground_reactions> </ground_reactions> <propulsion> </propulsion> <flight_control name="FCS: OP1"> <channel name="Pitch"> </channel> <channel name="Roll"> <summer name="Roll Trim Sum"> <input>fcs/aileron-cmd-norm</input> <clipto> <min>-1</min> <max>1</max> </clipto> </summer> </channel> <channel name="Yaw"> </channel> </flight_control> <aerodynamics> <axis name="DRAG"> </axis> <axis name="SIDE"> </axis> <axis name="LIFT"> </axis> <axis name="ROLL" unit="N*M"> <function name="aero/coefficient/Clp"> <description>Roll_moment_due_to_roll_rate</description> <product> <property>velocities/p-aero-rad_sec</property> <value>-0.24</value> </product> </function> <function name="aero/coefficient/Clda"> <description>Roll_moment_due_to_aileron</description> <product> <property>fcs/aileron-cmd-norm</property> <value> 2.4 </value> </product> </function> </axis> <axis name="PITCH"> </axis> <axis name="YAW"> </axis> </aerodynamics> <output name="OP1.csv" rate="60" type="CSV"> <property> velocities/vc-kts </property> <property> aero/alphadot-deg_sec </property> <property> aero/betadot-deg_sec </property> <property> fcs/throttle-cmd-norm </property> <simulation> OFF </simulation> <atmosphere> OFF </atmosphere> <massprops> OFF </massprops> <aerosurfaces> ON </aerosurfaces> <rates> ON </rates> <velocities> ON </velocities> <forces> OFF </forces> <moments> OFF </moments> <position> ON </position> <coefficients> OFF </coefficients> <ground_reactions> OFF </ground_reactions> <fcs> ON </fcs> <propulsion> OFF </propulsion> </output> </fdm_config>
Como estamos construindo um modelo de movimento do dispositivo apenas ao longo do rolo, deixaremos muitas seções do arquivo vazias. As seguintes características são definidas seqüencialmente no arquivo de modelo.
As dimensões geométricas da aeronave são definidas na seção de
métricas : área da asa, envergadura, comprimento do acorde aerodinâmico médio, área da cauda horizontal, ombro da cauda horizontal, área da cauda vertical, área da cauda vertical, ombro da cauda vertical, posição do foco aerodinâmico.
As características de massa da aeronave são definidas na seção
mass_balance : tensor de inércia da aeronave, peso vazio, posição do centro de massa.
Vale ressaltar que as posições absolutas do foco aerodinâmico e o centro de massa da aeronave não participam do cálculo da dinâmica do dispositivo, sendo importante sua localização relativa.
As seções a seguir descrevem as características do trem de pouso da aeronave e de sua usina.
Na próxima seção, responsável pelo
sistema de controle , preencheremos o canal responsável pelo controle de rolagem: indicaremos a única entrada
fcs / aileron-cmd-norm , cujo valor será normalizado de -1 a 1.
As características aerodinâmicas são definidas na seção de
aerodinâmica : as forças são definidas em um sistema de coordenadas de alta velocidade e os momentos são definidos em um sistema acoplado. Estamos interessados no momento do rolo. Na seção
nome do
eixo = "ROLL" , são definidas funções que determinam o momento das forças de vários componentes da projeção do momento das forças aerodinâmicas no eixo
OX do sistema de coordenadas associado. Existem dois desses componentes em nosso modelo. O primeiro componente é o momento de amortecimento, que é igual ao produto da velocidade angular pelo coeficiente determinado anteriormente
M omegaxx . O segundo componente é o momento dos ailerons a uma velocidade de vôo fixa: é igual ao produto do coeficiente previamente determinado
M deltaax pela quantidade de desvio dos ailerons.
Vale ressaltar que, ao determinar o coeficiente
M deltaax valor dimensional foi usado
T . Em nossos dados de vôo, a velocidade angular foi medida em graus por segundo, enquanto o
JSBSim usa radianos por segundo, de modo que o coeficiente
M deltaax deve ser reduzido à dimensão desejada, ou seja, dividido por 180 graus e multiplicado por
pi radiano. Anotamos esses componentes do momento das forças aerodinâmicas nas funções do
produto . Na modelagem, o resultado de todas as funções é somado e o valor da projeção do momento aerodinâmico no eixo correspondente é obtido.
Você pode verificar o modelo criado nos dados experimentais obtidos durante os testes de vôo. Para fazer isso, crie um script com o seguinte conteúdo:
<?xml version="1.0" encoding="utf-8"?> <runscript> <use aircraft="ownPlane1" initialize="scripts/airborne"/> <run start="0" end="51" dt="0.01"> <event name="Trims"> <condition> sim-time-sec ge 0.0 </condition> <set name="simulation/do_simple_trim" value="5"/> </event> <event name="Time Notif" continuous="true"> <description>Provide a time history input for the aileron</description> <condition> sim-time-sec ge 0</condition> <set name="fcs/aileron-cmd-norm" > <function> <table> <independentVar lookup="row">sim-time-sec</independentVar> <tableData> 0 0.00075 0.1 0.00374 0.2 -0.00075 0.3 -0.00075 0.4 -0.00075 0.5 -0.00075 0.6 0.00075 0.7 0.00075 ... 48.8 -0.00075 48.9 0.00000 49 -0.00075 </tableData> </table> </function> </set> </event> </run> </runscript>
onde pontos indicam dados ausentes. No arquivo de script que nos é familiar do artigo anterior, um novo tipo de evento (
“Time Notif” ) apareceu, o que permite definir uma mudança contínua do parâmetro no tempo. A dependência do parâmetro no tempo é definida pela função de tabela.
O JSBSim interpola linearmente o valor da função entre os dados tabulares. O procedimento de verificação do modelo de movimento de rolagem consiste em executar esse script no modelo criado e comparar os resultados com os experimentais.
O resultado da verificação é mostrado na figura:

Como pode ser visto na figura, a coincidência do modelo com a realidade é um pouco menor que completa.
Síntese de controle para desempenho de barril
Depois de receber o modelo, é fácil determinar quanto e por quanto tempo é necessário desviar os ailerons para completar o "barril". Uma opção é o seguinte algoritmo de desvio:
- t=0 : ailerons começam a se desviar de uma posição neutra;
- t=0,1 textc : ailerons rejeitados em 50%;
- t=1,3 textc : ailerons começam a se desviar para uma posição neutra;
- t=1,4 textc : ailerons em ponto morto.
A presença de segmentos com duração de 0,1 s no início e no final do algoritmo de deflexão do aileron simula a inércia do servoconversor, que não pode desviar as superfícies instantaneamente. O modelo mostra que, com essa lei de deflexão de ailerons, a aeronave deve completar uma volta completa em torno do eixo
OX , verific?
Experiência de voo
A lei de controle resultante dos ailerons foi programada em um piloto automático montado em um avião. A idéia do experimento é simples: leve o avião para o vôo horizontal e use a lei de controle obtida. Se o movimento real da aeronave ao longo do rolo corresponder ao modelo criado, a aeronave deverá executar um "barril" - uma rotação completa de 360 graus.
Expressamos nossa gratidão ao nosso fiel piloto por seu trabalho, profissionalismo e uma mala confortável em uma carroça universal!
No decorrer do experimento, ficou claro que o modelo de rolo foi construído com sucesso - a aeronave executou um "barril" após o outro assim que o piloto ativou a lei de controle programada. A figura a seguir mostra a velocidade angular
omegax registrados durante o experimento e obtidos a partir dos resultados da simulação, bem como o ângulo de inclinação e inclinação do experimento de vôo:

E a figura a seguir mostra os sinais registrados no experimento de vôo para ailerons, elevador (RV) e leme (RN):

As linhas verticais indicam os momentos do início e do fim da execução do "barril". Pode-se observar pelas figuras que durante a execução do “barril” o piloto não intervém no controle do elevador e do leme, também é claro que o ângulo de inclinação invariavelmente tende a diminuir durante a execução do “barril” - a aeronave atrasa o mergulho, como previsto pelos resultados da simulação no simulador de vôo (consulte o artigo
"Flight UAV. Como fazer um barril" ). Se você observar atentamente os gráficos anteriores, ficará claro que o terceiro "barril" ainda não foi concluído, porque o piloto interveio no controle para tirar o avião do mergulho: o ângulo de inclinação muda muito quando o "barril" é executado apenas pelos ailerons.
Observações
- Os canhões autopropulsores construídos para a execução do "cano" não levam em consideração a dependência dos derivados do momento do rolamento na velocidade de vôo. Por um lado, isso foi feito para não complicar o modelo e a lei da gestão. Por outro lado, é fácil introduzir essa dependência se, em vez de derivadas, M omegaxx e M deltaax use quantidades M omegaxx/V2 e M deltaax/V2 definido a uma determinada velocidade de vôo V .
- A lei de controle desenvolvida é um controle de programa sem feedback. A presença de feedback sobre a velocidade angular e / ou ângulo de rotação melhorará a precisão da figura, o que será feito no futuro.
Conclusões
Como resultado de nosso trabalho, mostramos uma das maneiras de criar um modelo de movimento de um UAV em velocidade angular
omegax . Em um experimento de voo, foi provado que o modelo de movimento criado é consistente com o objeto simulado. Com base no modelo desenvolvido, é obtida a lei de controle do programa, que permite que o barril seja executado no modo automático. Também garantimos que não seria possível realizar o "barril" correto apenas com ailerons, e também demonstramos isso claramente.
O próximo passo será a finalização da lei de controle, adicionando feedback, bem como a inclusão do controle do elevador. Este último exigirá a criação de um modelo de movimento longitudinal de nossas aeronaves. Com base nos resultados do trabalho, a próxima publicação será lançada.