• Nenhum resultado encontrado

2.3 Importância da Pesquisa sobre os Sistemas Multi-Robôs

3.1.1 Modelos, middlewares e frameworks para robótica

Muitas aplicações para sistemas de robô único ou sistemas multi-robôs utilizam uma camada de software especial que simplifica a comunicação e o gerenciamento dos dados de entidades computacionais (robôs, computadores, sensores e outros dispostivos) em aplicações distribuídas. Essa camada é responsável por esconder a heterogeneridade de todas as entidades computacionais envolvidas e disponibilizar um conjunto de serviços de alto nível bem definidos, oferecendo funcionalidades que permitam usar ao máximo a capacidade de cada entidade disponível (Mahmoud 2004).

3.1. DESENVOLVIMENTO DE SOFTWARE PARA ROBÓTICA 17

Tal camada pode ser especificada ou projetada na forma de modelos de software, ou de sistema, que possuem regras e características específicas, mas o mesmo objetivo, e implementada na forma middlewares ou frameworks. Dentre outros aspectos, os estudos relativos a essa camada de software abordam a moduralização de software. Com ela, é possível ter reuso de partes de outras aplicações, promovendo a redução de tempo no de- senvolvimento de novas aplicações, em um processo mais simples e com mais qualidade (Völter et al. 2013).

Diante desses requisitos, entende-se que o levantamento e breve descrição dos mode- los e tecnologias de software usados para o desenvolvimento de aplicações em sistemas multi-robôs é de fundamental importância para o desenvolvimento do sistema proposto. Esse levantamento proporciona uma compreensão maior sobre a linha do tempo na área de desenvolvimento de software para sistemas multi-robôs e os possíveis problemas em aberto. Dessa forma, as características do sistema proposto podem ser planejadas e im- plementadas de uma maneira mais efetiva.

Portanto, a seguir, alguns dos principais modelos, middlewares e frameworks para sistemas multi-robôs são brevemente descritos. Suas características principais são apre- sentadas de uma forma que seja possível perceber como o desenvolvimento de software nessa área evoluiu e o que pode ser feito para avançar ainda mais.

O modelo CORBA (Common Object Request Broker Architecture) (CORBA 2017), definido pela OMG (Object Management Group) (OMG 2017), é bastante usado no pro- jeto de middlewares para robótica. Ele especifica padrões que permitem a comunica- ção interprocessos que podem executar em plataformas iguais ou plataformas diferentes. Existem muitas implementações de CORBA tanto para sistemas estacionários quanto para sistemas móveis.

O projeto OROCOS (Open Robot Control Software) (Bruyninckx 2001, OROCOS 2017) nasceu após anos de experiências e esforços na tentativa de utilizar softwares de controle de robôs comerciais. Em sintonia com o movimento do software livre, OROCOS propõe mecanismos para o desenvolvimento de software livre para controles de robôs.

Com OROCOS, o desenvolvimento de software é mais modular e flexível, onde os programadores podem desenvolver aplicações do zero ou desenvolver módulos específi- cos que podem servir de base para outras aplicações. Funcionando sob a licença LGPL (Lesser General Public License) (LGPL 2017), o software criado é de alta qualidade do ponto de vista técnico, de documentação, e de engenharia de software. Além disso, ORO- COSpermite o desenvolvimento de software independente de fabricantes específicos de robôs.

OROCOS pode especificar componentes para cinemática, sensoriamento, controle, dentre outros. Esses componentes são compreendidos como objetos que podem ser adici- onados ou removidos da aplicação. O modelo CORBA é utilizado na criação, computação e comunicação dos módulos em OROCOS. Além disso, OROCOS motiva o desenvolvi- mento incremental com discussões detalhadas entre os desenvolvedores e o uso de padrões abertos como o próprio CORBA e o XML.

O RT-Middleware (Robotics Technology Middleware) (Ando et al. 2005) permite o desenvolvimento baseado em objetos de aplicações em robótica. Ele possui objetivos em comum em relação ao middlewares apresentados como a modularização de software, esti-

18 CAPÍTULO 3. TRABALHOS RELACIONADOS

mulando o reuso e a produtividade, e a integração entre robôs produzidos por fabricantes diferentes.

RT-Middlewareoferece algumas características importantes como sincronização, in- dependência de plataforma, linguagens e tecnologias de redes, assim como suporta exe- cução em tempo real. A parte fundamental desse middleware é o RT-Component. Se trata de uma especificação da OMG, que tem suporte em CORBA. Um RT-Component é com- posto de um ou mais objetos componentes. Um sistema de robôs distribuídos pode ser desenvolvido pela combinação de vários desses objetos componentes, que são unidades de processamento independentes com portas de entrada e saída e interfaces bem definidas. O middleware Orca (Makarenko et al. 2006, Orca 2017) foi projetado para promover o desenvolvimento de aplicações oferecendo suporte a um conjunto amplo de robôs e redes de sensores pela programação baseada em componentes. Orca possui código fonte aberto e tem como objetivos principais: habilitar o reuso de software definindo um conjunto de interfaces comuns, simplificar o reuso de software por meio de APIs de alto nível e mo- tivar o reuso de software com o uso de um repositório de componentes. Os componentes funcionam como elementos fundamentais para a montagem de aplicações.

