Você está na página 1de 43

Universidade Federal de Pernambuco

Centro de Informtica
Cincia da Computao



















FlightInstructor, um Instrutor de Vo Virtual
para o Microsoft Flight Simulator X
















Trabalho de Graduao
Aluno: Rodrigo Carvalho de Farias (rcf3@cin.ufpe.br)
Orientadora: Judith Kelner (jk@cin.ufpe.br)
Co-orientadora: Veronica Teichrieb (vt@cin.ufpe.br)



Recife, 25 de janeiro de 2008
2
Resumo
Para exercer a profisso comercialmente, o piloto de avio precisa possuir a licena de
Piloto Comercial, que obtida mediante um curso preparatrio. Durante o curso, o aluno passa
por uma etapa de treinamento em aeronaves e simuladores de vo. Embora no consigam
simular com perfeio todas as caractersticas de uma aeronave real, os simuladores de vo
tm o custo operacional inferior, permitem a prtica em cenrios especficos e so tolerantes s
falhas do aluno. Este Trabalho de Graduao apresenta o FlightInstructor, um instrutor de vo
virtual para o Microsoft Flight Simulator X, com foco no desenvolvimento dos mdulos
responsveis pela execuo de procedimentos aeronuticos relacionados ao vo por
instrumento. Cada tarefa executada pelo instrutor virtual exibida para o aluno, como uma
forma de orient-lo na execuo do procedimento.

Palavras-chave: instrutor virtual, Microsoft Flight Simulator X, procedimentos
aeronuticos, SimConnect, vo por instrumento.
3
Agradecimentos
Agradeo primeiramente a Deus e seus emissrios pela paz e inspirao com as quais
fui agraciado durante o desenvolvimento desse trabalho, bem como em toda a minha vida.
Agradeo minha me, pelo seu amor incondicional e exemplo cristo, que fazem do
nosso lar um porto seguro. Seu suporte, nas mais diversas reas, foi fundamental para a
concluso deste curso. uma grande companheira que tenho na Eternidade.
Agradeo a Syldnia pelo seu amor, carinho e apoio nas decises e momentos difceis.
outra grande companheira que Deus colocou no meu caminho.
Agradeo a todos os amigos do GPRT, sempre solcitos. Agradeo, em especial, a
Mozart William, Joo Marcelo e Gabriel Almeida, que contriburam diretamente no projeto.
Agradeo a Joo Lima pelo apoio formal dado ao nosso momento Treloso de confraternizao,
quando nos deliciamos com os biscoitos da Vitarella.
Agradeo ao Cmte. Thiago Dias, um grande amigo e referncia na aviao, que
tambm contribuiu diretamente no projeto.
Agradeo minha co-orientadora Veronica Teichrieb, pela contribuio direta no
projeto, na vida profissional, e pela forma to gentil com que nos trata.
Agradeo professora Judith Kelner, minha orientadora, e ao professor Djamel Sadok,
pela excelente oportunidade de trabalhar em um ambiente to agradvel e enriquecedor como
o GPRT.
Agradeo, enfim, a todos os amigos e familiares que, direta ou indiretamente
contriburam no projeto. Que Deus os abenoe.
4
Sumrio
1. Introduo........................................................................................................................... 5
1.1. Objetivo........................................................................................................................... 5
1.2. Estrutura do Documento................................................................................................. 6
2. Ensino na Aviao.............................................................................................................. 7
2.1. Processo de Ensino........................................................................................................ 7
2.2. Vo por Instrumento ....................................................................................................... 8
2.3. Ferramentas Relacionadas........................................................................................... 11
2.3.1. Livros ..................................................................................................................... 12
2.3.2. Cursos com Recursos Multimdia.......................................................................... 12
2.3.3. Simuladores de Sistemas Isolados ....................................................................... 12
2.3.4. Learning Center do FSX........................................................................................ 13
2.3.5. Instrutores de Vo Virtuais .................................................................................... 14
3. Microsoft Flight Simulator X.............................................................................................. 15
3.1. SimConnect .................................................................................................................. 17
4. FlightInstructor .................................................................................................................. 18
4.1. Domnio da Aplicao................................................................................................... 18
4.2. SimConnect para C#..................................................................................................... 18
4.3. Mdulo EasyConnect .................................................................................................... 22
4.3.1. Arquitetura ............................................................................................................. 24
4.3.2. Aplicao de Exemplo ........................................................................................... 27
4.4. Mdulo ProcedurePerformer......................................................................................... 28
4.4.1. Arquitetura ............................................................................................................. 28
4.4.2. Ciclo da Aplicao ................................................................................................. 29
4.4.3. Arquivos de Configurao ..................................................................................... 32
4.5. FlightAnalyzer ............................................................................................................... 35
5. Estudo de Caso................................................................................................................ 36
6. Concluso......................................................................................................................... 40
6.1. Contribuies ................................................................................................................ 40
6.2. Trabalhos Futuros......................................................................................................... 41
Referncias Bibliogrficas........................................................................................................... 42

5
1. Introduo
A aviao uma rea fascinante, que traz satisfao aos seus profissionais e
entusiastas. Porm, os custos associados a essa atividade ainda so muito altos, restringindo
seu mercado.
Para exercer a profisso e ser remunerado, o piloto precisa ter a licena de Piloto
Comercial de Avio (PCA), que precedida pela licena de Piloto Privado de Avio (PPA). As
escolas de aviao oferecem os cursos de PPA e PCA, que preparam o aluno para a obteno
das respectivas licenas. Os cursos so divididos em duas etapas: terica e prtica. Na etapa
prtica do curso de PCA, o aluno recebe instruo nas aeronaves e simuladores de vo da
escola.
A instruo em simuladores de vo durante o curso de PCA aborda basicamente os
assuntos relacionados ao vo por instrumento, onde o aluno aprende a se orientar no espao
areo baseado nos instrumentos de navegao da aeronave e os auxlios-rdio em terra. Os
simuladores de vo permitem que o aluno pratique em cenrios especficos, criados pelo
instrutor de vo, e so tolerantes s falhas do aluno. Permitem ainda que o piloto se familiarize
com os padres operacionais da aeronave simulada, bem como com a posio dos seus
instrumentos e comandos.
O Microsoft Flight Simulator X (FSX) um dos exemplos de IBM PC Based Simulator
(simulador baseado em IBM PC) disponveis no mercado, segundo a classificao sugerida por
Jonathan Gabbai [1]. O FSX simula com preciso as particularidades do vo por instrumento e
permite a conexo de diversos dispositivos de interao para aumentar o grau de imerso do
usurio [2]. O simulador ainda oferece uma seo dedicada ao ensino dos conceitos bsicos
da aviao, com material terico e prtico. Porm, o material prtico limitado a alguns
exemplos isolados.
1.1. Objetivo
A proposta deste trabalho de graduao o desenvolvimento do FlightInstructor, um
instrutor de vo virtual para o FSX que complementa a etapa prtica do curso de PCA,
abordando alguns assuntos relacionados ao vo por instrumento. Ele permitir que o aluno
pratique alguns conceitos aprendidos no curso sem a necessidade presencial de um instrutor
de vo. O FlightInstructor composto pelos mdulos EasyConnect, ProcedurePerformer e
FlightAnalyzer. O EasyConnect uma camada de abstrao para o SimConnect, que o
protocolo de comunicao com o FSX oferecido pelo seu Software Development Kit (SDK). O
ProcedurePerformer responsvel pela execuo de alguns procedimentos aeronuticos
relacionados ao vo por instrumento. Cada tarefa executada pelo instrutor virtual exibida para
o aluno, como uma forma de orient-lo na execuo do procedimento. O FlightAnalyzer, por
sua vez, ser responsvel pela anlise de um determinado procedimento executado pelo
aluno, e ter como finalidade apontar seus erros e sugerir correes. No escopo deste trabalho
sero apresentados os dois primeiros mdulos.
6
1.2. Estrutura do Documento
O captulo 2 do presente documento descreve o processo de ensino na aviao,
definindo a rea de atuao da ferramenta FlightInstructor, esclarece alguns conceitos
relacionados ao vo por instrumento, e lista alguns produtos relacionados ao processo de
ensino. O captulo 3 aborda o FSX, citando algumas caractersticas do simulador, bem como do
protocolo SimConnect oferecido no seu SDK. O captulo 4 descreve o processo de
desenvolvimento do FlightInstructor, exibindo a implementao dos mdulos EasyConnect e
ProcedurePerformer, e descrevendo conceitualmente o mdulo FlightAnalyzer. O captulo 5
explica a execuo de um procedimento aeronutico relacionado ao vo por instrumento
atravs de um estudo de caso. Finalmente, no captulo 6, as principais contribuies so
destacadas e os trabalhos futuros identificados so enumerados.
7
2. Ensino na Aviao
As sees seguintes esclarecem alguns conceitos importantes relacionados ao
processo de ensino na aviao, que servem de base para o desenvolvimento do
FlightInstructor.
2.1. Processo de Ensino
Para exercer a profisso e ser remunerado, o piloto precisa ter a licena de PCA, que
precedida pela licena de PPA. As escolas de aviao oferecem os cursos de PPA e PCA, que
preparam o aluno para a obteno das respectivas licenas. Os cursos so divididos em duas
etapas: terica e prtica. Na etapa terica, o aluno recebe aulas em solo e submetido a um
exame aplicado pela Agncia Nacional de Aviao Civil (ANAC), para obter o Certificado de
Conhecimentos Tericos. Depois de obter o Certificado de Capacitao Fsica, junto ao
Hospital da Aeronutica, o aluno est apto para a etapa prtica, onde recebe instruo nas
aeronaves da escola. Aps uma quantidade mnima de horas voadas, o aluno submetido a
um vo, onde seus conhecimentos so verificados por um instrutor homologado pela ANAC,
para, finalmente, obter a licena almejada. Na etapa prtica do curso de PCA, o aluno ainda
recebe instruo nos simuladores de vo da escola. O Quadro 1 apresenta alguns valores
praticados pela Escola de Aviao Civil do Aeroclube de Bauru, a ttulo de exemplo,
evidenciando o alto custo para a obteno das licenas [3].
Quadro 1. Valores dos cursos de PPA e PCA praticados pelo Aeroclube de Bauru.
Curso Etapa Preo
Piloto Privado de Avio Terica R$ 1.000,00
Prtica R$ 6.930,00 (35 horas)
Piloto Comercial de Avio Terica R$ 1.100,00
Prtica (aeronave) R$ 22.770,00 (115 horas)
Prtica (simulador) R$ 1.800,00 (40 horas)

