REVISTA DO DETUA, VOL. 1, Nº 6, SETEMBRO 1996 5 Resumo – Este artigo descreve o algoritmo usado pelo robô simulado Speedy Gonzalez, que participou na competição Ciber-Rato, organizada pela Universidade de Aveiro, em 2002. Abstract – This paper describes the algorithm used by the simulated robot Speedy Gonzalez, which participated in the Ciber-Rato competition held at the Aveiro University, on 2002. I. INTRODUÇÃO O robô Speedy Gonzalez foi desenvolvido por Jorge Cardoso, Nuno Ramos e Pedro Ferreira da Faculdade de Engenharia da Universidade do Porto. O programa foi desenvolvido no âmbito da cadeira de Sistemas Periciais e Robótica do 4º ano do curso de Engenharia Informática e Computação, em 2001. Ficou em 13º lugar (i.e. último !) na 2ª edição do concurso Ciber-Rato organizado pela Universidade de Aveiro em 2002 (ver [2]). O robô venceu a primeira manga mas “encalhou” na segunda e acumulou penalizações que fizeram com que obtivesse aquele lugar. Este artigo descreve sucintamente os processos de raciocínio do agente robótico simulado. Para mais informação sobre este robô ver [1]. II.PROCESSO DE RACIOCÍNIO O agente mantém uma pilha (stack) de objectivos (direcções) que pretende seguir. A primeira acção do agente é virar-se para o farol e deslocar-se nessa direcção. Se encontrar um obstáculo no seu caminho, a direcção do farol é guardada na pilha de objectivos e é escolhida uma nova direcção para o robô seguir (algoritmo na secção III). Depois de escolhida a direcção guarda-se a posição relativa do obstáculo em relação ao robô e indica-se numa flag que foi encontrado um obstáculo. A posição relativa do obstáculo (direita ou esquerda em relação ao robô) é usada, enquanto o robô se desloca ao longo desse obstáculo, para determinar qual o sensor que se deve usar para verificar se o robô se está a fastar, ou aproximar, demasiado do obstáculo. Agora o robô irá seguir ao longo do obstáculo até poder deslocar-se em direcção ao objectivo que está guardado na pilha. Uma vez acabado o obstáculo o robô dobra a esquina, retira o último objectivo da pilha e verifica se existe obstáculo na direcção do próximo objectivo da pilha, ou na direcção do farol, caso não exista nenhum objectivo na pilha. Caso exista obstáculo então, se não houver objectivos na pilha a direcção do farol é colocada na pilha e o robô irá seguir a direcção em que se encontra, ao longo do obstáculo. Se não existir obstáculo então sinaliza-se a flag de obstáculo e o robô irá seguir na direcção que havia retirado da pilha. Se, enquanto está a seguir ao longo de um obstáculo surgir um outro (o robô considera um novo obstáculo a continuação do mesmo com outra direcção ou um obstáculo diferente), a direcção actual é guardada na pilha e é escolhida uma nova direcção. Se não existirem objectivos na pilha o robô segue na direcção do farol à velocidade máxima, eventualmente corrigindo a direcção devido ao erro dos motores, até chegar ao farol ou encontrar um obstáculo. O número máximo e objectivos que podem estar na pilha foi limitado para evitar que o robô entre em “ciclo” devido O Que Pensa Speedy Gonzalez Jorge Cardoso -Andar a toda a velocidade -Push(direcção do farol) -Escolher nova direcção -Virar -Seguir obstáculo -Push(direcção actual) -Escolher nova direcção -Virar -Dobrar esquina -Pop(direcção) -Fim -Inicio Farol -Push(direcção actual) -Escolher nova direcção -Virar Obstáculo Continua a haver obstáculo na direcção do objectivo Fim do obstáculo Obstáculo -Virar para o farol Figura 1 – Diagrama de estados do processo de raciocínio.