Após a transcrição dos dados presentes no livro do Lewis, 3ª edição, relativos ao F16, os coeficientes aerodinâmicos simplificados estão presentes nas Figuras 1 a 4. Nelas é possível verificar a existência de superfícies suaves (por exemplo o coeficiente
da Figura 1.b) e em outros casos a superfície em si apresenta pontos acentuados de descontinuidade (majoritariamente nos coeficientes expostos nas Figuras 3 e 4).
Para confrontar os resultados das simulações linear e não linear, é importante então que inicialmente seja definido o ponto de operação desejado. Esse ponto de operação desejado será tomado como referência para o algoritmo de trimagem. Nesse ponto, será encontrado o equilíbrio teórico, mesmo que momentâneo/instantâneo, nas situações em que se supõe a não alteração de massa por consumo de combustível e/ou momentos de inércia (seja por variação de massa e/ou deflexão de empenas de atuação do sistema).

Figura 1: (a) Coeficientes de Momento de Rolamento e (b) de Pitching.
Figura 2: (a) Coeficientes de Momento de Yawing e de Força no Eixo X.
Figura 3: (a) Coeficientes de Momento de Rolamento devido ao Rudder (b) e do Aileron.
Figura 4: (a) Coeficientes de Momento de Yawing devido ao Aileron e (b) devido ao Rudder.
O algoritmo de trimagem utiliza a função fminsearch do Matlab para tal. É importante destacar que essa função em específico realiza a minimização do sistema sem considerar qualquer tipo de restrições nas variáveis. A depender de como se comporta a semente (seed) de iniciação de busca, é provável que o algoritmo pare em alguma condição de mínimo local. Dessa forma é importante ao projetista que se conheça um pouco da dinâmica do sistema ao qual você deseja realizar a trimagem de forma a possibilitar uma semente inicial que seja condizente com uma factibilidade do seu sistema.
Em atualização recente, eu utilizei a função fmincon, onde que insiro algumas restrições referentes à parte de range de atuação dos ailerons, elevator e rudder. E nesse caso, o sistema tem sido forçado a encontrar um mínimo global e não apenas um local (não precisaria da ação de um agente externo ou de um grande conhecedor da dinâmica da aeronave para vislumbrar a inicialização das variáveis do sistema).
O programa para trimagem está descrito a partir da Figura 5 e explicado passo a passo o seu funcionamento. Inicialmente todos os arquivos que dizem respeito ao F-16 são carregados (vide a carga das pastas e a adição das mesmas no caminho – path – salvo). Após a carga das pastas e arquivos, surge para o programador a tela de decisão (vide Figura 6) para a condição de voo (no caso está implementado apenas a condição de "reto nivelado" e "curva coordenada"). Tal tela é possibilitada pelas linhas da Figura 7. Após essa seleção, o programa em si parte para um switch-case a depender da situação desejada pelo programador.

Figura 5: Carrega as pastas e arquivos que serão utilizados no programa de simulação.


Figura 6: Seleção da condição de voo. Foi comentada a situação de rolamento estacionário para desenvolvimento futuro.
Uma vez na função switch-case, o programa segue a rotina da Figura 7.

Figura 7: Caracterização das variáveis a serem otimizadas pela função fmincon, limites superiores e inferiores. Observe o case para o throtle, que foi colocado um parâmetro ed 1.5 de limite superior (isso considera o afterburn).
Além disso, se o seu avião está voando em reto nivelado, é interessante também que haja
(ou seja, não exista ângulo entre o vetor velocidade total
e o plano NED). Além disso, não há nenhum nível de rolamento do seu avião, assim
. O que sobra em termos de variáveis que possibilitam a otimização do sistema dizem respeito à
, h e
(as outras variáveis são determinadas pela restrição direta do problema). Após essa iniciação pelo usuário, é necessário que o algoritmo inicie a otimização das variáveis. No caso, dado as restrições físicas do próprio problema, as variáveis livres são dadas por:
O algoritmo, então, a partir dessas variáveis (chute inicial e em seguida realimentação dos valores previstos) põe tais valores nas equações de estado e calcula função de custo. O algoritmo checa se houve ou não convergência dos valores para algum ponto de mínimo e fica nessa busca até encontrar algum de mínimo. A variável
será utiliza dentro da função fnCusto (a qual será detalhada a seguir) para travar algumas restrições físicas do sistema. Além disso, é importante que se dê um chute inicial nas variáveis livres.