Vale ressaltar que o material didtico no est incluso nos valores referentes aos
cursos tericos, e que o aluno pode voar como co-piloto, em aeronaves particulares, em troca
de horas de vo, durante a etapa prtica do curso de PCA.
A aeronave de treinamento usada como referncia o AB-115 Aero Boero, ilustrado na
Figura 1, cuja hora de vo custa R$ 198,00 para scios do aeroclube, e para a compra de um
pacote mnimo de 10 horas. A aeronave Cessna 172 Skyhawk mais compatvel com a
realidade profissional dos pilotos, mas sua hora de vo custa R$ 258,00 nas mesmas
circunstncias.

8

Figura 1. Cabine do AB-115 Aero Boero.
O simulador de vo referenciado o ATC-710, cujo valor da hora de vo R$ 45,00, e
classificado como um Instrument Only Simulator (simulador de instrumentos), segundo
Jonathan Gabbai [1]. Os simuladores de vo permitem que o aluno pratique em cenrios
especficos, criados pelo instrutor de vo, e so tolerantes s falhas do aluno. Permitem ainda
que o piloto se familiarize com os padres operacionais da aeronave simulada, bem como com
a posio dos seus instrumentos e comandos.
2.2. Vo por Instrumento
A instruo em simuladores de vo durante o curso de PCA aborda basicamente os
assuntos relacionados ao vo por instrumento, onde o aluno aprende a se orientar no espao
areo baseado nos instrumentos de navegao da aeronave e os auxlios-rdio em terra. o
tipo de vo permitido quando a aeronave se encontra sob Instrument Meteorological Conditions
(IMC), que determinam os limites meteorolgicos entre o vo visual e o vo por instrumento.
Quando o piloto se encontra sob IMC, precisa se submeter s Instrument Flight Rules (IFR),
que so regras e limitaes para esse tipo de vo.
Os procedimentos executados sob IMC so conhecidos como procedimentos IFR.
Entre os procedimentos IFR existentes, pode-se citar: o Standard Instrument Departure (SID),
executado logo aps a decolagem de um aeroporto, durante o afastamento da aeronave; o
Standard Terminal Arrival Route (STAR), durante a aproximao para um aeroporto; e o
Instrument Approach Procedure (IAP), que complementa o STAR, orientando o piloto durante o
pouso no aeroporto. O SID Joo Pessoa, do aeroporto internacional Gilberto Freyre, em Recife,
ilustrado na Figura 2.

9

Figura 2. SID Joo Pessoa, do aeroporto internacional Gilberto Freyre.
Os procedimentos abordados pela ferramenta FlightInstructor, desenvolvida neste
Trabalho de Graduao, so balizados por basicamente dois tipos de auxlio: Non-Directional
Beacon (NDB) e VHF Omni-directional Radio Range (VOR). O smbolo dos auxlios VOR
denominado REC e NDB OLD do SID Joo Pessoa so destacados na Figura 3.


Figura 3. Auxlios VOR REC (esquerda) e NDB OLD (direita).
A Figura 4 exibe a posio de alguns instrumentos no painel da aeronave Beechcraft
Baron 58, disponvel no FSX. Um auxlio VOR pode ser equipado com um Distance Measuring
Equipment (DME), que associado a um instrumento de mesmo nome na aeronave (posio 1,
na Figura 4), indica a sua distncia em relao ao auxlio. O instrumento Course Deviation
Indicator (CDI / posio 2) associado ao auxlio VOR; o instrumento Automatic Direction
10
Finder (ADF / seta amarela, na posio 3), ao auxlio NDB. Cada auxlio emite ondas de rdio
em uma determinada freqncia, que deve ser inserida na pilha de rdios da aeronave
(posio 4). As freqncias do VOR REC (116,90 MHz) e do NDB OLD (380 KHz) esto
selecionadas na Figura 4. A freqncia do VOR est inserida no campo NAV 1 da pilha de
rdios, que representa o CDI principal. A aeronave ilustrada ainda possui um CDI secundrio
(seta verde na posio 3), representado pelo campo NAV 2.


