Preview only show first 10 pages with watermark. For full document please download

Técnicas E Linguagens De Programação De Robôs

Realizado no âmbito da disciplina de Automação e Robótica I da Licenciatura Bi-etápica em Engenharia Electrotécnica da Escola Superior de Tecnologia de Viseu.

   EMBED


Share

Transcript

Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Automação e Robótica I Técnicas e Linguagens de Programação de Robôs Ricardo Silva – nº 1841 Rui Cabral – nº 1547 Henrique Carvalho – nº 1331 - Viseu, 2001 - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 1 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs 1 - Introdução Neste trabalho vamos apresentar uma visão geral dos diferentes tipos e métodos de programação de robôs, o processo de desenvolvimento de um programa para um robô e ainda uma abordagem às linguagens de programação mais usadas. Em primeiro lugar, temos de estabelecer algumas terminologias: • Os graus de liberdade de um robô serão numerados da seguinte forma: θ1, θ2, θ3, etc. Usualmente os robôs industriais têm entre 4 e 6 graus de liberdade, um em cada junta. Figura 1 • No final do braço do robô, está situado um órgão terminal. Nas figuras abaixo podemos ver alguns dos mais utilizados. Figura 2 Figura 3 - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho Figura 4 2 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Considerando o órgão terminal da figura 2, o chamado gripper, vamos definir um ponto no meio dos dois “dedos” denominado end-point (Pe) do robô. Se, por exemplo, o robô tem um gripper de dois dedos, para poder levantar objectos, definimos geralmente Pe como um ponto entre os dois dedos, de modo que quando um objecto está neste ponto, tudo o que o robô tem a fazer para o levantar é fechar o gripper para agarrar o objecto. Pode então executar um movimento com o objecto entre os dedos. Mas não é suficiente definir Pe como um ponto. É também necessário “atribuir-lhe” um sistema de coordenadas, para que possamos definir a posição de Pe no espaço, e a sua orientação. Deste modo, estamos com todas as condições para definir uma posição e uma orientação do gripper do robô relativamente à posição e à orientação de Pe. A posição e orientação de Pe precisa de ser definida relativamente a um sistema de eixos de referência global. Para isto, normalmente é utilizado um sistema de coordenadas fixo na base do robô, que não deve ser movido. Neste momento apenas é importante saber o que é o Pe e que a sua posição e orientação no espaço de trabalho é determinada pelos valores da posição das juntas – θ1, θ2, θ3, etc. Uma posição e orientação especial de Pe no espaço, e por conseguinte um determinado conjunto de valores de posição das juntas é chamada configuração do braço do robô. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 3 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs 2 - Tipos de programação de robôs Podemos distinguir três tipos diferentes de níveis de programação de robôs, baseados nos diferentes tipos de acção básica que estão especificados em cada um destes três níveis. a) Programação a nível das juntas – no qual as acções básicas são posições (e possivelmente movimentos) de cada junta individualmente: ângulos no caso de juntas rotacionais e posições lineares no caso de juntas prismáticas. b) Programação a nível do robô – no qual as acções básicas são as posições e orientações (e porventura trajectórias) de Pe e do sistema de coordenadas afecto. c) Programação de alto nível, que pode ser subdividida em: i. Programação a nível de objectos – no qual as acções básicas são operações a ser executadas nas partes, ou relações que devem ser estabelecidas entre as partes. Um exemplo desta ideia é o colocar um bloco sobre outro: Pegar Bloco A pelo LadoA1 e LadoA3 Mover Bloco A. para Posição2 Pegar Bloco B pelo LadoB1 e LadoB3 Colocar Bloco B no topo de Bloco A Com LadoA5 alinhado com LadoB6 e Com LadoA1 alinhado com LadoB1 e Com LadoA2 alinhado com LadoB2 Aqui, os blocos A e B são do mesmo tamanho, com os lados numerados de 1 a 4, face do topo número 5, e face de baixo número 6. As relações alinhados com especificadas no último comando deste pequeno programa a nível de objectos, são as instruções necessárias para localizar o Bloco B relativamente ao Bloco A no espaço. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 4 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Para este programa ser um programa completo que possa ser compilado e interpretado em comandos actuais de robô, teremos que acrescentar algumas definições dos dois objectos envolvidos, e definições da Posição2 e das outras posições utilizadas. ii. Programação a nível de tarefas – neste caso, as acções básicas especificadas pelo programa são tarefas completas ou subtarefas, tais como: • Agarra a caneta vermelha • Coloca o copo na mesa Para este tipo de programas funcionar, o sistema do robô precisa de saber, de alguma maneira, de tipos de canetas e cores, de copos e partes que são necessárias para fazer a tarefa. Dar informações deste tipo ao sistema não é fácil. A programação a nível das juntas e a nível do robô continua a ser o tipo de programação de robôs mais utilizada. A programação a nível de objectos não tem tido muito êxito, e por isso continua a ser assunto de investigação. A nível industrial, não há linguagens de programação a nível de tarefas que possam ser aplicadas, e por isso são também assunto de estudo e investigação. Estes problemas advém do facto de tanto a programação a nível de objectos como de tarefas carecer que o robô tenha algum tipo de controlo inteligente. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 5 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs 3 - Métodos de programação de robôs Podemos também dividir os métodos de programação de robôs em dois tipos diferentes: • métodos de programação On-line; • métodos de programação Off-line. A diferença entre estes dois tipos de programação reside no facto de na programação on-line ser necessário utilizar o robô a ser programado para gerar o programa, enquanto que na programação off-line não é preciso ter o robô senão na fase final de teste e implementação. A programação off-line envolve a escrita do programa em modo texto numa linguagem de programação de robô. As linguagens mais utilizadas na programação de robôs irão ser descritas mais à frente. Por agora vamos analisar os métodos de programação. 3.1 - MÉTODOS DE PROGRAMAÇÃO ON-LINE 3.1.1 - Programação por amostragem ou programação por ensino Este tipo de programação consiste na movimentação física do braço do robô através dos movimentos e acções que terá que efectuar num determinado processo. Ao mesmo tempo que esta movimentação física é efectuada, o robô regista as posições (e trajectórias se necessário) para onde, ou através das quais, o robô terá de se deslocar. • Se o controlador apenas regista (na sua memória) posições estáticas da configuração do robô, e não trajectórias, isto é chamado programação ponto-a-ponto. Cada configuração é identificada por um número ou um nome simbólico. (Note-se que o termo ponto-a-ponto não pode ser interpretado no seu sentido lato pois, o que é realmente registado são as configurações do braço, ou seja, a posição e orientação de Pe. A execução do programa só envolve que o sistema de controlo do robô mova o braço do robô para cada uma das configurações registadas na sequência especificada no programa. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 6 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs • Se o controlador pode registar as trajectórias pelas quais o órgão terminal do robô deve passar, isso é a chamada programação por trajectória. Este conceito é bastante semelhante à programação ponto-a-ponto excepto no facto de serem gravados muitos mais “pontos” (configurações do robô). O número necessário e a distância entre eles, são automaticamente determinados pelo sistema de controlo do robô. O controlador simplesmente simplifica o movimento do braço do robô enquanto o programador o move na direcção desejada. A execução do programa é apenas uma questão de repetir as trajectórias programadas pela ordem pela qual foram programadas. Outros tipos de acções não são geralmente possíveis de programar com este método de programação, contudo existe usualmente uma maneira de programar a abertura/fecho do gripper, ligar ou desligar um ponta de solda, etc. Durante este tipo de programação, os motores do robô são desligados. Por este facto, este tipo de programação é muitas vezes conhecido como programação on-line passiva. A maior vantagem deste tipo de programação é que é bastante fácil de fazer, e não requer nenhum conhecimento especial de programação ou treino. As principais desvantagens são: o não é prática para robôs muito grandes ou pesados; o não pode ser usada em situações perigosas; o grande precisão e movimentos em linha recta são difíceis de conseguir, assim como outra trajectória geométrica, como circunferências, etc; o é difícil de associar sensores de dados externos; o a sincronização com outras máquinas ou equipamentos da célula de trabalho é difícil. Para robôs de pequenas dimensões e que só são usados para tarefas relativamente simples que não envolvam outras máquinas ou robôs, este método de programação é ainda o mais eficaz e o menos dispendioso. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 7 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs 3.1.2 - Programação pela consola Algumas das dificuldades podem ser ultrapassadas usando o método de programação pela consola (teach-box). Este método usa uma consola e uma programação on-line activa. A consola é um painel de controlo que está conectado ao sistema de controlo do robô, que pode ser usado para fazer o braço do robô deslocar-se para uma configuração especial ou executar outras operações tal como abrir ou fechar o gripper. A consola geralmente tem um conjunto de botões que permite configurações especiais ou operações que podem ser gravadas como um passo do programa. É também possível armazenar movimentos particulares que usam trajectórias definidas. Figura 5 – Uma consola O uso deste método de programação requer que os motores do robô estejam ligados. Isto é chamado, algumas vezes, de programação on-line activa. Isto significa também que é potencialmente perigoso pois, o programador tem uma grande tentação de estar perto do robô enquanto este está a ser programado para melhor observar o que se está a passar, para ajustar ou alinhar melhor a posição e orientação do gripper, etc. Isto nunca deverá acontecer! O robô deve sempre ser colocado em modo de segurança antes de o programador poder entrar na sua área de trabalho. Se for possível, utilizando a consola, incluir especificações de movimento e velocidade e/ou especificar outras condições das acções e movimentos do robô, tais como o tipo de trajectória a usar entre duas configurações, este método de programação é algumas vezes chamado de programação extendida com a consola. Ambos os métodos, descritos anteriormente, são métodos de programação on-line. A programação por ensino é essencialmente um método para programação a nível das juntas. A programação com a consola é um método que usualmente permite misturar a programação a nível das juntas e a programação a nível do robô num mesmo programa. É algumas vezes mais conveniente mover somente uma junta, para estabelecer algumas configurações desejadas do robô, do que tentar comandar o movimento do Pe. Embora ambos os métodos serem os mais usados, têm duas importantes desvantagens: - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 8 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Ø Na programação on-line é preciso aceder ao robô enquanto está a ser programado, isto significa que o robô não pode estar a fazer mais nada enquanto está a ser programado, ou por outras palavras, enquanto a programação estiver a decorrer não poderão ser utilizados quaisquer periféricos ou robôs dependentes do mesmo sistema de controlo. Se existe mais do que um robô, cada um deles tem de ser individualmente programado, o que significa que uma linha de produção com diversos robôs tem de ser parada para que se possa proceder à programação de cada um deles. Isto implica uma paragem na produção e uma perda de tempo, que terá consequências financeiras. Ø O programa gerado pelos métodos de programação on-line, só existem na memória do sistema de controlo do robô e pode não ser possível transferi-lo para outro PC, por exemplo para imprimir o programa. Isto torna os programas difíceis de documentar e modificar. Mais uma vez, isto traduz-se em custos acrescidos na programação e na reprogramação utilizando robôs com métodos de programação on-line. Os métodos de programação on-line só podem ser usados para programação a nível das juntas ou a nível do robô. Não podem ser usados para programação de alto nível. 3.2 - MÉTODOS DE PROGRAMAÇÃO OFF-LINE Os métodos de programação off-line envolvem a criação de um ficheiro de texto contendo as instruções do robô e outras declarações que formam o programa que o robô vai executar, tais como, definições dos pontos, etc. Neste sentido, a programação off-line de robôs é muito parecida com a implementação de programas de computadores usando as linguagens C, C++, Java, ou outras. As linguagens de programação de robôs são, porém, tipicamente mais simples e frequentemente não suportam boas práticas de programação muito facilmente. Por exemplo, muitas linguagens de programação de robôs ainda têm a declaração goto, uma fonte bastante conhecida de erros e bugs em qualquer tipo de programas. Os ambientes de programação, que suportam o processo de desenvolvimento do - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 9 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs programa, são tipicamente como que “primitivos” em comparação com os ambientes actuais de programação de computadores. Tal como num programa de computador, o ficheiro de texto especifica a sequência das acções básicas que deverão ser executadas, juntamente com outra informação necessária para controlar a velocidade máxima do movimento do órgão terminal (Pe), ou tipos de trajectórias que devem ser seguidas entre dois pontos , por exemplo. As maiores vantagens da programação off-line são: Ø Os programas podem ser desenvolvidos sem ser necessário utilizar o robô; Ø A sequência de operações e movimentos do robô podem ser optimizados ou facilmente melhorados, uma vez que o programa básico já foi desenvolvido; Ø Procedimentos e subrotinas anteriormente desenvolvidas e testadas podem ser usadas; Ø Dados de sensores externos podem ser incorporados, embora isso torne o programa mais complicado, e consequentemente mais difícil de modificar e alterar; Ø Dados em CAD podem ser utilizados, por exemplo as dimensões das partes e as relações geométricas entre elas; Ø Os programas podem ser testados e avaliados utilizando técnicas de simulação, embora isto não possa nunca retirar a necessidade de fazer o teste final do programa no robô real; Ø Os programas podem ser mais facilmente modificados e verificados. E ainda mais facilmente ser devidamente documentados e comentados. A programação off-line pode ser usada para desenvolver programas a nível do robô e programas de alto nível. É possível utilizar os métodos off-line para programação a nível das juntas mas muito raramente são utilizados. A relação entre a programação on-line e off-line e entre controlo de cinemática e básico num robô industrial é o representado na figura seguinte: - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 10 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Figura 6 Alguns exemplos de linguagens de programação de robôs são: • Linguagens de programação a nível de robô: o AL – Universidade de Stanford, USA (1974); o AML - IBM (1982); o LM – Universidade de Grenoble (1989); o VAL-II – Univation (1983); o V+ - Adept (1989); o RAPID – ABB (1994). • Linguagens de programação a nível de objectos: o LAMA – MIT Laboratório de Investigação(1976); o AUTOPASS – IBM (1977); o RAPT – Universidade de Edimburgo (1978-86). - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 11 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs 4 - Processos de desenvolvimento de um programa de robô Nesta secção vamos dar uma visão dos seis passos no processo de desenvolvimento bom e fidedigno de um programa de robô. Como este conceito do processo de desenvolvimento do programa é um pouco difícil de explicar apenas teoricamente vamos considerar o seguinte exemplo: Tarefa: Mover o Bloco A e o Bloco B de modo a formar uma torre no topo do Bloco C, na seguinte ordem C, A, B, desde o fundo. Todos os blocos devem estar bem alinhados na torre final. Situação inicial B A D Situação final C Figura 7 D B A C Figura 8 Para executar a tarefa acima proposta, temos alguns passos que devemos dar. Os seis passos básicos no processo de programação do robô são: Passo 1: Analisar e decompor a tarefa numa série de operações dos objectos envolvidos, e especificar a sua ordem. Por exemplo, para executar a tarefa definida acima teremos de decompô-la na seguinte sequência de operações dos três Blocos: I. Retirar o Bloco B de cima do Bloco A, e colocá-lo ao seu lado; II. Colocar o Bloco A em cima do Bloco C; III. Colocar o Bloco B em cima do Bloco A; IV. Alinhar o Bloco A com o Bloco C; V. Alinhar o Bloco B com o Bloco A. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 12 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs As primeiras 3 operações são obviamente necessárias. As duas últimas operações de alinhamento são apenas necessárias para ter a certeza que cada bloco está correctamente alinhado com o debaixo. A simples tarefa de colocar um bloco em cima de outro não garante que eles fiquem alinhados, por isso estas operações extra são necessárias. Sabendo que estas duas operações de alinhamento serão necessárias é apenas um caso de experiência, e isto ilustra o facto de que cada passo do processo de programação necessita de bastante experiência do modo de funcionamento de todo o processo antes de a podermos implementar. Esta solução apresentada com as cinco operações definidas anteriormente não é a única possível e também não é a melhor. Por exemplo, é provavelmente melhor alinhar logo o Bloco A com o Bloco C imediatamente depois deste ter sido colocado em cima do Bloco C, uma vez que o robô já está nessa posição. Esta operação depende, é claro, de não haver deslocação dos blocos A e C aquando da colocação do Bloco B por cima do Bloco A. Se a operação for feita suavemente isto provavelmente é verdade. Outra possibilidade, se os dedos do gripper forem largos o suficiente, e se o robô tiver suficientes graus de liberdade (o que se considera neste caso) é pegar ao mesmo tempo no Bloco A e B e colocá-los directamente por cima do Bloco C. Isto implicaria uma redução das operações a fazer, e por consequência do tempo de execução do programa, mas é uma possibilidade mais arriscada de fazer e provavelmente irá falhar. Se mover os Blocos A e B juntos não é seguro, ou se não for possível devido à largura do gripper, ou se o robô não tem suficientes graus de liberdade, outra possibilidade é mover o Bloco C. Nada nos diz na tarefa que esta opção não é possível. Mover o Bloco C para o mais próximo possível do Bloco A significa que as operações a realizar com os Blocos A e B implicam trajectórias menores, logo serão mais rápidas. Não terão necessidade de passar por cima do Bloco D, o que significa um menor risco de colidir com ele ou com outros obstáculos no caminho. Todas estas possibilidades mostram-nos que as tarefas do robô não estão usualmente especificadas. Fica ao critério do programador estudar todas as possibilidades e implementar aquela que considere mais fiável, rápida e com menos possibilidade de fracasso. É, por isso, importante que todos os aspectos relativos à tarefa a executar sejam considerados neste estado da programação. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 13 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Mudar, mais tarde, o modo como a tarefa é executada pode trazer elevadas despesas e ser mais propenso a erros. Passo 2: Identificar e especificar todas as situações necessárias ao programa, todos os movimentos e acções do robô. Uma situação é uma configuração particular do braço do robô e do estado do espaço de trabalho – ou seja, onde é que as diversas partes estão e como estão orientadas. Uma configuração do robô é definida pela posição e orientação do sistema de eixos colocado no órgão terminal (Pe) do robô. Assim, para a nossa tarefa de exemplo, nós poderemos especificar as seguintes situações: 0. A situação em que a tarefa começa – dá-nos a configuração inicial do robô e a localização das partes; 1. A situação em que Pe está sobre o Bloco D, e as partes estão numa localização qualquer – utilizada para definir trajectórias livres de colisão de um lado da mesa para o outro; 2. A situação em que Pe está verticalmente acima do centro do topo do Bloco B (na sua localização inicial) – donde o robô pode executar a tarefa de pegar no bloco sem problemas; 3. A situação em que Pe está coincidente com o centro do Bloco B – utilizada para definir a localização de aperto do Bloco B; 4. A situação em que Pe está ao lado do Bloco A, a uma altura igual a metade da altura do Bloco A, e a uma distância suficiente deste para que o robô tenha espaço para colocar o Bloco B – utilizado para definir a tarefa de poisar o Bloco B depois de ter sido retirado de cima do Bloco A. É uma boa ideia tentar identificar e especificar as situações que podem ser usadas para programar diferentes acções do robô. A tarefa 1, indicada acima, é um exemplo disto: é usada para definir a trajectória de todos os movimentos que terão de passar por cima do bloco D. Um cuidado especial é também preciso na definição da situação 4, usada para definir o poisar do Bloco B. É melhor acrescentar um pouco mais de altura à localização de Pe definida por esta situação de forma que o robô largue o Bloco B quando este está a pouca distância da mesa. Quando o robô abrir o gripper o Bloco B irá cair assim, a uma distância muito próxima da mesa. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 14 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Este procedimento é feito porque existe sempre um pequeno erro na posição e orientação real de Pe, e se definirmos a tarefa 4 para colocar o Pe exactamente metade da altura do Bloco B sobre a mesa, existe o risco que quando o robô executa esta tarefa, ele vai tentar mover o Bloco B mais abaixo do que a mesa. O robô ao colidir com a mesa, e como esta tem mais força que o braço do robô vai fazer com que o sistema de controlo pare o robô. A definição de situações precisa assim de ter em conta as possíveis consequências ou efeitos de erros considerados pequenos que geralmente ocorrem em tarefas realizadas pelo robô. Existem dois tipos de erros: erros absolutos e erros de repetição. Erros absolutos acontecem quando o robô não coloca o órgão terminal (Pe) na configuração para a qual foi programado. Este erro não é frequente no espaço de trabalho, depende da geometria do braço do robô e de outros aspectos do seu controlo. Usualmente os erros absolutos serão mínimos se o Pe se encontrar próximo do corpo do robô (base), do que se Pe se encontrar numa das extremidades do espaço de trabalho. Definir movimentos próximos da base do robô podem minimizar o aparecimento de erros absolutos, mas podem ser mais restritos dependendo da geometria do braço do robô. Arranjando maneira de os movimentos se fazerem o mais próximo possível da base do robô irá, por isso, minimizar o aparecimento de erros absolutos. Os erros de repetição ocorrem quando o robô está programado para fazer sempre o mesmo movimento repetidamente, movendo Pe para a mesma posição e orientação. Usualmente, o robô não vai deslocar o Pe exactamente para o mesmo sítio do Pe definido (erro absoluto) nem irá exactamente para o mesmo sítio de cada vez. Existirá sempre um pequeno volume de espaço à volta de Pe para o qual o robô irá mover o Pe, de cada vez que for instruído para o fazer. Tanto os erros absolutos como os erros de repetição podem ser minimizados recorrendo a movimentos lentos do robô. Algumas vezes é também possível especificar o nível de precisão requerido para cada movimento. Uma precisão mais alta significa que os movimentos serão feitos com pequenas acelerações, e por consequência, o robô irá demorar mais tempo a realizar os movimentos. Um ponto intermédio entre a precisão e o tempo de execução requeridos precisa de ser estabelecido para cada movimento em cada programa. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 15 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Passo 3: Identificar quaisquer tipos de acções ou operações repetidas e especificá-las como subrotinas com parâmetros. Tal como em qualquer programação de computadores, se o robô precisar de executar a mesma sequência de movimentos e acções em diferentes pontos do programa, ele deve utilizar o mesmo código para o fazer. Isto é melhor implementado com a definição de subrotinas. Este facto irá aumentar a manutenção do programa e reduzir a probabilidade de erros de programação. Na tarefa que considerámos como exemplo, podemos identificar partes de aquisição e partes de colocação que requerem similares sequências de movimentos e acções que serão precisas diversas vezes. Por exemplo, poderemos definir uma subrotina, chamada Pegar-Poisar que servirá para pegar no Bloco e também poisar o Bloco. Esta subrotina tem três argumentos: Inicio – define a localização de Pe no inicio das tarefas de pegar e poisar; ObterPonto – define a localização de Pe quando o robô fecha o gripper para pegar num Bloco ou o abre para poisar o Bloco; Acção – define se a acção a executar é de pegar ou poisar. DefineProcedimento Pegar-Poisar (Inicio, ObterPonto, Acção) Se Situação_corrente = Inicio então Se Acção = “Pegar” então Abrir_gripper Caso contrário Acção = “Poisar” então Se gripper = ABERTO então FALHA com a mensagem (‘ Nenhum Bloco no Gripper’); Caso contrário FALHA com a mensagem (‘A acção especificada não existe’); Mover para ObterPonto com velocidade = BAIXA e precisão = ALTA ; Se Acção = “Pegar” então Fechar_o_ gripper; Caso contrário se Acção = “Poisar” então Abrir_gripper; Mover para Inicio com velocidade = BAIXA e precisão = ALTA ; Caso contrário FALHA com a mensagem (‘Robô não está no inicio’); FimDoProcedimento; - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 16 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Como podemos ver no código acima para esta subrotina, muitas das suas linhas de código são de validação dos valores dos parâmetros, de modo a verificar se determinada acção pode ser executada. O comando Mover para é também definido para ser um movimento lento e com grande precisão. Por outro lado, mover o Pe para o Inicio pode ser feito mais rapidamente e com menos precisão. Passo 4: Desenhar e desenvolver o programa completo e toda a sua documentação. Mesmo depois de se terem especificadas, implementadas e testadas as operações, as situações e subrotinas, há ainda muito trabalho a ser feito, nomeadamente no que concerne á implementação e documentação dum programa de robô completo. Esta implementação, e todas as decisões tomadas, devem ser consistentes com as dos passos anteriores. Passo 5: Testar e depurar o programa utilizando um simulador do robô e do seu espaço de trabalho. Os ambientes de programação off-line actuais fornecem-nos simuladores que podem ser utilizados para modelar e depois simular o robô e o seu espaço de trabalho com todos os equipamentos existentes. O aproveitamento deste simulador pode tornar as operações de teste e depuração de um programa muito mais fáceis, mas isto só é possível se o simulador é baseado num bom modelo do robô actual e do seu espaço de trabalho. Implementar um bom modelo de simulação pode, muitas vezes, ser uma dificuldade e requerer muito tempo. Este passo, como é obvio apenas se aplica aos métodos de programação off-line. Passo 6: Testar o programa no robô real. Depois de um programa ter sido implementado, depurado, e testado utilizando um simulador, deve ser testado num robô real. Um simulador nunca deve ser encarado comum teste suficiente para um programa de robô. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 17 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Se o programa a implementar é para ser executado em mais que um robô, por exemplo numa linha de produção com 10 robôs que vão todos executar as mesmas tarefas, temos de decidir em quantos deles vamos testar o programa. Testar o programa num só robô pode não ser a melhor solução. Testar o programa em todos os 10 robôs da linha de produção se calhar é demasiado. De modo a podermos decidir em quantos robôs vamos testar o programa é necessário saber algumas características dos robôs onde o programa vai ser executado, tais como a sua história e desempenho. Quanto menos se souber destes dois aspectos em mais robôs teremos de testar o programa. Para concluir, um processo de programação de robô envolve muitas decisões e escolhas, e cada uma delas terá consequências e implicações nos passos subsequentes. É então muito importante registar devidamente todas estas decisões e escolhas, juntamente com as razões que nos levaram a optar por elas, durante o processo de implementação do programa. Não tendo em conta todos estes aspectos, poderá dar origem a acidentes, custos desnecessários de produção e falhas muito dispendiosas. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 18 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs 5 - Programando com sensores externos Os sensores externos utilizados nas aplicações industriais de robôs podem ser divididos em dois tipos: 1. Sensores complexos ou de múltiplos valores a. Sensores de força de múltiplos eixos b. Sensores de múltipla pressão ou toque c. Câmaras e sistemas de visão 2. Sensores simples ou de valor único a. Sensores de toque ou contacto b. Sensores de um eixo c. Interruptores Os sensores simples ainda podem ser subdivididos em: Ø sensores binários ou de bit único Ø sensores analógicos ou multi-bit, que precisam de conversores analógico/digitais e valores de 8 ou 16 bit. Os sensores complexos são, na verdade, subsistemas completos que precisam de hardware e software especial e interfaces com o sistema de controlo do robô. São também caros. Os sensores simples podem ser ligados directamente ao sistema de controlo do robô que normalmente têm entradas analógicas e digitais. Estes sensores são baratos. Existem três aspectos importantes relativamente aos sensores que devem ser considerados quando se decide usá-los nas aplicações industriais. Fiabilidade – os sensores e qualquer periférico ou software devem ser de grande fiabilidade nas condições de aplicação, e que depois de testados tenham dado excelentes provas de funcionamento nas condições de aplicação. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 19 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Calibração – a calibração dos sensores não deve demorar muito tempo a fazer, nem deve precisar de especialização ou material especial para a fazer, não deve precisar de ser feita muito frequentemente. Precisão – a precisão dos sensores utilizados deve ser constante com o tempo e utilização, mas não deve ser maior do que o necessário para uma aplicação particular. Os melhores sensores que se podem usar considerando a sua fiabilidade, calibração e precisão, são os sensores binários. Um dos pontos fortes é o facto de não precisarem de calibração. Quanto aos outros aspectos, são muito fiáveis pois são quer mecanicamente quer electricamente muito fáceis de fazer. E têm precisão absoluta partindo do principio que estão a funcionar bem. Os sensores complexos são muitas vezes usados para fornecer dados sobre os objectos envolvidos numa tarefa ou sobre o órgão terminal do robô, a posição global e a orientação, por exemplo. Para concluir, quanto mais sensores forem usados, mais complicado ficará o programa e por consequência mais difícil de testar e depurar, e a previsão do tempo de execução mais difícil de fazer. Todas estas consequências de usar até sensores binários, pode ser razão suficiente para não usar sensores ou o mínimo possível, e em vez disso, utilizar movimentos e acções do robô mais robustas, mesmo que o programa fique mais extenso e com um tempo de execução superior. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 20 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs 6 - Linguagens de programação de robôs A maioria das linguagens de programação de robôs implementadas hoje em dia usa uma combinação de programação textual e programação pela consola. A linguagem textual é usada para definir a lógica e a sequência do programa, enquanto as posições específicas dos pontos no espaço de trabalho são definidas por meio de um consola. Isto pode ser imaginado como um método de programação off-line/online, no sentido que o programa em si pode ser escrito off-line com a linguagem textual, enquanto os pontos devem ser definidos online com o consola. 6.1 - LINGUAGENS TEXTUAIS DE PROGRAMAÇÃO DE ROBÔS A primeira linguagem robótica textual foi WAVE, desenvolvida em 1973 como uma linguagem experimental de pesquisa no Stanford Artificial Intelligence Laboratory. A pesquisa, envolvendo um robô ligado a um sistema de visão de máquina, foi realizada usando a linguagem WAVE. A pesquisa demonstrou a viabilidade de coordenação visual/motora do robô. O desenvolvimento de uma linguagem subsequente começou em 1974, em Stanford. A linguagem foi chamada AL, e podia ser usada para controlar braços múltiplos em tarefas exigindo coordenação dos braços. Muitos dos conceitos das linguagens WAVE e AL foram aproveitados no desenvolvimento da primeira linguagem textual de programação de robôs comercialmente disponível, a linguagem VAL (Victor Assembly Language, de Victor Scheinman). A linguagem VAL foi introduzida em 1979 pela Unimation Inc. para seus robôs da série PUMA. Essa linguagem foi melhorada para VAL II e lançada em 1984. O trabalho de desenvolvimento de linguagens de programação de robôs prosseguiu também nos laboratórios T. J. Watson Research Labs, da 3M Corporation, tendo começado por volta de 1976. Duas das linguagens da IBM foram a AUTOPASS e a AML (A Manufacturing Language), esta última sendo comercialmente disponível desde 1982 com os robôs da IBM. Ambas as linguagens são dirigidas para tarefas de montagem e tarefas relacionadas. Algumas das outras linguagens textuais para robôs que deveriam ser mencionadas incluem RAIL, introduzida em 1981 pela Automatix, para montagem com robôs e solda eléctrica assim como visão de máquina, MCL (Manufacturing Controle Language), desenvolvida sob o patrocínio da Força Aérea Norte-Americana pela McDonnell-Douglas como melhoramento da linguagem APT - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 21 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs (Automatically, Programmed Tooling), o HELP, uma linguagem desenvolvida pela General Electric Company sob licença da firma italiana DEA. 6.2 - GERAÇÕES DE LINGUAGENS DE PROGRAMAÇÃO DE ROBÔS As linguagens textuais de programação de robôs possuem uma variedade de estruturas e capacidades. Estas linguagens estão ainda em evolução. Podem-se identificar duas gerações de linguagens textuais e especular sobre como iria parecer uma linguagem de futura geração. 6.2.1 - Linguagens de primeira geração As linguagens de primeira geração usam declarações de listagens de comandos e procedimentos da consola para desenvolver programas de robôs. Estas linguagens foram principalmente desenvolvidas para implementar controle de movimento com uma linguagem textual de programação e são, às vezes, chamadas de motion level language. Características típicas incluem a capacidade de definir movimentos do manipulador (usando as declarações para definir a sequência dos movimentos e a consola para definir a localização dos pontos), interpolação linear, ramificação e comandos elementares por sensores envolvendo sinais binários (ON-OFF). Em outras palavras, as linguagens de primeira geração possuem capacidades semelhantes aos métodos avançados de programação por consola usados para realizar as instruções de programação do robô. Estas linguagens podem ser usadas para definir a sequência de movimentos do manipulador (MOVE), possuem capacidade de entrada/saída (WAIT/SIGNAL) a podem ser usadas para escrever sub-rotinas (BRANCH). Para escrever um programa de complexidade baixa/média, um utilizador provavelmente acharia mais fácil usar os métodos de programação pela consola, enquanto pessoas com experiência em programação de computadores provavelmente achariam mais fácil usar as linguagens de primeira geração. A linguagem VAL é um exemplo de uma linguagem de programação de robôs de primeira geração. As limitações comuns das linguagens de primeira geração incluem a incapacidade de especificar cálculos aritméticos complexos para usar durante a execução do programa, a incapacidade de usar sensores complexos a dados fornecidos pelos mesmos, e uma capacidade limitada de - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 22 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs comunicação com outros computadores. Essas linguagens não podem facilmente ser ampliadas para futuros melhoramentos. 6.2.2- Linguagens de segunda geração As linguagens de segunda geração superam as limitações das de primeira geração e aumentam sua capacidade incorporando características que fazem o robô parecer mais inteligente. Isto permite ao robô realizar tarefas mais complexas. Estas linguagens foram chamadas linguagens de programação "estruturadas", porque possuem grupos de comando estruturados usados em linguagens de programação de computadores. Linguagens de segunda geração comercialmente disponíveis incluem VAL II (Anexo 1), A RAIL (Anexo 2) e a ML (Anexo 3). A programação nestas linguagens é muito parecida com a programação de computadores. Isto poderia ser considerado uma desvantagem, já que exige um programador de computador para realizar a programação. As linguagens de segunda geração usam geralmente um consola para definir posições no espaço de trabalho. As características e capacidades destas linguagens de segunda geração podem ser citadas como se segue: 1. Controle de movimento: esta característica é basicamente a mesma que para as linguagens de primeira geração. 2. Capacidades de monitorização avançadas: os melhoramentos nas linguagens de segunda geração normalmente incluem a capacidade de manusear muito mais que simples sinais binários (on-off) e a capacidade de controlar dispositivos através dos dados fornecidos pelos sensores. 3. Inteligência limitada: isto é, a capacidade de utilizar as informações recebidas sobre o ambiente de trabalho para modificar o comportamento do sistema de forma programada. 4. Comunicações a processamento de dados: linguagens de segunda geração geralmente possuem meios para interagir com computadores a bases de dados de computadores com a finalidade de manter registros, gerar relatórios e controlar actividades nas células de trabalho. A capacidade de controle de movimento em algumas das linguagens de segunda geração vai além da capacidade da geração anterior, pela inclusão de problemas de geometria mais complexos do que interpolação linear. A linguagem MCL, por exemplo, é baseada na linguagem APT. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 23 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Consequentemente a linguagem MCL inclui muitas das características de definição de geometria, contidas na linguagem APT. Por exemplo, linhas, círculos, planos, cilindros a outros elementos geométricos podem ser definidos em APT e MCL. As capacidades de monitorização avançadas incluem o uso de sinais analógicos, além de sinais binários, e a capacidade de comunicar-se com dispositivos que são controlados por esses sinais. O controle do gripper é um exemplo das capacidades sensoras ampliadas das linguagens da segunda geração. Uma operação típica do gripper usando uma linguagem de primeira geração envolve comandos para abrir ou fechar a garra. Linguagens de segunda geração permitem o controle de “dedos” com sensores que podem medir forças. O sensor monitoriza as forças ou pressões durante o fechamento contra um objecto, e o controlador do robô é capaz de regular a intensidade da força de pega que é aplicada ao objecto. A terceira característica proporcionada pelas linguagens de segunda geração é a inteligência limitada. Em vez de repetir sempre o mesmo modelo de movimento com pequenas diferenças para diversas configurações do produto, o robô tem a capacidade de reagir frente a eventos irregulares que ocorrem durante o ciclo de trabalho de uma maneira que parece inteligente. A inteligência é limitada no sentido que ela deve ser programada no controlador do robô. O robô não pode fazer nada, por conta própria - nada além do que ele foi programado para fazer. As linguagens de primeira geração são bastante limitadas na sua capacidade de comunicar com outros computadores. Normalmente, qualquer comunicação com outros controladores a dispositivos externos semelhantes deve ser realizada por meio dos comandos WAIT a SIGNAL das portas de entrada/saída do robô. Linguagens de segunda geração possuem uma maior capacidade de interagir com outros sistemas computadorizados. A capacidade de comunicação seria mantida para conservar registros de produção em cada produto, gerando relatórios de desempenho a funções semelhantes de processamento de dados. Uma característica relacionada das linguagens de segunda geração é a extensibilidade. Isto significa que a linguagem pode ser estendida ou aprimorada pelo usuário para dar conta dos requisitos de futuras aplicações, futuros dispositivos sensores a futuros robôs, todos podendo ser mais sofisticados do que na época em que a linguagem foi, inicialmente liberada. Significa também que a linguagem pode ser expandida para desenvolver comandos, sub-rotinas e macros (com um mecanismo para passar valores de parâmetros do programa principal), que não são incluídos no conjunto inicial de instruções. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 24 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs 6.2.3 - Linguagem de futura geração As linguagens de programação de futura geração envolverão um conceito chamado Modelamento de mundo. Outros termos às vezes usados incluem linguagens baseadas em modelos e linguagens de tarefa. Num esquema de programação baseado no Modelamento de mundo, o robô possui o conhecimento do mundo tridimensional e é capaz de desenvolver seu próprio conhecimento passo a passo, para realizar uma tarefa baseada num objectivo definido do que precisa ser realizado. De acordo com esta definição, existem dois aspectos básicos de uma linguagem de programação baseada num sistema com modelo tridimensional. O primeiro é que o sistema de robô possui na sua memória de controle um modelo tridimensional do seu espaço de trabalho. O segundo aspecto é a capacidade de auto-programação. De facto, o programador humano fornece ao sistema um objectivo, e o sistema desenvolve o seu próprio programa de acções necessárias para realizar o objectivo. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 25 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Anexo 1 - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 26 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs LINGUAGEM VAL II Esta linguagem foi desenvolvida pela Unimation Inc. e é usada para os seus robôs industriais. VAL II é uma versão mais aperfeiçoada da linguagem de programação VAL, lançada pela Unimation em 1979 para os seus robôs industriais da série PUMA. § DESCRIÇÃO GERAL VAL II é um sistema de controle por computador e uma linguagem de programação de robôs desenvolvidos para os robôs industriais Unimation. O VAL II tem a capacidade de definir facilmente a tarefa que um robô deve efectuar, isto porque as tarefas são definidas por programas escritos pelo utilizador. Esta linguagem tem como grandes vantagens a de incluir a capacidade de reagir a informações provenientes de sensores, como visão de máquina, desempenho melhorado em termos de geração de trajectória do braço e trabalhando em situações de emergência ou usando sistemas de coordenadas de referência. § COMANDOS MONITOR O modo monitor do sistema VAL II é usado para funções como definições de posições de pontos no volume de trabalho, edição e execução de programas, calibração do braço do robô e operações semelhantes. Definindo posições Comando Descrição HERE P1 Define a variável P1 como sendo a posição actual do braço do robô. WHERE Solicita que o sistema exiba a posição actual do robô em coordenadas espaciais cartesianas e variáveis da articulação do punho. Ele exibe também a abertura actual do gripper se o robô for equipado com uma mão posicionada por servocomando. TEACH É usado para registar uma séria de valores de posição sob o comando da tecla de registo na consola. TEACH P1 Com a execução deste comando, a primeira variável de posição registada será P1, a próxima será P2, a terceira será P3 e assim por diante. É possível ensinar uma trajectória completa posicionando sucessivamente o robô, usando a consola e pressionando a tecla de registo. POINT PA = P1 Estabelece o valor de PA (uma variável de posição) igual ao valor de P1. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 27 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Edição e controle do programa EDIT ASSEMBLY1 M E Comandos para entrada e saída no modo edição do programa. O comando EDIT abre o programa que deve ser chamado ASSEMBLY1. O Comando E (E de EXIT) provoca a saída e volta para o modo monitor. SPEED Especificação da velocidade. Este comando no modo monitor do sistema VALL II, é fornecido antes da execução do programa da seguinte maneira: SPEED 50 EXECUTE ASSEMBLY1 Faz o sistema executar o programa chamado ASSEMBLY1 Outros comandos de modo monitor STORE Armazenar os programas nos discos COPY Copiar programas FLIST Carregar arquivos de discos contidos num disco RENAME Dar novos nomes a arquivos DELETE Apagar arquivos DO (instrução) Faz com que o robô execute uma instrução específica de programação § COMANDOS DE MOVIMENTO MOVE P1 Usado para definir a trajectória do movimento, faz com que o braço do robô se mova num movimento de interpolação de junta até ao ponto P1. MOVES P1 Faz o movimento ocorrer ao longo de uma trajectória retilínea da posição actual até ao ponto P1. APPRO e DEPART Comandos de aproximação e afastamento. APPRO P1, 50 DEPART 50 O primeiro comando movimenta a ferramenta para a posição e a orientação especificadas por P1 com um deslocamento ao longo do eixo z da ferramenta de uma distância de 50 mm. O comando MOVE movimenta a ferramenta até ao ponto P1. A instrução DEPART movimenta a ferramenta afastando-se de P1 a uma distância de 50 mm ao longo do eixo z da ferramenta. SPEED Comando para ajustar a velocidade. DRIVE 4, -62,5, 75 Uma articulação individual pode ser deslocada de uma certa distância usando este comando, que muda o ângulo da articulação 4, movimentando-a de 62,5° no sentido negativo a uma velocidade de 75% da velocidade de modo monitor. MOVE P1 § CONTROLE DO GRIPPER OPEN Abrir o gripper. Este comando é executado durante o movimento seguinte do robô. CLOSE Fechar o gripper. Este comando é executado durante o movimento seguinte do robô. OPENI Abrir o gripper. Este comando é executado imediatamente, em vez de ser executado durante o movimento seguinte. CLOSEI Fechar o gripper. Este comando é executado imediatamente, em vez de ser executado durante o movimento seguinte. OPEN 75 M O primeiro comando faz abrir o gripper até 75 mm durante o movimento seguinte do robô. O segundo comando faz fechar o gripper imediatamente para 50 mm. CLOSEI 50 GRASP Permite verificar se o gripper fechou conforme esperado. Este comando fornece um método conveniente de pegar um objecto e testar para assegurar se o contacto foi feito. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 28 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs conveniente de pegar um objecto e testar para assegurar se o contacto foi feito. GRASP 12,7, 120 Este commando faz com que o gripper se feche imediatamente e verifica se a abertura final é inferior ao valor especificado de 12,7 mm. Se for, o programa passará para o comando 120 no programa. MOVET P1, 75 Faz um movimento de interpolação de junta desde a posição anterior até ao ponto P1, durante este movimento a abertura da “mão” é alterada para 75 mm. MOVEST P1,75 Comando com as mesmas características do anterior, mas este faz um movimento rectilíneo. § CONTROLE DE CONFIGURAÇÃO RIGHTY ou LEFTY Proporcionam uma mudança na configuração do robô de braço articulado, de modo que as primeiras três juntas (rotação da base, do ombro e do cotovelo) se assemelhem com o braço humano direito e esquerdo, respectivamente. ABOVE ou BELOW Solicitam uma mudança na configuração do robô, de modo que o cotovelo do robô seja apontado para cima ou para baixo, respectivamente. FLIP ou N0FLIP Proporcionam uma mudança no campo de operação de junta 5 (num robô de 6 juntas) par ângulos positivos ou negativos, respectivamente. § CONTROLE DE INTERTRAVAMENTO RESET Desliga todos os sinais externos de saída. SIGNAL É usado para ligar e desligar sinais externos. Números positivos de sinal ligam os sinais correspondentes, e números negativos de sinal desligam. SIGNAL –1, 4 Desliga o sinal de saída 1 e liga o sinal de saída 4. WAIT É usado para controlar a execução do programa com base nos sinais de entrada. WAIT SIG(1001, -1003) Pára a execução do programa até que o sinal externo (de entrada) 1001 esteja ligado e o sinal de entrada 1003 esteja desligado. REACT VAR1, SUBR2 Monitorização contínua do sinal binário externo identificado como variável VAR1 e procura por uma transição de sinal do seu estado actual para o estado alternativo. § CONTROLE DO PROGRAMA A linguagem VAL II contém um determinado número de sequências de instruções que podem ser utilizadas para organizar logicamente secções de programas do utilizador e para controlar a ordem em que elas são executadas. Estes comandos de controle do programa incluem: IF... THEN... ELSE... END O formato desta sequência é convencional, excepto que a palavra chave END é usada para significar o fim da sequência de comandos. WHILE... DO... END O formato desta sequência é convencional, excepto que a palavra chave END é usada para indicar o fim da sequência de comandos. DO... UNTIL Este comando opera na sequência inversa em relação ao comando WHILE... DO, já que a condição lógica é testada depois que os comandos ou grupos de comandos são executados. CASE... OF... VALUE... END Esta sequência proporciona um meio de executar um grupo de instruções entre qualquer número de grupos. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 29 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Anexo 2 - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 30 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs LINGUAGEM RAIL A linguagem RAIL é uma linguagem de programação desenvolvida pela Automatix para o seu sistema de CAM (Computer Aided Manufacturing). § DESCRIÇÃO GERAL Pode ser utilizada para controlar sistemas de fabrico tendo comandos específicos para controlar um equipamento de solda, além disso possui comandos para controlar o robô numa linha de montagem e permitir a sua ligação a periféricos, tais como alimentadores de peças, sensores, conveyors e equipamentos de manuseamento de materiais. Além disso, integra ainda comandos para interface com um sistema de visão que se destina a verificar a qualidade ou identificar determinado componente da linha de fabrico. § CARACTERÍSTICAS As principais características da linguagem RAIL são: - comandos para movimentar o robô, incluindo aproximação ou afastamento de posições; - comandos de solda do robô e meios para ajustar os parâmetros de solda, como a voltagem e a taxa de avanço do arame de solda; - um método simples de acesso aos input e output que estejam ligados a equipamentos; - comandos para carregar programas a partir do sistema de arquivo, exibir variáveis ou programas do utilizador, editar e/ou armazenar programas; - nomes de variáveis com comprimento até 20 caracteres; - estruturas de controlo semelhantes às disponíveis no Pascal, tais como, IF...THEN...ELSE, WHILE...DO, WAIT, etc; - expressões aritméticas, comparativas e lógicas; - uma biblioteca de funções incorporada no sistema, que contém as principais funções matemáticas (seno, coseno, raiz quadrada, ...). - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 31 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs § POSIÇÕES Esta linguagem possui três tipos de dados para posições do robô: pontos, trajectória e sistema de coordenadas de referencia. Pontos Um ponto indica-nos a posição e a orientação do gripper relativamente a um sistema de coordenadas de referência, normalmente localizado na base do robô. Exemplo: P1=(300,0, 200,0, 100,0, 50,0, 25,0, 35,0) Os três primeiros valores são dimensões lineares expressas em milímetros ou polegadas, indicando as coordenadas x, y, z do orgão terminal (gripper) no espaço. Os três últimos valores são os angulos de orientação em graus relativamente ao sistema de referencia espacial. Trajectórias A trajectória é uma série de pontos ligados entre si. Quando o robô é comandado para se movimentar ao longo de uma trajectória, ele movimenta-se suavemente através de cada ponto na trajectória, sem parar ou diminuir a marcha em qualquer dos pontos intermédios. Uma trajectória é especificada indicando os pontos que a definem, como no seguinte comando PATH: SEAM1 = PATH (P1, P2, P3, P4) Sistemas de coordenadas de referência Um sistema de coordenadas de referência é definido no sistema RAIL, definindo a origem, um ponto ao longo do eixo x e um ponto situado no plano xy. § COMANDOS DO MOVIMENTO DO ROBÔ O comando básico é o MOVE. O comando RAIL suporta 3 tipos de movimentos do robô: rectilíneo, assíncrono e circular. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 32 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Movimento Linear O movimento rectilíneo da ponta da ferramenta é realizado por maio de interpolação linear. Este movimento é a condição de default no sistema RAIL, se o utilizador não definir um dos outros tipos de movimentos, o robô irá movimentar-se linearmente. MOVE P1 Comando para um movimento rectilíneo. Movimento Assíncrono O movimento assíncrono é um movimento de interpolação de junta do braço do robô. O braço é movimentado de ponto a ponto usando o menor movimento possível para cada articulação e de modo coordenado, de forma que todas as juntas começam o movimento ao mesmo tempo. Este movimento tem a vantagem de permitir a execução mais rápida de um movimento. MOVE SLEW P1 Comando para um movimento assíncrono definido usando o comando SLEW. Movimento Circular Esta especificação de movimento faz com que o braço do robô se movimente de tal forma que a ponta da ferramenta se desloque ao longo de um arco circular formado pelos pontos indicados no caminho. CIRCLE Comando que é usado para especificar uma interpolação circular num comando de movimento. Por exemplo: MOVE CIRCLE PATH (P1, P2, P3, P4). Aproximação e Afastamento APPROACH 50 FROM P1 O primeiro comando faz com que a ferramenta se movimente até uma posição 50 mm a partir do ponto P1 ao longo do eixo z da ferramenta. O segundo comando faz com que a ferramenta se afaste 50 mm do ponto. M DEPART 50 Rotação da ferramenta ROTATE HAND 180 Comando para girar o actuador de 180° no sentido horário, em volta do eixo de rotação. Abertura e fecho do gripper OPEN Comando que controla a abertura do actuador do tipo gripper. CLOSE Comando que controla o fecho do actuador do tipo gripper - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 33 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Solda WELD § Comando que permite a realização de uma operação de solda num ponto ao longo de um caminho. COMANDOS LEARN O conjunto LEARN é utilizado para definir dados de posições com a consola de programação. O comando pode ser utilizado para programar pontos no espaço ou relativamente a outras posições predefinidas. Pode também ser usado para ensinar trajectórias e sistemas de coordenadas. LEARN P1, P2, P3, P4 LEARN FRAME § Neste comando, os quatro pontos são ensinados movimentando o braço para as posições designadas, usando as teclas de movimento da consola de programação e pressionando a tecla de registo para armazenar cada posição de ponto na sequência adequada. Este comando facilita ao utilizador o ensino de 3 posições. Estas posições correspondem à origem do sistema de coordenadas, um ponto ao longo do eixo x e um ponto no plano xy do sistema de coordenadas. SOLDA A linguagem RAIL proporciona uma variedade de opções para controlar um robô para operações de solda. Como já foi referido anteriormente o comando básico de solda da linguagem RAIL é o WELD, para mais facilmente se entender como funciona este comando, apresentamos de seguida um exemplo: WELD SEAM1 WITH WELDSCHED[3] § Neste comando a trajectória de solda é chamada de SEAM1. A clausula WITH WELDSCHED[3] identifica que os parâmetros de solda a serem usados durante essa trajectória são definidos no programa de solda 3. ENTRADA/SAÍDA INPUT PORT SWITCH1 7 Este comando define uma variável chamada SWITCH1 para ser uma informação de entrada para a unidade controladora através da porta de entrada número 7. OUTPUT PORT MOTOR3 15 Define a variável MOTOR3 como uma saída da unidade controladora através da porta 15. Durante o programa, essa saída pode ser ligada ou desligada por meio dos comandos MOTOR3 = ON e MOTOR3 = OFF. WAIT UNTIL Este comando é usado para sincronizar a execução de um programa em linguagem RAIL com alguma condição. Quando este comendo é encontrado, a execução do programa é interrompida até que a condição de teste esteja satisfeita. WAIT 2 SEC Este comando é utilizado para retardar a execução do programa para um intervalo especificado de tempo. Este intervalo de tempo é especificado em segundos (SEC) ou em milisegundos (MSEC). Se este intervalo não for especificado as unidades de tempo WAIT 2 - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 34 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs serão consideradas como sendo segundos. Logo, cada um dos comandos aqui considerados teriam um retardo de tempo idêntico. WAIT 2000 MSEC § ENTRADA/SAÍDA PARA OPERADOR E SISTEMA DE ARQUIVOS READ Lê os dados numéricos introduzidos pelo operador. Os números devem ser inteiros ou reais. READS É usado para ler dados introduzidos em forma de cadeia de caracteres (Ex: texto contendo quaisquer caracteres ASCII, caracteres alfabéticos, números, pontuação, etc) pelo operador. WRITE Este comando é usado para escrever mensagens para o operador no monitor de vídeo SAVE É usado para guardar o valor corrente das variáveis de RAIL, e/ou as definições escritas pelo utilizador, num arquivo ou numa fita. SAVE ‘PARTFILE’ PARTCOUNT, GOODPARTS, BADPARTS Este comando proporciona um meio de guardar os valores correntes das variáveis (PARTCOUNT, GOODPARTS, BADPARTS) na lista de variáveis existentes na fita. O nome do arquivo é PARTFILE. LOAD ‘PARTFILE’ Carrega o arquivo da fita cassete para a memória do computador. FILER É usado para operações tais como a listagem do conteúdo de uma fita para copiar ou apagar arquivos, e assim por diante. § CONTROLE DO PROGRAMA A linguagem RAIL contém um conjunto de comandos típicos para controle do programa, como IF... THEN, IF... THEN... ELSE e outros. O comando WHILE... DO permite ao programador continuar a execução de um determinado comando durante o tempo que uma condição especificada de teste permanecer verdadeira. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 35 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs ANEXO 3 - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 36 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs LINGUAGEM AML A linguagem AML é uma linguagem de programação interactiva de alto nível desenvolvida pela IBM Corporation para ser utilizada no seu robô IBM 7565. § DESCRIÇÃO GERAL Como o nome indica é uma linguagem de manufactura que possui diversos tipos e operadores de dados, sub-rotinas de sistema, estruturas de controlo da linguagem, estação de exibição de dados e controlos de input/output de arquivos, edição interactiva e facilidade de eliminação de erros, assim como identificadores do sistema para ajudar a melhorar a leitura do programa. É uma linguagem orientada para sub-rotinas, ou seja, os programas são escritos estruturando a aplicação como um conjunto de chamadas para as sub-rotinas escritas pelo utilizador e também daquelas que integram o sistema. A utilização destas sub-rotinas, quer sejam implementadas pelo utilizador quer aquelas que integram o sistema, são feitas da mesma maneira. § COMANDOS AML Existem três tipos de comandos na linguagem AML: - comando executável; - comando de declaração de variável; - comando de declaração de sub-rotinas. Os comandos em AML são semelhantes a frases em inglês, o seu sentido é captado interpretando em primeiro lugar as palavras e as expressões nela embutidas. Com excepção de casos especiais, todos os comandos AML terminam num ponto-e-virgula (;). - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 37 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Comandos Executáveis Os comandos executáveis realizam cálculos, comparações e outras funções semelhantes. Constituem a lógica que o interpretador deve executar e diferem dos outros dois tipos de comandos porque não preservam armazenamento ou proporcionam nomes para variáveis ou sub-rotinas. O comando consiste num rótulo opcional e a expressão a ser interpretada. Um ponto-e-virgula termina o comando. O rótulo é separado da expressão por dois-pontos(:). rótulo: expressão; Exemplo: CALC: 5-1/2*10 Comandos de Declaração de Variável Os comandos de declaração de variável têm a seguinte forma: id: NEW expressão; ou id: STATIC expressão; Os componentes do comando de declaração de variável são os seguintes: o nome da variável (chamado “id” na linguagem AML); o comando que identifica o comando como um comando de declaração e uma expressão que o interpretador avalia para determinar o tipo de variável e o valor inicial; um ponto-e-virgula a terminar o comando. Exemplos: X1: NEW 12,0; Neste comando é declarado um valor inicial de 12,0 à variável X1. X2: NEW (2,5*X1); Neste comando é declarado a variável X2 através de uma expressão que a avalia em relação ao produto de 2,5 vezes o valor corrente de X1. As variáveis NEW são interpretadas sempre que a sub-rotina dentro da qual residem é chamada. O interpretador analisa a expressão do lado direito da vírgula de cada vez que uma sub- 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 38 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs rotina é chamada, e é reservado espaço para armazenamento da nova variável. Quando a execução acaba e o controlo é devolvido ao programa principal, o espaço alocado para a variável nova é libertado. Declarações de variáveis STATIC só são interpretadas quando as variáveis são declaradas, e isto ocorre no momento da primeira chamada para a sub-rotina na qual elas residem. Ao contrário das variáveis NEW, as variáveis STATIC não são libertadas do armazenamento quanto termina a execução da sub-rotina; elas permanecem armazenadas, assim como os valores correspondentes, mesmo quando o programa não está a ser executado. Assim, o último valor conservado para qualquer variável STATIC está disponível para uso futuro no programa principal. Os comandos NEW e STATIC são usados pelo interpretador para determinar como tratar uma variável declarada. Para variáveis que ficam de fora da sub-rotina não existe diferença na maneira como o comando é interpretado. A diferença aplica-se apenas para a utilização numa sub-rotina. Comando de Declaração de Sub-rotina Uma sub-rotina consiste numa colecção de comandos AML. Os comandos de declaração de sub-rotina servem para lhe reservar espaço no armazenamento a atribuir um nome para referência futura no programa. Os comandos de declaração de sub-rotina têm a seguinte forma: id: SUBR(p1, p2, p3...pn); subrstatement1; subrstatement2; ... subrstatementn; END; Os componentes da declaração de sub-rotina são os seguintes: - o "id", ou nome da sub-rotina, que identifica a sub-rotina para referência subsequente seguida por dois-pontos (:); - o comando SUBR, que serve para declarar a sub-rotina em AML; - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 39 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs - parâmetros (p1, p2, p3...pn), que são transferidos do programa principal para use na chamada da sub-rotina. Quando especificados estes devem ser colocados entre parênteses; - o corpo da sub-rotina, que consiste em comandos AML, cada um terminando com um ponto-e-virgula (;): subrstatement1 ; subrstatement2; ... subrstatementn; Esses comandos têm o mesmo formato a seguem as mesmas regras que outros comandos AML. O ponto-e-vírgula (;) depois do último comando (subrstatementn) a antes do comando END é opcional, e o comando END, indica o fim da sub-rotina. Um ponto-e-vírgula (;) segue o comando END. Regras especiais acerca do sinal (;) aplicam-se ao comando END para sub-rotinas armazenadas dentro de outras. § CONSTANTES E VARIÁVEIS A linguagem AML usa vários tipos de constantes a de variáveis, que podem ser números inteiros reais ou cadeias. Constantes e variáveis conjuntas são também possíveis no sistema AML, incluindo conjuntos que contêm uma combinação de números inteiros, números reais e elementos em cadeia. Os conjuntos são incluídos entre parênteses angulares < >, e os elementos são separados por vírgulas. A linguagem AML permite a definição de conjuntos bidimensionais, além dos conjuntos convencionais de uma dimensão. Um conjunto bidimensional contém ao mesmo tempo fileiras a colunas de elementos. Um uso típico de um conjunto bidimensional seria definir um arranjo de coordenadas no espaço de trabalho de um robô. Um exemplo de comando de declaração de variável é: R:NEW < <-6,0,-25,0, 3,1>, <-6,0,-2,2, 3,5>, <1,3, 0,5, 3,2>, <5,2,-25,1, 3,0>, <8,1,-2,2, 3,3>, <8,4, 15,5, 3,5> >; - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 40 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Os elementos individuais do conjunto bidimensional estão entre parênteses angulares e podemos incluir mais de duas dimensões. Nesse exemplo, um conjunto bidimensional é usado para representar um arranjo tridimensional. O valor de R pode ser representado graficamente para os seis pontos. R 1 2 3 4 5 6 Valores das coordenadas correspondentes X Y -6,0 -25,0 -6,0 -2,2 1,3 0,5 5,2 -25,1 8,1 -2,2 8,4 15,5 Z 3,1 3,5 3,2 3,0 3,3 3,5 Pode-se ter acesso aos elementos individuais desse conjunto na linguagem AML por meio dos símbolos R(1), R(2) etc. Por outras palavras, R(4) representa (5,2, 25,1, 3,0). Isto poderia ser útil para identificar um ponto no espaço para o qual o robô seria dirigido. § COMANDOS DO CONTROLO DO PROGRAMA A linguagem AML tem alguns comandos de controlo do programa para a execução condicional do programa. Essas expressões condicionais incluem os comandos IF...TI-IEN, IF...THEN...ELSE, WHILE...DO a REPEAT...UNTIL. Os comandos IF...THEN a IF...THEN...ELSE têm a interpretação convencional. O comando WHILE...DO permite ao programador executar repetitivamente uma expressão, até que uma condição seja satisfeita. A forma do comando é: WHILE condição DO expressão O comando REPEAT...UNTIL é semelhante ao comando WHILE...DO, excepto que a ordem de condição a expressão é invertida. A sua forma genérica é, portanto: REPEAT expressão UNTIL condição - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 41 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs § COMANDOS DO MOVIMENTO A linguagem AML foi projectada para o robô IBM 7565, que tem coordenadas com uma configuração máxima de seis juntas mais a garra. As juntas 1, 2 e 3 são lineares, enquanto as 4, 5 e 6 são rotacionais. A garra é também considerada linear em termos de abertura entre seus dedos. Os comandos de movimento para o robô IBM 7565 requerem a especificação da junta e da distância a ser percorrida. A distância pode ser especificada ou dando um nome às coordenadas no espaço de trabalho para as quais o robô deve se dirigir ou especificando a distância incremental a ser percorrida. Os dois comandos associados são MOVE e DMOVE. Por exemplo, o comando MOVE (, <8,5, 1,5>); indica que as duas juntas JX a JY deveriam ser movimentadas para seus valores correspondentes de coordenadas de 8,5 a 1,5 in (inches), respectivamente. O comando DMOVE é usado para realizar um movimento relativo à posição corrente. Por exemplo, o comando DMOVE(JZ, 3,0); movimentaria o punho do robô 3 ir para cima numa direcção vertical. Dois outros comandos de movimento em linguagem AML são AMOVE e GUIDE. O comando AMOVE proporciona o mesmo movimento básico a especificação da trajectória que o comando MOVE; a diferença é que este completa o movimento antes de continuar com qualquer comando subsequente no programa. Com o comando AMOVE, o sistema pode realizar muitas tarefas enquanto o movimento está sendo concluído, como funções de processamento de dados ou cálculos. Obviamente, qualquer movimento subsequente deve esperar que o movimento actual esteja completo. O formato do comando AMOVE é o mesmo que o comando MOVE: AMOVE (, <8,5, 1, 5>); - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 42 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs O comando GUIDE permite o use de uma consola de programação para movimentar o conjunto especificado de juntas sob controle de direccionamento motorizado. O consola de programação do robô IBM possui teclas de controle que correspondem às juntas e direcções particulares. Para cada junta existe uma tecla para os sentidos positivo e negativo que pode ser pressionada para conseguir o movimento desejado da junta. Quanto mais tempo a tecla é pressionada, mais rapidamente a junta se movimenta. Quando a tecla é libertada, o movimento da junta pára. Uma vez movimentado o robô para a posição desejada, o movimento da junta pára, a tecla "END" no consola de programação é pressionada, o conjunto de posições dos eixos é exibido no monitor, e o controle é devolvido para o interpretador de AML. Por exemplo, vamos considerar o seguinte comando: GUIDE (); Isto faria os eixos x, y e z movimentarem-se através do consola de programação. O utilizador poderia então movimentar esses eixos com as teclas do consola de programação. Terminada a manipulação, o usuário pressiona a tecla "END", e o seguinte tipo de informação é exibido no monitor: <2,03700, 27,600, 4,00300> Essa informação poderia então ser usada para definir um comando MOVE, se desejado. A velocidade de execução de um movimento programado é estabelecida com o comando SPEED. O comando SPEED (0,5) ajusta a velocidade para quaisquer movimentos subsequentes (até que a velocidade seja alterada) para 0,5 vezes a velocidade plena. Velocidades válidas variam de 0,0 até 1,0 vezes a velocidade máxima do robô. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 43 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs § COMANDOS PARA SENSORES O robô IBM 7565 proporciona um interface de entrada/saída para sensores para ser ligado com vários equipamentos dentro da célula de trabalho, tais como sensores, dispositivos, ferramentas, alimentadores e outros. O sistema tem uma entrada ou saída digital de 1 bit, assim como uma entrada/saída digital de vários bits (até 16 bits). O sistema IBM 7565 suporta até 64 definições de entrada/saída lógica. Se o robô for equipado com uma garra com sensores, comandos adicionais são possíveis para interligação com seus sensores. Entrada/saída para sensores Três dos comandos mais importantes para entrada/saída de sensores na linguagem AML são: DEFIO, SENSIO a MONITOR. O comando DEFIO é usado para definir um dispositivo lógico de entrada/saída para sensores, ao qual pode-se ter acesso através dos comandos SENSIO ou MONITOR. A forma do comando DEFIO é DEFIO (group,type,format,sbit,length,scale,offset) Os cinco primeiros parâmetros entre parênteses são obrigatórios, e os dois últimos são opcionais. - Group é um número inteiro ou um conjunto que especifica o canal de entrada/saída. - Type refere-se a um dispositivo de entrada ou de saída (0 para entrada e diferente de zero para saída). - Format é um número inteiro ou conjunto que especifica o formato dos dados de entrada/saída do sensor. Um 1 especifica que um contacto fechado corresponde a -1 e um contacto aberto corresponde a zero. Um 2 significa que o contacto fechado corresponde a 1 e o valor do contacto aberto é novamente zero. - Sbit é um número inteiro ou um conjunto que especifica o número de bit do começo de campo de entrada/saída. Os números de bits variam de 0 a 15, sendo o bit 0 o mais à esquerda. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 44 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs - Length é um número inteiro ou um conjunto que especifica o comprimento do campo do bit. Os campos de bits variam de 1 a 16 bits. - Scale é um número real ou conjunto opcional que especifica o factor da escala que deve ser usado para dimensionar a entrada/saída de modo a tornar seu tamanho compatível com o sistema. O valor default é 1. - Offset é um número real ou um conjunto opcional que especifica a constante a ser usada para afastamento lateral da escala. O valor default é 0. O comando DEFIO retorna a definição de um bit ou um conjunto vizinho de bits aos quais se pode ter acesso pelo comando SENSIO. O retorno é chamado de ionum. O ionum é um número inteiro ou um conjunto que especifica o identificador numérico para cada entrada/saída definida. O valor deve ser usado em todas as referências para essa entrada/saída lógica em particular. O formato do comando SENSIO é: SENSIO(ionum,padrão) - ionum é o valor (ou valores) que determina(m) a entrada ou saída que deve ser realizada. Até dez ionums podem ser especificados num único comando SENSIO, permitindo a execução de 10 entradas/saídas a partir do mesmo comando; - padrão é um número inteiro, um número real, um conjunto que especifica o endereço para operações de entrada ou os dados a serem usados para operações de saída. Um exemplo do use dos comandos DEFIO a SENSIO seria: DEFIO (21,0,1,0,1); 1016 SENSIO (1016,INT) - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 45 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs O 21 no comando DEFIO refere-se ao canal 21; o primeiro 0 indica que o tipo é entrada; o primeiro 1 indica o formato; o segundo 0 indica o primeiro bit do campo, e o segundo 1 indica que o campo tem um comprimento de 1 bit. O comando DEFIO retorna o ionum a ser fornecido pelo comando SENSIO (1016). O INT é usado para referenciar os valores sob o controle do programa AML.. O comando MONITOR permite o uso de um ou mais dos canais de entrada/saída para a leitura dos sensores a intervalos regulares de tempo. Isto pode ser usado para projectar um sistema de interrupção para monitorização de segurança, por exemplo. O comando MONITOR difere do comando SENSIO, já que permite uma monitorização quase que contínua de sinais emitidos por sensores em vez de pontos específicos no programa AML. Capacidades sensoras da garra Existe uma garra com capacidades sensoras para o robô IBM 7565. Essas capacidades incluem avaliação da força com medidores de deformação (strain gauges) e avaliação óptica com um díodo emissor de luz. Os sensores podem ser usados com comandos SENSIO a MONITOR. Os monitores de deformação são usados para detectar forças positivas e negativas em três direcções. Os medidores de deformação que correspondem às três direcções são: - Sensores de ponta: Esses sensores indicam se existe uma força que pressiona de baixo para cima na garra. Isto poderia ocorrer, por exemplo, se a garra fosse pressionada contra a mesa de trabalho. Teria também um valor se um objecto estivesse agarrado pela garra com esta orientação vertical, o peso do objecto iria fazer com que a força fosse registada nestes sensores. Os comandos SET a SRT em linguagem AML são usados como identificadores lógicos de entrada/saída para os sensores da direita nos comandos SENSIO a MONITOR. - Sensores de pressão: Se a garra for fechada sobre um objecto, esses sensores de pressão indicarão a pressão com valores positivos de medição. Se a garra for introduzida fechada dentro de um copo e depois for aberta contra os lados do mesmo, - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 46 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs serão indicados valores negativo. Os comandos SLP a SRP, em linguagem AML, são usados como identificadores de entrada/saída lógica para os comandos SENSOR e MONITOR. - Sensores laterais: Se a garra for movimentada contra um obstáculo lateral, esses sensores irão indicar a presença do obstáculo. Os comandos SLS a SRS, em linguagem AML, são usados como identificadores de entrada/saída lógica para os comandos SENSOR e MONITOR. O comando LED, em linguagem AML, pode ser usado com os comandos SENSIO a MONITOR para determinar se um objecto está bloqueando o díodo emissor de luz. Por exemplo, o comando SENSOR(LED,INT) -1 retorna zero para indicar que nenhum objecto está a bloquear o LED, enquanto um valor de -1 indica que nenhum objecto está a bloquear o caminho da luz. O comando LED identifica o número de entrada/saída lógica do circuito detector de luz da garra. § PROCESSAMENTO DE DADOS A linguagem AML contém algumas capacidades de processamento de dados para interligação com periféricos. O robô IBM 7565 inclui os seguintes dispositivos de processamento de dados: teclado e monitor, impressora (opcional), disco (opcional), disquete, consola de programação (que inclui um visor de 10 caracteres) e uma linha de comunicações, que permite a comunicação entre sistemas e estações de trabalho diferentes, incluindo a transferência de arquivos entre sistemas. Existem 14 canais disponíveis para transferir dados entre o sistema e os dispositivos periféricos. Alguns canais são reservados: o canal 0 é para o terminal de teclado e monitor, o canal 1 é para a impressora,, o canal 2 é para o consola de programação e o canal 3 é o arquivo de mensagens do sistema. Os canais remanescentes podem ser usados para ter acesso a arquivos armazenados em discos do utilizador. Vários comandos podem ser usados pelo programador para definir a comunicação do sistema para os periféricos. Estes incluem os comandos WRITE, PRINT e DISPLAY. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 47 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs O comando WRITE é usado para escrever um registo lógico dentro do arquivo através de um canal definido. WRITE(0, `Good Morning'); O comando escreveria as palavras "Good Morning" no terminal de exibição através do canal 0. O comprimento máximo do registo que é transmitido depende do canal de saída. Se um comando WRITE é emitido para o canal 0 (terminal de exibição), o comprimento máximo é de 79 caracteres. Se um comando WRITE é emitido para o canal 1 (impressora), o comprimento máximo é de 132 caracteres. Se o comprimento dos dados for maior que o comprimento máximo de registo, aparecerá uma mensagem de erro. O comando PRINT escreve os valores de uma lista de expressões num canal de dados correntemente aberto. PRINT é diferente de WRITE porque os dados na expressão são convertidos em formato de caracteres antes de ser exibidos e porque mais de um registo pode ser transmitido para o dispositivo. Com o comando WRITE, apenas um registo está escrito para o dispositivo. Uma outra diferença entre PRINT a WRITE é que os dados de saída são guardados até um caractere EOL ou EOP (fim de linha ou de impressão) ser detectado ou a capacidade do buffer ser excedida. Mais uma vez o número do canal deve ser fornecido como um dos argumentos no comando. O comando DISPLAY é o mesmo que o comando PRINT dirigido para o canal 0. Não requer nenhuma identificação do canal. O comando seguinte serve como ilustração: DISPLAY(`Good Morning', EOL); O comando READ é usado para receber dados de um dispositivo periférico. Ele lê um registo lógico do canal especificado. O comando seguinte ilustra o formato do comando READ: READ(0, DATA1); (Isto iria ler um arquivo chamado DATA1) Outros comandos do sistema incluem ERASE (para apagar um arquivo de um disco a libertar o espaço ocupado por ele, COPYFILE (para copiar um arquivo de um disco para o outro ou para o mesmo disco. - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 48 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs Índice 1 - Introdução ................................................................................................................................ 1 2 - Tipos de programação de robôs ................................................................................................. 4 3 - Métodos de programação de robôs............................................................................................. 6 3.1 - Métodos de programação on-line......................................................................................... 6 3.1.1 - Programação por amostragem ou programação por ensino............................................. 6 3.1.2 - Programação pela consola........................................................................................... 8 3.2 - Métodos de programação off-line ......................................................................................... 9 4 - Processos de desenvolvimento de um programa de robô........................................................... 12 Passo 1: Analisar e decompor a tarefa numa [...]. ................................................................... 12 Passo 2: Identificar e especificar todas [...]............................................................................. 14 Passo 3: Identificar quaisquer tipos [...].................................................................................. 16 Passo 4: Desenhar e desenvolver o programa completo e toda a sua documentação................ 17 Passo 5: Testar e depurar o programa [...]. ............................................................................ 17 Passo 6: Testar o programa no robô real. .............................................................................. 17 5 - Programando com sensores externos....................................................................................... 19 6 - Linguagens de programação de robôs ..................................................................................... 21 6.1 - Linguagens textuais de programação de robôs ................................................................... 21 6.2 - Gerações de linguagens de programação de robôs............................................................. 22 6.2.1 - Linguagens de primeira geração ................................................................................. 22 6.2.2- Linguagens de segunda geração ................................................................................. 23 6.2.3 - Linguagem de futura geração ..................................................................................... 25 Anexos Linguagem VAL II .................................................................................................................... 27 § DESCRIÇÃO GERAL ........................................................................................................ 27 § COMANDOS MONITOR ...................................................................................................... 27 - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 49 Automação e Robótica I – Técnicas e Linguagens de Programação de Robôs § COMANDOS DE MOVIMENTO.............................................................................................. 28 § CONTROLE DO GRIPPER.................................................................................................. 28 § CONTROLE DE CONFIGURAÇÃO ......................................................................................... 29 § CONTROLE DE INTERTRAVAMENTO..................................................................................... 29 § CONTROLE DO PROGRAMA .............................................................................................. 29 Linguagem RAIL...................................................................................................................... 31 § DESCRIÇÃO GERAL ........................................................................................................ 31 § CARACTERÍSTICAS ......................................................................................................... 31 § POSIÇÕES .................................................................................................................... 32 § COMANDOS DO MOVIMENTO DO ROBÔ ................................................................................ 32 § COMANDOS LEARN ......................................................................................................... 34 § SOLDA ......................................................................................................................... 34 § ENTRADA /SAÍDA ............................................................................................................ 34 § ENTRADA /SAÍDA PARA OPERADOR E SISTEMA DE ARQUIVOS.................................................... 35 § CONTROLE DO PROGRAMA .............................................................................................. 35 Linguagem AML ...................................................................................................................... 37 § DESCRIÇÃO GERAL ........................................................................................................ 37 § COMANDOS AML........................................................................................................... 37 § CONSTANTES E VARIÁVEIS............................................................................................... 40 § COMANDOS DO CONTROLO DO PROGRAMA .......................................................................... 41 § COMANDOS DO MOVIMENTO............................................................................................. 42 § COMANDOS PARA SENSORES............................................................................................ 44 § PROCESSAMENTO DE DADOS............................................................................................ 47 - 2000/2001 - Ricardo Silva, Rui Cabral, Henrique Carvalho 50