• Nenhum resultado encontrado

Nesta seção é dado um exemplo de um sistema de controle baseado em agentes, capaz de executar tarefas utilizando eficientemente o conjunto de informações fornecido pelo sistema de sensoriamento ultra-sônico.

Neste sistema de controle baseado em agentes, para o controle do sistema de sensoriamento, são implementados um conjunto de 16 agentes S, derivados da classe sensor

primitivo, que são responsáveis pelo acionamento dos 16 transdutores ultra-sônicos e

processamento do sinal de eco recebido e os agentes encoder1 e encoder2, responsáveis pelo monitoramento da posição e velocidade dos encoders associados ao eixo de rotação de cada uma das rodas tracionadas do Brutus. É implementado também um agente derivado da classe

sensor virtual denominado Sensor_ultra-sônico, responsável por reunir as informações dos 16

Capítulo 4 — Sistema de Controle Baseado em Agentes 118 Derivados da classe comportamento, são implementados os agentes Evitar_colisão,

Orienta_robô, Reconhecedor e Mapeador. Finalmente, são implementados também três

agentes derivados da classe atuador virtual, denominados Girar, Andar_em_frente e

Acionar_motor, e um último agente, derivado da classe atuador primitivo denominado PID.

A figura 4.5 mostra o sistema de controle construído através da conexão dos agentes implementados em quatro níveis de controle, denominados Controle_motor, Explorar e

Reconhecer_obstáculo e Construir_mapa. Os níveis de controle estão citados em ordem

crescente de grau de importância. O nível Controle_motor, recebe os set points dos outros níveis para o controle de velocidade das rodas do robô. O nível Explorar confere ao robô um comportamento aleatório e exploratório, ao mesmo tempo que evita a colisão com obstáculos. O nível Reconhecer_obstáculo permite ao Brutus classificar obstáculos detectados dentro de três faixa de distâncias (40cm a 55cm, 70cm a 1 metro, e 40cm a 1 metro em relação à extremidade do robô). O nível Construir_mapa, utiliza as informações referentes à distância e ao tipo de obstáculo detectado fornecidas a ele, para construir um mapa do ambiente de operação do robô.

Capítulo 4 — Sistema de Controle Baseado em Agentes 119 Os agentes S são responsáveis por disparar os transdutores ultra-sônicos e por processar o sinal de eco (medição de distância, digitalização da envoltória do sinal de eco, determinação do seu valor de pico e da área sob o primeiro eco). Estas informações, além do grau de importância absoluto de cada agente S (calculado através da equação 4.1), são passados através de uma mensagem ao agente Sensor_ultra-sônico, que mantém internamente duas listas: uma contendo a distância medida e outra o grau de importância de cada agente S. Quando o agente Sensor_ultra-sônico recebe uma mensagem que contém uma informação de distância de valor inferior a 100cm, ele envia uma mensagem ativando os agentes

Evitar_colisão e Orienta_robô. Se esta distância for inferior a 40cm, o agente Orienta_robô é

desativado e o agente Evitar_colisão inicia o seu processamento. Caso a distância medida esteja na faixa entre 40cm e 100cm, o agente Evitar_colisão retorna ao seu estado de dormência e o agente Orienta_robô é que inicia o seu processamento. É conveniente esclarecer, que segundo a ferramenta utilizada para a construção do sistema de controle [46,47], todos os agentes que desejarem receber mensagens de um outro agente devem se inscrever em seu buffer de saída, não sendo possível ao agente que envia a mensagem escolher a quem ele deseja enviar. A comunicação entre os agentes é implementada desta forma para assegurar a modularidade e expansibilidade do sistema. Por este motivo, o agente

Sensor_ultra-sônico é forçado a “acordar” sempre os agentes Orienta_robô e Evitar_colisão,

mesmo nunca sendo necessário que os dois funcionem ao mesmo tempo.

