Download - Departamento de Engenharia Electrotécnica e de ... · Departamento de Engenharia Electrotécnica e de Computadores Instituto Superior Técnico Área Científica de Computadores (Preparado

Transcript

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 1/21

Ocupação Científica de Jovens nas Férias 2008

7 a 11 de Julho

Departamento de Engenharia Electrotécnica e de Computadores Instituto Superior Técnico

Área Científica de Computadores (Preparado por B. Andrade da Costa)

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 2/21

Índice 1-Introdução.......................................................................................................................................................3 2-Robôs..............................................................................................................................................................5 3-Exploração do ambiente de simulação NetLogo.............................................................................................9

3.1 Conceitos básicos de programação ..........................................................................................................9 3.2 Desenvolvimento do programa ..............................................................................................................10

3.2.1 Invocação do programa e definição de botões de comando da simulação ......................................10 3.2.2 Desenvolvimento dos procedimentos Inicio e Executar..................................................................11 3.2.3 Criação da pista dos robôs...............................................................................................................12 Criação do robô........................................................................................................................................14 3.2.4 Movimentação dos robôs ................................................................................................................15 3.2.5 Definição do comportamento dos robôs..........................................................................................15

4-Conclusão .....................................................................................................................................................18 Anexo...............................................................................................................................................................19

Código do programa.....................................................................................................................................19

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 3/21

1-Introdução

O trabalho que é descrito neste documento foi preparado para o Programa de Ocupação Científica de Jovens nas Férias 2008 (OCJF 2008). Insere-se na actividade de divulgação das áreas científicas do DEEC/IST, área científica de computadores, e tem por objectivo apresentar noções de programação e de computadores.

A área científica de computadores tem como objecto de estudo, a análise, o projecto e a aplicação de sistemas computacionais. Um sistema computacional pode ser visto como uma máquina que manipula informação. Recebe informação do seu exterior, manipula-a de acordo com regras contidas na máquina (algoritmos) e apresenta o resultado dessa manipulação para utilização posterior. Existem alguns aspectos que devem ser salientados.

• A informação é representada com um conjunto discreto e finito de símbolos.

• A manipulação dos símbolos é feita de acordo com regras.

• As regras de processamento de informação podem ser alteradas, podendo ser definidas outras tarefas. Devido a este facto, um computador apresenta uma grande versatilidade no tipo de tarefa que pode realizar.

Na actualidade a tecnologia de suporte para a manipulação da informação é baseada em tecnologia electrónica digital. Disto resulta que no projecto e na aplicação de computadores é necessário explorar conceitos matemáticos conjuntamente com as limitações da tecnologia. A área científica de computadores é composta pelas seguintes sub-áreas:

• Arquitectura de Computadores – Orientada para os aspectos físicos e para a tecnologia dos computadores. Definição da arquitectura e de suporte às operações a serem realizadas, selecção e estudos dos components físicos (portas lógicas, flip-flops, memórias, fpga, microprocessadores ,...)

• Metodologia e tecnologia da programação – Orientada para o desenvolvimento de

programas, de algoritmos e estudo da forma de utrapassar as limitações físicas do hardware dos computadores, criando uma interface mais eficiente e simples de utilizar e de programar os computadores. (Linguagens de programação, compiladores, metodologias de desenvolvimento de programas, teste de programas, ...)

AArrqquuiitteeccttuurraass ddee ssiisstteemmaass PPllaaccaass ddee ccoommppuuttaaddoorr

DDeesseennvvoollvviimmeennttoo ee CCooddiiffiiccaaççããoo ddooss aallggoorriittmmooss

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 4/21

• Redes de Computadores – Orientada para a utilização dos computadores em redes de comunicação de dados, troca de informação, de comunicação com e sem fios ( “wireless”) e de aspectos de segurança na comunicação de dados. (Internet, protocolos de comunicação, tecnologias de comunicação wireless, redes de sensores)

Como a actividade principal do OCJF 2008 consiste na exploração de robôs da IdMind e da Lego, nos aspectos de hardware e de software, optou-se por exemplificar os conceitos de programação e de computadores com o auxílio a um braço robô (Rob3i) e com um simulador de estudo de interacções entre agentes. Este último tem a particularidade de permitir explorar o processo de programação através da utilização de uma linguagem relativamente simples e de simular o comportamento de robôs, definir e testar algoritmos, estratégias, antes de serem utilizadas nos robôs físicos.

SSeerrvviiççooss ee RReeddeess ddee CCoommppuuttaaddoorreess

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 5/21

2-Robôs Os robôs sempre criaram uma grande admiração nos seres humanos, mas também algum receio. Numa primeira fase foram vistos com máquinas especiais que permitiam libertar o homem de actividades de rotina, desinteressantes e perigosas. O receio surgiu quando se passou a considerar que os robôs podiam ultrapassar as qualidades e o desempenho dos seres humanos, causando perda de postos de trabalho e aumento de desemprego ou, como em alguns filmes de ficção científica, participavam em revoltas com o objectivo de tentar subjugar a humanidade. Entretanto já passamos a utilizamos milhões de robôs, os quais são indespensáveis nas sociedades modernas. Os robôs que utilizamos não têm o aspecto humano, podem até não ser visíveis, mas executam trabalhos de rotina que um ser humano jamais conseguiria realizar. Considere-se o funcionamento dos satélites, das redes de comunicação de dados, da Internet, e da gestão do tráfego aéreo, ou no funcionamento de um automóvel. Todos esses sistemas complexos funcionam com base em autómatos (robôs). Pode-se colocar a questão de como é que os robôs têm a capacidade de executar tarefas. A resposta a esta pergunta passa por compreender que tipo de elementos é que constituem um robô. Considere-se como exemplo o Rob3i que é apresentado na figura 2.1.

Figura 2.1: Aspecto de um braço robô ROB3i.

Ele apresenta os elementos seguintes • Uma componente mecânica/física. • Uma fonte de energia, que pode ser eléctrica . • Uma componente de actuação, motores (eléctricos) • Uma componente electrónica, circuitos de actuação e de comando de motores. • Uma componente de inteligência que é realizada com recursos a computadores e a

programação de algoritmos para o controlo e posicionamento do braço. A definição da dita inteligência dos robôs está centrada nos algoritmos (programas) que são executados pelo computador que controla a actividade do robô. Na figura 2.2 são apresentadas as placas electrónicas que contém os circuitos electónicos de potência de actuação, de condicionamento de sinal e de suporte ao computador (microprocessador) que gere a actividade do robô.

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 6/21

Figura 2.2: Placas electrónicas do braço robô ROB3i.

Uma das tarefas mas simples que um robô pode executar consiste na deslocação de um objecto de um lugar para outro. O objecto é agarrado, é transportado e é colocado noutro lugar que é especificado pelo programador. Na planificação da trajactória do braço robô é necessário ter muito cuidado para que não ocorram choques com outros objectos. Os robôs podem evitar choques, desde que tenham a capacidade de processamento de imagem para obter informação do ambiente que o rodeia. O tipo de movimento que um robô pode executar depende de vários factores, do número, da orientação e do tipo de juntas (se de rotação ou de translação) , assim como o comprimento dos troços entre juntas. O ROB3I é um robô com 6 juntas de rotação (eixos de rotação) com as características que estão descritas na tabela 2.1. Tem a capacidade de mover todas as juntas em simultâneo. Axis Start Position End Position Angular Range 1 Base rotation Right: POS 0 Left: POS 511 200 degrees 2 Shouder Up: POS 0 Down: POS 511 200 degrees 3 Elbow Up: POS 0 Down: POS 511 200 degrees 4 Wrist Up: POS0 Down: POS 511 200 degrees 5 Wrist roll Right: POS 0 Down: POS 511 400 degrees 6 Gripper Open: POS 0 Closed: POS 100 60mm

Tabela 2.1: Descrição de algumas carcterísiticas dos do Rob3i A programação do robô Rob3i consiste na especificação de instruções para definir a trajectória do braço e da acção da garra terminal (abrir ou fechar) . A programação pode ser realizada através de um computador que comunica com o robô através da porta de comunicação série RS232 , ou em alternativa através do programador manual (TeachBox) que é apresentada na figura 2.3

Figura 2.3: Programador manual do braço robô ROB3i.

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 7/21

A linguagem de programação do robô consiste num conjunto, pequeno, de instruções e de comandos. Os comandos servem para definir uma acção na robô, as instruções tem a finalidade de seleccionar comandos e instruções que devem ser executados. Descrevem-se em seguida dois comandos que permitem efectuar o posicionamento de uma junta . Comando Descrição a +/- ENT Exemplo: 3 + ENT 2 - ENT

Move o eixo a no modo de POSIÇÂO a – número da junta, 1 a 6 +/- Teclas com os sinais +/- ENT – Pressionar a tecla com a palavra ENT

POS a.n ENT Exemplo: POS 1. 250 ENT

Move o eixo a para a posição n POS – Pressionar a tecla com a palavra POS a – número da junta, 1 a 6 . - Pressionar a tecla com o símbolo . n – valor da posição de destino ENT – Pressionar a tecla com a palavra ENT

Exemplo 1 – Programa de movimentação do eixo (junta) da base Programa Descrição STOP 0 ENT Limpa a memória MARK 0 ENT Introdução do endereço de início do

programa CLR Muda para o modo de INPUT POS ENT Armazena a posição de referência da posição

de começo 1 Selecciona o eixo 1 + Pressionar a tecla + para mover para a direita

(TEACH mode) CLR Muda para o modo de INPUT POS ENT Armazena a nova posição como posição 2 1 Selecciona o eixo 1 - Pressionar a tecla - para mover para a

esquerda (TEACH mode) CLR Muda para o modo de INPUT POS ENT Armazena a nova posição como a posição 3 POS 1.400 ENT Move o eixo 1 para a posição de 400 CLR Muda para o modo de INPUT POS ENT Armazena a nova posição como a posição 4 POS 1.50 ENT Move o eixo 1 para a posiçãp 50 CLR Muda para o modo de INPUT POS END Armazena a nova posição como a posição 5 INS . ENT Fim do programa Para executar o programa introduzir RUN 0 ENT Para parar o programa pressionar STOP De salientar que as primeiras três instruções definem o início do programa. O fim do programa é especificado com a instrução INS . ENT Um programa é uma lista ordenada de instruções. Constata-se que um programa é composto por um conjunto limitado de instruções, que são repetidas ao longo do programa, mas algumas delas

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 8/21

têm parâmetros (valores) que completam o significado da final da instrução, por exemplo POS1.50 ENT. Exemplo 2 – Programa mais complexo Neste exemplo não se apresentam as descrições das instruções. Qual será o resultado da execução deste programa? Comando Descrição STOP 0 ENT MARK 0 ENT CLR POS ENT POS 1.400 ENT CLR POS ENT 2 - CLR POS ENT POS 3 . 180 ENT CLR POS ENT 4 - CLR POS ENT POS 5 . 10 ENT CLR POS ENT 6 - CLR POS ENT INS . ENT

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 9/21

3-Exploração do ambiente de simulação NetLogo Nesta secção vai ser explorado, ainda que de forma breve, o ambiente de simulação que é disponibilizado pelo software NetLogo, o qual pode ser obtido do sítio com o endereço http://ccl.northwestern.edu/netlogo. O software NetLogo foi desenvolvido com o objectivo de estudar a interacção entre agentes, e determinar o comportamento de sociedades (virtuais). Como exemplos considerem-se a propagação de doenças numa sociedade, o comportamento da bolsa de valores ou o congestionamento e número de acidentes nas vias rodoviárias. Neste tipo de problemas, conhece-se relativamente bem o comportamento individual dos agentes, a percentagem de elementos que seguem determinados comportamentos por variar, e pretende-se descobrir o comportamento da sociedade, isto é, o número de pessoas doentes e o ritmo de propagação de doenças, ou se a bolsa cresce ou se pelo contrário há um número de pessoas que perdem os seus investimentos, ou por exemplo que regras é que devem ser seguidas para evitar problemas na sociedade. O primeiro passo na insvestigação deste tipo de problemas consiste na construção do mundo virtual onde cada agente tem um comportamento e pode interagir com outros agentes, por exemplo, mover-se no mundo, cooperar, competir, reproduzir e morrer. Os comportamentos dos agentes são definidos através de conjunto de regras, ou listas de instruções. No caso concreto do NetLogo, o mundo é composto por uma superfície e por agentes que evoluem na superfície. A superfície é bidimensional e é formada por blocos denominados de “patches”, cada bloco tem um conjunto de propriedades como a posição (x, y) e a cor. Os agentes que têm o nome “turtles” (tartarugas), possuem propriedades, como número de identificação, forma, cor, posição que ocupam e podem ter comportamentos distintos, podem andam sobre a superfície, reproduzir-se e morrer.

3.1 Conceitos básicos de programação De um modo geral, as propriedades de um elemento são representadas por números, os quais são guardados em variáveis. Os blocos e os agentes têm variáveis próprias para representar as respectivas propriedades. O comportamento dos agentes (robôs), a modificação do seu estado (movimento, parado, avariado, mudança de cor, …) ou a mudança da cor dos blocos são realizadas através da execução de acções as quais são descritas por instruções. Como as acções podem ser complexas há a necessidade de decompor essas acções noutras mais simples, que possam ser interpretadas e executas pelo ambiente de simulação através das suas instruções primitivas. A decomposição de uma acção complexa num conjunto de acções mais simples, as quais devem ser ordenadas e executadas pela ordem correcta, requer que se realize uma análise do problema. Da análise desse problema resulta a solução que se convencionou chamar de algoritmo. Note-se que podem existir diversas soluções para resolver o mesmo problema. O importante é que se consiga encontrar uma solução correcta (um algoritmo) e se possível eficiente, com o menor número de instruções e que solucione o problema rapidamente (no menor intervalo de tempo possível).

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 10/21

Num algoritmo podem ser encontradas instruções de diversos tipos, • Avaliação de expressões ,

1. Avaliação de expressões aritméticas, 2. Avaliação de expressões de comparação 3. Manipulação de variáveis, consulta do valor, modificação do valor.

• Instruções de selecção que permitem seleccionar outras instruções que devem ser executadas no passo seguinte.

• Instruções de repetição que possibilitam repetir várias vezes a execução de outras instruções. • Delimitadores utilizados para definir zonas de agrupamentos de instruções ou de expressões. As instruções de comparação são utilizadas para realizar testes aos valores de variáveis, do que resulta o valor lógico que assume os valores de Verdadeiro ou de Falso. Esse valor lógico é utilizado pelas instruções de selecção e de repetição para seleccionar as instruções que devem ser executadas em seguida e quantas vezes o devem fazer. Resumindo, temos instruções que avaliam expressões (conjunto de variáveis e de operadores que produzem um valor) para poderem seleccionar e execução outras instruções as quais podem realizar operações aritméticas para produzir novos valores que são armazenados em variáveis, que por sua vez podem ser utilizados como dados de entrada para outros algoritmos. No desenvolvimento de programas há a necessidade de agrupar as instruções simples que formam algoritmos, e isso é feito através do conceito de procedimentos também referido por rotina . Um procedimento é um conjunto de instruções com um nome, que é executado em bloco e que pode receber valores através de variáveis. Um procedimento que produza valores numéricos por exemplo y := cos(x) é designado de função, recebe um valor que é representado pela variável x e produz um outro valor que é armazenada na variável y através do operador de atribuição (:=). De salientar que no desenvolvimento de programas é necessário utilizar uma linguagem de programação, na qual são descritos os algoritmos que se pretende executar. A linguagem é caracterizada por ter uma determinada sintaxe (regras de escrita) e um conjunto de símbolos, o alfabeto com o qual se formam outros símbolos mais complexos (operadores, delimitadores, palavras, identificadores, …). Um programa escrito da linguagem de alto nível, designado dessa forma por estar próximo do modo como os seres humanos escrevem e descrevem acções, é referido como o programa fonte. O programa fonte deve ser analisado através de um programa especial, o compilador, para verificar não contém erros de sintaxe. No caso de não existirem erros de sintaxe, o compilador efectua a tradução do programa fonte para a linguagem de execução do computador , designado da linguagem máquina, ou para a linguagem da máquina virtual (programa que simula o comportamento de um computador) de execução do ambiente de simulação.

3.2 Desenvolvimento do programa

3.2.1 Invocação do programa e definição de botões de comando da simulação Comece por executar o programa NetLogo, seleccione o nome do programa NetLogo na lista de programas. De seguida aparecerá o ambiente de programação e de execução do NetLogo, ele é exemplificado na figura 3.1, e é composto por uma janela branca com uma barra de ferramentas e por uma janela preta que é utilizada para representar a evolução do mundo virtual.

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 11/21

Figura 3.1: Interface do ambiente NetLogo

A figura 3.1 representa a interface do simulador com o utilizador, nela já estão representados dois botões de comando que foram acrescentados com a opção “Button” da barra de ferramentas do NetLogo. Um botão tem o nome “Iniciar” e terá por finalidade invocar o procedimento “Iniciar, para iniciar a simulação, enquanto que o outro botão tem o nome “Executar” e tem por finalidade invocar o procedimento “Executar” de forma repetitiva, para executar a simulação. Neste último caso terá que ter o cuidado de seleccionar na janela de configuração do botão a opção “Forever”. Ambos os procedimentos terão que ser desenvolvidos posteriormente. Tarefa: Crie os dois botões com os nomes Inicio e Executar.

3.2.2 Desenvolvimento dos procedimentos Inicio e Executar O procedimento “Iniciar” deverá ter dois tipos de acções: a) Uma acção corresponde a criar o mundo, neste caso pretende-se que o mundo tenha uma pista

