INTEGRAÇÃO DE UM SISTEMA DE INFERÊNCIA FUZZY EM AMBIENTE DE SIMULAÇÃO ROBÓTICA PARA APRENDIZAGEM DE TÉCNICAS INTELIGENTES ALEXANDRE G. XAVIER 1 2, NIVAL N. ALMEIDA 1. 1. Programa de Pós-Graduação em Engenharia Eletrônica, Faculdade de Engenharia, Universidade do Estado do Rio de Janeiro Rua São Francisco Xavier, 524, 5°andar-Sala 5016E, Maracanã, Rio de Janeiro, RJ, CEP 20550-900 E-mails: [email protected], [email protected] 2. Centro de Conhecimento em Tecnologia da Informação, Universidade Estácio de Sá Av. Pastor Martin Luther King Jr., 126, Campus Nova América, Del Castilho, Rio de Janeiro CEP 20765- 971 Abstract This paper presents the development of an educational package for the area of control and automation, which uses a Fuzzy Inference System, control of mobile robotic platforms, a virtual environment and a real. The virtual one was built from the V-Rep platform for robotics simulation, which has as a way to control the objects in your scene the programming language LUA, and in a real environment was assembled a robot from the Arduino prototyping platform. The fuzzy inference system has methods for defining input membership functions and output in addition to the inference rules. The performances of the created functionalities were compared with Matlab 2009a Fuzzy Logic Toolbox. The case studies were built virtually and in real environment to evaluate the modeling. The results legitimate use of the application developed, using the simulator in combination with the robots assembled,, with a view to learning computational intelligence techniques. Keywords Fuzzy Logic, Mobile Robotics, V-REP, Arduino Resumo Este artigo apresenta o desenvolvimento de um pacote educativo para a área de controle e automação, que usa um Sistema de Inferência Fuzzy, em plataforma robótica móvel, num ambiente virtual e num similar real. O ambiente virtual foi construído a partir da plataforma de simulação robótica V-Rep, que utiliza como forma de controle dos objetos em seu cenário a linguagem de programação LUA. No ambiente real, foi montado um robô a partir da plataforma de prototipagem Arduino. O Sistema de Inferência Fuzzy executado conta com métodos para definição de funções de pertinência de entrada e de saída, além das regras de inferência. Os desempenhos das funcionalidades desenvolvidas foram comparados com o Fuzzy Logic Toolbox do Matlab 2009a. Por sua vez, os estudos de casos foram simulados virtualmente e construídos num ambiente real para avaliação da modelagem. Afinal, os resultados obtidos mostram-se interessantes e viabilizam o uso da aplicação desenvolvida, utilizando-se o simulador em conjunto com o robô montado, com vistas à aprendizagem dos métodos de inteligência computacional. Palavras-chave Lógica Nebulosa, Robótica Móvel, V-REP, Arduino 1 Introdução A simulação robótica por software permite que se conheça o comportamento de agentes autônomos e sua interação com certos ambientes, antes de se produzir o mesmo em aplicações reais. Além disso, os experimentos reais podem levar muito tempo para que se ajustem os equipamentos e se obtenha o resultado desejado. Por outro lado, os sistemas de simulação permitem que sejam testadas várias possibilidades de forma mais rápida, além de evitar o risco e danos aos equipamentos. Neste sentido, um estudante de robótica precisa adquirir os conhecimentos necessários para começar a desenvolver as simulações. Este aprendizado não ocorre de forma imediata e carece que ele interaja com várias áreas técnico-científicas. Ademais, o uso de ambientes de simulação pode auxiliar a compreensão do funcionamento de sensores e atuadores, assim como a sua aplicação na área de automação industrial. Além disso, permite a montagem de peças robóticas móveis sem que exista a necessidade de que estes recursos físicos estejam disponíveis, tais como: sensores, interfaces analógica-digitais, condicionadores de sinais, placas controladoras, atuadores ou robôs completos. Por sua vez, as técnicas inteligentes apresentam soluções para diversos problemas, que possuem dificuldades em se desenvolver a modelagem matemática que os represente de forma o mais próximo do funcionamento real de equipamentos, ou que a solução seja muito custosa. Uma das técnicas inteligentes bastante usadas são os Sistemas de Inferência Fuzzy (SIF), pois apresentam uma forma de interpretar um cenário que é abordada neste artigo. Este trabalho apresenta uma avaliação da aplicação de um Sistema de Inferência Fuzzy no ambiente de simulação V-Rep, desenvolvido pela COPPELIA (2015). A linguagem de programação utilizada pelo sistema foi a LUA, cuja primeira versão foi desenvolvida em 1993 por Roberto Ierusalimschy, Luiz Henrique de Figueiredo e Waldemar Celes, no Computer Graphics Technology Group da Pontifícia Universidade Católica do Rio de Janeiro. Vale lembrar que além da linguagem LUA, o V-REP também oferece interação com outras linguagens de programação, como por exemplo, Java. Um exemplo de aplicação foi realizado na plataforma Arduino, por esta ser de baixo custo e de fácil aquisição, a fim de emular o ambiente real. O funcionamento do robô no ambiente de simulação foi comparado com o do robô montado, bem como, as funcionalidades do SIF desenvolvido em LUA foram validadas, usando-se o ambiente Matlab como parâmetro. A escolha dos componentes do pacote educativo foi feita a partir de sistemas e equipamentos que permitissem a utilização em ambientes de aprendizagem, tendo como um dos objetivos a viabilidade de sua aplicação, pois o V-Rep possui uma versão educacional gratuita, possibilitando assim a sua utilização por instituições destinadas a qualquer faixa econômica. 2 Contextualização A simulação de projetos robóticos pode ser realizada em vários ambientes encontrados no mercado, existindo uma diversidade de tipos, com recursos e facilidades diversas. Outro fator que deve ser levado em consideração é a relação custo/benefício. O valor de determinados softwares acaba tornando proibitiva a sua utilização em certos setores, por esse motivo, buscou-se algum que fosse gratuito e/ou que possuísse versão para uso educacional. Igualmente, os simuladores devem fornecer ferramentas que permitam a construção de agentes robóticos, a sua inserção na área de testes e a interação com objetos disponibilizados na mesma área. Assim, as tarefas para configuração do controle e uso do modelo robótico podem ser realizadas de forma intuitiva pelo estudante. Ademais, o simulador também deve permitir o uso de linguagem de programação, para que seja criado o controle dos movimentos realizados pelo agente robótico. Uma comparação entre alguns ambientes foi realizada por Staranowicz & Mariottini (2011), onde se podem verificar algumas características específicas de sua utilização. A avaliação e o desenvolvimento desses ambientes pode ser constatada ainda nos trabalhos de Fernandes (2010), Iñigo-Blasco et al. (2012), Rohmer et al. (2013). Assim sendo, alguns sistemas são caracterizados por: permitirem utilizar várias linguagens, fornecerem ambientes 3D, disponibilizarem uma interface gráfica para o usuário, oferecerem mais de um tipo de sensores, possuírem internamente equações matemáticas e físicas para o tratamento da dinâmica de veículos, braços ou pernas robóticas. A utilização de um SIF permite que se controle um sistema robótico, sem ter a necessidade da sua formulação matemática. Esse tipo de controle tem sido aplicado a problemas como: pêndulo invertido, seguidores de linha e em outros casos como os descritos por Mester (2009), Olivares-Mendez et al. (2014) e Ortigosa & Morillas (2014). Portanto, o aprendizado da técnica inteligente pode ser em conjunto com a aplicação dos saberes adquiridos em uma sala de aula como encontrado em Fabregas et al. (2015). Logo, a junção dos ambientes de simulação com um SIF tem como objetivo o desenvolvimento do conhecimento integral sobre o tema “controle robótico inteligente” para os estudantes de robótica, fazendo com que ao elaborar as soluções, os mesmos adquiram mais e melhores conhecimentos, e não apenas uma noção de como deve ser o funcionamento de tais sistemas, mais ainda, apreendendo o porquê de como eles funcionam. Analogamente, a plataforma Arduino vem sendo usada largamente na educação para o aprendizado de robótica e áreas afins, como apresentado pelos trabalhos de Araújo, Portugal, Couceiro & Rocha (2014) e Grover et al. (2014). Ela oferece uma linguagem de programação, que dispensa conhecimentos em programação. Finalmente, o ambiente virtual de simulação robótica deve fornecer uma interface gráfica em que se possa visualizar a interação do robô com os objetos em terceira dimensão. Deve ainda proporcionar o uso de uma linguagem de programação, para que seja possível controlar os objetos inseridos no ambiente virtual. Ele deve oferecer bibliotecas de técnicas inteligentes ou permitir que as mesmas sejam criadas. Não obstante, o software precisa oferecer componentes, como por exemplo, atuadores e sensores, juntamente com drivers compatíveis, aos respectivos atuadores e sensores utilizados na placa robótica. Ele deve permitir a comunicação com o modelo robótico real, incluindo a embarcação no robô do programa de controle desenvolvido no ambiente virtual, ou seja, a exportação do código para a memória existente no processador da placa robótica. 3 Desenvolvimento 3.1 O Ambiente de Simulação O simulador selecionado para o desenvolvimento do sistema educacional robótico inteligente foi o VRep, pois existe uma versão educacional gratuita, mostrada na figura 1, e apresenta algumas das funcionalidades desejadas, como a interface gráfica com três dimensões. Ele possui ainda, como componentes, algumas plataformas de robôs, existentes no mercado, que podem ser inseridos no cenário virtual. Para se configurar o sistema de controle robótico nesta pesquisa, foi utilizado um computador com o sistema operacional Windows 7, pois o programa apresentou incompatibilidade com a versão do sistema operacional Windows XP. A linguagem existente no simulador para a inclusão de funcionalidades nos componentes robóticos foi a LUA. Ela possui uma sintaxe própria, apesar de não ser muito distinta de outras linguagens. Essa linguagem possui todas as características de orientação a objetos, entretanto, permite a criação de classes e métodos. O ambiente possibilita o uso de outras linguagens como o Java ou o C++, elas podem ser cha- madas através de funções disponíveis em LUA. Como parte da avaliação foi usada apenas a Linguagem LUA disponível no próprio ambiente. recida ainda a possibilidade do uso de bibliotecas, que podem ser referenciadas no script do V-Rep. Existem alguns editores para a linguagem LUA e extensões (add-ons ou plug-ins) para ambientes de desenvolvimento integrado, fazendo com que estes, criem projetos para a linguagem. Nesta pesquisa, usou-se o software Netbeans 8.0 com o plug-in Lua Glider para a codificação conforme mostrado na figura 2. O suporte da linguagem LUA para o editor foi feito através do Software Development Kit chamado Corona. Figura 1. V-REP - ambiente de simulação robótica A ferramenta V-Rep disponibiliza tutoriais no sítio eletrônico da empresa COPPELIA, que são instruções passo a passo para o aprendizado do uso do ambiente. Nesse sentido, os projetos realizados no ambiente são denominados de cenas, onde podem ser colocados objetos móveis e fixos. A construção dos objetos das cenas pode ser realizada através de formas primitivas e de componentes (atuadores, sensores, câmeras, sensor de força, caminhos, entre outros) disponíveis. A elaboração de um agente robótico pode ser realizada com esses objetos descritos, fazendo-se um agrupamento ou junção deles. As peças devem ser combinadas ou fixadas umas as outras com um sensor de força, dependendo do uso desejado. O uso do sensor de força permite a modularização dos componentes. A criação de modelos exige que sua base de fixação, que também é um componente, seja configurada como um “Object is model base” através da marcação da caixa de seleção em sua caixa de diálogo de propriedades, permitindo a exportação para um modelo em um arquivo próprio. Essa característica amplia o uso dos objetos, permitindo a inclusão dos mesmos em outras cenas. Os programas escritos no simulador são chamados de scripts, eles podem estar associados a um objeto na tela. Os scripts são configurados para que a execução ocorra sequencialmente, ou seja, são gerenciados pelo controlador de tempo do V-REP, ou paralelamente, marcados como threads nesse último caso. A escolha da forma de execução foi determinada pela seleção da plataforma robótica utilizada. Nesse caso, usou-se o script sem thread por ser o modo compatível com a execução de programas na placa Arduino. O editor dos scripts da linguagem de programação é simples e oferece apenas um code completion quando se começa a digitar uma das funções oferecidas pelo ambiente. Caso seja do interesse do programador, é possível usar um editor externo. A simulação é gravada em um único arquivo, com todos os seus objetos e os scripts de controle, não sendo possível acessar o arquivo do código diretamente. É ofe- Figura 2. Modelo do sensor ultrassônico 3.2 A Criação dos Modelos Robóticos Foram usadas as formas primitivas para se construir as partes do veículo, o chassi, as rodas, os motores e o sensor. Para facilitar o reuso e outros experimentos, o sensor e o conjunto “motor com roda”. O objeto “sensor ultrassônico”, exibido na figura 3, foi adicionado ao modelo o objeto “Proximity Sensor” do V-Rep para dotar o objeto com as características desse sensor ultrassônico. O sensor possui configuração para distância e forma, podendo ter a sua área de atuação na forma cônica ou cilíndrica. O motor foi interligado à roda através de um elemento do V-Rep que possui funcionamento de um motor, o join. Ele possui configurações de tamanho e de funcionamento, onde pode ser informada a velocidade máxima em que ele gira. Usou-se como base os componentes disponíveis no mercado que são compatíveis com a plataforma Arduino, visando o aumento na facilidade da construção de um modelo robótico real. Figura 3. Modelo do sensor ultrassônico 3.3 O Desenvolvimento O algoritmo do SIF foi desenvolvido na linguagem do ambiente de simulação LUA. Os métodos de entrada e saída da classe Fuzzy foram criados com funções de pertinência triangulares e a função de avaliação utilizada foi o método Mamdani, verificando o Mínimo e o Máximo no cálculo nas regras, para entrada e saída respectivamente. A seguir foi feita a agregação das funções de pertinência dos resultados dos consequentes e, posteriormente, foi feito o cálculo do centro de massa para efetivar a defuzzificação. O código da classe Fuzzy foi desenvolvido em LUA no Netbeans, que é uma IDE (Integrated Development Environment) normalmente usada para programação na linguagem Java. Foram desenvolvidos vários plug-ins para o programa, entre eles temos Glider, que funciona em conjunto com o SDK (Software Development Kit) Corona. Observa-se, que é possível usar arquivos externos no V-REP e fazer referência através da instrução “require” nos scripts criados com LUA. Além disso, o ambiente de simulação não fornece um depurador que possa acompanhar a execução do programa, a fim de se avaliar se ele está funcionando de forma correta ou para a detecção da existência de algum erro. Essa limitação aumentou o tempo para a realização desse trabalho. A avaliação do funcionamento foi feita usando uma função do ambiente que apresenta informações na tela, a função “simAddBanner” apresenta um texto com possibilidade de configuração de cor. O desenvolvimento foi dividido em etapas, a primeira possuiu um único conjunto de entrada e um único conjunto de saída, enquanto a segunda permite o uso de vários conjuntos de entrada e saída. Neste sentido, o programa realiza chamadas para os métodos da classe Fuzzy em duas fases de sua execução. A primeira fase tem a responsabilidade de configurar o sistema, informando as funções de entrada e saída, e posteriormente as regras de inferência, conforme apresentado na figura 4. A segunda fase consiste em chamar o método de avaliação, que realiza o processamento da entrada até apresentar a saída, de acordo com o fluxograma da figura 5. Em uma segunda etapa, o SIF passou a permitir qualquer quantidade de entradas e também qualquer quantidade de saídas. A avaliação do acréscimo de funcionalidades foi realizada com a leitura de três distâncias e a saída de duas informações para controlar os motores existentes no veículo. Os métodos criados para o primeiro teste precisaram contemplar esse acréscimo. A utilização de sistemas nebulosos parte do princípio que é necessário um especialista para modelar o problema ou podemos fazer uso de outros métodos para corrigir algum problema no sistema desenvolvido, temos redes neurais ou algoritmos genéticos como possibilidades. Os acertos das funções de pertinência e das regras de inferência Fuzzy foram realizados de forma empírica, para que o objetivo fosse alcançado. Figura 4. Fluxograma do algoritmo de configuração Figura 5. Fluxograma do algoritmo da avaliação Após a verificação do funcionamento do SIF em LUA e a comparação com a execução do mesmo experimento no software Matlab, o código desenvolvido foi convertido para a plataforma Arduino e implantado na placa Uno R3. 3.4 A Simulação O veículo modelado, figura 6, continha duas rodas com motores (joins), uma roda fixa, um chassi e um sensor de distância. O cenário também possuía paredes, figura 7, limitando o movimento nas quatro direções. O objetivo do primeiro experimento era que o carro parasse antes de bater na parede usando lógica fuzzy. As funções de pertinência de entrada e de saída sofreram ajustes para se alcançar a distância desejada. O veículo iniciou o percurso em afastamentos da parede, sempre com uma diminuição de velocidade até estacionar ao ponto desejado. Figura 6. Veículo modelado pelos autores. Figura 7. Cenário O segundo experimento possibilitou que a classe fosse testada com o controle do movimento do veículo, fazendo com que o mesmo parasse no centro da região. Para determinar o próximo movimento do veículo, fez-se necessário a determinação de sua distância para mais de uma parede, o sensor precisou ser girado para que fosse possível a obtenção dessas informações. Optou-se pela verificação da distância em três direções, direita, frente e centro, possibilitando que controlando a velocidade de cada um dos dois motores fosse possível conduzir o veículo ao centro do quadrado formado. Foi introduzido um motor abaixo do sensor ultrassônico para fazer a sua rotação. 4 Resultados Testou-se inicialmente o ambiente proposto com um experimento contendo dois conjuntos de entrada e um de saída, contendo quatro regras de inferência, para verificar o funcionamento da função Fuzzy desenvolvida. A modelagem possuía funções de pertinência triangulares de entrada e a aplicação das regras de inferência sobre as funções de saída, assim como o valor obtido através do cálculo de centro de massa. Pôde ser verificada a comparação entre os valores obtidos no Matlab, conforme apresentado na figura 8 e figura 9, e a função construída na tabela 1. Cumpre registrar que este SIF foi avaliado com valores na mesma ordem de grandeza para as distâncias utilizadas na simulação com o robô móvel. Posteriormente, foi avaliado se o veículo pararia de forma correta antes de colidir com a parede. Ambas as situações funcionaram sem nenhum problema. Figura 9. Aplicação de Fuzzy no Matlab Tabela 1. Quadro comparativo para duas entradas e uma saída O cenário com três medições de distância para controle do carro foi criado nos dois ambientes, sendo também montado em um chassi com dois motores controlados pela placa Arduino. A tabela 2 mostra os valores resultantes do teste realizados nos dois ambientes virtuais para este caso. A modelagem contou com 18 regras de inferência conforme apresentado na figura 10 e na tabela 3. A figura 12 apresenta a concretização real do robô, cujo experimento evoluiu de forma esperada para o mesmo cenário, podendo ser o mesmo visualizado no sítio: http://www.divulgando.com.br/sbai2015. Tabela 2. Quadro comparativo para três entradas e duas saídas Figura 10. Aplicação Fuzzy no Matlab para o veículo Figura 8. Regras de inferência Tabela 3. Regras de inferência para as três entradas 6 Agradecimentos À Professora Doutora Karla Figueiredo do Departamento de Engenharia Elétrica da Pontifícia Universidade Católica do Rio de Janeiro, por sua inestimável contribuição para a realização desse trabalho. 7 5 Conclusão Nesse artigo foi avaliado o funcionamento de um pacote educacional compreendido por: um ambiente de simulação robótica 3D, o V-REP, com um conjunto de peças para um robô móvel; um SIF desenvolvido na linguagem LUA para este ambiente; e, uma aplicação real do robô móvel na plataforma de prototipagem Arduino, com a respectiva codificação e programação para o SIF desenvolvido. Pôde ser observado que a simulação desenvolvida no V-Rep apresentou valores muito próximos aos encontrados na execução do software Matlab. O resultado da confecção das peças, no ambiente de simulação robótica, também pôde ser modelado de modo similar daquele normalmente encontrado no mercado, que é usado para a montagem de protótipos na plataforma Arduino. Assim, a emulação física do dispositivo apresentou um bom funcionamento e correspondeu ao simulado. Esta particularidade mostrou-se eficaz e possibilitou acelerar a elaboração de novos experimentos. Desta maneira, a metodologia permitiu a aplicação da plataforma V-Rep em um espaço educacional, e pode tornar mais eficiente o processo de aprendizagem ativa dos estudantes. A continuidade do presente trabalho será testada junto a estudantes de graduação para a avaliação da metodologia, bem como se deseja desenvolver alguns Sistemas de Inferência Fuzzy na linguagem Java, por esta poder ser utilizada em conjunto com o ambiente de simulação. Figura 12. Veículo com a placa Arduino e o sensor ultrassônico Referências Bibliográficas Araújo, A., Portugal, D., Couceiro, M. S. and Rocha, R. P. (2014) Integrating Arduino-Based Educational Mobile Robots in ROS, J. Intell. Robot. Syst. 77, pp. 281–2980 Fabregas, E., Farias, G., Dormido-Canto, S., Guinaldo, M., Sánchez, J. and Bencomo, S. D. (2015) Platform for Teaching Mobile Robotics, Journal of Intelligent & Robotic, Springer Netherlands, pp. 1-13 Fernandes, C. C. (2010). Ambiente Simulado da Metodologia RoboEduc, Natal. Dissertação (Mestrado em Engenharia da Computação) - Universidade Federal do Rio Grande do Norte. Grover, R., Krishnan, S., Shoup, T. and Khanbaghi, M. (2014) A competition-based approach for undergraduate mechatronics education using the arduino platform, Interdisciplinary Engineering Design Education Conference (IEDEC), pp. 7883 Iñigo-Blasco, P., Diaz-del-Rio, F., Romero-Ternero, M. C., Cagigas-Muñiz, D. and Vicente-Diaz, S. (2012) Robotics software frameworks for multiagent robotic systems development, Robotics and Autonomous Systems, No. 60, pp. 803–821, Seville, Spain Mester G. (2009) Intelligent Mobile Robot Control in Unknown Environment, Intelligent Engineering Systems and Computational Cybernetics, pp. 1526 Olivares-Mendez, M.A. Kannan and S. Voos, H. (2014) V-REP & ROS Testbed for Design, Test, and Tuning of a Quadrotor Vision Based Fuzzy Control System for Autonomous Landing, International Micro Air Vehicle Conference and Competition, Delft, The Netherlands Ortigosa, N. and Morillas, S. (2014) Fuzzy Free Path Detection from Disparity Maps by Using LeastSquares Fitting to a Plane, Journal of Intelligent & Robotic Systems, Volume 75, Issue 2 , pp. 313-330 Rohmer, E., Singh, S.P.N. and Freese, M. (2013) REP: A versatile and scalable robot simulation framework, Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), pp. 1321–1326 Staranowicz A. and Mariottini G L. (2011) A survey and comparison of commercial and open-source robotic simulator software, 4th International Conference on PErvasive Technologies Related to Assistive Environments, New York, USA