Quando o agente Sensor_ultra-sônico recebe uma mensagem de um agente S, ele a responde informando o somatório dos graus de importância dos 16 agentes S. Dessa forma, o agente S pode calcular o seu grau de importância relativo, dividindo seu grau de importância absoluto pelo somatório recebido do agente Sensor_ultra-sônico. O inverso deste grau de importância relativo, é usado pelo agente S para programar o seu relógio interno (que todo agente derivado das classes sensor primitivo e sensor virtual possui), alterando os intervalos de tempo ao final dos quais o agente S é ativado. Uma vez que os recursos de hardware são compartilhados por todos sensores ultra-sônicos, quando um agente S é ativado ele entra em uma fila e aguarda a sua vez de utilizar estes recursos de hardware. À medida que o grau de importância de um agente S aumenta, o intervalo de tempo entre duas ativações diminui e o agente S entra na fila mais freqüentemente.

Capítulo 4 — Sistema de Controle Baseado em Agentes 120 Cada agente S é responsável por atualizar, a cada segundo, o período do seu relógio interno. Como ele não dispõe de um outro relógio que possa contar o tempo de 1 segundo ao fim do qual a atualização deve ser realizada, isto é feito dividindo-se 1 segundo pelo período atual do relógio. O resultado é usado como uma variável de contagem regressiva, que é decrementada a cada vez que o agente é ativado. Quando esta variável atinge o valor 0, então o agente aplica a equação 4.1 e envia o seu grau de importância absoluta ao agente

Sensor_ultra-sônico, que por sua vez retorna o valor atual do somatório de todos os graus de

Capítulo 4 — Sistema de Controle Baseado em Agentes 121

Quando um determinado agente S executa uma medição de distância que tem como resultado um valor dentro de uma das faixas de reconhecimento de obstáculos, ele envia imediatamente para o agente Sensor_ultra-sônico (sem esperar o próximo momento de atualização do período de seu relógio interno), um grau de importância cujo valor é muito maior do que o calculado pela equação 4.1. Isto garante que este agente S irá ter um grau de importância relativo próximo de 100% e que os demais agentes terão um grau de importância muito pequeno. Esta variação dos diversos graus de importância associados a cada agente S garante ao agente S em questão quase que a exclusividade de acesso aos recursos de hardware e software do sistema. Ao final do processo de reconhecimento, o agente S envia ao agente

Sensor_ultra-sônico o valor real do seu grau de importância absoluto (aplicando a equação

4.1), voltando a ter um grau de importância normal.

Quando o agente Evitar_colisão inicia o procedimento de evitar obstáculos, ele envia uma mensagem de pausa ao agente Andar_para_frente, que pára o robô e ele gira em torno de seu próprio eixo, devido a uma mensagem enviada pelo agente Evitar_colisão ao agente

Girar. A direção e velocidade de giro são determinadas aleatoriamente. Depois de algum

tempo, determinado pelo objeto Relógio associado ao agente Evitar_colisão, este agente envia uma mensagem desativando o agente Girar e então, a mensagem de pausa enviada ao agente

Andar_para_frente é suspensa, permitindo que robô continue a explorar o seu ambiente de

operação.

Se o giro efetuado não foi suficiente para evitar a colisão com o obstáculo detectado, então um dos agentes S irá novamente detectar este obstáculo a uma distância inferior a 40cm e o processo descrito será repetido.

O agente Evitar_colisão possui um tipo de buffer de entrada denominado Canal, que é capaz de receber mensagens de todos os agentes S e executar uma operação com elas, tal como obter o valor médio, máximo ou mínimo por exemplo. No caso do agente

Evitar_colisão, o canal passa ao agente a mensagem que contiver o menor valor de distância

medido (que é proveniente do agente S cujo transdutor associado está apontado para a direção onde é mais provável ocorrer uma colisão).

O comportamento Reconhecer_obstáculo é acionado sempre que o agente

Sensor_ultra-sônico receber uma mensagem que contenha um valor de distância na faixa