na qual os agentes (robôs) irão circular de acordo com regras a serem definidas posteriormente. b) A outra acção será a de criar um robô (ou vários robôs). Para escrevermos cada um dos procedimentos necessitamos utilizar o editor de procedimentos. Nesta linguagem um procedimento começa sempre com a palavra chave to e termina com end. Tarefa: Análise o código seguinte e determine o número de procedimentos que se pertende definir no editor de procedimentos. ;;--------------------------------------- ;; Procedimento Iniciar to Iniciar clear-all ;; Limpar tudo Criar_pista Criar_robos end ;;--------------------------------------- ;; Procedimento Criar_pista to Criar_pista end ;;--------------------------------------- ;; Procedimento Cria_robos

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 12/21

to Criar_robos end ;;--------------------------------------- ;; Procedimento Executar to Executar end Explicação do código: a) O operador formado por ; é designado de operador comentário, permite que se introduzam

palavras para explicar o programa, mas o compilador ignora-as. b) Existem 4 procedimentos, como os nomes Iniciar, Criar_pista, criar_robos, Executar. c) A definição de um procedimento começa com a palavra chave to seguido do nome do

procedimento e termina sempre com a palavra chave end d) As instruções que fazem parte de um procedimento devem estar alinhadas mais à direita, por

exemplo com dois espaços. Isso facilita a leitura e correcção do programa por parte do programador.