Os componentes no Orca não possuem qualquer restrição e suportam a integração com ferramentas de código aberto para o gerenciamento da criação, computação e co- municação entre eles. Orca é baseado no framework ICE (Internet Communications En- gine), desenvolvido pela ZeroC (Ice 2017). ICE é um framework orientado a objetos que fornece independência de linguagem e plataforma, assim como algumas funcionalidades baseadas em RPC (Remote Procedure Call - Chamada de Procedimento Remota) e em sistemas publicar/assinar.

Dessa forma, Orca possui serviços fundamentais para a formação da infraestrutura e do conjunto de componentes comuns que são usados no desenvolvimento das aplica- ções. O registro IceGrid fornece um serviços de nomes e serve para que um componente localize outros componentes. IceStorm é um serviço de eventos atuando como um inter- mediário entre publicadores e assinantes de mensagens.

O ROS (Robot Operating System) (Quigley et al. 2009, ROS.org 2017) é um mid- dlewarede código fonte aberto que aborda o projeto e o desenvolvimento de aplicações robóticas distribuídas de larga escala. ROS fornece uma camada de comunicação bem estruturada e mecanismos que facilitam a integração de tecnologias. Ele possui quatro conceitos fundamentais: nós, mensagens, tópicos e serviços. Um nó é o elemento básico de contrução de aplicações em ROS. Ele é semelhante a um módulo de software e uma aplicação é formada por vários nós.

Os nós se comunicam por meio de passagem de mensagem. Elas são compostas por um conjunto de dados de tipos primitivos. O modelo de comunicação publicar/assinar é o padrão em ROS. Com isso, os nós publicam mensagens em tópicos e outros nós recebem mensagens pela assinatura desses tópicos.

Devido a isso, ROS oferece a comunicação síncrona, requisição/resposta, por meio de serviços. Eles são definidos por duas estruturas do tipo mensagem: uma de requisição e outra de resposta. O nó que oferece o serviço que pode ser acessado por um nome. Outro conceito importante no ROS se trata de estruturas do tipo bags. Por meio destas, um nó ROSpode armazenar e reproduzir dados de uma mensagem ROS.

3.1. DESENVOLVIMENTO DE SOFTWARE PARA ROBÓTICA 19

ROS possui suporte para linguagens de programação como C++, Python, Lisp e Oc- tave por meio de sua IDL (Interface Definition Language). A modularidade do ROS proporciona a incorporação de diversas ferramentas de código aberto para robótica como algoritmos, simuladores, etc.

A plataforma OPRoS (Open Plataform Robotic Services) (Jang et al. 2010, Han et al. 2012) também adota a programação baseada em componentes, oferecendo serviços pa- drão de alto nível para desenvolver aplicações complexas envolvendo robôs distribuídos. Dessa forma, OPRoS promove reuso de software, integração entre hardwares robóticos heterogêneos. O suporte a programação distribuída em OPRoS é baseada em chamadas de procedimento remotos (RPC). Assim como em outras plataformas baseadas em com- ponentes, as aplicações em OPRoS são desenvolvidas pela composição de componentes (atômicos ou de composição).

Geralmente, componentes podem requerer ou oferecer alguma funcionalidade. A co- municação entre os componentes é feita por portas. Elas podem ser portas de entrada, que oferecem as funcionalidades do componente, e portas de saída, por onde os compo- nentes acessam as funcionalidades que eles requerem. OPRoS possui um container de componentes. O ciclo de vida de cada componente em um robô é gerenciando por esse container.

Outros middlewares e frameworks com algumas características semelhantes ao apre- sentados até aqui e que fazem parte dessa cronologia das plataformas de software para robótica são: CoolBOT (Hernández-Sosa et al. 2005), MARIE (Mobile and Autonomous Robotics Integration Environment) (Cote et al. 2006), AWARE (Gil et al. 2007). Outras informações e referências sobre middlewares podem ser encontrados nesse artigo (Elkady & Sobh 2012).

O projeto RoboEarth (Waibel et al. 2011, Riazuelo et al. 2015) também está inserido nessa linha por proporcionar a execução de tarefas colaborativas entre robôs. Este projeto se baseia no compartilhamento e armazenamento de conhecimento sobre robôs. Usando uma linguagem específica, robôs são integrados ao sistema por meio de uma represen- tação comum e desenvolvedores podem criar instruções genéricas para tarefas a serem executadas por robôs.

