Piloto automático caseiro em uma placa Tinker de computador de placa única (SBC) e Arduino DUE

imagem

A idéia de construir um piloto automático surgiu cerca de 2 anos atrás. Eu queria criar um aparelho totalmente autônomo capaz de ir do ponto A ao ponto B, com a possibilidade de evitar colisões e voar em torno de obstáculos, capaz de superar zonas de interferência ou a ausência de um sinal de satélite. Eu também queria ter um controle conveniente e simples com o mouse, pois é implementado em jogos (estratégias) que controlam o movimento da aeronave com a ajuda de pontos. Eu tive que começar tudo do zero, como este artigo, portanto, se houver erros, escreva sobre isso nos comentários. Vou começar em ordem.



Hardware


Inicialmente, eu não sabia qual hardware é melhor usar para este projeto, mas no final cheguei à conclusão de que a melhor opção seria um monte de microcontrolador (MK) + computador de placa única. Onde o MK resolve o problema de estabilização de uma aeronave (LA), seu movimento em um determinado curso e altitude, e um computador de bordo único resolve o problema de navegação e movimento ao longo de uma rota. Como o plano era evitar colisões, o computador tinha que ser poderoso o suficiente para processar informações de sensores de detecção de obstáculos, compactos e não muito caros na época. Como MK, eu queria ter um controlador compatível com arduino porque O arduino tinha uma enorme base de esboços prontos e, portanto, a escolha caiu em DUE 84 MHz, ARM Cortex-M3 de 32 bits, porqueele era o mais poderoso e tinha que compensar a franqueza das minhas mãos)).

Inicialmente, planejei usar o MPU 9250 com um filtro Majevik como sensores de orientação, os resultados de seu trabalho foram excelentes. A principal vantagem dessa opção foi que todos os cálculos, incluindo a calibração dos sensores (acelerômetro, giroscópio e magnetômetro), estavam no MK. Mas havia um problema: o filtro mal compensava a aceleração linear, que ocorre constantemente durante choques ou uma mudança acentuada de curso. Isso é expresso nas leituras de pitch and roll, no momento da aceleração elas começam a flutuar e passando pelo regulador diferencial proporcional (PD) e principalmente a parte diferencial, a flutuação criou problemas. Portanto, tive que usar um sensor com um filtro BNO 055 já implementado.

Ao contrário do MPU 9250, o BNO tem a bordo o Cortex M0 MK integrado, que calcula imediatamente a orientação em ângulos de Euler, a orientação absoluta quaternina e calcula a aceleração linear, embora esse sensor também tenha várias desvantagens. O principal problema desse sensor é a calibração automática, ou melhor, que ele não pode ser desligado, é um "encaixe" desse sensor e essa calibração tem uma propriedade desagradável de desaparecer, às vezes absolutamente repentinamente, mesmo estando em um local sem movimento. Isso se reflete principalmente na guinada que está conectada ao magnetômetro neste sensor e deve mostrar a direção do polo norte magnético (percurso), mas às vezes mostra 100 graus em strona e, depois da calibração, pode voltar))). Em outros assuntos, o problema do curso ainda pode ser resolvido usando a sincronização com o GPS. Caso contrário, o sensor funciona bem,ele sempre determina o pitch and roll corretamente e as acelerações lineares não afetam muito seu trabalho, a menos que, é claro, a aceleração não exceda 2G, porque esse limite é usado para medir o vetor de gravidade e compensar a deriva dos giroscópios.

O restante do conjunto de ferro é o seguinte: GPS Ublox Neo M8N com saída USB,
barômetro BMP 280, sonar HSCR 04 para receber dados sobre disponibilidade no solo e velocidade vertical mais precisa, EEPROM 24c16 para armazenar dados de calibração e configurações de PID, módulo GSM Neoway M509E para enviar mensagens sobre as coordenadas da aeronave em caso de acidente.

O diagrama funcional é mostrado na Figura 1:

imagem
Figura 1 - Diagrama funcional do piloto automático .

Programas


Para desenvolvimento de software, eu uso o QT junto com o QT Creator IDE. ele é mais familiar para mim e, graças à funcionalidade de plataforma cruzada, posso executar meus programas em um PC de placa única com Debian ou em um desktop com Windows, o que é muito conveniente. Para o desenvolvimento do software do microcontrolador, é utilizado o IDE do Arduino. Para maior clareza, tentarei apresentar todas as seções da Figura 2.

imagem
Figura 2. - Arquitetura do AP (BNO 080 adicionado para o futuro).

1) Interface gráfica de controle - é um mapa de satélite com a ajuda da qual a aeronave é controlada. O programa de exibição de imagem de satélite em si não é meu, foi roubado por mim aqui (o autor também tentou fazer algo semelhante).