Tarefa: Seleccione a opção “Procedures” para invocar o editor de procedimentos e escreva o código que foi explicado anteriormente.

3.2.3 Criação da pista dos robôs A referência do sistema de eixos do mundo, a dimensão do mundo em termos do número de blocos, assim como a dimensão dos blocos em termos do número de píxeis podem ser modificados com o auxílio do editor do mundo (Edit) que se encontra na interface da aplicação (na janela preta). Neste trabalho serão utilizadas as dimensões por omissão, com que a aplicação vem configurada, e que pode ser consultadas na figura 3.2

Figura 3.2: Editor mapa do mundo (World & View)

• O sistema de coordenadas está centrado na janela do mundo. • As dimensões são [-17; 17] no eixo do Xx e [-17; 17] no eixo dos Yy. • Número total de blocos (“patches ”) é 35*35. • Cada bloco tem 12 píxeis. O objectivo consiste em construir uma pista como a que é apresentada na figura 3.3.

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 13/21

Figura 3.3: Aspecto da pista a ser construída para o simulador.

Para facilitar a construção da pista, assume-se que ela será formada por segmentos de recta de cor preta, o resto do mundo deverá ficar com a cor verde. Comecemos por adicionar uma instrução ao procedimento para colocar todos os blocos com a cor verde. Tarefa: Modificar o procedimento Criar_pista de modo a que ele fique com a instrução que é indicada a seguir. ;;--------------------------------------- ;; Procedimento Criar_pista to Criar_pista ;; Colocar os patches todos com a cor verde ask patches [ set pcolor green ] end Tarefa: Passe agora para o modo de Interface e seleccione o botão Iniciar. O que acontece? Explicação do código: • Para se modificar a cor dos patches (blocos) é necessários pedir-lhe que executem uma acção. • O pedido é feito com a instrução “ask patches” • Os parêntesis rectos são utilizados como delimitadores a instrução ask • Dentro dos delimitadores [ ] é colocada a instrução para modificar a color de cada um dos