A infraestrutura para nuvem de robôs do RoboEarth proporciona um aumento signi- ficativo de armazenamento e compartilhamento de conhecimento sobre robôs. Robôs aprendem por intermédio dos desenvolvedores e, também, por intermédio dos outros robôs. Além disso, oferece um grande poder computacional para processamento em se- gundo plano (offload) de tarefas como planejamento de rota, mapeamento, navegação e inferência probabilística.

Assim, o RoboEarth tenta promover uma rede mundial de robôs onde eles adquirem conhecimento de desenvolvedores e de outros robôs para realizarem tarefas de forma autônoma, individualmente ou colaborativamente. É um sistema que oferece grandes benefícios na execução de tarefas para usuários finais.

O RoboEarth possui características importantes e modernas para sistemas que usam colaboração entre robôs. Além disso, possui similaridades com o sistema proposto por este trabalho. A capacidade de fazer com que robôs adquiram conhecimento a partir de desenvolvedores e outros robôs é compatível com a nova demanda de plataformas de

20 CAPÍTULO 3. TRABALHOS RELACIONADOS

software para sistemas multi-robôs. Além de tentar tornar a vida do usuário final mais simples durante o uso do sistema.

Contudo, buscamos nesse trabalho um cenário onde o usuário final acesse e programe, de forma fácil e simplificada, tarefas para times de robôs. Além disso, existe, também, o mecanismo que permite ao sistema adquirir conhecimento sobre configurações de times de robôs a partir de desenvolvedores e usuários finais. Ou seja, o sistema utiliza um mecanismo de aquisição de dados dos seus usuários para transformá-los em informações úteis sobre times de robôs. Ele será mais detalhado posteriormente.

Considerando a infraestrutura de nuvens computacionais, uma arquitetura de sistema proposta recentemente tenta abordar questões problemáticas para sistemas multi-robôs, como a limitada capacidade de processamento e armazenamento, de maneira eficiente. Essa arquitetura é organizada em dois subsistemas: sistema máquina-para-máquina (ma- chine to machine- M2M) e sistema máquina-para-nuvem (machine to cloud - M2C) (Hu et al. 2012).

No sistema M2M, o grupo de robôs se comunica via links sem fio com o objetivo de formar uma fábrica de computação colaborativa. O primeiro benefício disso é que os recursos de cada robô são compartilhados pela equipe, formando uma espécia de infraes- trutura virtual ad-hoc. O segundo benefício é que as informações podem ser trocadas e acessadas de forma mais simples por qualquer robô nessa rede (Hu et al. 2012).

No sistema M2C, a infrastrutura em nuvem fornece um conjunto de recursos de pro- cessamento e armazenamento que podem ser alocados dinamicamente e em tempo real. Esse formato de sistema permite que a equipes de robôs possa transferir partes das apli- cações que requerem computação intensiva a um servidor remoto com alto poder compu- tacional na nuvem (Hu et al. 2012).

Além da capacidade de processamento, a grande capacidade de armazenamento faz com que o acesso a informações seja facilitado. Os robôs em equipes não necessitam des- cartar determinadas informações devido a suas limitações físicas. M2C permite que todas as informações da aplicação sejam armazenadas na nuvem e acessadas quando necessário (Hu et al. 2012).

Existem, também, alguns projetos em frameworks que envolvem robótica e a emer- gente área da Internet das Coisas (Internet of Things - IoT). IoT é um novo e promissor paradigma em sistemas distribuídos que está ganhando espaço rapidamente no campo das comunicações sem fio modernas. Basicamente, trabalha-se com o seguinte: a presença, cada vez mais constante, de objetos, ou coisas, dotados de relativa capacidade de proces- samento e comunicação como - tags RFID (Radio Frequency Identification - Identifica- ção por Rádio Frequência), sensores acoplados nos mais variados dispositivos, atuadores, smartphones, tablets, dentre outros - possibilita que, por meio de algum padrão de comu- nicação, eles possam trocar mensagens entre si de forma a cooperar em algum objetivo comum (Atzori et al. 2010).

Diante disso, é possível visualizar o grande impacto positivo da IoT no cotidiano das pessoas tanto no trabalho como em casa. Possibilitar a comunicação de dispositivos não tão triviais para cooperar em aplicações específicas levanta um grande leque de possibi- lidades. Com um maior número de dispositivos podendo se comunicar, pesquisadores já trabalham na ideia de casas inteligentes, empresas inteligentes e até cidades inteligentes.

3.1. DESENVOLVIMENTO DE SOFTWARE PARA ROBÓTICA 21

Diversas são as questões que os pesquisadores enfrentam diante desse novo paradigma (Gubbi et al. 2013).

