<Arquitetura > <Home>

 

Um Pippo  será criado utilizando uma arquitetura de "subsumption" ( Rodney Brooks -- A Robust Layered Control System for a Mobile Robot (PDF) ).

O termo "subsumption" refere-se a uma arquitetura primeiramente proposta por Rodney Brooks do MIT Mobile Robot Lab. Uma arquitetura de "subsumption" permite ao projetista determinar quais comportamentos auto-administrados de menor nível deverão ser "subsumed" por outras camadas de mais alto nível da arquitetura.

Um exemplo simples pode ser o de um robô que tenha três comportamentos. Um que monitora o nível de carga da bateria. Outro que faz com que o robô navegue randomicamente evitando obstáculos. E um terceiro comportamento de carga da bateria que faz com que o robô siga um caminho preestabelecido para chegar ao carregador e carregar a bateria.

Agora consideremos o robô quando o nível de carga da bateria está bom. Quando este é o caso, o comportamento de navegar randomicamente evitando obstáculos é o comportamento de mais alto nível e o robô perambula por aí.

O que acontece quando o comportamento que monitora o nível de carga da bateria detecta que o nível está baixando demais? O comportamento de carga da bateria "subsume" o comportamento de navegação randômica e o robô então navega até o carregador para recarregar a bateria.

Estas camadas "subsumptive" podem ser adicionadas uma em cima da outra, de forma a criar modificações complexas de comportamentos e reações a estímulos externos.

Arquiteturas "subsumptive" são facilmente implementadas usando sistemas operacionais "multi-tasking" ou processadores paralelos. Vários comportamentos podem rodar simultaneamente ao mesmo tempo que um processo de arbitragem determina o esquema corrente de "subsumption" para as condições do momento.

A primeira implicação desta decisão é que para o processamento deveremos ter uma das seguintes soluções:

  1. Multi-tasking implementado via sistema operacional.

  2. Simulação de multi-tasking via programação.

  3. Processadores paralelos.

Examinando a lista dos itens já existentes, temos o microprocessador BX-01 que implementa a solução 1. Portanto, iremos mantê-lo na lista até decisão  em contrário em função de outras análises.

Conforme decisão (vide Status <19.04.2002>), a implementação do processamento será através de vários processadores comunicando-se via rede. O esquema geral dessa rede RS485 pode ser visto aqui. Ela consta de 4 processadores BX-01 organizados em nós (N) e grupos (G). O nó N=0 G=0, é o nó coordenador que desenvolve sua ação de coordenação baseando-se em 3 filas (implementadas como listas circulares no próprio N=0) com prioridades 1, 2 e 3 (sendo 1 a maior prioridade) e semáforos. Associado a cada fila existe um registro de controle que contém: S (semáforo), I (status da fila, iniciada ou não), O (status da fila, normal ou overwrite), Pif (pointer para o primeiro elemento ocupado da fila), Pne (pointer para o primeiro elemento livre da fila), Xe (número de elementos ocupados da fila). Cada nó grava informações nessas filas, conforme prioridades preestabelecidas e atualiza os correspondentes registros de controle. O nó coordenador varre as filas desenvolvendo ações em função das informações passadas pelos outros nós e atualiza os registros de controle. A varredura começa sempre pela fila de maior prioridade e somente muda de fila, quando estiverem esgotadas todas as ações correspondentes. Esta regra somente é quebrada quando existir alguma fila em estado de overwrite, caso em que o coordenador poderá alterar (não obrigatoriamente) as prioridades segundo regras preestabelecidas. A coordenação de leitura e gravação das filas e registros de controle é feita através dos semáforos (S). Para o desenvolvimento do software que exerça o controle descrito, inicialmente desenvolveremos funções e/ou sub-rotinas de suporte como: WhoOwnsFc, WaitAndSeizeFc, SeizeFc, ReleaseFc, ExamineFc, GetFc e PutFc entre outras necessárias à manipulação das Filas Circulares (Fc).