Figura 4. Posio de alguns instrumentos no painel da aeronave Beechcraft Baron 58.
O Quadro 2 descreve algumas unidades de medida usadas na aviao. Essas
unidades so exibidas nos procedimentos aeronuticos, bem como no presente documento.
Quadro 2. Unidades de medida usadas na aviao.
Medida Unidade
Distncia horizontal Milha nutica (1 nm = 1852 metros)
Distncia vertical P (1' = 0,3048 metros)
Freqncia de um NDB Quilohertz (KHz)
Freqncia de um VOR Megahertz (MHz)
Manifold pressure do motor Libra/polegada (psi)
Proa (sentido) Grau
Rotao do motor Rotao por minuto (rpm)
Velocidade horizontal N (kt)
Velocidade vertical P/minuto (fps)
Visibilidade Metro

A proa da aeronave indicada no instrumento heading indicator, que compartilha com
o VOR o mesmo instrumento, chamado horizontal situation indicator, no painel da Figura 4.
O ADF aponta para a posio do auxlio, em relao aeronave. Na Figura 4, a
aeronave est voando na proa 090 (Leste) e o NDB OLD est 50 esquerda dessa proa. Os
IAPs baseados em NDB, conhecidos como procedimentos de no preciso, ainda existem no
Brasil, inclusive com nica opo de IAP em alguns aeroportos, mas so menos comuns em
outros pases. Um IAP baseado em um determinado auxlio quando esse auxlio a principal
referncia disponvel para o pouso. A Figura 5 ilustra o NDB ZBAA, localizado no aeroporto
internacional Beijing Capital, na China.
11

Figura 5. NDB ZBAA (esquerda) e VOR PEK (direita), localizados no aeroporto Beijing Capital.
O funcionamento de um auxlio VOR mais complexo, porm mais preciso e tem um
alcance maior que um NDB. O auxlio VOR possui 360 radiais representadas pelo curso
selecionado no instrumento CDI. A deflexo do CDI indica a posio da aeronave em relao
radial selecionada. Quando o CDI est centralizado, a aeronave se encontra na linha
imaginria que representa a radial. Os IAPs baseados em um auxlio VOR so mais comuns, e
tambm conhecidos como procedimentos de no preciso. A Figura 5 ilustra o VOR PEK,
localizado no aeroporto Beijing Capital.
IAPs baseados no Instrument Landing System (ILS) so considerados procedimentos
de preciso. O ILS um auxlio composto por dois subsistemas que conduzem a aeronave
para o pouso durante a ltima etapa da aproximao: o localizer prov orientao horizontal; e
o glideslope, vertical. A Figura 6 ilustra o localizer presente no ILS do aeroporto municipal Mena
Intermountain, em Arkansas, nos Estados Unidos. O instrumento associado ao auxlio ILS o
mesmo usado pelo VOR, onde o CDI indica a posio da aeronave em relao ao localizer; e
um outro recurso visual (desativado na Figura 4), em relao ao glideslope.


Figura 6. Localizer presente no ILS do aeroporto Mena Intermountain.
O intuito dessa seo no foi esgotar os assuntos relacionados ao vo sob IFR, mas
fornecer uma viso geral sobre os assuntos abordados no documento. Os detalhes sobre o vo
sob IFR, bem como as regras do trfego areo brasileiro, podem ser encontrados no livro
Regulamentos de Trfego Areo Vo por Instrumento [4].
2.3. Ferramentas Relacionadas
Existem muitos produtos dedicados ao processo de ensino na aviao, que vo de
livros a aplicaes interativas para PC. Nesta seo, sero exibidos apenas alguns produtos
considerados mais relevantes, de acordo com a sua categoria.
12
2.3.1. Livros
O livro uma das mdias mais acessveis e usadas nas escolas de aviao, durante o
processo de ensino. Microsoft Flight Simulator X For Pilots e Microsoft Flight Simulator as a
Training Aid so as principais referncias tericas usadas no desenvolvimento do
FlightInstructor [5][6]. Esses livros abordam de forma eficiente os recursos oferecidos pelo FSX,
complementando a parte prtica dos cursos de PPA e PCA. O primeiro, em especial, extrapola
os limites do simulador nos assuntos abordados sendo uma referncia muito importante para
todo piloto que deseja explorar ao mximo os recursos oferecidos pelo FSX.
2.3.2. Cursos com Recursos Multimdia
Os cursos de treinamento da Oxford Aviation Training (OAT) so exemplos de
aplicaes interativas com recursos multimdia para facilitar o ensino de diversos assuntos
relacionados ao curso de PPA e PCA. O fato de oferecerem recursos multimdia e uma certa
interatividade os torna mais dinmicos que um livro, mas ainda assim seu contedo limitado
parte terica dos cursos. Uma interface do curso ilustrada na Figura 7 [7].


Figura 7. Curso multimdia da OAT.
2.3.3. Simuladores de Sistemas Isolados
H ainda as aplicaes que simulam o comportamento de certas interfaces de
interao em uma aeronave, de maneira isolada. Pode-se citar como exemplo o G1000 PC
Trainer, que simula o comportamento do sistema integrado de instrumentos de vo Garmin
G1000, ilustrado na Figura 8 [8]. O sistema equipa muitas aeronaves produzidas atualmente.
Esse tipo de simulador no representa um curso em si, mas pode ser usado como tal por um
instrutor. Sua limitao simular apenas um dos sistemas da aeronave, possibilitando um
treinamento muito especfico.
Algumas aeronaves oferecidas pelo FSX so equipadas com o Garmin G1000 com
quase todas as suas funcionalidades, permitindo ao usurio simular o seu funcionamento junto
13
a outros sistemas da aeronave. O FSX oferece um captulo especfico em seu Learning Center,
descrito a seguir, dedicado ao uso do G1000, mas j h livros que abordam o assunto de
maneira mais aprofundada, como o Glass Simming: Garmin 1000, do autor Bill Stack, ainda em
desenvolvimento.


Figura 8. Garmin G1000 na cabine de um Cessna 172 Skyhawk.
2.3.4. Learning Center do FSX
O prprio FSX oferece o Learning Center, ilustrado na Figura 9, que uma seo
destinada ao ensino dos conceitos bsicos da aviao para diferentes etapas dos cursos de
PPA e PCA. Alm do material escrito e bem ilustrado para a parte terica, possui checkrides
(testes prticos) e misses, que analisam o comportamento do aluno em situaes especficas.
Ainda h a possibilidade de um instrutor se conectar remotamente ao PC do aluno e interagir
com a aeronave como se estivessem juntos.


Figura 9. Interface do Learning Center do FSX.
14
Nos checkrides, o instrutor virtual do Learning Center passa algumas instrues para o
aluno e verifica se as executou corretamente, aprovando-o ou no para a prxima etapa do
curso. Sua limitao abordar apenas um nico procedimento para cada etapa. Alm disso, o
SDK do FSX no oferece recursos para a modificao ou criao de novos checkrides.
O conceito de misso foi apresentado no FSX, e representa um conjunto de objetivos
que o piloto precisa cumprir para ter sucesso. O SDK inclusive permite a criao de novas
misses, mas os recursos que oferece so limitados para uma anlise mais precisa das aes
executadas pelo piloto.
O FSX ainda permite a criao de vdeos, que um instrumento interessante de ensino
quando se deseja apenas ilustrar a execuo de uma tarefa. Esse recurso oferecido como
material complementar pelos livros [5] e [6].
2.3.5. Instrutores de Vo Virtuais
O FSFlyingSchool representa o que h de mais prximo conceitualmente ao mdulo
FlightAnalyzer da ferramenta FlightInstructor [9]. O FSFlyingSchool simula um instrutor de vo
virtual para o FSX (bem como outras verses do simulador) que analisa e orienta o aluno,
usando udio e texto, em diversas etapas do vo. Entre outros recursos, oferece um plano de
carreira para o aluno, onde so analisados diversos aspectos da sua performance, destacando
os pontos crticos e sugerindo melhorias. Uma interface da aplicao ilustrada na Figura 10.


Figura 10. Interface do FSFlyingSchool.
15
3. Microsoft Flight Simulator X
A Microsoft lanou a primeira verso do seu simulador em 1982 [10]. Vinte e cinco anos
depois, aps vrias verses e melhorias, foi lanada a verso X. Interfaces das verses 1 e X,
respectivamente, so exibidas na Figura 11.


Figura 11. Primeira verso do Flight Simulator (esquerda) e sua verso X (direita).
O FSX est disponvel nas verses Standard e Deluxe. A verso Deluxe oferece mais
aeronaves, aeroportos e o SDK, que permite o desenvolvimento de aplicaes para o
simulador. O FSX considerado um simulador de baixo custo, pois sua verso Standard pode
ser adquirida por menos de R$ 100,00 na maioria das lojas de informtica brasileiras.
Segundo os autores dos livros [5] e [6], que so instrutores de vo, o FSX simula com
preciso diversos aspectos do vo real, e usado como ferramenta de ensino em vrias
escolas de aviao.


Figura 12. Dispositivos de interao com o FSX.
16
O FSX pode ser utilizado com mouse e teclado, como dispositivos de entrada. Segundo
os autores citados, o suficiente para us-lo de forma eficiente em muitos assuntos do curso.
Porm, para aqueles que desejam aumentar a imerso na simulao, pode-se adquirir mais
alguns dispositivos como yoke ou joystick, quadrante de manetes, pedais e tracker (rastreador)
dos movimentos da cabea do usurio. A Figura 12 ilustra os dispositivos de interao citados,
alm de outros disponveis no mercado.
A funo do yoke ou joystick controlar os movimentos de pitch e roll da aeronave.
Como exemplo de yoke, pode-se citar o Flight Sim Yoke da CH Products, que ainda possui
mais trs eixos para o controle dos principais manetes de um monomotor, como o manete que
controla a velocidade da aeronave [14]. Os pedais controlam o movimento de yaw da
aeronave, alm de fre-la em solo. Pode-se citar o Pro Pedals da CH Products como exemplo
[14]. A funo do tracker citado controlar de forma intuitiva a viso do piloto dentro da cabine
da aeronave, quando est exibindo o seu painel 3D. O TrackIR 4:Pro da NaturalPoint um dos
mais conhecidos no meio [15].


Figura 13. Cenrio de Las Vegas produzido pela MegaScenery.
H uma grande comunidade de desenvolvedores dedicados ao FSX, produzindo
cenrios, aeronaves e aplicaes, muitas vezes gratuitos. So dezenas de novos plug-ins
sendo oferecidos todos os dias, em sites como o FlightSim.com, totalizando milhares de
cenrios e aeronaves disponveis para o simulador [11]. Tambm existem empresas dedicadas
ao desenvolvimento de plug-ins com qualidade superior aos recursos oferecidos pelo
simulador, que podem custar o mesmo preo do FSX, dependendo da sua complexidade.
Pode-se citar como exemplos a Carenado, que desenvolve aeronaves, e a MegaScenery, que
produz cenrios muito realistas, como o de Las Vegas, ilustrado na Figura 13 [12][13].
17
3.1. SimConnect
O SimConnect um protocolo de comunicao oferecido pelo SDK do FSX, que
permite o desenvolvimento de aplicaes distribudas para o simulador. O protocolo baseado
na arquitetura cliente/servidor e oferece acesso assncrono a variveis e eventos do FSX, que
atua como o servidor [16].
As variveis representam o estado da simulao e os eventos compreendem as aes
que o usurio pode executar para modificar seu estado. Algumas variveis s permitem a
leitura do seu valor, como a que representa o interruptor que aciona os instrumentos de
navegao em uma aeronave. Tal varivel pode assumir os valores ligado e desligado. Para
modific-la, necessrio disparar um evento especfico que alterna a posio do interruptor
mencionado. Vale ressaltar que, para alguns componentes, h vrios eventos relacionados,
como o caso do manete de potncia, com mais de 50 eventos para manipul-lo. H centenas
de variveis e eventos disponveis na Application Programming Interface (API), o que abre
muitas possibilidades de interao com o simulador. um campo aberto para o
desenvolvimento de aplicaes relacionadas aviao.
O padro publisher/subscriber usado como base da comunicao. O cliente solicita a
leitura ou modificao do valor de uma varivel ou envia um evento para o servidor, que faz o
processamento de acordo com o nvel de prioridade previamente estabelecido.
A linguagem de programao padro utilizada pela API do SimConnect C++, mas
oferece wrappers para cdigo gerenciado, como C# e VB.NET. A linguagem escolhida para o
desenvolvimento do FlightInstructor foi C# por conta das ferramentas oferecidas para a
linguagem, que a torna mais produtiva que C++.
O SDK do FSX s oferecido pela verso Deluxe do simulador, mas as aplicaes
desenvolvidas podem ser executadas em sua verso Standard ou em clientes sem o simulador,
quando a aplicao distribuda.
O SDK das verses anteriores do Flight Simulator no oferecia um protocolo de
comunicao como o SimConnect. Os desenvolvedores de aplicaes usavam freqentemente
uma biblioteca chamada FSUIPC, desenvolvida pelo Peter Dowson, que oferece acesso aos
recursos do simulador mediante endereamento de memria [17]. A escolha pelo uso do
SimConnect se deve ao fato de ser um protocolo oferecido pela prpria Microsoft, que oferece
suporte aos desenvolvedores. Alm disso, FSUIPC no suporta diretamente o desenvolvimento
de aplicaes usando a linguagem C#.
Para os usurios da linguagem Java, ainda h a biblioteca jSimConnect, que uma re-
implementao em Java do protocolo SimConnect [18]. Possui uma excelente documentao e
atualizaes constantes. Permite que a aplicao cliente seja executada em qualquer
plataforma suportada por uma mquina virtual Java.
18
4. FlightInstructor
O FlightInstructor um instrutor de vo virtual para o FSX que complementa a etapa
prtica do curso de PCA, abordando alguns assuntos relacionados ao vo sob IFR. Ele
permitir que o aluno pratique alguns conceitos aprendidos no curso, em especial durante o
treinamento no simulador, sem a necessidade presencial de um instrutor de vo. Vale a pena
ressaltar que o FlightInstructor no substitui o instrutor real de vo, atuando apenas como
material complementar durante o aprendizado.
O FlightInstructor composto pelos mdulos EasyConnect, ProcedurePerformer e
FlightAnalyzer. O EasyConnect uma camada de abstrao para o SimConnect, que o
protocolo de comunicao com o FSX oferecido pelo seu SDK. O ProcedurePerformer
responsvel pela execuo de alguns procedimentos IFR como SID, STAR e IAP. Cada tarefa
executada pelo instrutor virtual exibida para o aluno na interface textual do mdulo, como
uma forma de orient-lo na execuo do procedimento. O FlightAnalyzer, por sua vez, ser
responsvel pela anlise de um determinado procedimento executado pelo aluno, e ter como
finalidade apontar seus erros e sugerir correes.
O processo de desenvolvimento dos mdulos EasyConnect e ProcedurePerformer
passa pelas seguintes etapas, descritas nas prximas sees: estudo dos conceitos
relacionados ao domnio da aplicao, estudo do protocolo SimConnect e suas particularidades
para C#, desenvolvimento do mdulo EasyConnect e desenvolvimento do mdulo
ProcedurePerformer. A ltima seo descreve conceitualmente o mdulo FlightAnalyzer, bem
como sua relao com outros produtos relacionados ao FlightInstructor.
4.1. Domnio da Aplicao
Os conceitos relacionados ao domnio da aplicao foram pesquisados sob demanda
nos livros [5] e [6], de acordo com a etapa do desenvolvimento. Porm, importante ter em
mos fontes complementares de pesquisa relacionadas aos conceitos do vo por instrumento,
a legislao do trfego areo e os manuais de operao das aeronaves presentes na
aplicao.
4.2. SimConnect para C#
A documentao para o uso do SimConnect fornecida pelo SDK abrangente, e traz
vrios exemplos de aplicaes simples para ilustrar seus principais recursos. Porm, a
compreenso do seu funcionamento no trivial e a API est focada no uso da linguagem
C++, com apenas trs exemplos escritos em C#.
O processo de desenvolvimento de uma aplicao para o FSX exige muitas linhas de
cdigo distribudas em diversas estruturas da linguagem para a execuo de tarefas
relativamente simples. Tomando como referncia os exemplos de aplicao oferecidos pelo
SDK que so escritos em C#, uma aplicao com os requisitos mnimos necessrios para o
19
gerenciamento da posio do manete de potncia da aeronave poderia ter a seguinte
configurao:

...

using Microsoft.FlightSimulator.SimConnect;
using System.Runtime.InteropServices;

class ThrottleLever : Form {

public const int SimConnectMessage = 0x0402;

public enum DefineID {
ThrottleLever
}

public enum EventID {
OneSecond,
Pause
}

public enum GroupID { }

public enum RequestID {
ThrottleLever
}

private ThrottleLeverStr throttleLever;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi,
Pack = 1)]
public struct ThrottleLeverStr {
public double value;
}