patches. Para obter informações de cada um dos elementos que constituem a intrução set pcolor green deve utilizar a opção Help->Net Logo Dicionary que se encontra no topo da janela do ambiente Net Logo.

Para criar um segmento de recta será necessário especificar o início e o fim do segmento assim como a largura do mesmo. Esses dados serão especificados em termos das coordenadas do mundo (coordenadas dos blocos). A cor dos blocos da pista pode ser modificada de modo a transmitir informações ao robô, algo semelhante ao que se passa com a utilização de semáforos nas estradas. Apresenta-se a seguir o código do procedimento que permite desenhar um segmento de recta ;;--------------------------------------- ;; Segmento de pxi ate pxf e de pyi a pyf, com a co r

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 14/21

to Segmento [pxi pxf pyi pyf cor] ask patches [ if ((pxcor >= pxi and pxcor <= pxf) and (pycor >= pyi and pycor <= pyf )) [ set pcolor cor] ] end Explicação do código: • Como necessitamos de desenhar diversos segmentos de recta, e com as acções são sempre as

mesmas, mas que vão operar sobre coordenadas de blocos diferentes procurou-se desenvolver um procedimento que recebe-se as coordenadas do segmento que deve construir. Assim evita-se ter que construir um procedimento para cada um dos segmentos. O que se faz é invocar o procedimento diversas vezes, mas parametrizado com as coordenadas de início e de fim de cada um dos segmentos.

