Arquiteturas de Software Uma arquitetura de software define os componentes (módulos) que compõem a arquitetura, como estes componentes são estruturados topologicamente (camadas, pipelines, data-centric, etc.), o mecanismo de controle empregado (centralizado, hierárquico, etc.), as interfaces que os módulos expõem para interação e os protocolos utilizados nestas interações. A arquitetura em camadas é a mais comum e provê uma estruturação onde cada camada: agrega um conjunto de componentes; provê, por meio de uma ou mais interfaces, um conjunto de serviços para a(s) camada(s) superior(es); possui controle independente das demais camadas. 1 Exemplo de Arquitetura em Camadas Aplicações-fim Manipulação de Objetos Camada de Aplicação Cliente/Servidor Camada Executiva Troca de Mensagens Camada de Controle de Tempo Real Hardware 2
Camada de Controle de Tempo Real A camada de controle de tempo real interage diretamente com o hardware, que pode ser considerado uma camada abaixo desta (mas não pertencente à arquitetura). A interação com o hardware se dá por meio de registradores, barramentos e portas, por exemplo, interface serial RS-232, barramento I2C (InterIntegrated Circuit) e barramento SPI (Serial Peripheral Interface Bus). A camada de controle de tempo real tem suas funções comumente implementadas em microcontroladores como o Arduino e executa operações com período da ordem de milisegundos. Operações típicas incluem controladores de velocidade e deslocamento, filtragem, emissão de alarmes e geração de sinais (por exemplo, PWM) Esta camada provê uma interface para a camada executiva (via porta serial RS-232, rede Ethernet, etc.), bem como define um protocolo de interação tipicamente baseado em passagem de mensagens. 3 Camada Executiva As funções da camada executiva são comumente realizadas em processadores de pequeno e médio porte tais como Intel Atom e Raspberry Pi, com sistema operacional instalado (Linux, na maioria dos casos). Esta camada executa operações com período da ordem de centenas de milisegundos. Tais operações são implementadas com processos e threads (comumente em C/C++) e utilizam as funções providas pela camada de controle de tempo real. Operações típicas da camada executiva incluem sensoriamento, estimação, atuação, proteção e fusão de dados. A camada executiva provê uma interface de mais alto nível para a camada de aplicação baseada, tipicamente, em protocolos de comunicação cliente/servidor tais como RPC (Remote Procedure Call) e REST/HTTP. 4
Camada de Aplicação A camada de aplicação oferece funções de alto nível que são utilizadas pelas aplicações-fim. Note que esta camada não implementa as aplicaçõesfim, mas sim facilidades para a implementação conveniente e eficaz destas aplicações. As funções presentes nesta camada são dependentes do domínio de aplicação. Por exemplo, para a robótica móvel, funções de movimentação, percepção, atuação e interação. Esta camada executa em processadores mais poderosos (ou mesmo em uma nuvem) e são codificadas em linguagens de alto nível como o Matlab, Python e Java. Desta forma, a interface que esta camada oferece para as aplicações-fim são baseadas em objetos das linguagens de programação suportadas. Por exemplo, um scan de laser é retornado como um vetor na linguagem Matlab. 5 Exemplo: Robôs Pioneer do Curso Aplicações-fim Notebook/Desktop Matlab/Octave Manipulação de Objetos Camada de Aplicação RestThru APIs (Matlab) REST/HTTP/JSON Intel Atom c/ Linux Camada Executiva RestThru/ARIA (C++) RS-232 Microcontrolador 16 bits Camada de Controle de Tempo Real Hardware ARCOS Pioneer P3-DX 6
Exemplo: Robôs Pioneer do Curso A Camada Executiva baseada em ARIA pode operar no modo de locomoção direta (requisição-resposta) ou no modo de comportamentos concorrentes (denominado ações). Ações são comportamentos instalados no robô. Estes comportamentos podem ser configurados com um conjunto de parâmetros e, baseado nas leituras dos sensores proprioceptivos e estereoceptivos do robô, decidem quais velocidades e orientação pretendem para o robô. As velocidades e orientações propostas são combinadas de acordo com um algoritmo baseado em prioridades. Este algoritmo de combinação dos comportamentos pode ser substituído por outro programa fornecido pelo usuário. A operação por locomoção direta e por ações são mutualmente exclusivas. 7 Exemplo: Cadeira de Rodas Robotizada Hardware Cadeira de rodas motorizada da Freedom modelo SX: Dois motores DC com imã permanente de 50 A (max). Duas baterias de 24 V. Tração por correia. Locomoção manual por meio de joystick. 8
Hardware Acrescentado ARM-based R-Pi SOC Arduino microcontroller Sparkfun 9-dof IMU Rotary encoder Axis 212 PTZ network camera Sick TIM551 laser rangefinder Electromen PWM motor driver Ethernet switch 9 Interconexão do Hardware R-Py Arduino Sick TIM-511 Laser RF AXIS 212 Camera R-Py R-Py Serial Arduino Antena WiFi Wi-Fi Router D-Link Switch Tablet/Notebook 10
Camada de Controle de Tempo Real Encoder Esquerdo Encoder Direito USB Arduino Mega I2C Serial3 IMU Modelo Cinemático Odometria Velocidades Acelerações Dimensões, constantes 11 Camada de Controle de Tempo Real Comandos Ethernet Odometria Velocidades Acelerações Serial3 USB IR Array Botões de Emergência Arduino Mega PID Orientação bateria led PID Vel. Direita PID Vel. Esquerda Acionamento Roda Esquerda PWM Dimensões, constantes, parâmetros, limites Acionamento Roda Direita Bumpers Acionamento E D Sentido de rotação E D Freio motor 12
Camada de Controle de Tempo Real Protocolo de comunicação com o microcontrolador (request e reply): Requisição Resposta 1 2 3 4 5 Campos codificados em ASCII separados por espaço em branco. Sempre 5 parâmetros (mesmo que não necessário todos). Mensagens propagadas por UDP (User Datagram Protocol). Unidades dos parâmetros: Distâncias: milímetros sem parte decimal. Ângulos: graus multiplicado por 1000 (miligraus) sem parte decimal. Tempo: segundos. 13 Camadas Executiva e de Aplicação A Camada Executiva disponibiliza o servidor RestThru (sem o ARIA) e o núcleo do ROS (Robot Operating System). Foi desenvolvido um driver do ROS para o controle da cadeira por meio deste framework robótico. Esta camada permite a execução simultânea de aplicações desenvolvidas tanto para o RestThru quanto para o ROS e executa em um processador Raspberry Pi. Oferece as seguintes funcionalidades: comandos de movimentação; acesso à odometria, velocidades e status da cadeira robótica; leitura do laser; acesso à câmera. A Camada de Aplicação executa em um notebook e oferece funções para o controle da cadeira robótica a partir as linguagens Matlab/Octave, Java e C++ (RestThru) ou C++ apenas (ROS). 14
Vista Lateral 15 Vistas Frontal e Traseira 16