Em arquiteturas baseadas em comportamento, conforme foi visto na Subseção2.4.1, os agentes são motivados internamente para ativar um de seus comportamentos mediante o seu próprio estado, do ambiente e dos demais robôs. Para isso, o framework TAlMech disponibiliza um mecanismo que pode ser usado nos componentes da função de ativa- ção dos comportamentos dos agentes do sistema para verificar as atividades dos demais agentes do sistema.
Este mecanismo mantém um histórico com janela temporal dinâmica dos compor- tamentos dos agentes. Este histórico é adquirido a partir da comunicação entre os agentes
Figura 15 – Diagrama UML da máquina de estado utilizada pelo licitante enquanto licita uma tarefa.
no sistemas durante a execução da aplicação. Cada agente pode assumir um ou nenhum comportamento por vez.
A Figura 16 exemplifica o histórico de comportamento de um agente que possui quatro comportamentos. As janelas mostradas na figura foram capturadas em três instan- tes diferentes. As Figuras 16a, 16b e16c mostram respectivamente a primeira, a segunda e a terceira capturas de janela deste histórico. Os gráficos mostram funções temporais do comportamento do agente dentro de um intervalo predefinido. Este intervalo de tempo é denominado janela, a qual é dinâmica pois se move conforme a estampa temporal (isto é,
data e horário) atual se atualiza. As três figuras mostram a dinâmica da janela através do deslocamento da curva de comportamento.
(a) Primeira captura.
(b) Segunda captura.
(c) Terceira captura.
Figura 16 – Captura do histórico de um agente em três instantes diferentes. Em cada gráfico, o eixo das abcissas identifica as estampas temporais (isto é, data e horário) em que foram feitas as leituras e o eixo das ordenadas identifica o comportamento ativo do agente.
Contudo, a construção do histórico da curva de comportamento de um dado agente do sistema é realizada a partir do recebimento de mensagens através da rede. No fra-
mework TAlMech, essa troca de mensagens acontece no tópico /behavior cujo tipo é talmech_msgs/Behavior. Este tipo de mensagem contém a identificação do agente que
a enviou, do comportamento, a tarefa que está em execução e a estampa temporal gerada na sua criação.
A Figura 17 ilustra a construção do histórico de um agente que possui três com- portamentos. As Figuras 17b, 17c e 17d mostram as estampas temporais das mensagens recebidas que dizem respeito aos comportamentos 1, 2 e 3 do agente em questão, respecti-
vamente. A Figura 17a mostra a curva de comportamento criado a partir das mensagens recebidas.
Primeiramente, uma mensagem do comportamento 1 do agente monitorado é re- cebida, conforme é mostrado na Figura 17b. Este pulso provoca uma rampa de subida na curva de comportamento, fazendo com que o comportamento do agente passe a estar com o comportamento 1 ativo ao invés de nenhum, conforme mostra a Figura17a. Após alguns instantes (timeout), o agente volta a estar com nenhum comportamento ativo. O parâme- tro timeout é a duração máxima que o agente pode manter-se em silêncio. Quando esta duração é excedida, o monitor considera que o agente está com nenhum comportamento ativo.
Na sequência, são recebidas várias mensagens relacionadas ao comportamento 2, de acordo com a Figura 17c. Isso faz com que o agente monitorado passe a estar com o comportamento 2 ativo.
Contudo, logo é recebido um conjunto de mensagens relacionadas ao comporta- mento 3, mediante Figura 17d. Com isso, o agente deixa de estar com o comportamento 2 ativo e passa a estar com o 3 ativo (vide Figura 17a). A seguir, o monitor passa a con- siderar que o agente está com nenhum comportamento ativo, pois este não recebe mais mensagens do agente em questão. Assim que a duração timeout é excedida, ocorre uma rampa de descida de 3 para 0 na curva de comportamento, conforme Figura 17a.
Por fim, o monitor torna a receber mensagens do agente em questão sobre o com- portamento 3, conforme mostra a Figura 17d. Logo, acontece uma rampa de subida de 0 para 3 na curva de comportamento identificando que o agente ativou o comportamento 3 (vide Figura 17a).
A construção deste histórico no framework TAlMech é feita pelas classes: Tem-
poralPoint, TemporalBuffer e BehaviorMonitor, conforme mostra o diagrama de classes
da Figura 18. Primeiramente, a classe TemporalPoint armazena a estampa temporal e o índice do comportamento do agente no momento que ocorrem variações na sua curva de comportamento. Assim, toda vez que ocorre um rampa de subida ou descida, a classe Tem-
poralBuffer adiciona um par ordenado (estampa temporal e índice do comportamento) na
curva de comportamento do agente. Esta classe é responsável por eliminar pares ordenados que se encontram fora da janela.
Enfim, a classe BehaviorMonitor cria dinamicamente novas instâncias de Tem-
poralBuffer conforme são identificados novos agentes no sistema pelo agente que está
monitorando. Esta classe deve ser instanciada em nós do ROS, pois esta classe recebe mensagens do tipo talmech_msgs/Behavior com o código de identificação do agente que enviou a mensagem, do seu comportamento ativo e sua respectiva tarefa, bem como, a estampa temporal do envio da mensagem. Essas mensagens são recebidas por meio do
(a) Histórico construído a partir do recebimento das mensagens identificando o comporta- mento ativo ao longo do tempo do agente em questão.
(b) Trem de pulsos das mensagens recebidas do agente em questão quando este estava com o comportamento 1 ativo.
(c) Trem de pulsos das mensagens recebidas do agente em questão quando este estava com o comportamento 2 ativo.
(d) Trem de pulsos das mensagens recebidas do agente em questão quando este estava com o comportamento 3 ativo.
Figura 17 – Construção do histórico de um agente com três comportamentos.
tópico /behavior. Portanto, é possível verificar se:
∙ um agente específico ativou algum comportamento dentro de um dado intervalo de tempo;
∙ um agente específico ativou o comportamento que executa uma tarefa particular em um dado intervalo de tempo;
∙ houve algum agente que ativou o comportamento que executa uma tarefa particular em um dado intervalo de tempo.