Você pode controlar a aeronave usando pontos (marcadores) ou botões WADS. Para controlar os pontos, é necessário definir a rota de vôo com marcadores verdes, eles são colocados com o mouse (RMB) e clicar na rota de carregamento, ou usar o marcador de movimento instantâneo (vermelho) (LMB) e, em seguida, a aeronave da posição atual voará para esse ponto; para sua operação, é necessário definir na caixa de seleção "Manual" com cliques acidentais.

Todos os parâmetros do marcador são inseridos nos campos apropriados no formulário. Você pode remover os marcadores clicando duas vezes no botão do meio do mouse, enquanto eles ainda permanecerão na memória da aeronave. Para excluir a memória, use o botão Excluir rota. Ao chegar ao ponto, como nas estratégias da aeronave, ela gira em torno dele. Controle de botão O WADS controla diretamente o volante usando controladores PD. Quando cada botão é pressionado, um valor é inserido na entrada do controlador, por exemplo, quando S é pressionado, pitch 30 e quando liberado é 0. Quando W -30 é pressionado, etc. O WADS é ativado usando as caixas de seleção: “manual”, “botões”. Este modo ajuda a verificar a funcionalidade de todos os lemes antes de iniciar. A interface gráfica é executada no laptop, os comandos de controle da interface gráfica usando o soquete TCP são transferidos para o kernel. A interface de controle gráfico é mostrada na Figura 3:

imagem
Figura 3 - Interface gráfica de gerenciamento.

2) O núcleo do piloto automático é a parte do software calculada em um computador de placa única TinkerBoard. O kernel é responsável pela navegação e movimentação ao longo da rota. Para fazer isso, um sensor de GPS está conectado ao computador. Com ele, você pode obter a posição atual da aeronave (latitude e longitude) e comparar essa posição com o que está na rota de vôo. Como resultado dessa operação, é obtido o azimute para o alvo, que é enviado ao microcontrolador junto com o restante dos parâmetros de vôo. No futuro, o kernel poderá ser equipado com seu sensor IMU para implementar a RNA. Por exemplo, você pode usar o BNO 080 para integrar, acelerar e obter velocidade e, integrando a velocidade, obter a distância. A distância recebida da RNA precisará ser convertida no sistema de coordenadas GPS (latitude e longitude) para seu uso no cálculo do azimute.

Essa RNA pode ser usada em conjunto com um sensor GPS em caso de perda temporária de comunicação com o satélite, para que a aeronave não perca uma “virada” para um ponto. No momento da operação do GPS, a RNA é constantemente ajustada por suas leituras e preenche as lacunas entre os períodos de atualização do sensor GPS. Da mesma forma, o algoritmo de visão de máquina ou SLAM deve ser ajustado alterando a altura do ponto e criando desvios do azimute calculado. Após a conclusão do cálculo da rota, o kernel envia dados do UART: azimute, altitude, ângulo de ataque, tipo de ponto e também se a rotação em torno desse ponto é necessária.

3) O microcontrolador executa os comandos principais, a principal tarefa do MK é seguir o curso dado em uma determinada altura. Para isso, o MKU está equipado com um sensor IMU BNO 055, um barômetro bmp 280 e um sonar. Para o movimento ao longo do curso, o azimute obtido do núcleo é usado, ele é comparado com a taxa atual e a incompatibilidade resultante é transmitida aos controladores PD para guinada e rotação. O controle de afinação é realizado por 2 controladores PD: o 1º determina a incompatibilidade das alturas de corrente e predeterminadas, que são alimentadas à entrada do 2º controlador, enquanto a saída do controlador de altura é limitada pelo ângulo de ataque atual para controlar seu conjunto. Se na interface gráfica o tipo de ponto é selecionado para decolagem ou pouso, um sonar é usado para determinar a altura. Seu testemunho é combinado com os dados do barômetro,para determinar com mais precisão a distância do solo e a velocidade vertical. Além das funções básicas, o MK também coleta telemetria sobre a operação dos sensores IMU, a direção atual e a altitude, transfere-os para o kernel, onde esses dados são complementados por dados do GPS e entram na interface gráfica.

Conclusão


No momento, o piloto automático ainda está na fase de teste de voo e não está totalmente configurado. No entanto, passei apenas duas partidas e ainda não obtive os coeficientes dos reguladores.

Em geral, os reguladores de DP parecem instáveis ​​para mim e eu quero substituí-los por algo mais confiável, especialmente porque eles já estão desatualizados. Também é necessário substituir cálculos por ângulos de Euler por cálculos em quaterniões, porque estes se comportam de maneira mais estável ao girar a aeronave em ângulos superiores a 120 graus e voar durante o vento.

Um tiro mais detalhado de aviônicos


imagem



Link para o código-fonte do poison (com bibliotecas) Github aqui apenas a fonte, mas mais recente

All Articles