Funcionamento do código no PC
no modo de Debug
Introdução
Já foi referido que o código que executa no PC está responsável pela decisão de controlo do microrato com base no estado actual do mesmo, e com base no objectivo a cumprir.
Esse objectivo está directamente ligado aos objectivos da prova do microrato. Em termos gerais o kerukejo tem de ir ter a um farol, que está num recinto rectangular de 10m/5m com obstáculo desconhecidos. Após chegar a esse ponto tem de voltar ao início. O farol encontra-se no centro do rectângulo, e o ponto de partida do microrato é num ponto incerto no limite do recinto.
O que o kerukejo tem de conhecer para atingir estes objectivos é: detectar o farol; detectar e evitar obstáculos; detectar quando chega à zona de farol; e saber em que posição é que está em relação à partida, e assim poder voltar ao início.
Já foi explicado no capítulo de hardware que sensores existem no Kerukejo, tendo em conta os objectivos a cumprir vamos tentar associar os sensores às respectivas utilidades em termos de objectivos gerais da prova. Para detectar o farol, o kerukejo possui um sensor de infra-vermelhos no comprimento de onda do farol emissor. Para detectar obstáculos possui 5 sensores no pára-choques. Detecta a zona de farol através de dois sensores infra-vermelhos, sensíveis à variação da reflecção no solo, visto que a zona de farol é preta ao contrário do resto do recinto que é branco. O kerukejo para saber a sua posição em qualquer momento (hodómetria) usa a informação que vem dos motores. Essa informação é a velocidade a que andou cada um dos motores durante o intervalo de tempo.
Assim temos de desenvolver o software de controlo do microrato com base no estado, e seguindo uma estratégia que leve passo a passo, o microrato a cumprir o objectivo geral.
Estratégia
A estratégia adoptada passa por individualizar o objectivo geral que é concluir a prova em objectivos parciais a que chamamos de missões, e estas compostas por tarefas e, cada tarefa usa várias acções sobre o microrato.
Deste modo o software desenvolvido torna-se mais simples e de fácil interpretação.
Ao nível das missões o seu funcionamento é o seguinte:
![]() |
A Missão Parado é a missão em que o kerukejo está em “stand-by”, quer seja o inicio da prova, quer seja qualquer interrupção que haja a meio da prova. Após a missão ser retomada, a missão seguinte será a Missão Atingir Farol, no caso de ser o início, ou a missão que foi interrompida pelo interruptor de pausa.
A
Missão Atingir Farol, como o próprio nome indica, tem por objectivo levar o
robot da casa de partida até à zona de farol. As estratégias para conduzir o
kerukejo da casa de partida até farol podiam ser variadas. A que apresenta a
figura seguinte é apenas uma, que nos pareceu adequada e simples.
A tarefa Busca Farol consiste na rotação de 360º sobre o seu próprio eixo com o fim de captar o ângulo de maior captação do sinal infra-vermelho do farol. Se captado algum sinal superior a um valor que é considerado ruído, é guardado num elemento de vector a seguinte informação (x,y,q). Cada elemento é uma recta.
Sempre que existir um par de rectas pode-se achar a sua intercepção, e daí ter uma estimativa do ponto onde está o farol. Tendo essa intercepção a Tarefa Vai Ponto tenta alcançar esse ponto. Se não tivermos um par de rectas, o microrato gera um ponto que fica a um metro de distância, e é perpendicular à última recta captada. Deste modo garante-se que o próximo varrimento não origina uma recta paralela, e também garante-se que o microrato não se afasta muito do ponto onde estava, até ter uma estimativa mais precisa da localização do farol.
A decisão de ter ou não chegado à zona de farol, não é da responsabilidade destas tarefas, mas sim das missões. Assim quando o microrato atinge o ponto, faz novo varrimento.
Para proteger o microrato de andar à procura de um ponto indefinidamente, existe um tempo limite para que ele atinja esse objectivo. Esse tempo é três vezes o tempo que o microrato levava para atingir o ponto se a sua trajectório fosse rectilinea. Após o termino desse tempo, a tarefa passa a ser a Tarefa Busca Farol.
A Missão Espera apenas serve para fazer uma temporização de três segundos na zona do Farol. Mais uma vez, faz parte da especificação do concurso.
A Missão Voltar ao Início, usa a Tarefa Vai Ponto, mas sem limite de tempo para atingi-lo.
Quando
Atinge esse ponto passa à Missao Fim, que apenas serve de referência para
parar o microrato, e assinalar o fim da prova com o led respectivo.
A Tarefa Vai Ponto é uma tarefa muito complexa, visto deve conter toda a lógica de deslocamento desviando-se de obstáculos. Na figura de cima, temos a representação de todos os estados que esta tarefa podem ter, e de seguida teremos uma breve descrição dos estados, e um esboço representativo da situação real. Os esboços são feitos a partir de uma vista superior, e a recta no centro do microrato representa o ângulo que o microrato está virado.
Seg_Ponto
– Controla o movimento do microrato seguindo uma trajectória até atingir o
ponto de destino.
Para
– Trava o microrato até ele se imobilizar. Quando encontra um obstáculo.
Para_Fim – Trava o
microrato no fim do destino (ponto a atingir)
Encontra_Obstáculo –
Identifica o ponto da primeira observação de um obstáculo.
R_90_D
/ R_90_E – Faz uma curva de 90 graus contornando uma curva em cotovelo
para a direita/esquerda.
R_D / R_E – Roda em torno
de si mesmo para a direita/esquerda.
![]() |
|||
![]() |
Segue_P_E /Segue_P_D –
Segue uma parede pela esquerda/direita.
![]() |
Roda_D_ate_E_L /
Roda_E_ate_D_L – Roda para o lado contrário do objecto com o propósito de se
desligar do objecto e seguir para o ponto.
Usando os sensores e a
hodometria é feita a iteração entre os estados, de modo a contornarem os obstáculos.
Na figura seguinte podemos
verificar o trajecto do kerukejo para atingir um ponto. Na legenda estão
descriminadas as cores e simbolos que representam os estados para a trajectória
representada por essa côr ou simbolo.
![]() |
O microrato após encontrar um objecto contorna-o até que haja uma condição de saída que seja activada. Esta condição de saída é muito importante para que o robot não faça trajectos desnecessários, e não fique preso ao objecto.
A condição de saída do objecto por nós usada foi a seguinte: Sempre que o microrato encontra um objecto guarda essas coordenadas (na verdade guarda as coordenadas 15cm à frente, para que esse ponto de situe ligeiramente dentro do objecto). O microrato deve apenas sair quando estiver no interior de uma elipse, a menos de uma quantidade (20cm no nosso caso), que une o ponto guardado ao encontrar o objecto, e o ponto de destino.
A
equação que traduz esta condição é:
Em que P1 é o ponto de “impacto” com o objecto, P2 é o ponto a atingir, e PR é o ponto do microrato.
Esta condição funciona bem e é eficiente para a maior parte dos obstáculos. Para obstáculos grandes não é tão eficiente, visto que tem de chegar ao outro ponto de intercepção da elipse.
Estes estados das duas tarefas (Tarefa Vai Ponto, e Tarefa Busca Farol), executam os movimentos com base em acções. Acções são funções que implementam um tipo de movimento ao microrato. As acções utilizadas são:
-void roda(float angulo) //que roda até o microrato estar virado para “angulo”
-void segue_ponto(float angulo,int x,int y, int V) // que compensa o movimento do rato de modo a seguir com a direcção que une o microrato ao ponto final; x e y são os pontos finais; e V a velocidade a que se deve deslocar.
-void segue_parede_esquerda() compensa as velocidade de modo a manter sempre a mesma distância à parede.
Existe um conjunto de outras funções que auxiliam o desenrolar das missões/tarefas, e que devido a serem muitas e algumas com interesse restrito, não vamos descrevê-las.
Hodometria
Uma função que é muito importante é a hodometria. Com a hodometria conseguimos saber a posição actual do microrato que é essencial para cumprir os objectivos da prova.
Para realizarmos a hodometria, como já foi dito no início do capítulo, usa-se a informação que é retornada pelo 8515 quando lhe enviamos nova ordem. A informação que é retornada são as velocidade a que andaram durante o intervalo de tempo que também é retornado.
As equações que regem o estado do microrato são:
Com:
![]() |
||||
|