private SimConnect simConnect;

public ThrottleLever() {
...
try {
simConnect = new SimConnect("SimConnect", Handle,
SimConnectMessage, null, 0);
simConnect.OnRecvOpen
+= new SimConnect.RecvOpenEventHandler(
simConnect_OnRecvOpen);
simConnect.OnRecvQuit
+= new SimConnect.RecvQuitEventHandler(
simConnect_OnRecvQuit);
simConnect.OnRecvException
+= new SimConnect.RecvExceptionEventHandler(
simConnect_OnRecvException);
simConnect.OnRecvEvent
+= new SimConnect.RecvEventEventHandler(
simConnect_OnRecvEvent);
simConnect.SubscribeToSystemEvent(
Component.EventID.OneSecond, "1Sec");
simConnect.SubscribeToSystemEvent(Component.EventID.Pause,
"Pause");
} catch (COMException e) { }
}

20
public double GetThrottleLever() {
return throttleLever.value;
}

public void SetThrottleLever(double value) {
throttleLever.value = value;
simConnect.SetDataOnSimObject(DefineID.ThrottleLever,
SimConnect.SIMCONNECT_OBJECT_ID_USER, 0,
throttleLever);
}

public void OneSecond() { }

public void Pause(bool isPaused) { }

private void simConnect_OnRecvOpen(SimConnect sender,
SIMCONNECT_RECV_OPEN data) {
simConnect.AddToDataDefinition(DefineID.ThrottleLever,
"GENERAL ENG THROTTLE LEVER POSITION:1", "Percent",
SIMCONNECT_DATATYPE.FLOAT64, 0.1f,
SimConnect.SIMCONNECT_UNUSED);
simConnect.RegisterDataDefineStruct<ThrottleLeverStr>(
DefineID.ThrottleLever);
simConnect.RequestDataOnSimObject(RequestID.ThrottleLever,
DefineID.ThrottleLever,
SimConnect.SIMCONNECT_OBJECT_ID_USER,
SIMCONNECT_PERIOD.VISUAL_FRAME,
SIMCONNECT_DATA_REQUEST_FLAG.CHANGED, 0, 0, 0);
simConnect.OnRecvSimobjectData
+= new SimConnect.RecvSimobjectDataEventHandler(
simConnect_OnRecvSimobjectData);
}

private void simConnect_OnRecvQuit(SimConnect sender,
SIMCONNECT_RECV data) { }

private void simConnect_OnRecvException(SimConnect sender,
SIMCONNECT_RECV_EXCEPTION data) { }

private void simConnect_OnRecvEvent(SimConnect sender,
SIMCONNECT_RECV_EVENT data) {
switch (data.uEventID) {
case (uint)Component.EventID.OneSecond:
OneSecond();
break;
case (uint)Component.EventID.Pause:
bool isPaused = false;
if (data.dwData == 1) {
isPaused = true;
}
Pause(isPaused);
break;
}
}

private void simConnect_OnRecvSimobjectData(SimConnect sender,
SIMCONNECT_RECV_SIMOBJECT_DATA data) {
switch ((RequestID)data.dwRequestID) {
case RequestID.ThrottleLever:
throttleLever = (ThrottleLeverStr)data.dwData[0];
break;
21
}
}

protected override void DefWndProc(ref Message m) {...}

}

Todos os exemplos oferecidos para C# usam classes que herdam do tipo
System.Windows.Forms.Form, por causa do seu atributo Handle, usado na inicializao do
SimConnect indicado em simConnect = new SimConnect(...). Handle responsvel
pela chamada ao mtodo void DefWndProc(...), que captura para a aplicao as
mensagens relativas ao SimConnect, emitidas pelo FSX. Cada varivel a ser gerenciada pela
aplicao precisa ter um identificador que a represente nos enums DefineID e RequestID, e
ter o valor do seu estado armazenado em um struct, exemplificado pelo
ThrottleLeverStr na aplicao. EventID guarda os identificadores dos eventos presentes
na aplicao. GroupID, que est vazio no exemplo, agrupa os eventos de acordo com a
prioridade com a qual devem ser tratados pelo FSX. O atributo value de ThrottleLeverStr
representa a posio do manete de potncia na simulao. Cada struct pode armazenar
mais de uma varivel, em atributos diferentes.
A inicializao da varivel feita no mtodo void simConnect_OnRecvOpen(...),
que chamado logo aps a conexo com o servidor. Durante a inicializao, em
simConnect.AddToDataDefinition(...), o string "GENERAL ENG THROTTLE
LEVER POSITION:1", que pode ser encontrado na documentao do SDK, indica ao servidor
que a varivel manete de potncia deve ser associada ao DefineID.ThrottleLever. O
valor 0.1f indica a variao mnima da posio do manete a ser considerada pelo servidor.
Em simConnect.RequestDataOnSimObject(...), os argumentos
...PERIOD.VISUAL_FRAME e ...PERIOD.CHANGED so usados para indicar que
ThrottleLeverStr ser atualizado na chamada ao mtodo void
simConnect_OnRecvSimobjectData(...) a cada frame visual exibido pelo FSX, mas
apenas quando o estado da varivel for modificado na simulao. Entre outras, a API ainda
oferece as opes de atualizao ...PERIOD.SECOND, onde os structs so atualizados a
cada segundo; e ...PERIOD.SIM_FRAME, a cada frame da simulao, para variveis muito
crticas.
Os mtodos responsveis pela leitura e modificao da posio do manete so
respectivamente double GetThrottleLever() e void SetThrottleLever(...). Para
possibilitar essa abordagem em um protocolo assncrono de comunicao foi necessrio mudar
a estrutura sugerida pelas aplicaes de exemplo. O mtodo que modifica a posio do manete
apenas atualiza o atributo value de ThrottleLeverStr e chama o mtodo
simConnect.SetDataOnSimObject(...) passando uma referncia ao struct como um
dos argumentos. O mtodo que l a posio do manete, por outro lado, apenas retorna o valor
22
do atributo value de ThrottleLeverStr, que atualizado de acordo com as opes
selecionadas durante a inicializao do componente.
Durante o processo de estudo do SimConnect, foram consultados alguns fruns
dedicados ao assunto na Internet, como os da AVSIM e FsDeveloper [19][20]. Eles possuem
uma comunidade ativa de desenvolvedores e so fontes de pesquisa fundamentais para a
compreenso de alguns detalhes especficos e limitaes da API. Dentre os exemplos de
aplicao escritos em C++ oferecidos pelo SDK, vrios foram traduzidos pela comunidade para
C#. Essa traduo muito importante para os desenvolvedores iniciantes, que optaram pelo
cdigo gerenciado, j que a utilizao de alguns recursos oferecidos pelo SDK no ilustrada
pelos seus poucos exemplos disponveis em C#. Alm disso, algumas inconsistncias
existentes entre as APIs para C++ e C# foram resolvidas pelos tradutores desses exemplos,
com algumas solues alternativas.
O Service Pack 1 (SP1) do SDK do FSX corrigiu alguns problemas e adicionou novos
recursos. Porm, ainda h alguns problemas como a existncia de variveis e eventos que
esto disponveis na API, mas no foram devidamente implementados. Aps o lanamento do
SP2 do FSX, foi disponibilizado o SP2 do SDK, que basicamente o torna compatvel com a
nova atualizao do simulador.
4.3. Mdulo EasyConnect
O mdulo EasyConnect representa uma camada de abstrao entre uma aplicao a
ser desenvolvida para o FSX e a API para C# oferecida pelo SimConnect. Seu objetivo
separar a lgica da aplicao das particularidades do SimConnect, tornando seu cdigo legvel
e gerencivel. O desenvolvimento de um mdulo como o EasyConnect teve como motivao a
demanda existente em fruns como [19] e [20] por uma ferramenta que simplificasse o uso do
SimConnect. Tomando como exemplo a aplicao exibida na seo anterior, possvel
perceber que a monitorao de mais variveis da simulao aumentaria substancialmente o
seu cdigo, dificultando a sua compreenso e manuteno. No contexto do FlightInstructor, o
EasyConnect representa o mdulo de comunicao entre os mdulos ProcedurePerformer e
FlightAnalyzer, e o FSX.
A abstrao fornecida pelo EasyConnect consiste em representar as variveis da
simulao como uma coleo de componentes, com mtodos para ler e modificar seus valores.
A aeronave que est sendo controlada pelo usurio do FSX, por exemplo, interpretada como
uma coleo de componentes especficos que representam os seus pontos de interao, como
botes, interruptores, mostradores, manetes, etc. Em seu estgio atual de desenvolvimento, o
EasyConnect prioriza as necessidades do mdulo ProcedurePerformer, fornecendo os
componentes necessrios para a execuo dos procedimentos abordados.
O Quadro 3 descreve alguns componentes oferecidos pelo EasyConnect, que sero
referenciados no documento. A descrio tem como finalidade esclarecer de maneira
superficial a funo de cada componente presente na aeronave. A Figura 14 ilustra o painel do
Beechcraft Baron 58 e indica a posio dos componentes citados.
23
Quadro 3. Descrio de alguns componentes oferecidos pelo EasyConnect.
Componente Descrio
APAltitudeKnob (posio 1
na Figura 14)
Altitude mantida pelo piloto automtico da aeronave (PA).
Aceita valores inteiros, positivos e mltiplos de 100'
APAltitudeSwitch (1) Acionamento do modo de controle de altitude pelo PA. Aceita
os valores ligado (true) e desligado (false)
APApproachSwitch (1) Acionamento do modo de controle de proa e altitude para o
localizer e glideslope de um ILS pelo PA. Aceita os valores
ligado (true) e desligado (false)
APHeadingKnob (2) Proa mantida pelo PA. Aceita valores positivos e mltiplos de 1
APHeadingSwitch (1) Modo de controle de proa pelo PA. Aceita os valores ligado
(true) e desligado (false)
APMasterSwitch (1) Acionamento geral do PA. Aceita os valores ligado (true) e
desligado (false)
APNAV1Switch (1) Acionamento do modo de controle de proa para a radial do
VOR indicado no CDI principal pelo PA. Aceita os valores
ligado (true) e desligado (false)
APVerticalSpeedKnob (1) Velocidade vertical mantida pelo PA. Aceita valores positivos e
mltiplos de 100'
EngManifoldPressure (3) Manifold pressure dos motores. Assume valores positivos e
mltiplos de 0,1 psi
EngRPM (4) Rotao dos motores. Assume valores positivos e mltiplos de
5 rpm
FlapsHandle (5) Posio dos flaps. Aceita valores positivos e mltiplos de 1
GearHandle (6) Posio do trem de pouso. Aceita os valores estendido (true)
e retrado (false)
HeadingIndicator (2) Proa da aeronave. Assume valores positivos, mltiplos de 0,1,
entre 0 e 360
IndicatedAltitude (8) Altitude indicada da aeronave. Assume valores positivos e
mltiplos de 0,1'
IndicatedAirspeed (9) Velocidade indicada da aeronave. Assume valores positivos e
mltiplos de 0,1 kt
NAV1CDI (2) Deflexo do CDI principal. Assume valores entre 1 e 1
NAV1Frequency (10) Freqncia selecionada no NAV 1 da pilha de rdios. Aceita
valores positivos e mltiplos de 0,01 MHz
NAV1Knob (2) Curso selecionado no CDI principal. Aceita valores positivos,
mltiplos de 1, entre 0 e 360
NAVDME (11) Distncia indicada no DME. Assume valores positivos e
mltiplos de 0,1 nm
PropellerLever (12) Manete de passo de hlice. Aceita valores positivos entre 0 e
100%
ThrottleLever (13) Manete de potncia. Aceita valores positivos entre 0 e 100%

