ROBTICA
TEORIA &
PRTICA
ROGRIO DUMB
INTRODUO A ROBTICA
Historia da robtica
rob tica
O precursor do termo rob (Groover, 1988) foi Karel Capek, novelista e escritor
de uma peca teatral da Tchecoslovaquia, que usou pela primeira vez, em 1920,
industriais. Estes, por sua vez, caracterizam se por serem capazes de realizar
tarefas, podem ser programados, e possuem forca elevada.
automao flexvel
automao programvel
a) Automao
Automa o fixa
Na automao fixa as maquinas so especificas para o produto a ser reduzido.
investimento.
b) Automao
Automa o flexvel
flex vel
Na automao flexvel o volume de produo e mdio e geralmente a maquina
pode ser programada para produzir um outro produto, ainda que semelhante.
Esta automao possui caractersticas da automao fixa e da programvel. A
diferentes.
Embora
robs
industriais
sejam
produzidos
em
diversas
Distribuio
Distribui o dos processos de automao
automa o quanto diversidade de produtos e
Volume de produo
produ o.
de controle.
Nomenclatura
As maquinas robticas podem ser classificadas segundo critrios distintos. Por
brao mecnico
mecanismo robtico
manipulador
manipulador mecnico
manipulador robtico
Volume de trabalho
Sistemas de acionamentos
Sistema de controle
Desempenho e preciso
rgos terminais
Programao
punho consiste de varias juntas prximas entre si, que permitem a orientao
do rgo terminal nas posies que correspondem tarefa a ser realizada. Na
a realizar a tarefa exigida pela aplicao. Nos braos reais, a identificao dos
junta qualquer, o elo que estiver mais prximo da base e denominado ela de
Juntas
parafuso e planar.
A junta prismtica
prism tica ou linear: Move em linha reta. So compostas de duas
chamada de eixo de rotao. Ela gira como uma cadeira giratria e abrem e
fecham como uma dobradia;
A junta esfrica:
esf rica: Funciona com a combinao de trs juntas de rotao,
A junta
junta cilndrica:
cil ndrica: E composta por duas juntas, uma rotacional e uma
prismtica;
em duas direes;
junta planar pode ser considerada como uma juno de duas juntas
Rotativa de toro
tor o ou torcional T: O elo de entrada e de sada tem a mesma
Representao
Representa o esquemtica
esquem tica de juntas
Robs
industriais
adotam
com
freqncia
solues
que
tornam
buscar uma geometria onde os elos sejam formados por, no Maximo, dois
segmentos lineares. Neste caso, a configurao VRR seria a correta.
Roll ou rolamento
rolamento - rotao do punho em torno do brao
rolamento.
Cadeias cinemticas
cinem ticas:
ticas:
Uma das principais caractersticas de um brao industrial e sua capacidade de
carga, isto e, qual e o peso Maximo que ele consegue manipular (erguer) sem
que sua preciso seja afetada. Esta capacidade e sempre medida na posio
para se chegar ao punho. Vrios elos podem estar conectados entre si, de tal
forma que e possvel percorrer, por exemplo, um caminho que parta da base e
retorne a ela por outro caminho apos atingir o punho. Exemplos deste tipo de
manipuladores so os robs prticos (gantry), utilizados em operaes de
acionamento deste brao deve ser feito com um nico motor, conectado a uma
acionamento de uma dada junta possa ser fixado mais prximo da base, o que
permite reduzir a inrcia do conjunto e aumentar a velocidade e preciso do
manipulador.
Representao
Representa o esquemtica
esquem tica de brao
bra o robtico
rob tico com cadeia cinemtica
cinem tica
Parcialmente fechada.
braos com cadeia fechada e diferente daquela utilizada nas juntas motoras.
Configurao
Configura o dos robs
rob s
A configurao fsica dos robs (Groover, 1988) esta relacionada com os tipos
de juntas que ele possui. Cada configurao pode ser representada por um
esquema de notao de letras, como visto anteriormente. Considera-se
brao mecnico e formado pela base, brao e punho. O brao e ligado a base e
TRR teria a primeira junta (da base) torcional, e as duas seguintes seriam
Smbolo
mbolo
Configurao cartesiana
LLL
Configurao cilndrica
LVL
TRR
Configurao esfrica
TRL
VRL
Esquema de notao
nota o para designar configuraes
configura es do pulso
Configurao
Configura o do rob
rob (pulso)
Smbolo
mbolo
RT
TRT
Configurao
Configura o de um punho TRT na forma compacta. Embora todas as
juntas sejam resolventes, este punho tem denominao
denomina o TRT.
Rob
Rob cartesiano
cartesiano
O rob de coordenadas cartesianas usa trs juntas lineares. E o rob de
configurao mais simples, desloca as trs juntas uma em relao a outra. Este
rob opera dentro de um envoltrio de trabalho cbico.
Rob
Rob cartesiano (LLL)
Rob
Rob cilndrico
cil ndrico
Este brao possui na base uma junta prismtica, sobre a qual apia uma junta
rotativa (resolvente ou torcional). Uma terceira junta do tipo prismtica e
configurao TLL.
Brao
Bra o robtico
rob tico cilndrico
cil ndrico
Rob
Rob esfrico
esf rico ou polar
Este tipo de brao robtico foi projetado para suportar grandes cargas e ter
duas juntas rotativas seguidas de uma junta prismtica. A primeira junta move o
coordenada radial (junta prismtica). Este tipo de brao esta em desuso, sendo
Rob
Rob polar em configurao
configura o VVL.
Rob
Rob SCARA
preciso
repetibilidade,
embora
com
um
alcance
limitado.
Estas
eletrnica que exigem alta preciso. Possui duas juntas rotativas e uma junta
linear, que atua sempre na vertical, como visto na Figura 3.16. O volume de
trabalho deste brao e cilndrico, porem, como utiliza juntas rotativas, e tambm
Seletiva.
Rob
Rob com articula
articulao
icula o horizontal SCARA.
Rob
Rob articulado ou revoluto
Estes tipos de robs (Groover, 1988, Adade Filho, 1992), possuem 3 juntas
Os braos
bra os revolutos podem ser de dois tipos:
Cadeia aberta ou cadeia parcialmente fechada. Nos primeiros pode-se
punho.
Rob
Rob articulado ou revoluto
Rob
Rob paralelo
destes braos e que eles no possuem cinemtica com cadeia aberta, como a
maioria dos robs industriais. Os quatro ou seis atuadores destes braos unem
Brao
rob SCARA, produzido
Bra o do tipo polar, feito pela Fanuc, a esquerda e um rob
Pela Staubli, a direita.
Ferramenta que esta conectada ao pulso, como por exemplo, uma pistola de
solda, garras, pulverizadores de tintas, entre outros. O rgo terminal e o
num objeto. Para isso, alguns rgos terminais so dotados de sensores que
exemplos:
manipulao dos objetos, pois existe limitao na abertura dos dedos. Desta
Sensores
baseados.
Sensor de posio
posi o
O sensor de posio determina as posies dos elos ou de elementos externos,
encoder que tem como propriedade informar a posio por meio de contagem
no contato com o objeto. Um dos modelos mais simples e feito com duas
chapas de metal que devem ser tocadas ao mesmo tempo pelos dedos de uma
pessoa. A resistncia dos dedos e suficiente para acionar um circuito sensvel.
Sensor de presso
press o
O sensor de presso e uma estrutura mecnica planejada a deformar-se dentro
de certos limites. Um modelo simples deste tipo de sensor pode ser feito com
material de esponja condutora, pois ela tem uma resistividade elevada que se
altera quando deformada. Outro modelo mais sofisticado e verstil e o straingage, que e, na sua forma mais completa, um resistor eltrico composto de
Sistemas de acionamento
Os acionadores (Groover, 1988) so dispositivos responsveis pelo movimento
Acionadores eltricos
el tricos
forma mais lenta, j que tais motores tendem a ser mais compactos.
Custo de braos
bra os robticos
rob ticos em funo
fun o da capacidade de carga, para
ServoServo-motor
acionamento hidrulico
hidr ulico e eltrico.
el trico.
enviado.
forma com que o motor ira operar dependera bastante do que se deseja
controlar. Existem casos em que o torque e mais importante, em outras a
ser maior do que nas demais formas, mas a velocidade mxima de um motor
mudana no acionamento das bobinas. Este modo consome mais energia que
Acionadores pneumticos
pneum ticos
Mtodos
todos de acionamento
Os acionadores eltricos (Groover, 1988) tendem a ser maiores e mais
pesados que acionadores hidrulicos e pneumticos. Por este motivo, nem
sempre e possvel posicionar tais atuadores prximos as respectivas juntas, em
Acionamento indireto
Uma vez que os atuadores das juntas so pesados, os fabricantes tentam
introduzir alteraes no projeto que permitam reduo do peso nas juntas
prximas ao pulso e transferir este peso, quando possvel, para a base. Desta
forma consegue-se uma capacidade de carga maior para o brao. Este tipo de
movida por ele. Neste tipo de acionamento, e necessrio usar algum tipo de
transmisso
de
potencia,
como
polias,
correntes,
rodas
dentadas,
Acionamento direto
elo motor e o elo movido. No acionamento indireto esta leitura fornece o angulo
do elo movido em relao a um outro elo, anterior ao elo motor.
Volume de trabalho
Volume (rea)
til do manipulador RS40B. (Fonte: Staubli Robotics)
( rea) til
Programao
Programa o de robs
rob s
Braos
Bra os mecnicos
mec nicos so
s o programados de diversas formas:
Manipulador manual: E todo engenho mecnico de manejo de pecas ou
Rob
Rob seqencial:
seq encial: E aquele que realiza um trajeto seqencial, podendo ser
Rob
Rob de aprendizagem: Neste tipo de rob, o trajeto ou seqncia e
ser estimada com base no tempo necessrio para amortecer as oscilaes que
Preciso
Precis o dos movimentos
A preciso de movimento esta intrinsecamente correlacionada com trs
Repetibilidade.
A resoluo espacial depende diretamente do controle de sistema e das
tiver um quarto do tamanho da coroa, para cada revoluo feita pelo pinho a
in
vale:
Preciso
Precis o cartesiana em juntas robticas
rob ticas
cada uma das juntas de um brao mecnico, deseja-se saber qual ser a
junta), as novas coordenadas cartesianas do ponto passam a ser x' e y'. Como
o vetor de deslocamento v possui modulo a
, tem-se que:
negativo. Contudo, uma vez que deseja-se em geral o erro Maximo que um
dado brao possa apresentar, ento deve-se obter o modulo do erro ou seja:
portanto composto pela soma dos erros causados por cada uma das juntas. A
junta J2 provoca um erro semelhante ao causado por um brao de uma nica
Se o brao possuir uma junta prismtica, como visto abaixo, ento segue
Deslocamento de um brao
bra o com 2GL e juntas
juntas RL.
onde
a variao do angulo
vale igualmente para braos que se movem no espao. Isto permite generalizar
(i = 1, 2, ..., n) so as
variveis das n juntas deste brao. Esta mesma expresso pode ser utilizada
causas que lhes do origem (Groover, 1988). Por sua vez, a dinmica e o
Esta representao depende da posio das juntas e dos elos, sendo que e
Uma vez que no ha uma regra geral para equacionar a cinemtica em braos
pode-se calcular qual deve ser a configurao das juntas para atingir tal
posio. Para o sistema de controle dos braos mecnicos somente as posies
nas quais se deseja que brao posicione o rgo terminal numa dada posio,
com uma dada orientao do punho. Um caso tpico e uma aplicao na qual se
com
base
no
conhecimento
dos
ngulos
das
juntas.
Este
inversa. Uma vez que a determinao das posies das juntas pode tanto ser
feita em ngulos, nas juntas rotativas, quanto em deslocamentos, nas juntas
Transformaes
Transforma es entre variveis
vari veis de junta e variveis
vari veis cartesianas
O calculo da cinemtica, tanto direta quanto inversa, requer o conhecimento do
estes
comprimentos,
como
tambm quaisquer
juntas devem ser rotuladas como J , com n iniciando com 1 na base do brao
n
Nos
com
movimento
num
plano.
Nos
demais
exemplos
adicionam-se
Geometria do manipulador RR
As equaes da cinemtica inversa podem ser obtidas de:
> 0, tem-
que o valor de
As duas solues
solu es possveis
poss veis para a cinemtica
cinem tica inversa do
do manipulador RR
O angulo
depende de
E mais pratico deixar nesta forma, desde que todas as variveis que apaream
para baixo. As equaes da cinemtica inversa podem ser tambm obtidas por
manipulao algbrica da cinemtica direta. Partindo-se das equaes que
seja
A tangente de
movendo-se num plano vertical, dado que a orientao do ultimo elo com
Nota-se que a cinemtica inversa no pode ser resolvida, pois ha apenas duas
equaes com 3 incgnitas (os trs ngulos das juntas). De fato, pode-se
mostrar facilmente que existem infinitas solues de ngulos que satisfazem a
mas somente aquela (ou aquelas) nas quais o angulo do elo a3 com relao a
junta J3 pode ser determinada, uma vez que se conhea a posio do rgo
terminal x e y e este angulo. De fato, por geometria tira-se que a posio de J3,
conhecido e
. Logo, como
Derivando as equaes
equa es da cinemtica
cinem tica direta e substituindo na expresso
express o acima
temtem-se
movendo-se num plano vertical, dado que a orientao do ultimo elo com
conhecido.
Geometria do manipulador
manipulador RLR em movimento plano vertical
,a e
2
), ento se
fornece apenas duas equaes, ento existem infinitas solues possveis para
a cinemtica inversa, como pode ser visto na figura 4.9. Destas solues, s
existe uma que satisfaz a condio
Isto permite escrever a cinemtica direta para a posio desta junta, ou seja:
Algumas
Algumas solues
solu es possveis
poss veis para a cinemtica
cinem tica inversa
de junta
E finalmente
Que resulta:
num movimento rotativo ao redor de um eixo contido no plano, o que faz com
que este plano gire no espao. Sero obtidas neste exemplo as equaes da
plano xy.
Brao
Bra o revoluto TRR em movimento no espao
espa o
A projeo do ponto P no rgo terminal sobre o plano xy fornece a distancia
distancia pode ser obtida pelas projees dos elos a e a no plano, o que
2
resulta
direta fica.
a vista lateral pode tambm ser calculada por meio da hipotenusa do triangulo
retngulo PQR:
o valor complementar de
, o que
real do angulo. Para isso nota-se que o arco tangente e sempre calculado
como o produto de uma diviso entre dois fatores, associados ao seno e ao coseno deste angulo, ou seja:
entre
acrescentar
180 caso esteja em graus, para coloc-lo no quadrante correto. Para o calculo
o
para a preciso cartesiana e cada uma delas depende dos 3 ngulos das
juntas, ou seja
Manipulador esfrico
esf rico TRL:R
De forma semelhante ao problema anterior, deve-se inicialmente desenhar um
ter uma soluo. Uma vez que a cinemtica direta fornece 3 equaes, ser
utilizada a condio fornecida do angulo do punho
. Com isso
junta, que passa a ser revoluta neste exemplo. O brao possui 4 graus de
uma das solues. Este brao tem tambm um elo (a2) que se desloca
conseguem, com esta tcnica, reduzir o espao ocupado pelo brao alem de
pela junta J1, e o segundo e um movimento num plano vertical, realizado pelas
alem do angulo
lateral, que:
Nota-se que tanto d quanto z podem ser calculados, uma vez que se
4
. Tem-se ento
que descreve a cinemtica de uma junta com relao a junta seguinte e viceversa. So 4 os parmetros: o angulo de rotao da junta , o angulo de toro
se os seguintes procedimentos:
partindo do elo 0. Tem-se com isso a configurao: elo 0, junta 1, elo 1, junta 2,
elo 2, ...
4) Obter a normal comum: Hn-On, para todos os elos. A normal comum Hn-On e
definida como sendo a reta perpendicular aos eixos das juntas Jn a J
n+1.
On degenera-se neste ponto comum, e o comprimento do elo ser nulo (an = 0).
direcao de xn sera dada pela reta perpendicular ao plano formado por zn 1 e zn.
que vai de On11 a Hn tiver a mesma direo do eixo zn11. Se a junta Jn for
paralelos, ento o deslocamento da junta dn sera nulo, uma vez que os eixos
angulo de rotao da junta. Troca uma reta paralela a xn passando pelo ponto
On1. Por definio tanto esta reta quanto o eixo xn1 so perpendiculares a zn1.
n,
8) Obter o angulo de toro da junta. Troca uma reta paralela ao eixo da junta
Jn, isto e, zn1, passando por On, origem do sistema n. Por construo, esta reta
estar contida no plano formado por xn e yn. O angulo de toro, tn, e medido a
partir da reta paralela a zn 1 ate o eixo zn. Se os eixos forem paralelos, o angulo
8) Obter o angulo de toro da junta. Troca uma reta paralela ao eixo da junta
Jn, isto e, zn 1, passando por On, origem do sistema n. Por construo, esta reta
estar contida no plano formado por xn e yn. O angulo de toro, tn, e medido a
partir da reta paralela a zn 1 ate o eixo zn. Se os eixos forem paralelos, o angulo
pode ser melhor visualizado supondo-se que a junta prismtica seja formada
no por um mancal de deslizamento linear, mas sim por dois, ainda que
origem do sistema que ser fixado numa junta prismtica e arbitrrio (sistema
do eixo da junta foi transferida para o ponto On, onde ocorre a interseo desta
direo com o eixo da junta n+1. Nesta situao o comprimento do elo an torna-
obtida
como
sendo
perpendicular
simultaneamente
direo
de
Parmetros
Par metros de DenavitDenavit-Hartenberg em juntas prismticas.
prism ticas.
A matriz de rotacao entre os sistemas n 1 e n+1 sera dada entao por uma
eixo da junta. Se a junta for prismatica, contudo, basta entao que z0 possua a
e orientado de tal forma que intercepta o eixo zn1 da ultima junta em angulo
reto. A direo de zn pode ser qualquer, mas em geral escolhe-se zn tal que o
Matriz de transformao
transforma o entre os sistemas n
n1 e n.
Dado um vetor no sistema n, ele pode ser expresso no sistema n1 por meio
da matriz que relaciona ambos os sistemas.
Exemplo
Exemplo de aplicao
aplica o num manipulador VVR:VR.
manipulador. Admite-se conhecidos os comprimentos de todos os elos.. Devese relacionar os sistemas de coordenadas de cada junta e preencher a tabela
de parmetros.
Manipulador robtico
rob tico esquemtico
esquem tico para obteno
obten o dos parmetros
par metros de DenavitDenavit-
Hartenberg.
do manipulador VVR:VR.
Tabela de parmetros
par metros de DenavitDenavit-Hartemberg
Trigonometria
Semelhana
Semelhan a de tringulos
tri ngulos
Teorema de Pitgoras
Pit goras
Num triangulo retngulo OPQ, no qual o angulo do vrtice Q e reto (igual a 90
ou
definido pelo ponto P. A projeo deste ponto nos eixos das abscissas e
secante.
, cujo comprimento e
e o comprimento medido ao
longo da reta paralela ao eixo das abscissas que passa pelo ponto S, encontro
da circunferncia com o eixo das ordenadas, ate o ponto V em que esta reta
Complementos de ngulos
ngulos
. Conforme
ngulos
ngulos complementares.
Angulos reciprocos.
Embora seja tambm possvel obter uma soluo geomtrica para a tangente
da soma, e mais fcil neste ponto calcular pela relao entre o seno e o co-
seno, ou seja:
Num triangulo qualquer ABC, traca-se uma a reta que, a partir do vrtice A,
Transformaes
Transforma es de Coordenadas
Coordenadas
Em diversos problemas fsicos e mecnicos existe a necessidade de se
ilustra a figura B-1. Supomos que haja um corpo que se gira com relao a este
entre os eixos c e i.
escalar entre duas de suas linhas ou coluna e sempre nulo. Alem disso, nas
facilmente a
Conclui-se, tambm, que as direes dos eixos (x, y, z), quando representadas
eixo x, y ou z, como mostra a figura A-2. Neste caso, como ambos os sistemas
compartilham a origem num mesmo ponto, pode-se calcular os co-senos
- Rotao
Rota o no sistema de coordenadas Q de um angulo
Uma rotao
rota o de um angulo
matriz de rotao:
rota o:
ao redor do eixo x.
utiliza-se a regra da Mao direita. Neste caso, com o polegar direito apontando
na direo positiva do eixo de rotao, os demais dedos devem indicar o
sentido de rotao.
conclui-se que
Translaes
Transla es de coordenadas
casos, para obter a posio de um dado vetor ou objeto num dos sistemas ser
Translao
Transla o entre sistemas de eixos coordenados.
ento a posio deste ponto P no sistema Q ser dada pela soma vetorial:
Transformaes
Transforma es compostas
suas origens so coincidentes. Para analisar este caso, pode-se supor que
Transformao
Transforma o composta de rotao
rota o e translao
transla o
onde A
O-Q
sistemas I e O leva a:
Transformaes
Transforma es homogneas
homog neas
Vimos que as transformaes podem ser entendidas como sendo compostas
possa ser posta na forma matricial. Uma matriz homognea e, portanto, uma
dadas por:
Relaes
Rela es inversas
Anexo 1
INTRODUO A LINGUAGEM C
ESTRUTURA BSICA DE UM PROGRAMA C
Os programas em C sempre iniciam pelo main() . De forma geral os programas
em C consistem de funes (o termo funo ser explicado depois), e o main()
Observe que aps todo comando dentro de uma funo segue um ponto e
vrgula ( ; ). Os caracteres em branco so invisveis para o compilador.
Exemplo:
#include <stdio.h>
Variveis
Uma varivel um espao reservado na memria do computador para armazenar certos
tipos de dados.
#include <stdio.h>
main ()
{
int num;
num = 2;
printf("Numero = %d",num);
}
A primeira linha do main() declara a varivel e o tipo:
Int
Tipo da varivel
num;
Nome da varivel
Ainda no ltimo exemplo, observe que o ultimo caracter do printf era \n. Este caracter
de controle indica que queremos inserir uma nova linha. Existem outros caracteres de
controle, e todos iniciam com um \
Operadores
Os operadores aritmticos sobre as variveis so os seguintes:
+ --------- Soma
- --------- Subtrao
* -------- Multiplicao
/ --------- Diviso
% ------- Resto da diviso
A operao de incremento de uma unidade tem tambm um formato reduzido, ou seja, o
comando:
i = i + 1;
freqentemente representado por:
i++;
Da mesma forma i = i-1; pode ser escrito como i--;
Como exemplo dos operadores, o programa abaixo calcula as razes reais de um
polinmio de segundo grau:
#include <stdio.h>
#include <math.h>
main()
{
float a,b,c;
float x1,x2;
printf("Entre a,b,c:");
scanf("%f %f %f",&a,&b,&c);
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
printf("\n x1 = %f x2 = %f\n",x1,x2);
}
Comentrios
possvel introduzir comentrios dentro de um programa C, bastando para isso coloclos no seguinte formato:
/* Comentario
*/
/* * * * * * * * * * * * * * * * * * * * * * * * */
n++ )
Expresso de teste
Incremento
Expresso de inicializao
Inicializa a varivel do lao. A inicializao feita uma nica vez quando o lao inicia.
Expresso de teste
Esta expresso testa (a cada vez que o conjunto de comandos no interior do for finaliza),
se o lao deve ser encerrado. Enquanto a expresso for verdadeira o lao repetido.
Para realizar teste utilizamos os operadores relacionais. Os principais operadores so:
< Menor
> Maior
<= Menor ou igual
>= Maior ou igual
== Igual
!= Diferente
&& e
! negao
|| ou
Expresso de incremento
A cada repetio do lao, o terceiro argumento (n++) incrementa a varivel n.
Exemplo: Mtodos numricos de integrao (ponto a esquerda)
Como aplicao do comando for o exemplo abaixo ilustra a implementao do mtodo
do ponto a esquerda para avaliar numericamente:
/* * * * * * * * * * * * * * * * * * * * */
/* Integracao Numerica: Ponto a Esquerda */
/* * * * * * * * * * * * * * * * * * * * */
#include <stdio.h>
main()
{
int i;
int n;
float w;
float dx ;
float a,b ;
float soma;
printf("\nEntre o extremo inferior do intervalo: ");
scanf("%f",&a);
printf("\nEntre o extremo superior do intervalo: ");
scanf("%f",&b);
/* Metodo de Newton */
#include <stdio.h>
#include <stdio.h>
main()
{
int n;
n = 0;
while (n < 10){
printf("n = %d\n",n);
n++;
}
}
Neste exemplo, primeiro feito o teste (while (n < 10)) e somente em caso verdadeiro
os comandos dentro do while so executados. Assim se a condio for falsa a primeira
vez, em nenhum momento os comandos dentro do lao sero executados. J no do{}
while(); pelo menos a primeira vez os comandos dentro do lao sero executados.
Comando break e continue
Para auxiliar nos laos contamos com dois comandos de interrupo do lao, cada um
com objetivos diferentes. O comando break; interrompe o lao (Qualquer dos trs
formatos apresentados) e o programa continua no primeiro comando aps o lao.
Exemplo:
#include <stdio.h>
main()
FUNES
Introduo
As funes cumprem como primeiro papel, evitar repeties desnecessrias de cdigo.
No exemplo anterior precisamos calcular o valor y=x*x-2 em diversas partes do
programa. Se desejssemos trocar a funo, seria necessrio alterar vrias partes do
cdigo. Para evitar isso, utilizaremos uma funo como no exemplo abaixo:
/* * * * * * * * * * * * * * * * * * * */
/* Metodo da Bisssecao */
/* * * * * * * * * * * * * * * * * * * */
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
float f(float x)
{
return(x*x-2);
}
void main()
{
int i = 0;
float a,b,c;
float erro;
float fa,fb,fc;
printf("Entre com os extremos do intervalo [a, b]: ");
scanf("%f,%f",&a,&b);
printf("\nErro: ");
scanf("%f",&erro);
fa = f(a);
fb = f(b);
if ((fa * fb) > 0) {
printf("Condicao inicial nao contem raiz !\n");
exit(0);
}
while(fabs(a-b) > erro) {
i++;
c = (a+b)/2.0;
fc = f(c) ;
if (fa * fc < 0)
b = c;
else
if (fb * fc < 0)
a = c;
else
break;
printf("Raiz parcial no passo %d = %f \n",i,c);
}
printf("\n Raiz obtida = %f \n",c);
f
Nome da Funo
(float x)
Argumentos retornado pela funo de entrada
{
float y;
y = x * x - 2;
return(y); /*Valor a ser retornado*/
}
Uma observao importante que as variveis dentro da funo no so conhecidas fora
da funo e vice versa.
Exemplo: Mtodos de Integrao Numrica (Ponto a esquerda, Trapzio e
Simpson)
Para ilustrar o conceito de funes, o exemplo seguinte calcula a integral numrica de
uma funo definida na funo float f(float x) .
/* * * * * * * * * * * * * * * * * * */
/* Metodos de Integracao Numerica */
/* * * * * * * * * * * * * * * * * * */
#include <stdio.h>
#include <math.h>
#include <conio.h>
float f(float x)
{
float y;
y = 1/(1+x*x);
return(y);
}
float Integra_Ponto_a_esquerda(float a,float b,int n)
{
int i ;
float soma ;
float dx ;
soma = 0.0;
dx = (b-a)/n;
for(i=1; i<= n; i++) {
soma = soma + f(a + (i-1)*dx) * dx;
printf("\nSoma parcial = %f ",soma);
}
return(soma);
}
float Integral_Trapezio(float a,float b,int n)
{
int i ;
n[1]
n[2]
n[3]
n[4]
n[1]
n[2]
29
n[3]
n[4]
Inicializando vetores
Assim como possvel inicializar uma varivel simples na mesma linha da declarao,
o mesmo pode ser feito para vetores. Observe o exemplo abaixo:
int n[5] = {23, 3, -7, 288, 14};
Exemplo: Mtodo de Ordenao
Como exemplo vamos apresentar um programa que ordena um seqncia de 10
nmeros reais.
/* * * * * * * * * * * * * * * * * * * * * */
/* Metodo da Bolha (ordenacao de um vetor) */
/* * * * * * * * * * * * * * * * * * * * * */
#define MAX 10
#include <stdio.h>
main()
{
int i ;
int flag;
float swap;
float n[MAX];
/* Entrada de Dados */
printf("Entre com os numeros para ordenacao \n");
for(i=0;i<MAX;i++)
{
printf("\n numero %2d: ",i);
scanf("%f",&(n[i]));
}
/* Ordena a sequencia de numeros */
flag = 1;
while(flag == 1) {
A[0][1]
A[1][1]
A[2][1]
A[0][2]
A[1][2]
A[2][2]
A[0][3]
A[1][3]
A[2][3]
Observe que o valor da varivel i no tem seu contedo alterado pela funo. Isto ocorre
porque quando uma funo chamada durante o programa, todas as variveis presentes
*
Indica ponteiro
pi
Nome da varivel
Como sabemos, uma funo no consegue alterar diretamente uma varivel utilizada
como argumento. Com o auxlio dos ponteiros podemos encontrar uma alternativa para
esta situao. No exemplo do programa de ordenao, foi preciso permutar dois
elementos do vetor que estavam fora de ordem. No seria possvel permutar dois valores
atravs de uma funo como abaixo:
/* * * * * * * * * * * * * * * * * * * * * * * * * */
/* Este programa NO consegue permutar os valores */
#include <stdio.h>
Obtemos ento uma matriz triangular superior. Esta matriz matriz U desejada. Para
obter a matriz L, observamos que cada uma das operaes elementares aplicadas pode
ser representada por uma matriz. Vamos acompanhar pelo exemplo.
A primeira operao elementar foi :
3. Substituio da i-sima linha pela i-sima linha acrescida de K vezes a j-sima linha
(Li = Li + K Lj ):Partindo da matriz identidade, coloque o valor K na i-sima linha e jsima coluna.
Ex: L2 = L2 + 4 L3. Partindo da matriz identidade, coloque na segunda linha e na
terceira coluna o valor 4:
0,1
0,0
1,1
1,0
2,1
2,0
Cores
A cada pixel associamos uma cor. Para obter uma cor, o monitor envia certa
combinao de vermelho, verde e azul (RGB). O nmero de cores possveis varia
conforme o hardware. Cada pixel tem uma mesma quantidade de memria para
armazenar suas cores. O buffer de cores (Color Buffer) uma poro da memria
reservada para armazenar as cores em cada pixel. O tamanho deste buffer usualmente
medido em bits. Um buffer de 8 bits pode exibir 256 cores diferentes simultaneamente.
Conforme a capacidade da placa grfica podemos ter:
8 bits 256 cores
(High Color) 16 bits 65.536 cores
(True Color) 24 bits 16.777.216 cores
(True Color) 32 bits 4.294.967.296 cores
Existem duas formas bsica de acessar as cores no OpenGL: RGB e Modo Indexado.
Trabalharemos sempre em formato RGB. No formato RGB voc deve informar as
intensidades de Vermelho, Verde e Azul desejadas. Estas intensidades devem variar
entre 0.0 a 1.0. A tabela abaixo mostra como obter as cores bsicas:
Cores R G B
1.0
0.0
0.0
1.0
0.0
1.0
1.0
0.0
0.0
1.0
0.0
1.0
1.0
0.0
1.0
0.0
0.0
0.0
1.0
0.0
1.0
1.0
1.0
0.0
Introduo ao OpenGL
O sistema grfico OpenGL (GL significa Graphics Library) uma biblioteca (de
aproximadamente 350 comandos) para aplicaes grficas. O OpenGL foi desenvolvido
pela Silicon Graphics (SGI) voltado para aplicaes de computao grfica 3D, embora
possa ser usado tambm em 2D. As rotinas permitem gerar primitivas (pontos, linhas,
polgonos, etc) e utilizar recursos de iluminao 3D. O OpenGL independente do
sistema de janelas, ou seja, suas funes no especificam como manipular janelas. Isto
permite que o OpenGL possa ser implementado para diferentes sistemas: X Window
System (Unix), Windows 95 e NT, OS/2 , Macintosh, etc.
Exemplo: Plotar um ponto na tela utilizando as bibliotecas do OpenGl
#include <gl\glut.h>
void redesenha()
{
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glColor3f(1.0,0.0,0.0);
glBegin(GL_POINTS);
glVertex2f(200.0,200.0);
glEnd();
glFlush();
}
void main(int argc, char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(400,400); /* Antes do glutCreateWIndow */
glutInitWindowPosition(1,1);
glutCreateWindow("Ponto");
gluOrtho2D(0,399,399,0); /* Apos CreateWindow */
glutDisplayFunc(redesenha); /* Esta funcao e necessaria, caso
contrario o opengl nao consegue
criar a janela */
glutMainLoop();
}
Vamos comentar comando a comando:
glutInit(&argc,argv);
utilizado para iniciar a biblioteca GLUT.
Algoritmo ingnuo
A primeira idia de como resolver este problema proposto pelo programa abaixo. Este
um exemplo ingnuo de como desenhar a reta que passa por dois pontos dados.
Vamos discutir a seguir os principais problemas deste programa e as possveis solues.
/* -------------------------------------------------------------- */
/* Exemplo ingnuo de como plotar a reta definida por dois pontos */
/* -------------------------------------------------------------- */
#include <gl\glut.h>
#include <stdio.h>
int pontos;
float x0,y0,x1,y1;
float Reta_dois_pontos(float x)
{
float y;
y = (y1-y0)/(x1-x0)*(x-x0) - y0;
return(y);
}
void display()
{
int i ;
float x,y;
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glColor3f(1.0,0.0,0.0);
for (i=0;i<pontos;i++)
{
x = x0 + i * (x1 - x0)/pontos;
y = Reta_dois_pontos(x);
glBegin(GL_POINTS);
glVertex2f(x,y);
/* * * * * * * * * * * * * * */
/* Modulo: funcao011.h */
/* * * * * * * * * * * * * * */
float funcao(float x);
void plota_eixo();
void plota_funcao();
void entra_dominio();
Mdulo funcao010.cpp
Este mdulo contm as rotinas bsicas do OpenGL e a abertura do programa (void
main()). Observe que a funo glutKeyboardFunc(le_tecla); informa que quando
alguma tecla pressionada o controle do programa deve passar a rotina void
le_tecla(unsigned char key, int x, int y).
/* * * * * * * * * * * * * * */
/* Modulo: funcao010.cpp */
/* * * * * * * * * * * * * * */
#include <gl\glut.h>
#include <stdio.h>
#include <math.h>
#include "funcao011.h"
void display()
{
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
void glutMouseFunc(void (*func)(int button, int state, int x, int y)) Este evento detecta
quando algum boto do mouse foi pressionado. Quando isto ocorre, o programa executa
a rotina definida em void (*func). Os parmetros desta rotina podem receber os
seguintes valores:
- button : informa qual boto do mouse foi pressionado, sendo atribudo com um dos
seguintes
valores:
GLUT_LEFT_BUTTON,
GLUT_MIDDLE_BUTTON,
GLUT_RIGHT_BUTTON.
- state: informa quando o boto foi pressionado e quando o boto foi solto, sendo
atribudo com dois possveis valores: GLUT_DOWN ou GLUT_UP.
- X,y: informa a posio do mouse na janela quando o boto foi pressionado.
Como exemplo, vamos alterar o programa funo anterior, e acrescentar outra forma de
interrupo para alterar o domnio. Assim se o usurio pressionar o boto esquerdo do
0=m
c) Circunferncia com centro em P(0, 0.5) e raio 1:
r = sin0
d) Cardiide
r = a(1+ cos(0))
e) Espiral
r = a0
f) Roscea
r = asen(n0 )
Visualizao de Curvas Polares
Assim temos uma curva na forma paramtrica. Como exemplo vamos visualizar a curva
do cardiide, alterando apenas a rotina curva do programa anterior:
/* -------------------------------- */
void curva(float t,float *x,float *y)
/* float t (entrada) */
/* float *x (saida) */
/* float *y (saida) */
/* -------------------------------- */
/* -------------------------------- */
{
*x = (1+cos(t))*cos(t);
*y = (1+cos(t))*sin(t);
}
Exerccios
1) Como exerccio visualize as demais curvas dadas em coordenadas polares.
2) Visualize a curva dada em coordenadas polares por r = sec(theta).
Pontos individuais.
Reta entre dois pontos.
Polgono convexo .
Tripla de vrtices interpretado como um
tringulo.
Conjunto de quatro vrtices interpretado como
quadriltero.
Sequncia de retas.
Idntico ao anterior, porm com uma reta unindo o
primeiro e ltimo vrtice.
Lista de tringulos.
Lista de tringulos com o primeiro vrtice em
comum.
Lista de quadrilteros.
/* * * * * * * * * * * * * * */
/* Modulo: Intvis01.c */
/* * * * * * * * * * * * * * */
#include <gl\glut.h>
#include <stdio.h>
#include <math.h>
#include "Intvis02.h"
#include "Intvis03.h"
extern int tipo,visual;
void display()
{
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
plota_eixo();
plota_funcao();
plota_integral();
glFlush();
glutSwapBuffers();
}
void le_tecla(unsigned char key, int x, int y)
{
switch(key)
{
case 'D':
case 'd':
entra_dominio();
display();
break;
case 'I':
case 'i':
entra_limites();
display();
break;
case '0':
tipo = 0;
display();
break;
case '1':
tipo = 1;
display();
break;
}
}
Observe que no simples exibir um conjunto de pontos que pertenam a esta curva.
Vamos definir uma funo de duas variveis z = f (x, y) utilizando a equao acima, da
seguinte forma:
calculamos
- Se V1 * V2 < 0, ento a funo se anula em um ponto entre V1 e V2. Este ponto pode
ser
aproximado linearmente.
- Se V1 * V3 < 0, ento a funo se anula em um ponto entre V1 e V3.
- Se V2 * V3 < 0, ento a funo se anula em um ponto entre V2 e V3.
- Se V1 = 0, ento a funo se anula exatamente sobre o vrtice V1.
- Se V2 = 0, ento a funo se anula exatamente sobre o vrtice V2.
- Se V3 = 0, ento a funo se anula exatamente sobre o vrtice V3.
- Considerando que exatamente duas das condies acima se verificaram
simultaneamente, aproximamos a curva nesse tringulo por um segmento de reta unindo
os dois pontos obtidos.
Programa Curva Implcita
O programa est dividido em dois mdulos principais:
- impl010.cpp: Mantm as rotinas de visualizao do OpenGL
- impl011.cpp: Mantm as rotinas relativas ao desenho da curva.
Temos ainda o mdulo:
- impl011.h: Este mdulo deve ter apenas a declarao das funes do programa
impl011.cpp.
Mdulo impl010.cpp
Este mdulo idntico ao mdulo funcao010.cpp. A nica diferena que as chamadas
so feitas para as novas funes de desenho das curvas.
/* * * * * * * * * * * * * */
FRACTAIS
Conjuntos auto semelhantes
Definio: Um subconjunto fechado e limitado
pode ser expresso na forma:
Onde
so conjuntos no sobrepostos e cada um deles congruente a
S por mesmo fator de escala s ( 0 < s < 1).
Exemplo 1: Um tringulo pode ser expresso como a unio de quatro tringulos
congruentes e no sobrepostos. Cada um dos tringulos congruente ao original por um
fator
Tringulo de Sierpinski
#include "fract031.h"
void display()
{
int i;
float x[4] = {0.0,1.0,1.0,0.0};
float y[4] = {0.0,0.0,1.0,1.0};
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
plota_funcao(x,y,8);
glFlush();
}
....................
Mdulo frac031.cpp
/* * * * * * * * * * * */
/* Fractal Fern */
/* fract031.cpp */
#include <stdio.h>
#include <math.h>
#include <gl\glut.h>
float xmin = -0.2;
float ymin = -0.2;
float xmax = 2;
Bibliografia:
Estrato de aulas do curso de Mecatrnica da Escola Politcnica de Minas Gerais
POLIMIG Matria Robtica Industrial Prof. Orlando Laoboissier
Mecatrnica uma abordagem Multidisciplinar: W. Bolton 4 Edio
Princpios de Mecatrnica: Joo Maurcio Rosrio
Apostila Robtica Universidade Braz Cubas: Carrara, Valdemir
Technology in Action Intermediate Robot Building Segund Edition: David Cook
Sites:
www.robotrom.com
www.nasa.gov
www.bionix.com
www.rogeriodumba.com.br