Resultado:
Quando o nosso robô identificou o rastro, ele segue o mesmo sem
descanso. Quando desenhamos o rastro na forma de um círculo fechado, o
robô percorrerá o mesmo, dando voltas sobre ele. É preciso apenas evitar
curvas fechadas demais, para que os sensores óticos não percam o contato
com a linha. Embora o robô procure localizar o rastro novamente, devemos
confessar que isso será possível somente em áreas praticamente sem
obstáculos.
4.6 A traça eletrônica
O problema da conjugação de diferentes características de comportamento,
como buscar, perseguir e desviar já surgiu diversas vezes. Por isso queremos
pesquisar a interação destes comportamentos em mais um experimento.
Vamos resumir os nossos resultados obtidos até agora. O identificador de
luz simples segue uma lâmpada colocada à sua frente mais ou menos às
cegas. O robô considera impossível que no caminho até a lâmpada não
possa surgir um obstáculo. Ele considera também que nunca vai realmente
alcançar a lâmpada. Entretanto, estas suposições correspondem à realidade
somente em casos excepcionais. Somos obrigados a guiar o robô com a
lâmpada em volta de cada obstáculo. Na realidade, precisamos de um robô
capaz de contornar obstáculos de forma
E6
E7, e todo o resto copiamos do modelo de identificação de obstáculos. Do
ponto de vista científico, equipamos o nosso robô com duas características
de comportamento. Mas como as duas características de comportamento
não podem estar ativas simultaneamente, elas receberão prioridades
distintas. Para nós isto quer dizer que na situação normal o robô está em
busca de luz. Quando um obstáculo é detectado, considerado quase como
um perigo para o robô, será ativado o procedimento de desvio de obstáculo.
Quando o perigo passou e tudo voltou ao normal, o robô pode novamente
procurar por luz. Com isso proporcionamos ao robô características que
permitirão uma navegação independente e a capacidade de se desviar de
perigos. Quem tem um amigo que também possui um kit fischertechnik,
pode estender esta experiência ainda mais. Em cada um dos robôs pode ser
montada uma fonte luminosa e então os robôs se procurarão mutuamente.
Até agora fizemos a programação geralmente seguindo o princípio de
"tentativa e erro". Provavelmente você começou "simplesmente" a programar
e, no decorrer dos seus experimentos, percebeu como o robô fez (ou talvez
não fez como devia) para cumprir a tarefa a ele conferida. Naturalmente, os
programadores de software profissionais jamais podem recorrer a tais méto-
dos de projeto. Nestes casos, já antes que a primeira linha do programa
seja escrita, deve ser elaborada uma estratégia de projeto precisa. Isto não
é feito de qualquer forma, e sim se utilizando diretrizes bem definidas. Al-
guns procedimentos foram bem sucedidos e receberam denominações
estranhas, como por exemplo, "projeto top-down". Neste conceito procura-se
autônoma. Para tanto vamos
complementar o modelo
E7
"robô com identificação
de obstáculos" com a
capacidade de
identificar a luz, como
mostra a figura. Ligamos
os fototransistores em E6 e
definir todo o projeto do programa de cima (top) para baixo (down), sem
entrar em detalhes inicialmente. Nós também vamos tentar programar nossa
traça segundo o sistema de projeto top-down. Para isso começamos com o
programa principal, o chamado "Main-Loop".
A figura mostra o projeto simples. O main-loop é composto somente pelas
características de comportamento necessário ao robô PROCURAR, CONTATO e
MARCHAR. A variável Var1 nos parece estranha, como podemos priorizar as
características de comportamento do robô com o
uso deste loop tão simples? Bom, a priorização
ocorre através da seqüência dos subprogramas e
para a atribuição das diversas ordens de marcha é
usada a variável Var1. Quando pensamos bem,
podemos limitar os movimentos necessários do
robô a um número claramente definido de
manobras. O robô precisa de um movimento de
busca, um movimento de desvio e um movimento
de correção. Os movimentos de desvio e correção devem ser diferenciados
para os lados esquerdo e direito. Com isso fica claro, que o subprograma
PROCURAR calcula um de n (n = o número total dos movimentos)
movimentos possíveis, como também é o caso do subprograma CONTATO.
Como CONTATO é executado depois PROCURAR, ele sobrescreve as
instruções de PROCURAR. O subprograma MARCHAR executa somente os
comandos que lhe são dados. O procedimento de projeto Top-Down parece
ser realmente útil. Mas ainda não sabemos como ficarão os subprogramas.
Vamos começar com o primeiro subprograma PROCURAR. Este subprograma
é responsável pelas consultas aos fotosensores. Em decorrência dos dois
sensores existem quatro variantes possíveis, sensor esquerdo, sensor direito,
sensor esquerdo e direito ou nenhum sensor. Com isso são definidas
exatamente quatro manobras: LOCALIZAR, EM_FRENTE, A_ESQUERDA,
A_DIREITA. A estas manobras também são atribuídos subprogramas; vamos
proceder rigorosamente conforme os critérios de projeto Top-Down. Agora
está claro, como ficará o subprograma PROCURAR. PROCURAR fornece um
parâmetro que será transformado em MARCHAR .
O subprograma propriamente dito é muito simples. Através de diversas
comparações é definido o parâmetro inicial. Dentro do programa definitivo
verifica-se então no subprograma CONTATO, se foram encontrados
obstáculos que acionaram os sensores do robô. Por motivos de simplificação
vamos pular este programa e ver como são ativados os movimentos dos
P
67