Anais do 14O Encontro de Iniciação Científica e Pós-Graduação do ITA – XIV ENCITA / 2008 Instituto Tecnológico de Aeronáutica, São José dos Campos, SP, Brasil, Outubro, 20 a 23, 2008. Desenvolvimento de um ambiente para visualização de manobras realizadas durante ensaios com um mini-helicóptero Pedro Meira de Vasconcellos Bezerra Instituto Tecnológico de Aeronáutica (ITA) - Praça Marechal Eduardo Gomes, 50 - Vila das Acácias Bolsista PIBIC-CNPq [email protected] Roberto Kawakami Harrop Galvão Instituto Tecnológico de Aeronáutica (ITA) - Praça Marechal Eduardo Gomes, 50 - Vila das Acácias [email protected] Resumo. O presente trabalho teve por objetivo principal o desenvolvimento, utilizando a API JAVA 3D, de um ambiente virtual onde pudessem ser visualizadas as manobras realizadas em laboratório com o Helicóptero Quanser 3DOF do Laboratório de Controle da divisão de Engenharia Eletrônica do ITA. A visualização dos ângulos descritos pelo mini-helicóptero também deveria ser possível através de gráficos auxiliares ângulo versus tempo. Palavras chave: programação 3D, controle, ambiente virtual, JAVA 3D, palavra chave 5.(até 5) 1. Introdução Quando uma experiência é realizada em laboratório, o resultado desta é armazenado em várias formas: desde tabelas, registros escritos até filmagens. Com o Helicóptero Quanser 3DOF, utilizado na Divisão de Engenharia Eletrônica do ITA, não é diferente. Uma vez que filmá-lo não é uma maneira prática de guardar os resultados das práticas, e que uma mera tabela de ângulos fornecida pelos encoders muitas vezes não transparece o resultado, surgiu a necessidade de um ambiente virtual de visualização dos movimentos descritos pelo mesmo. 2. Descrição do Problema Este problema está relacionada com o projeto “Identificação e Controle de Sistemas Aeroespaciais”, que foi realizado na Divisão de Engenharia Eletrônica do ITA de outubro de 2004 a setembro de 2006 com apoio da FAPESP. Dentro do primeiro projeto acima mencionado, foi adquirido um mini-helicóptero fabricado pela empresa Quanser Consulting, que se encontra instalado no Laboratório de Controle por Computador do Departamento de Sistemas e Controle (Fig. 1). Esse sistema possui três graus de liberdade mecânicos, associados aos ângulos de deslocamento (travel, T), atitude (pitch, P) e elevação (elevation, E). O movimento de deslocamento consiste em uma rotação de todo o sistema em torno do eixo vertical (Fig. 2). O ângulo de atitude está associado a movimentos do corpo principal do helicóptero no plano normal ao braço de sustentação (Fig. 3). A elevação é definida como o movimento vertical do corpo do helicóptero (Fig. 2). Os três movimentos são controlados através da tensão de armadura dos motores DC conectados às hélices. Os ângulos T, P e E são medidos por encoders de 8192, 4096 e 4096 pulsos por rotação, respectivamente. Figura 1. Helicóptero Quanser de três graus de liberdade. Anais do XIV ENCITA 2008, ITA, Outubro, 20-23, 2008 , Figura 2. Representação esquemática do helicóptero. A linha tracejada a 27o da horizontal corresponde à posição do braço de sustentação quando o helicóptero está pousado sobre a mesa. Figura 3. Vista do corpo principal do helicóptero no plano ortogonal ao braço de sustentação. FMF e FMB representam as forças geradas pelos motores dianteiro e traseiro, respectivamente. Neste trabalho, que dá continuidade às atividades de iniciação científica de um outro aluno (Luiz Fernando Dalcico, Pibic, 2006-2007) foi desenvolvido um ambiente gráfico que permite visualizar o movimento tridimensional realizado pelo helicóptero, após a realização de um ensaio, com base nos sinais adquiridos pelos encoders. São também apresentados gráficos dos sinais dos encoders, permitindo relacioná-los, de forma visual, com a manobra efetuada. Tal ambiente facilitará a análise do desempenho da lei de controle empregada e também favorecerá a apresentação de resultados em seminários e conferências. Adicionalmente, o ambiente poderá ser usado em aulas de graduação e pós-graduação para ilustrar conceitos de Engenharia de Controle. Anais do XIV ENCITA 2008, ITA, Outubro, 20-23, 2008 , 3. Resultados Obtidos Como já foi explicado no relatório parcial, o primeiro semestre do projeto constituiu a etapa dedicada ao acúmulo de conhecimentos necessários para a implementação do programa. Ainda assim, ao longo do segundo semestre, surgiram novos pontos que necessitaram uma nova pesquisa por classes e métodos adequados. A API utilizada (JAVA 3D) se mostrou realmente eficiente e versátil, tendo sido uma ótima escolha para o projeto. Entretanto, surgiu a necessidade de se estudar o JAVA 2D, que inicialmente não estava previsto no cronograma. Os conceitos envolvidos na programação em JAVA 3D têm sua base na orientação a objetos, que representa o paradigma da plataforma Java. Tais informações podem ser encontradas em vários livros, como o citado na bibliografia., que foi utilizado em conjunto com tutoriais e outras obras auxiliares para a compreensão de tais conceitos. Já a API JAVA 3D foi estudada com base no conjunto de tutoriais da própria Sun http://java.sun.com/developer/onlineTraining/java3d/. A estrutura de um programa de JAVA 3D pode ser mostrada através de um grafo envolvendo nós e folhas, que mostram a relação entre as diversas partes componentes do helicóptero e alguns objetos criados obrigatoriamente, devido a própria estrutura de um programa em JAVA 3D. Por exemplo, é criado um objeto universo o qual recebe todas as partes que serão animadas na tela, e este universo por sua vez é inserido em outro, chamado de Canvas3D, que representa basicamente uma tela onde será projetada a animação. Os inúmeros detalhes envolvidos na programação em JAVA 3D podem ser omitidos, pois sua explanação resultaria em um mini tutorial, e o foco do projeto é em resultados. Entretanto, o código estará sempre com comentários que objetivam facilitar o trabalho de outros programadores que por ventura necessitem alterar ou compreender melhor alguma parte específica do mesmo. Durante a parte teórica do projeto, inúmeros testes foram realizados, visando sempre uma maior compreensão das funcionalidades envolvidas. Desde programas simples, como figuras geométricas 3D em movimento, até alterações na própria estrutura do nosso programa principal foram alvo de estudo. Ao término do trabalho, o helicóptero ganhou uma nova aparência, que pode ser vista na Fig. 5, comparada com a antiga, mostrada na Fig. 4. Figura 4. Modelo antigo para o helicóptero Figura 5. Novo modelo do helicóptero Anais do XIV ENCITA 2008, ITA, Outubro, 20-23, 2008 , A aplicação de texturas ao helicóptero, antes cogitada, foi considerada desnecessária a fim de permitir mais tempo dedicado a outros aspectos mais importantes. Em seguida, o desafio foi plotar gráficos 2D, que permitissem a visualização dos ângulos em função do tempo. Para isto, mostrou-se necessário o estudo da API JAVA 2D, como já foi citado. Com auxílio de rotinas encontradas na internet, foi possível acelerar o entendimento de algumas funcionalidades do JAVA 2D e adaptação das mesmas a fim de realizar a plotagem de uma série de dados gravada em um vetor. Utilizando a rotina já desenvolvida anteriormente de leitura de dados contidos num .txt e gravação dos mesmos em uma classe denominada ValoresAngulos, foi possível plotar cada um dos ângulos (Travel, Pitch e Elevation) em um gráfico simples ângulo versus tempo. Em seguida, já com a animação do helicóptero e com o gráfico dos ângulos (ainda estático), buscou-se uma maneira de conseguir mostrar as 4 telas (simulação e cada um dos gráficos) em uma mesma tela. Para isto foi indispensável a ajuda do doutorando Anderson Soares, que com seu conhecimento em JAVA tornou possível esta tarefa em pouco tempo. Uma vez dividida a tela em mais de uma, pude explorar os atributos e métodos das classes envolvidas a fim de organizar a disposição das mesmas na tela principal. Ao término desta tarefa, o programa ficou já na sua aparência final, faltando apenas conseguir plotar os ângulos de maneira concomitante com a execução dos movimentos por parte do helicóptero. Tal objetivo foi alcançado através da utilização de uma “thread” inserida dentro de um loop for que plotava o gráfico até o i-ésimo elemento de um vetor. Assim pode-se ir plotando os gráficos para 0, 1, 2, ..., i, i+1, ..., n elementos, um por cima do outro, dando a sensação de animação na tela. O resultado ficou bastante interessante, mas ainda não está perfeito. Um tema interessante de estudo é a tentativa de sincronização entre esta thread e o behavior utilizado para animar o mini-helicóptero, de modo que as animações andem exatamente juntas (no presente trabalho precisei usar uma estimativa da diferença entre os tempos levados entre os frames para minimizar a diferença entre as animações no tempo). Ainda foi incluido um botão de reinicialização para o programa, de forma a poder repetir a simulação sem precisar voltar na tela do compilador. Este botão, entretanto, só reinicia o movimento do helicóptero. Este é outro ponto que pode ser explorado visando a melhoria do software. Uma sugestão para futuras implementações neste programa pode ser sintetizada nos seguintes tópicos: • Sincronização: entre a plotagem das animações 2D, 3D e a leitura dos arquivos no .txt, já que está é feita antes, armazenando-se tudo em um vetor, o que pode estourar o limite permitido de memória. • Implementação de botões que dinamizem a interface usuário-programa: desde uma seleção para o tempo em milissegundos entre os frames até um espaço destinado a mudar o endereço do arquivo texto sem precisar alterar-se o código (atualmente o programa só lê o arquivo angulos.txt presente no disco rígido c: . Estes são alguns dos problemas que ficam em aberto. Outros, porém, surgiram e, mesmo não estando incluídos nas previsões de trabalho, já foram solucionados, facilitando o uso do programa. Como já foi citado, arquivos muito grandes podem estourar a memória total permitida. A solução para mesmo assim poder visualizar tais conjuntos de dados foi uma rotina em MATLAB para realizar uma amostragem de pontos, diminuindo a qualidade do movimento, porém tornando viável sua simulação. A rotina pede apenas o vetor TPE (vetor de três colunas onde cada uma traz os valores dos ângulos Travel, Pitch e Elevation, respectivamente, fornecido pelo MATLAB após simulação com o Helicóptero Quanser 3DOF do Laboratório de Controle do IEE) e um número de amostras desejado. A rotina procura então amostras espaçadas igualmente no vetor de modo a não perder nenhuma parte do movimento, e as grava em um novo vetor (que recebe a sáida da função). Uma vez diminuído o vetor, ele ainda não está pronto para utilização. Um problema de compatibilidade surge entre os valores gerados pelo MATLAB e os lidos pelo JAVA 3D. A parte decimal está separada por pontos, ao invés de vírgulas. Além disso, o JAVA 3D pede um .txt e não um .mat . Logo, uma nova rotina em MATLAB foi concebida, visando trocar pontos por vírgula (sem precisar continuar usando a função Find/Replace do Notepad). Esta rotina também já cria o arquivo .txt a partir do vetor carregado diretamente do arquivo .mat, obitdo no MATLAB. Isso agiliza o processo de conversão, permitindo uma utilização eficiente do programa. Ou seja, desde que o usuário tenha os ângulos no MATLAB, através de 2 rotinas ele pode preparar os dados, e com um comando para executar o programa, ver o helicóptero 3D executar as manobras descritas pelos ângulos carregados. A aparência final do programa é mostrada a seguir, na Figura 6. Anais do XIV ENCITA 2008, ITA, Outubro, 20-23, 2008 , Figura 6. Aspecto final do programa O estudo das matrizes de transformação previsto no cronograma não se mostrou útil para as aplicações desejada, não sendo portanto explicitados neste artigo. 4. Conclusões Após um longo percurso, o projeto chega em sua fase final completando todos os objetivos descritos na proposta de trabalho apresentada inicalmente, além de outras funcionalidades adicionais, algumas incompletas, que ficam como sugestão. Há sempre uma série de implementações que podem ser realizadas, nenhum programa pode ser considerado completo, até devido às novas classes que surgem, permitindo uma maior eficiência no desempenho do software. Alguns dos pontos principais que podem ser trabalhados já foram descritos no item anterior, mas certamente outros programadores terão novas idéias a acrescentar. Que este trabalho possa vir a ser útil para aqueles que operam com o Helicóptero Quanser 3DOF e com outros equipamentos similares. É importante salientar que o JAVA 3D e o JAVA de maneira geral permitem uma rápida alteração das características do programa de forma a adaptá-lo. Com um bom conhecimento das classes utilizadas no programa e de seus métodos principais pode-se realizar alterações visando a adaptação do programa para visualizar outros equipamentos, mantendo inclusive as mini-telas que plotam algum dado de interesse concomitantemente com a animação. 5. Agradecimentos Ao professor Kawakami, pela paciência dedicada. Ao doutorando Anderson Soares, que foi de grande ajuda na fase final do projeto. Ao amigo Felipe Ebert, graduando em Computação pela UFPE, que ajudou com sua experiência na escolha das classes ideais. Ao CNPq, pela oportunidade conferida a nós, iniciantes na ciência, de dedicar tempo à atividades acadêmicas. E aos companheiros de apartamento no ITA, que me apoiaram sempre. 6. Lista de referências DEITEL, H. M.; DEITEL, P.J. Java Como Programar: 6 ed. São Paulo: Bookman, 2005. 1110 p.