Piloto Automático para VANT`s TUTORIAL Comunicação X
Transcrição
Piloto Automático para VANT`s TUTORIAL Comunicação X
Instituto Tecnológico de Aeronáutica – ITA Piloto Automático para VANT’s TUTORIAL Comunicação X-PLANE & SIMULINK Adriano Bittar Introdução Neste trabalho é desenvolvido a comunicação entre o simulador de vôo X-Plane e o software MatLab/Simulink. Através dessa comunicação informações são trocadas entre os dois sistemas. X-Plane O X-Plane é um simulador de vôo produzido pela Laminar Research, que além de disponibilizar diversas aeronaves e aeroportos, conta com muitos outros recursos, como ferramentas para construção e remodelagem de aeronaves, cenários e até mesmo mudança nas condições climáticas. O X-plane tem algumas vantagens em relação aos demais simuladores em relação a aplicações voltadas para VANTs : Fornece modelos extremamente precisos, tanto que é usado para treinamento de pilotos. Permite comunicação com outros hardwares. Apresenta um protocolo de comunicação que permite aplicação em tempo real. Tem um biblioteca para aeronaves não tripuladas que contém a VANT ilustrada pela Figura 1. Figura 7 - Vant X-Plane Rede entre dois computadores Para fazer a conexão do simulador com o MatLab/Simulink é necessário criar um rede entre dois computadores. Um computador rodando o MatLab/simulink e o outro rodando o X-Plane. Isto é feito através de um cabo ethernet e de uma configuração padrão, como ilustrado na Figura 2. O número do IP pode ser diferente, porém o X-Plane exige que o número de IP das duas máquinas sejam iguais diferenciando somente no último número. PC_MatLab IP: 161.24.191.100 Gateway: 161.24.191.1 PC_X-Plane IP: 161.24.191.101 Gateway: 161.24.191.1 Cabo Ethernet Figura 2 - Rede entre os Computadores Configuração do X-Plane A configuração para o X-plane comunicar com um hardware externo é feita na tela “Net Connection”. Essa tela contém três abas, onde cada uma tem uma função. A terceira aba “Inet 3” permite configurar o IP da máquina que vai receber os dados do simulador e a porta de comunicação entre elas. A tabela 1 ilustra as portas disponíveis pelo X-Plane. Tabela 1 – Portas do X-plane PORTAS DE DADOS DO X-PLANE ENVIO DE DADOS 49001 RECEBIMENTO DE DADOS 49000 De acordo com a Figura 2 e a Tabela 1 a Inet 3 deve ser configurada como ilustrado pela Figura 3. Figura 3 - Inet 3 Selecionando Parâmetros no X-Plane A tela “Data Input/Output” permite fazer a seleção dos parâmetros que serão enviados pela porta 49001 do simulador. Existem quatro caixas que podem ser selecionadas para cada parâmetro, sendo a primeira para enviar os dados pela rede ethernet, e a última para enviar os dados para a tela do cockpit. Somente esses duas são utilizadas aqui. A Figura 4 ilustra um a seleção de dois parâmetros para serem enviados pela rede ethernet. É selecionado um parâmetro que enviará o valor das deflexões das superfícies de comando ( variando de -1 à +1) e um outro parâmetro que enviará os ângulos de Euler. Figura 4 - Seleção de Parâmetros O Protocolo UDP A parte mais importante na comunicação é interpretar o protocolo de comunicação utilizado. O protocolo segue a seguinte ordem: 1. Os bytes de 0 a 3 contém os caracteres “DATA” indicando que é um pacote de dados. 2. O 5 byte é uma diretiva interna. 0 1 2 3 4 “D” “A” “T” “A” I A partir de então vem os dados selecionados. Os dados selecionados são formados por um conjunto de 9 grupos de 4 bytes casa. O primeiro grupo apresenta o rótulo no dado, que é o número que aparece na seleção. O segundo grupo apresenta a primeira instância do dado, o terceiro grupo apresenta a segunda instância, e assim por diante. O padrão é mantido mesmo quando um dado não precisa de todos os nove grupos. Usaremos o exemplo da Figura 4 para ilustrar como ocorre isso. Na Figura 4, são marcados os rótulos 08 e 18 para serem trocados entre os dois softwares. Então o pacote de dados será formado por 77 bytes, sendo os 5 primeiros do cabeçário, os 36 (9x4) próximos do primeiro dado, e os 36 (9x4) últimos do segundo pacote de dados. O primeiro conjunto de dados selecionado é o rótulo 08 que apresenta os valores de deflexão das superfícies de comando, Elevator, Airelon e Rudder. O conjunto de grupos é dado abaixo: GRUPO 1: Os bytes 5 à 8 indicam qual o primeiro parâmetro selecionado, no nosso exemplo da Figura 4 o parâmetro é o 08. GRUPO 2: Os bytes 9 à 12 são os dados do elevator GRUPO 3: De 13 à 16 são os dados dos airelons. GRUPO 4: De 17 à 20 são os dados do rudder. GRUPOS 5 à 9 ( bytes de 21 à 40) não são utilizados. Grupo 1:Rótulo: 08 Grupo 2:Elevator Grupo 3:Airelons Grupo 4:Rudder 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 L1 L2 L3 L4 E1 E2 E3 E4 A1 A2 A3 A4 R1 R2 R3 R4 O segundo conjunto de dados selecionado é o rótulo 18 que apresenta os valores dos ângulos pitch, roll e heading (true e magnetic). O conjunto de grupos é dado abaixo: GRUPO 1: Os bytes 41 à 44 indicam qual o segundo parâmetro selecionado, no nosso exemplo da Figura 4 o parâmetro é o 18. GRUPO 2: Os bytes 45 à 48 são os dados do pitch. GRUPO 3: De 49 à 52 são os dados dos roll. GRUPO 4: De 53 à 56 são os dados do heading true. GRUPO 5: De 57 à 60 são os dados do heading mag. GRUPOS 6 à 9 (bytes 61 à 77) não são utilizados nesta aplicação. Grupo 1:Rótulo: 08 Grupo 2:Pitch Grupo 3:Roll 41 42 43 44 45 46 47 48 49 50 51 L1 L2 L3 L4 P1 P2 P3 P4 R1 R2 R3 Grupo 4:Heading true Grupo 5:Heading mag 52 53 54 55 56 57 58 58 60 R4 Ht1 Ht2 Ht3 Ht4 Hm1 Hm2 Hm3 Hm4 Partiremos agora para a análise do de como o dado é formulado, para isso temos com exemplo, o grupo dois do primeiro parâmetro selecionado que é o elevator. Grupo 2:Elevator 9 10 11 12 E1 E2 E3 E4 Cada grupo de quatro bytes tem a seguinte formação: 1. O primeiro bit (bit 0) é o sinal, se 1 o sinal é negativo, se 0 o sinal é positivo. 2. Dos bits 1 à 8, tem-se o expoente. 3. E dos bit 9 à 31 tem-se a mantissa. Grupo 2:Elevator 9 (bits 0 à 7) 10(bits 8 à 15) E1 E2 11(bits 16 à 23) E3 Bit 0 Bits 1à8 Bits 9 à 31 Sinal Expoente Mantissa 12(bits 23 à 31) E4 Como os bytes são escritos em números decimais, é necessário realizar duas rotinas de conversão. A primeira rotina deve transformar todos os bytes em binários, pois como vemos o expoente ocupa um pedaço do primeiro byte e um pedaço do segundo byte, sendo impossível trabalhar com os bytes diretamente adquiridos. A segunda rotina deve separar os bits, nas três partes, sinal, expoente, e mantissa, e então passá-los para números decimais. Para se poder ler o valor dos dados corretamente, aplica-se a equação (1) com os dados obtidos: (1) Lendo dados do X-plane O Simulink apresenta alguns blocos que enviam e recebem dados através do protocolo UDP. A Figura 5 ilustra um diagrama de blocos para receber os dados selecionados na Figura 4. O primeiro Bloco é o “UPD receiver”, ele recebe os pacotes enviados do X-plane, para isso é necessário configurá-lo de acordo com a Figura 1 e a Tabela 1. Deve se ter um bloco para desempacotar, um para reverter o Byte ( necessário devido ao tipo de processador utilizado pela máquina). Depois o pacote entra em um S Funcion Builder que é um bloco que permite gerar um código em C para rodar no Simulink. O código faz a interpretação dos dados UDP. A Figura 6 ilustra o fluxograma do programa implementado. E ao final são mostrados os dados nos displays de saída. Figura 5 - Recebimento de dados do X-plane Início: Receber dados 1 2 3 Separação dos Bytes Separa binários em Sinal, Expoente e Mantissa Passar mantissa para decimal Aplicar Equação (1) Passar de decimal para binário Passar expoente para decimal Analisar sinal Enviar dados 1 2 3 Início: Receber dados Figura 6 - Fluxograma Recebimento de Dados Enviando dados para X-plane A Figura 7 ilustra um diagrama de blocos implementado no Simulink para enviar os dados de uma senoide para o Aileron. Para isso temos que enviar os dados no formato UDP lido pelo X-plane, logo o processo inverso da aquisição de dados deve ser feito. O primeiro bloco é a forma de onda da senoide. O segundo bloco (S Function Builder) transforma o número decimal da senoide em um grupo de quatro bytes que vai compor o dado Aileron, seguindo o formato dado no tópico O Protocolo UDP. Na saída esse bloco apresenta o valor decimal lido, e o valor em Bytes. O valor em Bytes é enviado para um outro bloco, também implementado em C, que vai concatenar o cabeçário “DATA” necessário e o rótulo “8” que corresponde ao parâmetro que contém o aileron. É necessário enviar o valor -999 para os outros grupos de dados. O X-Plane entende esse valor como sendo um valor sem informação ( “No Data”) e não faz nenhuma alteração nos outros campos tais como, elevator e rudder. Figura 7 - Envio dos dados para o X-plane