• As variáveis pxi, pxf, pyi, pyf e cor são parâmetros do procedimento. Desta forma é possível executar o procedimento Segmento várias vezes com parâmetros diferentes, em vez de estar a repetir o código, melhorando a sua leitura e manutenção.

• As variáveis pxcor e pycor são internas a cada um dos patches, armazenam as coordenadas de cada um dos patches

• A instrução if é utilizada para avaliar se as coordenadas de um patch satisfazem a expressão lógica que define se um patch pertence a um segmento de recta.

• A expressão lógica é construída com operadores lógicos (neste caso and) e por operadores de comparação (maior ou igual, >=) e (menor ou igual).

• A instrução set color é que permite altear a cor, a qual é passada como parâmetro na variável cor.

O procedimento Cria_pista passa agora a conter a invocação do procedimento Segmento com os parâmetros adequados. ;;--------------------------------------- ;; Procedimento Criar_pista to Criar_pista ;; Colocar os patches todos com a cor verde ask patches [ set pcolor green ] ;; Desenhar a pista com a cor preta Segmento -5 -5 1 9 black Segmento -15 -5 10 10 black Segmento -15 -15 1 9 black Segmento -15 15 0 0 black end Tarefa: Inclua no programa o procedimento Segmento e acrescente as instruções ao procedimento Criar_pista. Execute em seguida o programa para ver o resultado. Verificará que o resultado não é o mesmo que o da figura 3.3. Acrescente as instruções em falta. Questão: Qual é a instrução que altera a cor dos patches para a cor vermelha? E azul? Tarefa: Modifique as cores do mundo e da pista para cores ao seu gosto.