24

Figura 14. Localizao de alguns componentes no painel da aeronave Beechcraft Baron 58.
4.3.1. Arquitetura
Os componentes oferecidos pelo EasyConnect precisam ser carregados pela
aplicao, antes da sua utilizao, para que sejam inicializados corretamente. Essa
necessidade de carregamento tem como finalidade poupar a comunicao com o servidor,
evitando que componentes no utilizados pela aplicao gerem trfego de informao e
processamento desnecessrios para o FSX. Cada componente possui um mtodo para
carregamento e representado por um atributo especfico na classe EasyConnect. O
componente manete de potncia, por exemplo, representado pelo atributo propellerLever
e carregado pelo mtodo void LoadThrottleLever(). A arquitetura simplificada do
EasyConnect ilustrada na Figura 15.


Figura 15. Arquitetura do mdulo EasyConnect.
Os componentes so armazenados em classes que herdam da classe Component,
que guarda os enums DefineID, EventID, GroupID e RequestID, equivalentes aos enums
25
de mesmo nome na classe da seo anterior. Cada componente segue o padro da classe a
seguir, que representa o manete de potncia:

public class ThrottleLever : Component {

public VariableStr str;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi,
Pack = 1)]
public struct VariableStr {
public double value;
}

public ThrottleLever(SimConnect simConnect) : base(simConnect) {
simConnect.AddToDataDefinition(DefineID.ThrottleLever,
"GENERAL ENG THROTTLE LEVER POSITION:1", "Percent",
SIMCONNECT_DATATYPE.FLOAT64, 0.1f,
SimConnect.SIMCONNECT_UNUSED);
simConnect.RegisterDataDefineStruct<VariableStr>(
DefineID.ThrottleLever);
simConnect.RequestDataOnSimObject(RequestID.ThrottleLever,
DefineID.ThrottleLever,
SimConnect.SIMCONNECT_OBJECT_ID_USER,
SIMCONNECT_PERIOD.VISUAL_FRAME,
SIMCONNECT_DATA_REQUEST_FLAG.CHANGED, 0, 0, 0);
simConnect.OnRecvSimobjectData
+= new SimConnect.RecvSimobjectDataEventHandler(
simConnect_OnRecvSimobjectData);
}

public double GetVar() {
return str.value;
}

public void SetVar(double value) {
str.value = value;
simConnect.SetDataOnSimObject(DefineID.ThrottleLever,
SimConnect.SIMCONNECT_OBJECT_ID_USER, 0, str);
}

private void simConnect_OnRecvSimobjectData(SimConnect sender,
SIMCONNECT_RECV_SIMOBJECT_DATA data) {
if ((RequestID)data.dwRequestID == RequestID.ThrottleLever) {
str = (VariableStr)data.dwData[0];
}
}

}

Cada componente tem seu estado armazenado em um struct, permitindo que
possam ser carregados individualmente. O struct VariableStr {...} guarda a posio
do manete de potncia em um double. equivalente ao struct ThrottleLeverStr
{...} na classe da seo anterior.
Algumas variveis do SimConnect s permitem a leitura do seu estado, como a que
representada pelo componente APMasterSwitch, de EasyConnect. necessrio disparar um
evento relacionado varivel para modificar seu estado, como o AP_MASTER, que alterna o
26
seu valor. O componente APMasterSwitch oferece o mtodo void KeyToggle(), que
dispara o evento mencionado. H alguns componentes semelhantes, como o
NAV1Frequency, cujo evento disponvel exige que o valor de entrada seja formatado como um
binary-coded decimal. O componente oferece o mtodo void KeySet(double value), que
faz as converses necessrias e dispara o evento.
O construtor da classe responsvel pela inicializao do componente. As opes de
atualizao em simConnect.RequestDataOnSimObject(...) foram selecionadas
previamente de acordo com a natureza do componente em questo. Para o componente que
exibe a velocidade da aeronave, por exemplo, foi escolhida a opo ...PERIOD.SECOND, j
que o componente sofre variaes durante praticamente toda a simulao. Essa opo
tambm tem a finalidade de poupar a comunicao com o servidor, evitando a queda de
performance da simulao. Por outro lado, o componente manete de potncia s precisa ser
ajustado em alguns momentos especficos durante o vo, permitindo ser atualizado pela opo
...PERIOD.VISUAL_FRAME.
O SimConnect oferece variveis que informam a presena ou configurao de alguns
dispositivos relevantes na aeronave. O estado dessas variveis agrupado no componente
Capabilities, e tem o seu valor atualizado apenas uma vez, durante o seu carregamento. O
EasyConnect ainda oferece um componente que permite a impresso de um string sem
formatao na interface textual do simulador (Text), alm de algumas constantes que facilitam
a converso das unidades de medida usadas pelo SimConnect.
A aplicao que utiliza o EasyConnect precisa implementar a interface
EasyListener, exibida a seguir, e se registrar como listener chamando o mtodo void
AddListener(EasyListener listener) da classe EasyConnect, para ser notificado de
alguns eventos de sistema lanados pelo FSX.

public interface EasyListener {

void Open();

void Quit();

void Exception(string exception);

void OneSecond();

void Pause(bool isPaused);

}

O mtodo void Open() de cada listener chamado quando a conexo com o FSX
aberta com sucesso; void Quit(), quando a conexo com o servidor fechada; void
Exception(string exception), quando alguma exceo lanada pelo FSX, passando o
seu cdigo como parmetro, que pode ser consultado na documentao do SDK; void
OneSecond(), a cada segundo de simulao, que pode ser usado como temporizador da
27
aplicao; e void Pause(bool isPaused), quando o evento que alterna o estado da
simulao entre os valores paused e unpaused lanado pelo servidor.
4.3.2. Aplicao de Exemplo
Tomando como referncia as funcionalidades da aplicao exibida na seo anterior, a
verso equivalente em uma aplicao que utiliza o EasyConnect poderia ter a seguinte
configurao:

...
using EasyConnect;

class ThrottleLever : Form, EasyListener {

private EasyConnect ec;

public ThrottleLever() {
...
ec = new EasyConnect();
ec.Connect(this);
ec.AddListener(this);
}

public double GetThrottleLever() {
return ec.throttleLever.GetVar();
}

public void SetThrottleLever(double value) {
ec.throttleLever.SetVar(value);
}

public void Open() {
ec.LoadThrottleLever();
}

public void Quit() { }

public void Exception(string exception) { }

public void OneSecond() { }

public void Pause(bool isPaused) { }

protected override void DefWndProc(ref Message m) {...}

}

Essa aplicao tem o cdigo mais legvel e gerencivel, pois no precisa lidar com as
particularidades da API oferecida pelo SimConnect. Dessa forma, os usurios do EasyConnect
podem desenvolver mais facilmente uma aplicao para o FSX, mesmo que no conheam os
detalhes da API.
28
4.4. Mdulo ProcedurePerformer
O mdulo ProcedurePerformer (PP) responsvel pela execuo de procedimentos
aeronuticos, atuando como um instrutor de vo virtual na etapa de instruo onde ensinada
a maneira correta de se executar o procedimento, usando a aeronave escolhida. Cada tarefa
executada pelo instrutor exibida para o aluno pela interface grfica do PP, que integrada
interface textual do FSX. Durante a execuo do procedimento, o aluno no interage com a
aplicao. A motivao para o desenvolvimento do presente mdulo vem da dificuldade
encontrada pelos alunos em executar de maneira correta as etapas de um procedimento.
O procedimento representado como uma mquina de estados, onde cada estado
representa um determinado trecho do procedimento. No fim de alguns trechos, o procedimento
pode tomar rumos diferentes, dependendo do estado atual da simulao. A diviso do
procedimento em trechos feita estrategicamente nos pontos onde o piloto precisa executar
um conjunto de tarefas.
Durante o vo, o aluno carrega o PP e escolhe o procedimento a ser executado dentre
os disponveis. Cada procedimento armazenado em um arquivo de configurao, que contm
todas as informaes relevantes para sua execuo. PP detecta a aeronave em uso e a
procura em seu banco de aeronaves. Cada aeronave tambm armazenada em um arquivo de
configurao, que contm seus padres operacionais. Os arquivos de procedimentos e
aeronaves so carregados e interpretados pelos parsers apropriados de PP. A adio de
arquivos de configurao torna a aplicao expansvel para novos procedimentos e aeronaves.
4.4.1. Arquitetura
PP usa o mdulo EasyConnect para se comunicar com o FSX, evitando as
particularidades do SimConnect. A arquitetura simplificada do PP ilustrada na Figura 16.


Figura 16. Arquitetura do mdulo ProcedurePerformer.
29
Um procedimento (Procedure) possui alguns identificadores e uma hash table que
armazena os seus estados (Dictionary<string, State> states), tendo como chave o
nome do estado. Cada estado (State) tem uma lista de tarefas (List<Task> tasks)
associadas e uma lista de condies de mudana de estado (List<Change> changes). Uma
tarefa (Task) corresponde a uma ao do piloto durante a execuo do procedimento, e possui
um nome (string name) e um valor (string value). A condio de mudana (Change)
basicamente composta por uma lista de condies individuais (List<Condition>
conditons) e o prximo estado (string nextState) a ser carregado caso todas as
condies individuais sejam satisfeitas. A condio individual (Condition) possui um nome
(string name), que geralmente representa um componente da aeronave, a relao (string
relation), e um valor (string value).
A classe ProcedurePerformer tem uma fila de tarefas (Queue<Task> tasks) que
alimentada por cada estado alcanado, pois pode haver mudana de estado sem que todas
as suas tarefas tenham sido executadas. Alm disso, h o conceito de tarefas concorrentes
(Task concTask), que so executadas paralelamente a outras tarefas at a sua concluso ou
mudana de estado. Algumas tarefas so simples e s precisam de um ciclo da aplicao para
ser executadas, como mudar a posio de um interruptor na aeronave. Por outro lado, algumas
precisam de mais de um ciclo, pois envolvem mais de um componente para sua concluso,
como o caso de se modificar a posio do manete de potncia da aeronave para que ela
atinja uma determinada velocidade. Enquanto pequenos incrementos so feitos na posio do
manete, verificada a velocidade atual no componente velocmetro. PP possui mtodos
auxiliares para o tratamento dessas tarefas complexas. A execuo de uma tarefa tambm
depende do tipo de aeronave utilizada e seus componentes disponveis. Vale ressaltar que o
SimConnect permite a execuo de tarefas complexas, como a citada acima, de maneira
direta, com apenas a chamada de um mtodo. Porm, PP tem a inteno de simular um
instrutor de vo de maneira realista, passando pelos passos descritos.
4.4.2. Ciclo da Aplicao
O ciclo da aplicao ocorre a cada segundo da simulao. Como o PP utiliza o
EasyConnect em sua comunicao com o FSX, precisa implementar a interface
EasyListener. Conseqentemente, alm de outros eventos de sistema, notificado a cada
segundo de simulao atravs da chamada ao seu mtodo void OneSecond(), exibido a
seguir, que representa um temporizador.

public void OneSecond() {
PrintStatus();
if (!isPaused) {
if (taskInterval == 0) {
if (tasks.Count > 0) {
PerformTask(tasks.Peek());
if (!isPerformingTask) {
tasks.Dequeue();
30
taskInterval = 4;
...
}
}
} else {
taskInterval--;
}
if (concTask != null) {
PerformTask(concTask);
if (!isPerformingTask) {
concTask = null;
}
}
foreach (Change change in currentState.changes) {
CheckChange(change);
}
if (timer > 0) {
timer--;
}
}
}

O mtodo void PrintStatus() responsvel pela impresso do status da
execuo do procedimento na interface grfica textual do PP, ilustrado na Figura 17. Na
primeira linha (Tasks) so exibidas as ltimas tarefas executadas, incluindo a atual. Na
segunda linha, so exibidas a tarefa concorrente (Concurrent task) que est sendo executada
(se houver) e o valor atual do cronmetro (Timer) simulado pelo PP. A terceira linha (Change)
exibe as condies de mudana de estado, com suas condies individuais.


Figura 17. Interface grfica textual do mdulo ProcedurePerformer.
Se a simulao no estiver interrompida, o mtodo void PerformTask(Task
task), exibido a seguir, executa a primeira tarefa da fila. O mtodo composto por um longo
switch que recebe o nome da tarefa (task.name) como parmetro.

public void PerformTask(Task task) {
isPerformingTask = true;
switch (task.name) {
...
case "EngManifoldPressure":
SetEngManifoldPressure(Double.Parse(task.value));
break;
case "EngRPM":
switch (task.value) {
case "Max":
SetPropellerLever(100);
break;
default:
SetEngRPM(Int32.Parse(task.value));
break;
31
}
break;
...
case "GearHandle":
ec.gearHandle.SetVar(Boolean.Parse(task.value));
isPerformingTask = false;
break;
...
case "Profile":
foreach (Task profTask in profiles[task.value].tasks) {
EnqueueTask(profTask);
}
isPerformingTask = false;
break;
...
}
}

A tarefa com o nome GearHandle, que manipula a posio do trem de pouso da
aeronave, executada em apenas um lao com a chamada ao mtodo
ec.gearHandle.SetVar(task.value), da classe EasyConnect, tendo como parmetro o
valor da tarefa. A tarefa EngManifoldPressure, que controla o parmetro manifold pressure
do motor da aeronave, considerada uma tarefa complexa, sendo executada em mais de um
ciclo, por um mtodo auxiliar. O mtodo SetEngManifoldPressure(...) recebe o valor da
tarefa e faz pequenos ajustes no componente manete de potncia (ec.throttleLever), at
que o componente manifold pressure (ec.engManifoldPressure) atinja o valor desejado.
EngRPM ilustra uma tarefa que pode ter valores de tipos diferentes. Ela controla a rotao do
motor da aeronave (ec.engRPM) manipulando o manete de passo de hlice
(ec.propellerLever), nas aeronaves que possuem esse componente. Se o valor da tarefa
for Max, o mtodo void SetPropellerLever(double value) chamado, tendo como
parmetro 100%. Caso contrrio, void SetEngRPM(int value) chamado com o
parmetro numrico task.value. Caso a aeronave no possua o manete de passo de hlice
(ec.propellerLever == null), o mtodo manipula o manete de potncia para atingir o
objetivo. Finalmente, Profile ilustra uma tarefa que se desdobra em outras tarefas. O
conceito de profile ser explicado na prxima subseo, mas ele pode ser interpretado, no
contexto do PP, como uma lista de tarefas que so adicionadas fila da classe
ProcedurePerformer, durante a execuo da tarefa Profile.
Voltando execuo do mtodo void OneSecond(), aps a chamada
PerformTask(tasks.Peek()), se a tarefa atual foi finalizada, ser removida da fila de
tarefas. Em seguida, PerformTask(concTask) chamado para executar a tarefa
concorrente, se houver no momento.
O lao a seguir verifica se a situao atual da simulao representa uma mudana de
estado, percorrendo todas as condies de mudana do estado atual. O mtodo
CheckChange(change), exibido a seguir, verifica se alguma condio individual atendida.
32
O mtodo tambm composto por um longo switch que recebe o nome da condio
individual (condition.name) como parmetro.

public void CheckChange(Change change) {
bool isChange = true;
foreach (Condition condition in change.conditons) {
switch (condition.name) {
case "APMasterSwitch":
isChange &= ec.apMasterSwitch.GetVar()
== Boolean.Parse(condition.value);
break;
...
case "IndicatedAltitude":
isChange &= IsCondition(ec.indicatedAltitude.GetVar(),
condition, 10);
break;
...
}
}
if (isChange) {
currentState = procedure.states[change.nextState];
EnqueueStateTasks();
}
}

