Interface 3D para ambiente de simulação Mário Rui Rebelo Fernandes Nº20191 Trabalho realizado sob a orientação de Professor Paulo Matos Engenharia Informática 2011/2012
Interface 3D para ambiente de simulação Relatório da UC de Projecto Licenciatura em Engenharia Informática Escola Superior de Tecnologia e de Gestão Mário Fernandes Setembro 2012 iii
A Escola Superior de Tecnologia e Gestão não se responsabiliza pelas opiniões expressas neste relatório. iv
Certifico que li este relatório e que na minha opinião, é adequado no seu conteúdo e forma como demonstrador do trabalho desenvolvido no âmbito da UC de Projecto. Paulo Matos Orientador Certifico que li este relatório e que na minha opinião, é adequado no seu conteúdo e forma como demonstrador do trabalho desenvolvido no âmbito da UC de Projecto. <Nome do Arguente> Arguente Aceite para avaliação da UC de Projecto v
vi
Agradecimentos Queria prestar o meu devido agradecimento a toda gente que me acompanhou durante a elaboração deste projecto. Ao meu orientador em particular, Paulo Matos, pelo apoio e acompanhamento ao longo deste projecto. A família pelo esforço e apoio, pois sem eles não era possível estar a fazer este projecto. A todas as pessoas ligadas de alguma forma ao IPB, particularmente a ESTIG, pois foi onde passei os últimos 5 anos e onde me formei academicamente. E também a todos os meus amigos com quem partilhei esta fase da minha vida e sempre estiveram comigo em todos os momentos. vii
viii
Resumo Este projecto visou o desenvolvimento de uma framework para modelação 3D de linhas de produção. A representação gráfica obtida com esta framework permite representar a topologia da linha, navegar no espaço fabril visualizando a linha de diferentes perspectivas, visualizar o estado das máquinas, interactuar com as máquinas e ver a dinâmica da linha em pleno funcionamento. A framework foi construída para ser integrada no projecto DASE Distributed Agent Simulation Environment, facultando assim uma interface gráfica tridimensional para este ambiente de simulação. Palavras-chave: simulação, linhas de montagem, JavaFX, modelação 3D ix
x
Abstract This project sought to develop a framework for 3D modeling of production lines. The graphical representation obtained with this framework allows to represent the topology of the line, navigate the factory space by viewing the line from different perspectives, view the status of machines, interact with machines and see the dynamics of the line in full operation. The framework was built to be integrated in the project DASE - Distributed Agent Simulation Environment, so providing a GUI for this three-dimensional simulation environment. Keywords: simulation, production lines, JavaFX, 3D modeling xi
xii
Conteúdo 1 Erro! Auto-referência de marcador inválida.... 1 1.1 Objectivos... 1 1.2 Organização do relatório... 2 2 Linguagem Java... 4 2.1 Conceitos básicos de computação... 5 2.2 JavaFX... 6 2.2.1 História JavaFX... 8 2.3 NetBeans... 9 3 Implementação... 11 3.1 Transformações em Java FX... 11 3.2 Translação, rotação, escala... 12 3.2.1 Câmara controlável... 12 3.2.2 Translações... 13 3.3 Animações em JavaFX... 13 4 Modo de funcionamento... 15 4.1 A linha de montagem... 15 5 Conclusão... 18 5.1 Objectivos alcançados... 18 5.2 Análise Crítica... 18 5.3 Objectivos futuros... 18 xiii
xiv
Lista de Figuras Figura 1- Logótipo do Java... 4 Figura 2- Modelo de funcionamento do JavaFX... 6 Figura 3 - JavaFX roadmap... 8 Figura 4 - NetBeans... 9 Figura 5 - Cubos tridimensionais em JavaFX... 15 Figura 6 - diagrama de classes... 16 Figura 7 - linha de montagem... 17 xv
xvi
Lista de Abreviações API - Application Programming Interface (ou Interface de Programação de Aplicativos) 3D - 3 dimensões SDK - Software Development Kit (ou Kit de Desenvolvimento de Software) JVM - Java Virtual Machine IDE - Integrated Development Envirenment (ou Ambiente Integrado de Desenvolvimento) RIA Rich Internet Application (ou Aplicações de Internet Rica) xvii
xviii
Capítulo 1 1 Erro! Auto-referência de marcador inválida. 1.1 Objectivos O desenvolvimento deste projecto, tem como objectivo, oferecer a possibilidade de visualizar em 3D, uma linha de produção de uma fábrica, com interacções e animações em tempo real. Pretende-se que através desta interface se possa realizar simulações e testes da própria linha, evitando estes tenham que ser feitos sobre a linha real. O que compreensivelmente tem sérias desvantagens, dado que os testes reais normalmente implicam a paragem da linha por tempos muito longos, afectando directamente a produção, o que normalmente não é viável. Para além da representação tridimensional da linha, esta interface deverá permitir reflectir o estado das máquinas, interagir com as máquinas, visualizar o processo produtivo em si. O objectivo não é construir um exemplo concreto de uma linha, mas criar uma framework contendo os objectos e recursos necessários para facilmente permitir representar em 3 dimensões uma qualquer linha de produção. Espera-se que esta framework 1 de modelação tridimensional em Java contribua de forma efectiva para ajudar a simular e optimizar os recursos de uma linha de montagem fabril. 1 Uma framework consiste num conjunto de interfaces, que define o tipo e o comportamento das entidades envolvidas; e num conjunto de classes, que implementam integralmente ou parcialmente as interfaces. A função de uma framework é agilizar o processo de criar soluções que funcionem de acordo com princípios predefinidos. 1
1.2 Organização do relatório Este relatório encontra-se organizado em 5 capítulos distintos. O primeiro capítulo faz uma introdução aos objectivos e demonstra a organização do relatório. No segundo capítulo é apresentada a linguagem Java, são descritos conceitos básicos de computação, é introduzido o JavaFX, que é a base deste trabalho, descrevendo a linguagem e um pouco da sua história. É também descrito o ambiente de desenvolvimento, o NetBeans. No terceiro capítulo encontram-se as implementações de transformações em JavaFX, tais como translação, rotação, escala, o efeito de câmara controlável e as animações. O quarto capítulo dispõe o modo de funcionamento da linha de montagem. Por fim, no quinto capítulo são feitas as conclusões, os objectivos alcançados, uma análise crítica e os objectivos futuros. 2
3
Capítulo 2 2 Linguagem Java Figura 1- Logótipo do Java Como a linguagem Java é a ferramenta base deste trabalho, vou prosseguir com um pequeno resumo sobre a mesma.o Java é uma linguagem de programação orientada a objectos, independente de plataforma, que foi desenvolvida pela Sun Microsystems, Inc na década de 90 por uma equipa liderada por James Gosling. Actualmente, é uma das linguagens mais utilizadas para o desenvolvimento de sistemas, e pode ser obtida gratuitamente em http://java.sun.com. O SDK Java é composto por um compilador e por uma máquina virtual contendo um interpretador. Diferentemente das linguagens convencionais, em Java o compilador transforma o programa em bytecodes 2, que consiste num tipo de código de máquina específico para a máquina virtual do Java. A máquina virtual do Java, JVM, contém um interpretador para processar os bytecodes, bem como todos os elementos necessários à execução deste código. A JVM é dependente da plataforma onde é instalada, mas actualmente existem JVM para praticamente todo o tipo de plataformas. Para o desenvolvimento de programas em Java, é preciso instalar o J2SE (Java 2 Platform, Standard Edition) que inclui compilador, a JVM e as bibliotecas. Estas englobam os pacotes que contêm as classes responsáveis pelas funcionalidades de entrada e saída, interface gráfica, colecções, entre outras. Além disso, existe a Java Standard Extension API, que inclui outros 2 Código em bytes 4
pacotes, tais como, acesso a base de dados e o Java Media Framework, que suporta tecnologias gráficas e multimédia. Em 2006, a Sun lançou a maior parte do Java como software livre, e é hoje um padrão para todos os programadores, e usada para diversos fins. 2.1 Conceitos básicos de computação Nesta descrição vou referir alguns aspectos de um trabalho sobre java 3D, que pode ser consultado na bibliografia [10], visto que penso que possam ser importantes para compreender a visualização de modelos 3D. Para entender a API JavaFX, que foi utilizada neste projecto para desenvolver a framework, é importante conhecer alguns conceitos básicos de computação gráfica. Transformações geométricas de escala, rotação e translação, manipulação da câmara sintética, projecção perspectiva, iluminação, cor e sombra são algumas das técnicas utilizadas para contribuir na geração de imagens de alta qualidade. As transformações geométricas consistem em operações matemáticas que permitem alterar uniformemente o aspecto de objecto(s), mas não a sua topologia. São usadas para posicionar, rodar, e alterar o tamanho dos objectos no universo. O conceito de câmara sintética é usado para definir de que posição o objecto será visualizado, como se fosse obtida uma foto quando a câmara estava numa dada posição direccionada para o objecto. Neste processo, torna-se necessário aplicar uma projecção, que é o procedimento utilizado para se obter representações 2D de objectos 3D. Várias técnicas também foram desenvolvidas para tentar reproduzir a realidade em termos de aparência, por exemplo, efeitos de iluminação. Portanto, diversas fontes de luz podem ser incluídas num universo para permitir a simulação da reflexão dos objectos, que possibilita descrever a interacção da luz com uma superfície, em termos das propriedades da superfície e da natureza da luz incidente. 5
2.2 JavaFX Figura 2- Modelo de funcionamento do JavaFX Com as exigências de um mercado globalizado e altamente competitivo surgiu a necessidade de tecnologias inovadoras que se propusessem a unir os conceitos web e desktop no mesmo ambiente, tornando assim mais simples a criação de aplicações interactivas e portáteis. Contudo isso só foi possível após a criação do conceito RIA, que permitiu que tecnologias como JavaFX surgissem e proporcionassem melhores experiências para os utilizadores. Assim sendo, aplicações RIA oferecem melhor usabilidade, interactividade e interfaces mais intuitivas, produzindo assim um software mais rico em recursos e mais satisfatório para o utilizador. A plataforma JavaFX une características interessantes como a aproximação entre programadores e designers. Isso conduz a novas perspectivas, pois possibilita o desenvolvimento ágil de aplicações por meio de trabalho mútuo. Esta interessante plataforma, que une variados conceitos, é a promessa da tecnologia Java para aplicações RIA, que cria no mercado um novo conceito de interactividade e usabilidade. A plataforma JavaFX é a evolução da plataforma Java, projectada para permitir que programadores criem e desenvolvam aplicações que são consistentes em múltiplas plataformas. Construída sobre a tecnologia Java, o que facilita o uso de ferramentas já existentes, a plataforma JavaFX fornece um rico conjunto de gráficos e uma API de alto desempenho com aceleração de hardware e motores de multimédia que simplificam o desenvolvimento de aplicações. Com esta tecnologia podem ser criadas aplicações para sistemas operativos, browsers, e smartphones. 6
JavaFX é baseado no conceito common Profile, que representa a reutilização da maioria do código em todos os dispositivos, sejam eles móveis ou desktops. Permitindo assim aos programadores usar modelos standard de programação, que sirvam tanto para desktop como para dispositivos móveis. O JavaFX inclui ainda plugins 3 para permitir que se possa integrar aplicações directamente no JavaFX, estes plugins geram códigos em JavaFXScript que preservam o layout 4 e a sua estrutura. A Adobe Photoshop e Adobe Illustrator são 2 exemplos de plugins disponíveis no JavaFX. A arquitectura do JavaFX foi elaborada de forma a proporcionar de uma forma simples e intuitiva o desenvolvimento de aplicações. Uma vez que a sua plataforma baseia-se na Maquina Virtual Java, o JavaFX herda os princípios de portabilidade entre sistemas operacionais, beneficiando assim da maturidade e desempenho da plataforma Java. Analisando a Figura 2 podemos observar que o JavaFX está implementado segundo uma arquitectura de camadas. Na base da arquitectura encontramos a Java Virtual Machine, que tem como função interpretar e executar o bytecode produzido pelo ambiente em tempo de execução do JavaFX. No JavaFX Runtime, através do seu compilador que estende as características do compilador Java, gera bytecode compatível com a JVM, permitindo assim que a plataforma passe a usufruir de uma máquina virtual estável. Common Elements são APIs comuns a todos os modelos de desenvolvimento, permitindo assim uma grande reutilização do código escrito. Desktop, mobile e tv elements, são também APIs projectadas para cada um dos modelos de desenvolvimento. Application Framework, são funcionalidades utilizadas para o desenvolvimento de aplicações JavaFX, o que inclui a linguagem JavaFXScript. Sobre as Tools podemos dizer que o JavaFX permite que tarefas sejam segmentadas em áreas especializadas como o design e o desenvolvimento de por exemplo plugins. No entanto a área mais explorada neste projecto é a 3D do JavaFX, que tem bastantes similaridades com o Java3D, pois é nela que é assente o objectivo deste projecto, que é o ambiente para simulação 3D. 3 Usado para adicionar funções a programas maiores 4 Área de visualização 7
2.2.1 História JavaFX Fazendo referência ao site da wikipedia.pt, onde temos um pouco da História do JavaFX, constatamos que o JavaFX Script a linguagem de programação para JavaFX, começou por um projeto de Chris Oliver chamado de F3. Este foi anunciado pela Oracle na JavaOne WorldWide Java Developer, numa conferência em Maio de 2007.. Foi no ano de 2008, que ficou disponível para todos os programadores o download do JavaFX Sdk para Windows e Mac, juntamente com os plugins para NetBeans, alargando assim a comunidade de programadores interessados na linguagem. Dia 4 de dezembro de 2008 a Sun disponibilizou o JavaFX 1.0. Actualmente a versão JavaFX2.2 já é suportada pelo Linux. Inicialmente não tinha suporte devido aos gráficos e animações avançadas que não eram suportadas pelo sistema. A Figura 3 ilustra a evolução do JavaFX e os planos da Oracle para esta tecnologia. Figura 3 - JavaFX roadmap. 8
2.3 NetBeans Figura 4 - NetBeans O NetBeans é já um famoso ambiente de desenvolvimento disponível para Windows, Mac, Linux e Solaris. O projecto Netbeans consiste num IDE de código aberto e numa plataforma que permite ao programadores criar rapidamente aplicações Web, desktop, aplicações móveis, usando linguagens como Java, PHP, JavaScript, Ajax, Groovy, C, C++, entre outras. Apoiado por uma enorme comunidade de programadores, com uma extensa documentação, tutoriais e uma longa lista de plugins, é certamente uma plataforma a ter em destaque. A Historia do NetBeans começou em 1996, quando dois estudantes Tchecos na Universidade de Charles em Praga, começaram o projecto inicialmente chamado de Xelfi, em alusão ao Delphi, pois a pretensão deste projecto era ter funcionalidades semelhantes aos IDEs então populares do Delphi que eram mais atractivas por serem ferramentas visuais e mais fáceis de usar, porém com o intuito de ser totalmente desenvolvido em Java. Em 1999 o projecto foi chamado de NetBeans DeveloperX2, em alusão a ideia de reutilização de componentes de que eram a base do Java. Foi então que a Sun Microsystems adquiriu o projecto NetBeans DeveloperX2, incorporando-o na sua linha de softwares. Em Junho de 2000 a Sun disponibilizou o código fonte do IDE NetBeans, tornando-o uma plataforma OpenSource. Desde então a comunidade de programadores que utilizam e contribuem para o projecto não parou de crescer, tornando-se uma das IDEs mais populares da actualidade. Podemos visualizar na Figura 4 o ambiente de trabalho do NetBeans. 9
10
Capítulo 3 3 Implementação 3.1 Transformações em Java FX As transformações do JavaFX são bastante importantes para a elaboração deste projecto, pois são a base do modelo 3D apresentado. A transformação altera o local de um objecto gráfico, de um sistema de coordenadas de acordo com certos parâmetros. Os seguintes tipos de transformações são suportados em JavaFX: Translação, rotação, escala e shearing. A transformação de shearing foi a única a não ser utilizada, pois para os objectivos pretendidos, é uma transformação que não tem utilidade neste projecto. Estas transformações podem ser aplicadas a um nó independente ou a grupos de nodos. Pode aplicar-se uma transformação num momento ou pode-se combinar transformações e aplicar várias transformações para um nó. Transformações em JavaFX podem ser realizadas ao longo de três coordenadas, permitindo criar objectos tridimensionais (3-D) e efeitos. Para ser possível visualizar objectos 3D e efeitos de transformação em Java FX, deve-se activar a perspective câmara. 11
3.2 Translação, rotação, escala A transformação de translação desloca de um nó de um lugar para outro, ao longo de um dos eixos em relação à sua posição inicial. A posição inicial é definida pelas coordenadas x, y e z. Outras variáveis podem ser adicionadas para simplificar os cálculos ao aplicar transformações diferentes. As translações são usadas para definir todas as posições de todos os elementos criados no modelo 3d, com elas definimos as posições nos eixos, x,y e z. Estas posições podem ser modificadas, fazendo assim com que elementos tenham novas posições. A transformação de rotação move o nó em torno de um ponto de rotação especificado da cena. Para girar a câmara ao redor da linha de montagem, a transformação de rotação é usada, porque tecnicamente, é a linha de montagem em si que se move quando o rato gira a câmara. A transformação de escala faz com que um nó pareça maior ou menor, dependendo da escala implementada, visto que esta é multiplicada ao longo dos eixos mudando assim as dimensões. Tal como acontece na translação e rotação, as transformações são aplicadas num ponto pivot, e é a volta deste ponto que ocorre a escala. Em todos os cubos criados foi aplicada uma escala, para definir o seu tamanho, pois este varia dependendo do elemento que é pretendido criar através do cubo. 3.2.1 Câmara controlável Neste projecto é possível visualizar os moledos 3D de qualquer angulo, para isso basta manter a tecla alt pressionada enquanto se move com o rato com o botão esquerdo pressionado. Para fazer o zoom in ou zoom out, é o mesmo processo mas desta vez mantem-se o botão direito do rato pressionado. Para explicar como esta funcionalidade é implementada, é necessário perceber que não é a câmara que se move, mas sim todos os elementos criados em 3D é que são rodados através da função transformação de rotação, como foi em cima mencionado na descrição da transformação de rotação. 12
A função de zoom in e zoom out, é um processo idêntico mas desta vez é aplicada a transformação de escala a todos os elementos, dando assim a sensação de aproximação e afastamento. 3.2.2 Translações As translações são usadas para definir todas as posições de todos os elementos criados no modelo 3D, com elas definimos as posições nos eixos, x,y e z. Estas posições podem ser modificadas, fazendo assim com que elementos tenham novas posições. 3.3 Animações em JavaFX As animações em JavaFX podem ser do tipo: transitions e timeline animation. Neste projecto vamos dar atenção às transitions, pois foram o tipo de animações utilizadas. Estas transições podem ser compostas para criar várias animações que podem ser executadas em paralelo ou sequencialmente. As animações são um factor importante neste projecto, pois é através delas que vamos poder visualizar tudo que acontece na linha de montagem. São usadas tanto animações na traslação de elementos como para sequências de translações. 13
14
Capítulo 4 4 Modo de funcionamento 4.1 A linha de montagem Figura 5 - Cubos tridimensionais em JavaFX Inicialmente é criada uma cena, ou seja o nosso universo 3D. Todos os elementos criados pertencem a um grupo, chamado rectanglegroup. É através da classe Cube, que se criam todo o tipo de elementos gráficos característicos da linha de produção, ou seja é esta a classe principal. Dela derivam outras classes que permitem criar as máquinas, pela classe MyCube e tapetes, pela classe MyTapete, como se observar na Figura 6. Os produtos são criados directamente pela classe Cube. 15
Figura 6 - diagrama de classes Como podemos observar na Figura 7 a modelação de uma linha constituída por uma base, 1 ou mais máquinas de produção e os respectivos tapetes. Cada máquina é ainda constituída por um botão, que permite ligar (botão fica verde) e desligar a máquina (botão fica vermelho), e por um botão laranja que assinala se a máquina está ou não em funcionamento, isto é, a operar. Temos ainda um cubo azul, que corresponde ao produto, que vai ser introduzido na máquina para ser trabalhado. Quando termina a operação sobre o produto este sai pelo lado oposto da máquina. Ao longo do modelo 3D podemos ver a linha de montagem com as máquinas, e accionando as animações podemos ver o estado da máquina (ligada ou desligada), as maquinas a trabalhar o produto e este a prosseguir de uma máquina para a seguinte. 16
Figura 7 - linha de montagem 17
5 Conclusão Foi um longo caminho para a realização deste projecto, por vezes ate lento, devido a necessidade de aprender toda a linguagem de raiz, e pela necessidade de uma constante pesquisa sobre a mesma. A aprendizagem da linguagem JavaFX foi feita através de tutorias, informação da Oracle, samples existentes, entre outras fontes. Finalmente foi feita a implementação dos conteúdos aprendidos, começando a projectar aquilo que realmente importava, a framework para a linha de montagem. 5.1 Objectivos alcançados A framework para a simulação da linha de montagem foi conseguida, sendo assim possível adicionar máquinas à linha e realizar as devidas simulações com visualização em 3D. 5.2 Análise Crítica Uma vez finalizado o trabalho, é necessário ver o que correu bem, mas também os aspectos que se podem ser melhorados. Quanto ao ambiente de desenvolvimento, não há muito a apontar, visto que o NetBeans é uma excelente escolha, a sua reputação já fala por si. A linguagem JavaFX, pela experiencia que constatei é bastante boa, sendo bastante intuitiva. Um aspecto em que posso melhorar será uma compreensão mais aprofundada da linguagem, que permite muito mais. 5.3 Objectivos futuros Penso que para o futuro da framwork da linha de montagem, podem ser desenvolvidas simulações que se possam prever da linha real. Melhorias são sempre possíveis em qualquer trabalho e este não foge a excepção. Fazer com que mais problemas possam ser resolvidos na 18
simulação, em vez de na vida real, será uma mais-valia para a framwork, e consequentemente para qualquer linha de produção fabril. 19
Referências bibliográficas. [1] http://pt.wikipedia.org/wiki/netbeans [2] http://pt.wikipedia.org/wiki/javafx [3] http://pt.wikipedia.org/wiki/java_(linguagem_de_programa%c3%a7%c3%a3o) [4] http://pt.wikipedia.org/wiki/java_3d [5] Lopes, Jackson Dos Santos. Tavares, Rodrigo Oliveira. JAVAFX: Uma abordagem ao desenvolvimento de aplicações RIA. UNIVERSIDADE FUMEC FACULDADE DE CIÊNCIAS EMPRESARIAIS. Disponivel em: http://www.ricardoterra.com.br/publications/students/2010_lopes_e_tavares.pdf [6] http://docs.oracle.com/javafx/2/transformations/jfxpub-transformations.htm [7] http://docs.oracle.com/javafx/2/animations/jfxpub-animations.htm [8] http://learnjavafx.typepad.com/weblog/3d-with-javafx/ [9] http://docs.oracle.com/javafx/2/api/overview-summary.html [10] http://www.inf.pucrs.br/manssour/publicacoes/tutorialsib2003.pdf [11] http://learnjavafx.typepad.com/weblog/3d-with-javafx/ [12] http://jfx.wikia.com/wiki/planet_jfx_wiki 20
21
22