Criação do robô

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 15/21

A criação de um robô (“turtle”) é feita utilizando o procedimento seguinte, o qual faz uso de instruções semelhantes às que foram utilizadas para a criação do segmento de recta. ;;--------------------------------------- ;; Procedimento Cria_robos to Criar_robos create-turtles 1 ask turtle 0 [ setxy 15 0 set color cyan set heading 180 ] end Questões: Quantos robôs é que são criados? Quais são os números de identificação deles? Em que posição é que são colocados? E qual é a orientação deles? Tarefa: Acrescente o código do procedimento Criar_robos e teste o programa. Tarefa: Mofique o posicionamento do robô e a respectiva orientação. Faça diversos testes. No final reponha as parâmetros iniciais.

3.2.4 Movimentação dos robôs Chegado a este ponto coloca-se o problema de como é que se consegue fazer mover o robot. Isso será realizado construindo um procedimento que pode ter o nome de Mover_robos, nesse procedimento podemos definir a movimentação, pedindo às “turtles” que executem a instrução forward 1 . Tarefa: Escreva o procedimento Mover_robos. Invoque o procedimento a partir do procedimento Executar, e teste o seu funcionamento. Não se esqueça que tem que pedir à “turtle” que execute a acção e que o procedimento Mover_robos deve ser invocado do procedimento Executar. ;; Espaço reservado à escrita do procedimento Mover_robos ;; to Mover_robos ask turtles [ forward 1 ] end Questão: O que sucede com os robôs? Será que seguem a pista?