A robótica já possui um espaço especial nesse contexto pela sua própria natureza. Assim, robôs são vistos como objetos que processam informações e se comunicam com o objetivo de realizar alguma tarefa. A junção de robótica com IoT já é usada em áreas como: saúde, operações militares, operações de resgate, áreas inteligentes em ambientes industriais, domótica, etc (Grieco et al. 2014).

Já existe um bom número de plataformas de programação que permitem o desenvol- vimento de aplicações para robótica usando conceitos de IoT. Na sequência, algumas são brevemente descritas.

O framework Johnny Five foi desenvolvido para permitir ao desenvolvedor controlar plataformas de hardware usadas na construção de robôs. É de código aberto e é voltado para programas JavaScript/Node.js (Tilkov & Vinoski 2010). O que promove seu uso é o fato do próprio JavaScript possuir integração com muitas linguagens de programa- ção. Existe um grande número de plataformas de hardware que podem ser acessadas via Johnny Five(Johnny-Five 2017).

Cylon.js é um framework baseado em JavaScript para promover uma forma sim- ples e poderosa de criar soluções envolvendo plataformas de hardware diferentes usando Node.js. O principal componente de sua arquitetura é o MCP (Master Control Program - Programa de Controle Mestre), que é responsável pelo gerenciamento dos robôs por meio de uma API específica.

No Cylon, robôs são coleções de dispositivos e conexões. Usuários podem instanciar robôs por meio do MCP, assim como iniciar seu funcionamento de forma individual ou simultânea. Robôs podem ter comandos personalizados que permitem a coordenação de vários dispositivos e conexões, além disso podem se comunicar entre si, via MCP.

Os dispositivos e conexões do Cylon se constituem como camadas de abstração para os drivers e adaptadores, que fornecem acesso aos dispositivos físicos. Adaptadores são responsáveis pela conexão com plataformas de hardware, independente do meio físico. O envio de comandos e manipulação de eventos para as plataformas de hardware é feita pelos drivers. Então, quando um robô acessa um dispositivo ou conexão, na realidade esse acesso é convertido em chamadas na camada mais baixa, dos drivers e adaptadores que proporcionam o acesso no hardware.

Outro framework interessante é o Artoo (Artoo 2017). Trata-se de um micro-framework para robótica, que oferece uma DSL (Domain-Specific Language - Linguagem de Domí- nio Específico) simples e poderosa para robôs. Assim como Cylon, Artoo promove um processo simples de conexão de plataformas de hardware diferentes para cooperarem em diversas tarefas.

Artooé desenvolvido em Ruby, possuindo suporte a programação concorrente a ope- rações multi-thread. Ele utiliza o padrão de projeto adapter para lidar com conexões a tipos específicos. Além disso, Artoo possui muitas similaridades com o Cylon quanto a arquitetura de sistema. A diferença ocorre nos adaptadores que conectam as plataformas de hardware ao sistema. No Artoo, cada plataforma possui um mecanismo de conexão particular (denominado integrations), gerando mais uma indireção no sistema.

22 CAPÍTULO 3. TRABALHOS RELACIONADOS

desenvolvido na linguagem Go, NodeBots (NodeBots 2017), desenvolvido em JavaScript, Zorg (Zorg 2017), desenvolvido em Python, Robo4J (Robo4J 2017), desenvolvido em Java, Husarion (Husarion 2017), desenvolvido em C++, dentre outros.

O resultado do levantamento e descrição de informações sobre projetos em modelos e plataformas de software para sistemas multi-robôs é apresentado na Tabela 3.1. Nela, estão sintetizadas informações importantes sobre aspectos das principais tecnologias para desenvolvimento de aplicações em sistemas multi-robôs.

Ao longo do tempo, como já mencionado, tais projetos foram influenciados por me- todologias de desenvolvimento de software contemporâneas. Se constituem como boas soluções no que diz respeito a integração e comunicação de robôs heterogêneos, além de fornecer abstrações para os programadores de aplicações. No entanto, pouco se observa com relação a criação de métodos de interação de usuários finais intrinsecos aos projetos. Esses usuários interagem com tais plataformas para executar tarefas (já implementadas). E, na maioria das vezes, recebem treinamento específico realizar essa interação.

Com a disseminação de soluções para utilizar robótica no cotidiano das pessoas, cada vez mais abre-se espaço para o estudo e desenvolvimento de métodos de interação que envolvem programação e execução de tarefas, de propósito geral, por usuários finais. Nas tecnologias descritas nesse capítulo, não há casos onde usuários finais programem e executem tarefas. Geralmente, o que ocorre é o desenvolvimento de interfaces específicas para usuários de sistemas que utilizam essas tecnologias para integrar robôs na execução de tarefas.