Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Técnicas e Linguagens de Programação de Robôs, Notas de estudo de Engenharia Elétrica

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.

Tipologia: Notas de estudo

2011

Compartilhado em 04/01/2011

ricardo-silva-tj5
ricardo-silva-tj5 🇧🇷

5

(2)

7 documentos

1 / 50

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Automação e Robótica I Técnicas e Linguagens de Programação de Robôs
- 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
Ricardo Silva nº 1841
Rui Cabral nº 1547
Henrique Carvalho nº 1331
- Viseu, 2001 -
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32

Pré-visualização parcial do texto

Baixe Técnicas e Linguagens de Programação de Robôs e outras Notas de estudo em PDF para Engenharia Elétrica, somente na Docsity!

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 -

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 Figura 4

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 LadoA Mover Bloco A. para Posição Pegar Bloco B pelo LadoB1 e LadoB Colocar Bloco B no topo de Bloco A Com LadoA5 alinhado com LadoB6 e Com LadoA1 alinhado com LadoB1 e Com LadoA2 alinhado com LadoB

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.

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.

  • 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.

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. 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:

Figura 5 – Uma consola

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:

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).

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.

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:

  1. A situação em que a tarefa começa – dá-nos a configuração inicial do robô e a localização das partes;
  2. 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;
  3. 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;
  4. 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;
  5. 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.

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;

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ô.

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.

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.