A BANDEJA PORTA-OBJECTOS BRAÇOS E MÃO, 4 COMPONENTES A primeira ferramenta da mão do robot é a bandeja porta-objectos, que se pode colocar nas articulações superiores de O SEU ROBOT. Afase actual de montagem chama-se «Braços e mão» porque diz respeito à última parte do robot que falta montar (a dos braços) e aos primeiros instrumentos que se podem acoplar às articulações superiores, através dos contactos correspondentes. Entre estas ferramentas também haverá dispositivos electrónicos e mecânicos, mas começa-se por algo mais simples: a bandeja porta- -objectos. É formada por várias peças, todas 1. 2. 3. 5. 6. 4. VAI PRECISAR 1. Uma chave phillips magnética pequena entregues com este fascículo. Concretamente, entregam-se as duas metades da bandeja propriamente dita (em forma de «U») e as duas partes do contacto, que permitem a ligação aos membros do robot. Completam o conjunto de peças um veio de metal e quatro parafusos de 3x10 mm, que permitem montar tudo. Como é evidente, a bandeja ainda não se pode utilizar porque antes será preciso montar pelo menos um dos membros superiores. 1 1. Primeira metade do contacto 2. Segunda metade do contacto 3. 4 parafusos de 3x10 mm 4. Veio de metal 5. Lado esquerdo da bandeja 6. Lado direito da bandeja A BANDEJA 1Pega-se no lado esquerdo da bandeja e no veio de metal. Insere-se este no correspondente orifício circular do meio da bandeja, como se vê na imagem da direita. 1132
71-passo a passo (1) 6/26/08 3:48 PM Page 1133 A BANDEJA PORTA-OBJECTOS A BANDEJA (CONTINUAÇÃO) A seguir, pega-se nas duas metades do contacto e encaixam-se (esquerda). Como se vê, têm uns pequenos espigões e umas ranhuras para garantir que ficam bem fixadas. 2 Montam-se as duas partes do contacto e depois pressionam-se para se fixarem bem uma à outra (em baixo). 3 Coloca-se o contacto que se acaba de montar no veio de metal. Orienta-se o contacto como se vê na imagem inferior, de maneira a que o extremo em forma de cruz fique virado para a parte exterior da bandeja, que deverá fixar-se à mão de O SEU ROBOT. 4 Agora usa-se o lado direito da bandeja e aproxima-se do lado esquerdo (imagem da direita). Como se vê, as duas metades têm uns orifícios telescópicos e uns suportes circulares que terão que encaixar na composição da bandeja. 5 1133
71-passo a passo (1) 6/26/08 3:48 PM Page 1134 PASSO A PASSO COMPOSIÇÃO DA BANDEJA Coloca-se uma parte da bandeja sobre a outra, de maneira a que os suportes e os orifícios coincidam. Depois pressionam-se com cuidado as duas metades, de maneira a aderirem bem uma à outra. Presta-se especial atenção ao pequeno espigão situado no extremo do lado direito, indicado na imagem da direita. 1 Agora que as duas partes da bandeja estão unidas uma à outra, verifica-se se o contacto pode rodar livremente em torno do eixo de metal (imagem da esquerda). Se isso não acontecer, retira-se o contacto e eliminam-se do orifício circular quaisquer rebarbas de plástico que possam existir. 2 Confirma-se se está tudo no seu lugar (à esquerda). Depois usam-se os quatro parafusos de 3x10 mm entregues com este fascículo e enroscam-se nos orifícios correspondentes do lado esquerdo da bandeja (imagem da direita). 3 Uma vez enroscados os parafusos a bandeja está acabada (à direita). Guarda-se até que possa ser utilizada, o que acontecerá quando pelo menos um dos membros estiver acabado. 4 1134
O SEU ROBOT, C-LIKE E JAVA O terceiro CD-ROM da colecção inclui o suporte para C-like e para Java. Já se pode programar O SEU ROBOT a nível avançado. Graças ao terceiro CD-ROM agora estão disponíveis todos os níveis de programação para o robot. Com efeito, depois da entrega dos programas de controlo e do Visual C-like Editor, estão reunidas as condições para criar programas directamente em linguagem C-like e em Java. No primeiro caso, o processo para a sua execução é substancialmente idêntico ao do Visual C-like Editor; os programas copiam-se e executam-se directamente em O SEU ROBOT graças ao módulo Cérebro e Visão e ao firmware. No que diz respeito aos códigos escritos em Java, a situação é diferente e os programas armazenam-se e executam-se no PC, que depois comunica com O SEU ROBOT graças à ligação Bluetooth e utiliza as suas funções para realizar os comportamentos que se pedem. Aquilo que a programação em Java faz é utilizar o robot como se fosse um periférico muito sofisticado do PC, capaz de proporcionar dados de entrada (procedentes de vários sensores) e produzir acções (graças aos led, aos motores e à voz do robot). Se os códigos escritos em C-like utilizam construções basicamente equivalentes às funções utilizadas no Visual Editor, para Java a configuração é muito diferente. Para dar um exemplo, a execução dos programas em Java aproveita frequentemente a escrita e a leitura de determinados «registos de comunicação», ou seja, parâmetros para a troca de informação entre o PC e o robot; ao passo que com o C-like não se chega a este nível de pormenor. De certa maneira, com Java é preciso programar a baixo nível. Por isso, a programação em Java dirige-se especialmente aos utilizadores experientes. EM C-LIKE A programação em C-like coloca ao nosso alcance as mesmas funções implementadas pelos blocos do Visual C-like Editor. Para se conhecerem as construções A programação de O SEU ROBOT em C-like e, sobretudo, em Java permite criar comportamentos que podem ser muito sofisticados e que aproveitam a 100 % as funções do robot. que se podem utilizar é preciso consultar a documentação incluída no terceiro CD-ROM. Seja como for, para se poderem executar os programas escritos em C-like há que utilizar o Visual C-like Editor, cujo código (escrito com qualquer editor de texto) é aberto, e mediante este transferi-los para o robot, copiá-los e depois executá-los, seguindo o mesmo processo utilizado para os diagramas de blocos. E EM JAVA As coisas mudam quando se utiliza o Java. Tal como já foi referido, a cópia e a execução realizam-se no próprio PC, que depois, durante a execução, comunica com o robot através de Bluetooth. Os programas escritos em Java têm que utilizar as funções de ligação e troca de dados com o robot. Com esta finalidade, podem-se usar diferentes bibliotecas de suporte que levam a cabo este tipo de interface. No CD-ROM incluiu-se uma (a Java Communications API), mas é possível optar por outras. De todos os modos, é preciso incluir as referidas bibliotecas no código escrito em Java e confirmar se estão «linkadas» na lista de classes utilizadas na compilação dos códigos. A programação em Java destina-se a utilizadores experientes, que possuam conhecimentos da referida linguagem e dos processos de cópia e execução. No terceiro CD-ROM encontram-se, além das bibliotecas PROGRAMAÇÃO 1135
Java, diferentes exemplos, alguns dos quais estão desenvolvidos no ambiente Eclipse (www.eclipse.org), uma aplicação para a realização de projectos Java. Para executar os citados exemplos basta descomprimir na mesma pasta de destino as capas de arquivo java-binaries.zip, java-demo.zip e java-library.zip (incluídas no CD-ROM) e depois executar o arquivo run.bat, obtido na mesma pasta de destino. Quando se liga o PC e o robot, será pedido que se indique um dos possíveis exemplos e a porta COM criada pelo módulo Bluetooth. Ao longo dos próximos fascículos veremos com mais pormenor outros exemplos de programas criados em C-like e em Java. EXEMPLOS DE PROGRAMAÇÃO [ ORDENS ORAIS: CÓDIGO JAVA ] Exemplo de uma mesma aplicação em C-like e em Java, para mostrar a complexidade de uma e de outra. O código em C-like pode copiar-se num arquivo no Visual Editor e depois passar-se para O SEU ROBOT. O código Java, que não inclui as funções acessórias, só se pode utilizar depois de uma finalização adequada. Os possíveis problemas relacionadas com a programação em Java serão comentados em próximos fascículos. [ ORDENS ORAIS: CÓDIGO C-LIKE ] #include c-like.h #include robot.h /** Declaração dos comportamentos */ declare( behavior(ordemzero) ); declare( behavior(ordemum) ); declare( behavior(ordemdois) ); /** Declaração dos processos */ void PiscaOlhosVermelhos(); void PiscaOlhosAmarelos(); void /** Declaração do comportamento de base */ define( behavior(main) ) { start(ordemzero); start(ordemum); start(ordemdois); /** Declaração do comportamento OrdemZero */ define( behavior(ordemzero) ) { local(voice_cmd) = wait_for(voice_cmd, cero); stop(ordemum); stop(ordemdois); end(); /** Declaração do comportamento OrdemUm */ define( behavior(ordemum) ) { local(voice_cmd) = wait_for(voice_cmd, one); PiscaOlhosVermelhos(); /** Declaração do comportamento OrdemDois */ define( behavior(ordemdois) ) { local(voice_cmd) = wait_for(voice_cmd, two); PiscaOlhosAmarelos(); /** Declaração do processo PiscaOlhosVermelhos */ void PiscaOlhosVermelhos () { led_blink(led_red); /** Declaração do processo PiscaOlhosAmarelos */ void PiscaOlhosAmarelos () { led_blink(led_yellow); /** Declaração do processo ApagaOlhos */ void ApagaOlhos () { led_off(led_all); import communication.handler.protocolhandler; import communication.handler.internal.headdata; import communication.handler.internal.headregister; import communication.handler.internal.internalhandler; import communication.handler.internal.internalmodule; import communication.handler.internal.voiceregister; import communication.transport.connectionprovider; public class VoiceCommander { private static String portname; private ProtocolHandler protocol; private InternalHandler internal; /** @param args */ public static void main(string[] args) { if (args.length < 1) { System.err.println( Especifique a porta de série a utilizar (ex. COM5) ); return; portname = args[0]; new VoiceCommander().run(); private void run() { if (!connect()) return; int[] buf1 = new int[1]; int[] buf2 = new int[2]; try { // estabelece o WordSet 2 // (para permitir Ordem + Número ) buf1[0] = 2; internal.writeregister(internalmodule.voice, VoiceRegister.WORDSET, buf1); // ler resultado do reconhecimento para reinício internal.readregister(internalmodule.voice, VoiceRegister.COMMAND, buf2); // repetir até que se saia ou se carregue na tecla Intro boolean exit = false; while (!exit && System.in.available() <= 0) { Thread.sleep(500); // comprova o estado do reconhecimento a cada 0,5 segundos internal.readregister(internalmodule.voice, VoiceRegister.COMMAND, buf2); // ler resultados da gravação // comprovar se o resultado é válido if (buf2[0] == 0) continue; // comprovar WordSet 11 (números) if (buf2[1]!= 11) continue; // escolher acção int leds = -1, phrase = 0; switch (buf2[0]) { case 1: // Zero exit = true; case 2: // Um OlhosVermelhos(); case 3: // Dois OlhosAmarelos(); catch (Exception e) { // PENDENTE Bloque catch autogerado e.printstacktrace(); disconnect(); 1136