A condio individual com o nome APMasterSwitch se refere ao componente
interruptor que controla o acionamento do piloto automtico da aeronave
(ec.apMasterSwitch). O valor da condio (condition.value) comparado ao valor do
estado atual do componente. A condio com o nome IndicatedAltitude se refere ao
componente altmetro (ec.indicatedAltitude). O valor da condio comparado ao valor
do componente atravs do mtodo bool IsCondition(...), que basicamente verifica se a
relao da condio (condition.relation) satisfeita. A comparao ainda leva em conta
uma margem de erro, que no caso do componente em questo, foi estabelecido como 10 ps.
Caso todas as condies individuais sejam satisfeitas, o prximo estado da condio de
mudana (change.nextState) passa a ser o estado atual do procedimento, e as tarefas
desse novo estado so adicionadas fila da classe ProcedurePerformer.
O SimConnect no oferece acesso ao cronmetro presente no relgio de algumas
aeronaves do FSX. Como muitos procedimentos precisam de um temporizador, a classe
ProcedurePerformer implementa um cronmetro simples (int timer), que conta o tempo
em segundos, e decrementado na ltima atividade do mtodo void OneSecond(),
finalizando um ciclo da aplicao.
4.4.3. Arquivos de Configurao
O arquivo de configurao da aeronave escolhida, que armazena seus padres
operacionais, carregado no mtodo void LoadAircraft(). Esse mtodo ainda carrega
todos os componentes necessrios para a execuo dos procedimentos abordados pelo PP,
de acordo com a disponibilidade informada pelo componente Capabilities, de
33
EasyConnect. A aeronave precisa ter um conjunto mnimo de dispositivos para poder ser usada
na aplicao. Alm dos instrumentos de navegao requeridos pelo procedimento, precisa ser
equipada com um piloto automtico com controle de proa (sentido) e altitude da aeronave.
Desenvolver um algoritmo para o controle do seu manche e pedais, com essa finalidade, seria
muito complexo e desnecessrio, j que esse tipo de conhecimento j dominado pelo aluno
do curso de PCA. O arquivo de configurao da aeronave Mooney Bravo, oferecida pelo FSX,
exibido a seguir:

...
Profile LowCruise
Task EngManifoldPressure 25
Task EngRPM 2200
Task FlapsHandle 0
Task GearHandle False
...
Profile ApproachDescent
Task APVerticalSpeedKnob -500
Task EngManifoldPressure 19
Task EngRPM Max
Task FlapsHandle 1
Task GearHandle True

Profile ShortFinal
Task APVerticalSpeedKnob -500
Task EngRPM Max
Task FlapsHandle 2
Task GearHandle True
Task IndicatedAirspeed 80

Os padres operacionais da aeronave so representados como perfis de vo. Segundo
a metodologia sugerida pelos livros [5] e [6], toda aeronave tem uma configurao especfica
para cada etapa do vo, que so chamados perfis de vo. No arquivo de configurao, o perfil
(Profile) representado como um conjunto de tarefas, que configuram a aeronave de acordo
com a etapa do vo, como um checklist restrito a apenas alguns componentes da aeronave. O
atributo Dictionary<string, Profile> profiles da classe ProcedurePerformer
uma hash table de perfis (Profile), tendo como chave o nome do perfil. A classe Profile,
por sua vez, encapsula uma lista de tarefas (List<Task> tasks). O parser composto por
um switch, que recebe como argumento a primeira palavra de cada linha do arquivo de
configurao. Para cada linha iniciada com a palavra Profile (como a linha Profile
ApproachDescent), o parser instancia um perfil e o armazena na hash table da classe
ProcedurePerformer de acordo com o seu nome (ApproachDescent). As linhas
seguintes, iniciadas com Task (como a linha Task EngManifoldPressure 19), so
interpretadas como tarefas, que tm como nome o primeiro argumento
(EngManifoldPressure), e como valor o segundo (19). As tarefas so instanciadas e
adicionadas na lista do ltimo perfil criado.
O arquivo de configurao do procedimento escolhido carregado logo em seguida, no
mtodo void LoadProcedure(string procName). Esse arquivo armazena o identificador
34
do procedimento e todos os seus estados, com as respectivas tarefas e condies de
mudana. O IAP ILX Y do aeroporto internacional Gilberto Freyre, em Recife, representado
pelo seguinte arquivo:

ICAO SBRF
Name ILX Y

State Start
Task APAltitudeKnob 3000
Task APAltitudeSwitch True
Task APMasterSwitch True
Task APHeadingKnob Heading
Task APHeadingSwitch True
Task NAV1Frequency 116.90
Task NAV1Knob Station
Task APHeadingKnob Radial
Task APNAV1Switch True
Task Profile LowCruise
Change Y2
Condition TaskQueueSize = 0
Condition NAVDME < 1

State Y2
Task APHeadingKnob Heading
Task APHeadingSwitch True
Task APHeadingKnob -018
Task NAV1Knob 018
Task APHeadingKnob Radial
Task APNAV1Switch True
Change Y3
Condition NAVDME > 10

State Y3
Task APAltitudeKnob 2000
Task NAV1Frequency 110.30
Task NAV1Knob 184
Task APHeadingKnob Heading
Task APHeadingSwitch True
Task APHeadingKnob -184
Task APHeadingKnob Radial
Task APApproachSwitch True
Task Profile ApproachDescent
Change Y4
Condition TaskQueueSize = 0
Condition NAVDME < 5

State Y4
Task Profile ShortFinal
Change End
Condition NAVDME < 3

State End
Task APMasterSwitch False

O parser desse tipo de arquivo tem um funcionamento semelhante ao parser de
aeronaves. As linhas que iniciam com as palavras ICAO e Name representam respectivamente
o cdigo da localidade e o nome do procedimento, que o identificam unicamente. O parser
35
instancia um procedimento e configura seus identificadores. Cada linha iniciada com State,
como State Start, representa um estado do procedimento, que instanciado e adicionado
hash table de estados da classe ProcedurePerformer de acordo com o seu nome (Start).
Durante a execuo do procedimento, o estado com o nome Start considerado o seu
estado inicial. As linhas seguintes, iniciadas com Task, so interpretadas como no parser de
aeronaves, mas so adicionadas lista de tarefas da classe State. A linha iniciada com
Change (como a linha Change CruiseDescent) representa uma condio de mudana para
o estado seguinte (CruiseDescent), que instanciada e adicionada fila do ltimo estado
criado. A linha seguinte (Condition IndicatedAltitude > 3500) inicia a lista de
condies individuais, que relacionam (>) o nome da condio (IndicatedAltitude) com
um valor (3500). As condies individuais so instanciadas a adicionadas fila da ltima
condio de mudana criada.
4.5. FlightAnalyzer
O FlightAnalyzer o mdulo do FlightInstructor que ser responsvel pelo
monitoramento do desempenho do aluno durante vrias etapas do vo. O instrutor virtual far
uma anlise do desempenho do aluno, alm de sugerir correes para os seus erros, como
faria um instrutor de vo real durante o processo de ensino. O mdulo no ser restrito aos
procedimentos que exigem o uso do PA da aeronave, e poder ser usado em outras etapas do
vo. O FlightAnalyzer usar como base os mdulos do FlightInstructor EasyConnect e
ProcedurePerformer, j desenvolvidos. Porm, o seu desenvolvimento demanda um estudo
mais aprofundado do processo de ensino na aviao, o que no seria possvel executar em
tempo hbil durante o presente Trabalho de Graduao.
36
5. Estudo de Caso
Para explicar a execuo de um procedimento pelo mdulo PP, tome-se como exemplo
o IAP ILS Y, para pouso no aeroporto internacional Gilberto Freyre, em Recife. O procedimento
representado pela Instrument Approach Chart (IAC) ILS Y, que est ilustrada na Figura 18.
Entre outras informaes, a carta exibe uma vista superior e lateral do procedimento, as
instrues para arremeter (cancelar o pouso) e os mnimos meteorolgicos exigidos para o
pouso.


Figura 18. IAC ILS Y, para pouso no aeroporto Gilberto Freyre.
Seu ponto de entrada o auxlio VOR REC. Imaginemos que a aeronave usada seja
um Mooney Bravo, que esteja a 5000' de altitude, na proa 010, ao Sul do aeroporto e distante
do litoral. Imaginemos ainda que o aluno no saiba exatamente a sua posio, no esteja
usando o PA e que as condies meteorolgicas permitam a execuo do IAP ILS Y. O
procedimento ser executado conforme os arquivos de configurao exibidos no captulo
37
anterior. A Figura 19 ilustra o painel do Mooney Bravo e indica a posio dos componentes do
EasyConnect citados no Quadro 3.


Figura 19. Localizao dos componentes citados no Quadro 3 no painel do Mooney Bravo.
Aps o seu carregamento, o PP detecta a aeronave Mooney Bravo e carrega seu
arquivo de configurao do seu banco. Aps a seleo do procedimento, ele carregado do
arquivo e as tarefas do seu primeiro estado (Start) so executadas. A Figura 20 ilustra a
interface grfica textual do PP durante a execuo da primeira tarefa. A primeira linha da
interface (Tasks) exibe as ltimas tarefas executadas, incluindo a atual. A segunda linha exibe
a tarefa concorrente (Concurrent task) que est sendo executada (se houver) e o valor atual do
cronmetro (Timer) simulado pelo PP. A terceira linha (Change) exibe as condies de
mudana de estado, com suas condies individuais.