Capítulo 4 — Sistema de Controle Baseado em Agentes 122 permite o reconhecimento do obstáculo detectado. Inicialmente, o agente Orienta_robô envia uma mensagem de pausa ao agente Andar_para_frente que faz com que o robô pare, e uma mensagem ao agente Girar, fazendo com que o robô gire em torno de seu próprio eixo, procurando pelo melhor alinhamento entre o eixo de emissão acústica do transdutor ultra- sônico e o obstáculo detectado. Quando esta orientação é atingida, o agente Orienta_robô calcula a média dos próximos dez valores de distância, valor de pico e área sob o primeiro eco, contidos nas mensagens recebidas do agente Sensor_ultra-sônico. Depois disso, o agente

Orienta_robô envia uma mensagem contendo os resultados obtidos para o agente Reconhecedor. Uma outra mensagem suspende a mensagem de pausa enviada ao agente Andar_para_frente, permitindo ao robô retomar a sua tarefa de exploração do ambiente. O

agente Reconhecedor, que foi ativado pela mensagem recebida do agente Orienta_robô, executa o algoritmo de reconhecimento de obstáculos descrito na seção 3.4.7 e uma vez tendo reconhecido o obstáculo detectado, envia o resultado obtido em uma mensagem que ativa o agente Mapeador, responsável por construir e manter atualizado o mapa do ambiente de operação do robô móvel. O agente Mapeador recebe também mensagens do agente

Sensor_ultra-sônico, todas as vezes que a tabela contendo as distâncias medidas pelos 16

agentes S for atualizada. Desta forma, é implementado o comportamento Costruir_mapa. O agente Aciona_motor também tem uma entrada do tipo canal, que passa ao agente o somatório das componentes de velocidade recebidas dos agentes Andar_para_frente e Girar. O agente Aciona_motor calcula a velocidade que deve ser atribuída a cada motor DC e envia esta informação ao agente PID, responsável por controlar os dois motores. Os agentes

Aciona_motor e PID compõem o comportamento ou nível de controle denominado Controle_motor.

Capítulo 4 — Sistema de Controle Baseado em Agentes 123

Para a implementação correta do algoritmo de reconhecimento de obstáculos apresentado na seção 3.4.7, é necessário fazer uma pequena modificação no sistema de controle mostrado na figura 4.5, conectando cada agente Sk aos agentes Sk-2 e Sk+2 (onde k

varia de 1 a 16). Dessa forma, no início do processo de reconhecimento, o agente Sk enviará

mensagens ativando primeiro o agente Sk-2 e em seguida o agente Sk+2. À medida que cada um

destes agentes é ativado, ele executa o mesmo procedimento realizado pelo agente Sk quando

este detectou um obstáculo em uma das faixas de reconhecimento, ficando desta forma, com um grau de importância aproximadamente igual a 100%. Cada um dos agentes ativados pelo agente Sk realiza então a digitalização da envoltória do sinal de eco, e a determinação de seu

valor de pico1. Estas informações, devem ser então passadas ao agente Orienta_robô, que por sua vez as enviará ao agente Reconhecedor, permitindo assim o reconhecimento de cantos, conforme explicado na seção 3.4.4.

Este exemplo de sistema de controle baseado em agentes, mostra como o sistema de sensoriamento ultra-sônico pode ser utilizado para fornecer as informações necessárias para a execução da tarefa de controle de um robô móvel, no caso particular deste trabalho, o Brutus. O exemplo deixa claro também como os algoritmos desenvolvidos podem ser implementados em um sistema de controle baseado em agentes.

O sistema desenvolvido é capaz de operar em tempo real, pois todos os módulos (agentes), são bastante simples. Por este motivo também, não se faz necessário o emprego de processadores poderosos. Além disso, o sistema é completamente modular e expansível, sendo possível inserir novas camadas de comportamento, sem a necessidade de reconfigurar todo o sistema, bastando tomar apenas as devidas providências para interligá-las adequadamente ao resto do sistema [4,46,47].

O exemplo ilustra também as vantagens das abstrações de Schneebeli [55], implementadas na ferramenta desenvolvida por Xavier e Schneebeli [46,47].

1 Os agentes S

k-2 e Sk+2 são ativados no modo de operação no qual realizam a digitalização da envoltória do sinal

CONCLUSÃO