Figura 8: Função fnCusto.
A função fnCusto recebe como parâmetros o vetor s e o varargin. Eu inicialmente quebro esse vetor s nas variáveis às quais eu desejo minimizar, pois tais variáveis entrarão na função que descreve a dinâmica do sistema do avião (e que aceita em específico o vetor de estados x, o vetor de controle u e o tempo t). Equivalentemente, faço a mesma coisa para o vetor varargin. Em termos de restrições existentes para o estado, o algoritmo identifica qual a situação de voo desejada (dado pela variável Indice) e já deixa explícitas as restrições do sistema. Após deixado o problema bem amarrado em termos de restrições, o algoritmo calcula a derivada do vetor de estados
dadas as condições do voo escolhida e as restrições físicas existentes. Em seguida, calcula-se o custo quadrático do sistema em cima dos resultados obtidos para a derivada do vetor de estados .
Após a realização da otimização, coleto os valores obtidos .

Figura 9: Pego nas variáveis de estado e de controle os valores que minimizam a função fnCusto.
Após a obtenção das variáveis minimizantes, é necessário que se calcule também as outras variáveis de estado (no caso aquelas que estão obviamente restritas). Esse passo de recálculo, dados as restrições, é realizado na Figura 10. Nela, a depender da condição de voo, realiza-se a mesma toada de equações de restrições de variáveis existentes dentro da função fnCusto. Após a realização do cálculo do sistema, eu calculo a variável de estado x(13) e salvo os resultados em um arquivo trimados.mat.
Exemplo de aplicação (o mesmo que está no livro...): com a finalidade de elucidar o procedimento de trimagem para uma determinada condição de voo, eu irei considerar a seguinte situação de voo
-
-
- Voo reto nilevado, o que implica em
.
Ou seja, nada mais é do que a condição de voo 1 do nosso problema.

Figura 10: Calculo as variáveis de estado restantes que minimizam a função fnCusto de acordo com as restrições de voo.
Para a situação de trimagem desejada, o resultado obtido na otimização encontra-se apresentado na próxima figura. É importante deixar claro que as 9 primeiras variáveis são as variáveis de estados (a parte de posição para navegação não é importante para este caso de trimagem) e os 4 últimos são referentes aos parâmetros de controle.

Figura 11: Vetor de estados e controles trimados. É possível observar o custo resultante da otimização.
Esse procedimento pode ser ser repetido para diversas condições de voo para dentro do envelope de voo (altitude, velocidade, condição de variação de massa) a ser considerado para o seu projeto de aeronave e/ou drone.
Alguns pontos que deve ser levados em consideração, os valores de trimagem para "AIL" e RDR" são muito pequenos e podem ser considerados como nulos na trimagem. Isso fatalmente irá ocorrer em outras situações de trimagem do seu sistema. Fique a vontade, por exemplo, de zerá-los quando da determianção do seus parâmetros linearizados. Para os desenvolvimentos que irei fazer, eu vou tomar esses valores obtidos diretamente na trimagem, mesmo que muito pequeno, quando na obtenção das matrizes de linearização do meu sistema para desenvolver malhas de controle.
É interessante observar que esse procedimento pode ser adotado de maneira similar quando se tem disponível um modelo não linear e se deseja encontrar algum ponto de trimagem para projeto ou ajustes em malhas de controle.