Figura 20. Execuo do IAP ILS Y.
No estgio atual da execuo, o valor do componente APAltitudeKnob ser
modificado para 3000', no h tarefas concorrentes e o cronmetro no est sendo usado.
Quando todas as tarefas do estado tiverem sido executadas e o valor do componente NAVDME
for menor que 1 nm haver mudana de estado. No interessa ao aluno saber os nomes
atribudos aos estados do procedimento, mas quando ter um conjunto de novas tarefas para
executar. A Figura 21 exibe a interface durante a execuo da segunda tarefa.

38

Figura 21. Execuo do IAP ILS Y.
O espao de tempo entre a execuo de duas tarefas pode ser configurado pelo aluno,
mas est definido atualmente em quatro segundos. A segunda tarefa consiste em modificar o
valor de APAltitudeSwitch para ligado (true). Quatro segundos depois de ser exibida na
interface, a tarefa ser executada, o que se reflete na interface do FSX. Como as condies de
mudana ainda no foram satisfeitas, o procedimento continua no mesmo estado.
As tarefas seguintes so: mudar o valor de APMasterSwitch para ligado;
APHeadingKnob para a proa atual da aeronave; APHeadingSwitch para ligado;
NAV1Frequency para 116,90 MHz, do VOR REC; NAV1Knob para a radial mais prxima do
VOR; APHeadingKnob para o curso selecionado na ltima tarefa; APNAV1Switch para ligado;
e o perfil da aeronave para LowCruise, o que se desdobra em outras tarefas. Aps a
execuo da ltima tarefa do estado, a pilha de tarefas estar vazia. Porm, no haver
mudana de estado at que o valor de NAVDME seja menor que 1 nm. A Figura 22 exibe a
interface aps a execuo das tarefas.


Figura 22. Execuo do IAP ILS Y.

Figura 23. Fim da execuo do IAP ILS Y.
39
Quando a aeronave est a menos de 1 nm do VOR, ocorre a mudana de estado. As
tarefas do novo estado so enfileiradas e executadas, e suas condies de mudana de estado
so verificadas, a cada ciclo da aplicao.Depois de passar por todos os estados, no fim do
procedimento, quando a aeronave est a menos de 3 nm do auxlio, o PA desligado. Nesse
momento, PP encerra a execuo do procedimento e o aluno reassume os controles da
aeronave para o pouso. A Figura 23 ilustra o fim da execuo do procedimento.
40
6. Concluso
Aps os estudos necessrios, a implementao do mdulo EasyConnect foi efetivada.
Sua lista de mtodos disponveis ainda no abrange todas as variveis e eventos oferecidos
pela API do SimConnect, mas o suficiente para a execuo do mdulo ProcedurePerformer e
seus procedimentos.
Em relao ao mdulo ProcedurePerformer, o parser responsvel pelo carregamento
de aeronaves foi implementado, assim como a estrutura dos seus arquivos de configurao. As
aeronaves Mooney Bravo e Beechcraft Baron 58, sugeridas pelos livros [5] e [6] para o vo sob
IFR, j possuem seus arquivos de configurao implementados.
O parser responsvel pelo carregamento dos procedimentos tambm foi implementado,
assim como a estrutura dos seus arquivos de configurao. Porm, os procedimentos
baseados em auxlios NDB ainda no so suportados pela aplicao. A prioridade de
implementao foi dada aos procedimentos baseados em auxlios VOR, j que os baseados
em NDB no so mais usados em alguns pases. Os procedimentos SID Joo Pessoa e IAP
ILS Y, referentes ao aeroporto internacional Gilberto Freyre, j possuem seus arquivos
implementados.
Os recursos oferecidos pelo SimConnect para a construo de uma interface grfica
integrada com o FSX so muito limitados. A interface grfica sugerida pelos exemplos de
aplicao em C#, oferecidos pelo SDK, no visvel quando o simulador est no modo de
exibio tela-cheia. A interface grfica textual representa uma alternativa provisria para a
exibio das informaes do ProcedurePerformer para o usurio.
6.1. Contribuies
O FlightInstructor, em seu estado atual, oferece algumas contribuies aos pilotos e
desenvolvedores da aviao virtual. O EasyConnect facilita o processo de desenvolvimento de
aplicaes para o FSX, abstraindo os detalhes de implementao do SimConnect. Seu uso
pode encorajar novos desenvolvedores a desenvolver aplicaes para o simulador. Como dito
anteriormente, a demanda por uma ferramenta como essa pode ser encontrada em fruns
como [19] e [20]. O ProcedurePerformer, por sua vez, mostra as etapas corretas de execuo
de um procedimento aeronutico, em uma determinada aeronave, disponveis em seu banco
de arquivos de configurao. Um instrutor de vo pode, inclusive, criar arquivos de
configurao personalizados, enfocando certas particularidades do procedimento. Alm disso,
o potencial desse mdulo no est restrito execuo dos procedimentos aeronuticos citados
no documento. O ProcedurePerformer pode ser empregado na execuo de outros tipos de
procedimentos aeronuticos, que permitam o uso do PA da aeronave e envolvam componentes
presentes no EasyConnect.
Finalmente, um artigo sobre o FlightInstructor, escrito durante o seu desenvolvimento,
foi publicado no Workshop de Realidade Virtual e Aumentada 2007, destacando a sua
contribuio no meio acadmico.
41
6.2. Trabalhos Futuros
Como trabalhos futuros, o mdulo EasyConnect ser estendido para abranger todas as
variveis e eventos do SimConnect, possibilitando seu uso efetivo em outros projetos. O
mdulo ProcedurePerformer ter o seu banco de arquivos de configurao ampliado, servindo
como base de exemplos para a criao de novos arquivos. Sua interface tambm ser
aperfeioada, permitindo a exibio da carta que representa o procedimento em execuo,
acompanhada do trajeto percorrido pela aeronave, entre outras melhorias.
O desenvolvimento do mdulo FlightAnalyzer ser iniciado aps a concluso do
ProcedurePerformer, e exigir um estudo mais aprofundado sobre o processo de ensino na
aviao. Seu desenvolvimento ser fundamental para transformar o FlightInstructor em uma
ferramenta mais abrangente.
Finalmente, a validao do FlightInstructor por instrutores e pilotos ser fundamental
para torn-la uma ferramenta til no meio da aviao, ajudando alunos e entusiastas a colocar
em prtica e aperfeioar os conhecimentos tericos previamente adquiridos.
42
Referncias Bibliogrficas
[1] The Art of Flight Simulation. Disponvel em: site do Jonathan Gabbai. URL:
http://gabbai.com/academic/the-art-of-flight-simulation/, visitado em janeiro de 2008.
[2] Microsoft Flight Simulator X. Disponvel em: site FsInsider. URL:
http://www.fsinsider.com, visitado em janeiro de 2008.
[3] Aeroclube de Bauru. Disponvel em: site do Aeroclube de Bauru. URL:
http://www.aeroclubebauru.com.br/site/base.asp?pag=tabelapreco.asp, visitado em
janeiro de 2008.
[4] P. O. Lima Jr., Regulamentos de Trfego Areo Vo por Instrumento, ASA, So
Paulo, 2007.
[5] J. V. West, e K. Lane-Cummings, Microsoft Flight Simulator X For Pilots, Wiley
Publishing, Indianapolis, 2007.
[6] B. Williams, Microsoft Flight Simulator as a Training Aid, Aviation Supplies &
Academics, Newcastle, 2006.
[7] Computer based training. Disponvel em: site da Oxford Aviation Training. URL:
http://www.oxfordaviation.net/cbt.htm, visitado em janeiro de 2008.
[8] Garmin G1000. Disponvel em: site da Garmin. URL:
https://buy.garmin.com/shop/shop.do?cID=153&pID=6420, visitado em janeiro de 2008.
[9] FSFlyingSchool. Disponvel em: site do FSFlyingSchool. URL:
http://www.fsflyingschool.com, visitado em janeiro de 2008.
[10] History of Microsoft Flight Simulator. Disponvel em: site Wikipedia. URL:
http://en.wikipedia.org/wiki/History_of_Microsoft_Flight_Simulator, visitado em janeiro
de 2008.
[11] FlightSim.com. Disponvel em: site FlightSim.com. URL: http://www.flightsim.com,
visitado em janeiro de 2008.
[12] Carenado. Disponvel em: site da Carenado. URL: http://www.carenado.com, visitado
em janeiro de 2008.
[13] MegaScenery. Disponvel em: site da MegaScenery. URL:
http://www.megascenery.com, visitado em janeiro de 2008.
[14] Flight Sim Yoke e Pro Pedals. Disponvel em: CH Products site. URL:
http://www.chproducts.com/retail/, visitado em janeiro de 2008.
[15] TrackIR 4:Pro. Disponvel em: NaturalPoint site. URL:
http://www.naturalpoint.com/trackir/02-products/product-TrackIR-4-PRO.html, visitado
em janeiro de 2008.
[16] About SimConnect. Disponvel em: FsInsider site. URL:
http://www.fsinsider.com/developers/Pages/AboutSimConnect.aspx, visitado em janeiro
de 2008.
[17] FSUIPC. Disponvel em: site do Peter Dowson. URL:
http://www.schiratti.com/dowson.html, visitado em janeiro de 2008.
43
[18] JSimConnect. Disponvel em: site do jSimConnect. URL:
http://lc0277.nerim.net/jsimconnect/, visitado em janeiro de 2008.
[19] MS FSX SimConnect Forum. Disponvel em: The AVSIM Forums site. URL:
http://forums.avsim.net/dcboard.php?az=show_topics&forum=255, visitado em janeiro
de 2008.
[20] SimConnect portal. Disponvel em: FsDeveloper.com site. URL:
http://fsdeveloper.agerrius.nl/simconnect/, visitado em janeiro de 2008.
[21] R. C. Farias, G. F. Almeida, V. Teichrieb, e J. Kelner, "FlightInstructor, um Instrutor de
Vo Virtual para o Microsoft Flight Simulator X", Workshop de Realidade Virtual e
Aumentada 2007, Itumbiara, novembro de 2007.