3.2.5 Definição do comportamento dos robôs Nesta secção é abordada a estratégia para definir o comportamento dos robôs de modo a que eles sigam a pista. Comecemos por analisar o problema. a) Consideremos que o robô está na pista e que deve andar para a frente. b) Para isso é necessário verificar que o espaço à frente do robô faz parte da pista.

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 16/21

c) Isso pode ser feito utilizando sensores, os quais devem medir o valor de uma propriedade da pista, neste caso assume-se que essa propriedade é a cor, preta.

d) Com os sensores, o robô deve começar por inspeccionar a cor do patch que está à sua frente. • Se a cor é preta (se a condição for verdadeira) então avançará para o patch à sua frente. • Se a cor não é preta então deverá inspeccionar outro patch, por exemplo o que se encontra

do lado direito. Se for preto, deverá passar para esse patch e mudar a sua orientação. A análise anterior deverá abordar todas as situações que sejam necessárias não esquecendo o sentido de movimentação do robô. Pode-se concluir que a definição das acções são traduzidas em termos de instruções do tipo

• Se <condição1> então < instrução 1> • Se <condição1> então < instrução 1> caso contrário < instrução 2>

De salientar que as acções podem conter instruções do tipo se e de repetição. Como grande parte das linguagens de programação de computadores fazem uso de palavras em inglês, as instruções Se aparecem com a forma

• If <condição1> else <instrução1> • If <condição1> then < instrução 1> else < instrução 2>

No caso particular da linguagem que estamos a utilizar (de simulação de comportamento de agentes) a sintaxe para essas instruções assume um aspecto ligeiramente diferente, isso pode ser verificado consultando o manual da linguagem (ou o dicionário através do Help)

• if condition [ commands] • if reporter [ commands1][ commands2]

Neste caso os parêntesis rectos são utilizados para definir o conjunto de instruções que devem ser executadas e que estão associadas ao valor lógico verdadeiro e falso. Comportamento com carácter aleatório O comportamento que vai ser definido para o robô é descrito pelas instruções seguintes: a) O robô deve verificar se o patch que está à frente do robô, tiver a cor preta então o robô deverá

avançará para esse patch (mantendo o mesmo sentido de movimento). Apresenta-se em seguida o código que permite dotar o robô com o comportamento descrito anteriormente. ask turtle 0 [ ask patch-ahead 1 [ if pcolor = black [ ask turtle 0 [ forward 1 ] ] ] ] Tarefa: Junte o código anterior ao programa, mas coloque-o no lugar adequado. Em seguida execute o programa e verifique o comportamento do robô. .Nota pode alterar a velocidade de execução do programa através da interface com o “silder”que indica “normal speed” b) Isto deverá c) Caso contrário o robô deverá escolher uma orientação (sentido de movimento) aleatório entre 0

e 360 graus.

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 17/21

No código que é apresentado a seguir pertende-se dotar o robot com mais alguma “inteligência”. Analise o procedimento seguinte e tente deterterminar o comportamento do robô. ask turtle 0 [ ask patch-ahead 1 [ if pcolor = black [ask turtle 0 [forward 1 ] ] [ask turtle 0 [set heading random 360]] ] ] Tarefa: Junte o código anterior ao programa e teste a sua análise. Comportamento com carácter determinístico Considere o código seguinte que define o comportamento de um outro robô (robô número 1). O código foi desenvolvido com o objectivo de fazer com que o robô 1 desse a volta à pista. ask turtle 1 [ ask patch-ahead 1 [ ifelse pcolor = black [ ask turtle 1 [forward 1 ] ] [ ifelse pcolor = blue [ ask turtle 1 [ forward 1 set heading heading - 90 ] ] [ ask turtle 1 [set heading heading + 90] ] ] ] ]

Tarefa: Considere que as coordenadas da posição inicial do robô (número 1) são, x=-15 y=0 e heading 0. a) Analise o código com o objectivo de descobrir o percurso do robô. b) Determine que tipo de informação deve ser colocada na pista para que o robô percorra toda a

pista (com o padrão de movimento do tipo 8). c) Acrescente o código anterior ao programa e faça as alterações necessárias para ter dois robôs.

O robô 0 continua com o comportamento aleatório, enquanto que o robô 1 deve ter o comportamento determinístico.

