FlightInstructor, um Instrutor de Vôo Virtual para o Microsoft Flight ...

of 43 /43
Universidade Federal de Pernambuco Centro de Informática Ciência da Computação FlightInstructor, um Instrutor de Vôo Virtual para o Microsoft Flight Simulator X Trabalho de Graduação Aluno: Rodrigo Carvalho de Farias ([email protected]) Orientadora: Judith Kelner ([email protected]) Co-orientadora: Veronica Teichrieb ([email protected]) Recife, 25 de janeiro de 2008

Embed Size (px)

Transcript of FlightInstructor, um Instrutor de Vôo Virtual para o Microsoft Flight ...

  • 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 ([email protected]) Orientadora: Judith Kelner ([email protected]) Co-orientadora: Veronica Teichrieb ([email protected])

    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(

    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(

    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 states), tendo como chave o

    nome do estado. Cada estado (State) tem uma lista de tarefas (List tasks)

    associadas e uma lista de condies de mudana de estado (List 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

    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 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 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 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.