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