d) Teste o programa. Tarefa: Explore a opção do corresponde à biblioteca de modelos no NetLogo e escolha alguns desses modelos e execute-os.

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 18/21

4-Conclusão Os aspectos que foram abordados permitem ficar com uma noção de como é que é possível programar robôs e quais são as actividades que são necessárias para desenvolver programas. No entanto o programa que foi desenvolvido para simular o comportamento de robôs não está concluído. Há aspectos que não foram explorados, como por exemplo, o facto dos robôs poderem chocar entre si ou o outro facto de os robôs poderem terem velocidades diferentes, ou de terem que executar tarefas de recolha de objectos e de os transportar para um local específico. Estes aspectos serão explorados com os robôs (físicos) da IdMind e da Lego. Há um aspecto importante a salientar, a definição do comportamento dos robôs é feito utilizando linguagens e ferramentas de programação. A actividade de programação está em toda a parte, desde o funcionamento de um equipamento médico, passando pelas aeronaves e automóveis, pelos telemóveis e pelas caixas multibanco, indústria, banca e seguradoras, projectos de engenharia e também pelos jogos de computador. Resumindo, nas sociedades modernas utilizam-se cada vez mais dispositivos complexos cujo comportamento e funcionamento são definidos por programas. Este processo tem contribuído para melhorar o nível de vida das sociedades ocidentais, apesar de terem sido criados problemas de desemprego decorrentes da eliminação de postos de trabalho por sistemas automáticos que executam tarefas de rotina. Mas de certeza que o nível de vida existente no início do século XXI é melhor que a que existia no iníco do século XX. Boas férias.

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 19/21

Anexo Apresentam-se em seguida o aspecto final do simulador com a pista e os dois robôs e o programa na linguagem NetLogo

Figura: Aspecto final do simulador. Os robôs são representados por dois triângulos, um azul e outro vermelho.

Código do programa ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Programa de simulação do comportamento de robôs ; para OCJ2007 - DEEC/IST ; Autor: B. Andrade da Costa ; Data: 2008/07/05 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;------------------------------- ;; Procedimento Iniciar to Iniciar clear-all ;; Limpar tudo Criar_pista Criar_robos end ;;------------------------------ ;; Procedimento Criar_pista to Criar_pista ;; Colocar os patches todos com a cor verde ask patches [ set pcolor green] Segmento -5 -5 1 9 black Segmento -15 -5 10 10 black Segmento -15 -15 1 9 black Segmento -15 15 0 0 black Segmento 15 15 -10 -1 black Segmento 5 14 -10 -10 black Segmento 5 5 -9 -1 black coloca_sinal 5 0 blue coloca_sinal -5 0 blue

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 20/21

end ;;------------------------------ ;; Procedimento Criar_robos to Criar_robos create-turtles 2 ask turtle 0 [ setxy 15 0 set color cyan set heading 180 ] ask turtle 1 [ setxy -15 0 set color red set heading 0 ] end ;;------------------------------ ;; Procedimento Executar to Executar Mover_robos end ;;--------------------------------------- ;; Segmento de pxi ate pxf e de pyi a pyf, com a cor to Segmento [pxi pxf pyi pyf cor] ask patches [ if ((pxcor >= pxi and pxcor <= pxf) and (pycor >= pyi and pycor <= pyf )) [set pcolor cor] ] end ;;-------------------------- ;; coloca_sinal em (px,py) com a cor to coloca_sinal [px py cor] ask patches [ if (pxcor = px and pycor = py) [set pcolor cor] ] end ;;--------------------------------------- ;; Segmento de pxi ate pxf e de pyi a pyf, com a cor to Mover_robos ask turtle 0 [ ask patch-ahead 1 [ ifelse pcolor = black [ask turtle 0 [forward 1 ] ] [ask turtle 0 [set heading random 360]] ] ] ask turtle 1 [ ask patch-ahead 1 [ ifelse pcolor = black [

Ocupação Científica de Jovens em Férias 2008 Noções de Programação e de Computadores

Área Científica de Computadores DEEC - Instituto Superior Técnico 21/21

ask turtle 1 [forward 1 ] ] [ ifelse pcolor = blue [ ask turtle 1 [ forward 1 set heading heading - 90 ] ] [ ask turtle 1 [set heading heading + 90] ] ] ] ] end ;;;;;;;;;;;;; Fim do programa ;;;;;;;;;;;;