Baixe o app para aproveitar ainda mais
Prévia do material em texto
Robots V2 · Introdução · Noticias · A idéia do jogo · A arena · Os robôs · O tempo · Os comandos · Como jogar · Download · Links úteis Introdução As Engenharias em geral, e em particular a Engenharia de Computação, giram em torno da solução de problemas reais apresentados pelo mercado. Cabe ao Engenheiro, munido de sua criatividade e de seu conhecimento, encontrar soluções realizáveis para esses problemas, criando novas tecnologias caso as ferramentas existentes não lhe sejam suficientes. Com a intenção de estimular esse espírito nos alunos do curso de Introdução à Engenharia, o Departamento de Informática (DI), em conjunto com o Tecgraf/PUC-Rio, desenvolveu um jogo. O jogo simula um ambiente real de prospecção de petróleo, no qual atuam automatos programados pelo aluno. Participando desse jogo, o aluno terá um primeiro contato com a Engenharia de Computação, aprendendo noções de programação, de algorítmos de busca e de inteligência artificial. Ao final do curso, será promovido um compeonato entre os autômatos criados pelos alunos. Os vencedores serão premiados pelo Centro Técnico Científico (CTC). Notícias Versao 1.2! Agora com interface e comandos em Português. Detalhes aqui.(8 mar 2004) A idéia do jogo O jogo apresenta o seguinte cenário: um conjunto de robôs marinhos é lançado ao mar, a partir de um helicóptero, sobre uma região onde se acredita haver petróleo. Esses robôs atingem o solo submarino em posições aleatórias. Duas ou mais companhias competidoras, representadas por alunos diferentes, lançam robôs semelhantes para competir por poços na mesma região. Esses robôs são equipados com diversos sensores que fornecem constantemente informações como a posição do robô, a pressão subterrânea no local, o gradiente da pressão no local etc. Além disso, cada robô pode perfurar o solo e iniciar a prospecção de petróleo em sua posição corrente. Sabe-se que a produção de petróleo em um local será proporcional à pressão subterrânea no local. Por isso, os robôs devem encontrar os locais com maior potencial de produção e iniciar perfurações nesses locais. Cada time de robôs é controlado por um programa escrito pelo aluno. O programa controla o robô por meio de um conjunto de comandos predefinidos. Baseado nas informações provenientes dos sensores, esse http://www.inf.puc-rio.br/~mascarenhas/robots/ 1 of 8 16/12/2014 00:14 programa deve decidir para onde direcionar a robô, quando iniciar a perfuração de petróleo etc, efetivamente controlando todo o comportamento do robô. Vence o jogo a companhia cujos robôs conseguirem produzir mais petróleo durante um período predeterminado. A arena A arena onde competem os robôs consiste de uma região quadrada, sobre a qual há uma distribuição qualquer de pressão, desconhecida dos robôs. Os limites extremos da arena funcionam como paredes: os robôs não conseguem sair da arena. A arena é dividida em pequenas unidades de espaço, denominadas células, cada célula sendo identificada por suas coordenadas cartesiandas (x, y), onde x e y são inteiros. Na figura abaixo, por exemplo, encontra-se ressaltada a célula (5, 7) da arena: Cada célula têm um valor de pressão associado, variando dentro do intervalo [0, 1]. Abaixo vemos alguns exemplos distribuições possíveis de pressão na arena: Nas figuras acima, pontos claros representam locais de pressão elevada e pontos escuros representam locais de baixa pressão. Desta forma, os robôs devem encontrar os locais mais claros da arena e perfurar nesses locais para maximizar a produção de petróleo. Para isso, os robôs dispõem apenas das medições realizadas por seus sensores. http://www.inf.puc-rio.br/~mascarenhas/robots/ 2 of 8 16/12/2014 00:14 Os robôs Cada robô se posiciona sobre uma célula da arena. Desta forma, sua posição pode ser descrita a cada instante pelas coordenadas (xr, yr) desta célula. Além disso, o robô está sempre voltado para uma das quatro direções (Norte, Sul, Leste, Oeste). Usando a função robo:anda(), o programa de um robô pode instruí-lo a mover-se para frente na direção para a qual está voltado. A função robo:volta() faz com que o robô mova-se para trás: robo:anda() Além disso, o programa pode instruir o robô a girar 90o para a direita ou para a esquerda, com o uso das funções robo:direita() e robo:esquerda(), repectivamente. robo:direita() Os programas responsáveis pelo controle controle dos robô devem ser escritos pelo aluno usando a linguagem Lua. Essa linguagem foi escolhida por ser de fácil integração ao ambiente de simulação, bem como por ser uma linguagem de rápida aprendizagem. 1: 2: 3: 4: 5: 6: 7: 8: while 1 do for i = 1, random(1, SIZE) do if not robo:anda() then for i = 1, random(1,9) do robo:esquerda() end end end for i = 1, random(1,9) do robo:esquerda() end end http://www.inf.puc-rio.br/~mascarenhas/robots/ 3 of 8 16/12/2014 00:14 Louco Este primeiro exemplo não faz nada de útil. É um robô que perambula aleatoriamente pela arena. Entretanto, já mostra alguns dos comandos entendidos pelo robô: robo:anda() e robo:esquerda(). Outros comandos, como random() são comandos da linguagem Lua, descritos pelo manual da linguagem (em inglês). Além disso, o programa ilustra a estrutura que será seguida pela maioria dos alunos: um laço executa repetidamente o mesmo conjunto de ações (linhas 2-7). De modo a decidir para onde se deslocar e onde realizar as perfurações, os robôs devem usar as duas funções de medição de pressão: robo:pressao() e robo:deltas(). A função robo:pressao() simplesmente retorna o valor da pressão na célula em que o robô se encontra. A função robo:deltas() retorna dois valores, que informam como a pressão está variando na direção para a qual o robô está virado (direção tangencial) e na direção perpendicular a direção do robô (direção normal). Seja P(x,y) o valor da pressão na célula (x,y). Assim, na figura acima, a função robo:deltas() retornaria os valores dt e dn tais que dt = P(7,8) - P(5,8) e dn = P(6,7) - P(6,9). Com essas funções, é possível construir um robô útil: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: while 1 do dt, dn = robo:deltas() if abs(dt) > abs(dn) then if dt < 0 then robo:direita() robo:direita() end else if dn > 0 then robo:direita() else robo:esquerda() end end vai() if robo:pressao() > 0.7 then robo:sonda() end end Busca gradiente Este segundo robô usa as funções robo:deltas(), robo:pressao() e robo:sonda() para efetivamente encontrar pontos de alta pressão, nos quais inicia a perfuração. O método usado pelo robô acima é conhecido como busca gradiente, e pode ser usado como base para vários algorítmos mais sofisticados. A função abs() é uma função definida pela linguagem Lua que http://www.inf.puc-rio.br/~mascarenhas/robots/ 4 of 8 16/12/2014 00:14 retorna o valor absoluto de um número. O tempo O fator limitante do jogo é o tempo. Todas as ações executadas pelo robô levam um determinado número de unidades de tempo para serem concluídas. Durante essa ação, o programa do robô fica paralisado, aguardando a conclusão de sua ação. Uma partida leva 3 minutos. Os comandos Abaixo segue a lista de todas as funções aceitas pelos robôs, bem como uma breve descrição de seu funcionamento e o número de unidades de tempo gastas em sua execução. robo:anda() Desloca o robô uma célula para frente. A função retorna o valor 1 se a ação foi completada com sucesso, ou nil caso algum obstáculo tenha impedido o robô de se deslocar. (Duração: 0.02s) robo:volta() Desloca o robô uma célula para trás. A função retorna o valor 1 se a ação foi completada com sucesso, ou nil caso algum obstáculo tenha impedido o robô de se deslocar. (Duração: 0.02s) robo:direita() Faz com que o robô vire 90o para a direita. A operação sempre completa com sucesso.(Duração: 0.02s) robo:esquerda() Faz com que o robô vire 90o para a esquerda. A operação sempre completa com sucesso. (Duração: 0.02s) robo:pressao() Retorna o valor da pressão na célula onde o robô se encontra. O valor da pressão está sempre no intervalo [0,1]. A operação sempre completa com sucesso. (Duração: 0.02s) robo:deltas() Retornar dois valores, dt e dn, onde dt é o gradiente na direção tangencial ao movimento do robô, e dn é o gradiente na direção normal ao movimento do robô. A operação sempre completa com sucesso. (Duração: 0s) robo:posicao() Retorna dois valores, x e y, tal que (x,y) é a a célula onde o robô se encontra. A operação sempre completa com sucesso. (Duração: 0.02s) robo:sonda() Perfura um poço na célula onde se encontra o robô. A função retorna 1 se a perfuração ocorreu com sucesso, ou nil caso haja uma outra perfuração muito próxima. (Duração: 30s) http://www.inf.puc-rio.br/~mascarenhas/robots/ 5 of 8 16/12/2014 00:14 robo:tempo() Retorna o tempo decorrido em segundos, desde o inicio da partida. robo:enviamsg([tipo], mensagem) Envia uma mensagem para todos os robos de seu time. Se o tipo não for especificado, ele terá o valor "default". robo:pegamsg() Tenta retirar uma mensagem da lista de mensagens do robô. Ela e um estrutura de modo que: mensagem.tipo = tipo da mensagem mensagem.msg = o corpo da mensagem Não havendo mensagens na lista, a função retorna nulo. Mensagens: Cada robô tem uma lista de mensagens com limite de 5 mensagens. Ultrapassando esse limite, a mensagem mais antiga é retirada e subsituida pela mais recente. TEMPO Constante que contém o tempo limite em segundos para o final do jogo. (Não há duração) TAMANHO Constante que contém o tamanho de um lado da arena. (Não há duração) Como jogar Os comandos foram colocados dentro da interface, por meio de um menu de contexto. Não é mais necessário o uso da linha de comando. O Menu de Contexto http://www.inf.puc-rio.br/~mascarenhas/robots/ 6 of 8 16/12/2014 00:14 Por meio dele podemos realizar as ações do programa: Esse item mostra a caixa de diálogo para adicionar os times e escolher a arena Esse item mostra uma caixa para escolha de um arquivo de definição de arena (.ARN) Esse item inicia a simulação. Só está disponível quando há uma arena e um ou mais times carregados Esse item alterna entre os modos 2D e 3D. Como padrão, o modo 3D é o utilizado. O modo 2D é recomendado para máquinas sem aceleração por hardware. O primeiro item do menu de contexto mostra o modo atual Esse item alterna entre iniciar os robôs em posições fixas (os quatro cantos da arena) ou posições aleatórias. Como padrão são usadas posições fixas Esse item fecha o programa Modo 2D Modo de 3D O Diálogo de Configuração http://www.inf.puc-rio.br/~mascarenhas/robots/ 7 of 8 16/12/2014 00:14 Neste diálogo coloca-se os nomes dos time, a cor de seus robôs e seu programa de inteligência artificial. Escolhe-se também em qual arena será feita a disputa. Após pressionar a tecla OK não há volta, só podendo ser trocada a arena. Para trocar os robôs será necessário executar o programa novamente. Os dois times podem usar o mesmo programa de inteligência artificial. Download Pegue aqui o arquivo zip com todos os componentes do jogo: Última Versão: Menus e comandos em Português Robots120.zip(1.909kb) Links úteis Site da linguagem Lua: www.lua.org/portugues.html Last modified by Fabio Mascarenhas on Tue Mar 9 2004 http://www.inf.puc-rio.br/~mascarenhas/robots/ 8 of 8 16/12/2014 00:14
Compartilhar