Professional Documents
Culture Documents
GUILHERME DE FAVERI
Joinville, SC
2013
UNIVERSIDADE DO ESTADO DE SANTA CATARINA
CENTRO DE CIÊNCIAS TECNOLÓGICAS
DEPARTAMENTO DE ENGENHARIA MECÂNICA
GUILHERME DE FAVERI
Joinville, SC
2013
GUILHERME DE FAVERI
Orientador:
Prof. Dr. Anibal Alexandre Campos Bonilla
Universidade do Estado de Santa Catarina - UDESC
Membro:
Prof. Dr. José Nilton Martini
Universidade do Estado de Santa Catarina - UDESC
Membro:
Eng. Clodoaldo Schutel Furtado Neto
Universidade do Estado de Santa Catarina - UDESC
RESUMO
FAVERI, Guilherme de. Parallel Robots Inverse Kinematic: Spatial and Pla-
nar Aplication and Teleoperation. Trabalho de conclusão de curso (Bacharelado em
Engenharia Mecânica) – Universidade do Estado de Santa Catarina. Joinville, 2013.
This work states methods to solve planar and spatial parallel robots inverse kinematic
problem, focusing in 6-RUS spatial manipulator and 3-RRR planar, based on geometri-
cal constructives parameters.This work is directly applied in two differents projects, once
the flight simulator built by Universidade do Estado de Santa Catarina, located at Centro
de Artes (CEART), presenting methodology to solve the inverse kinematic problem of
a spatial parallel robot applied in many applications, the other one is a planar parallel
robot where is implemented teleoperation onjectiving assistance to Amyotrophic Lateral
Sclerosis patience by a low coast gaze tracker.
Isaac Asimov
LISTA DE FIGURAS
1 Robô Serial COMAU Smart NS . . . . . . . . . . . . . . . . . . . . 18
2 Plataforma de Stewart-Gough . . . . . . . . . . . . . . . . . . . . . . 19
3 Esquema do Robô Paralelo 3-RRR . . . . . . . . . . . . . . . . . . . 26
4 Modelo esquemático do robô paralelo 3-RRR planar . . . . . . . . . 27
5 Esquema do Robô Paralelo 3-RRR . . . . . . . . . . . . . . . . . . . 33
6 Foto do robô paralelo 3-RRR planar e sistemas adjacentes . . . . . . 37
7 Detalhe da estrutura robótica . . . . . . . . . . . . . . . . . . . . . . 38
8 Detalhamento da cadeia cinemática . . . . . . . . . . . . . . . . . . . 38
9 Ligação do Servomotor na placa Arduino . . . . . . . . . . . . . . . 40
10 Espaço de trabalho total do Robô Paralelo 3-RRR . . . . . . . . . . . 41
11 Espaço de trabalho do Robô Paralelo 3-RRR para orientação ϕ = 0
constante. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
12 Pontos definidos dentro do espaço de trabalho do robô. . . . . . . . . 47
13 Pontos definidos dentro da interface gráfica no computador. . . . . . . 47
14 Programação do robô no software Processing. . . . . . . . . . . . . . 50
15 Espaço de trabalho mapeado pelo robô. . . . . . . . . . . . . . . . . 51
16 Simulador de voo 6 DoF de baixo custo produzido pela CKAS Mecha-
tronichs PTY LTD. . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
17 Simulador de voo 6 DoF produzido pela InMotion Simulation. . . . . 54
18 Simulador de voo construído no CEART . . . . . . . . . . . . . . . . 55
19 Estrutura do robô e sistemas de coordenadas fixo à base e fixo à
plataforma móvel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
20 Parâmetros geométricos necessários para solução da cinemática inversa 57
21 Cadeia vetorial fechada para a cadeia cinemática i. . . . . . . . . . . 59
22 Vista frontal do plano ωi . . . . . . . . . . . . . . . . . . . . . . . . 60
23 Vista frontal do plano ωi . . . . . . . . . . . . . . . . . . . . . . . . 60
24 Vista frontal do plano ωi . . . . . . . . . . . . . . . . . . . . . . . . 62
25 Espaço de trabalho do simulador de voo para orientação constante. . . 65
LISTA DE TABELAS
1 Características de manipuladores industriais do tipo esférico (massa
do robô e capacidade de carga em kg, repetibilidade em mm, de acordo
com os fabricantes) . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2 Especificações técnicas do servo motor Futaba S3003 . . . . . . . . . 39
3 Especificação dos componentes e custo . . . . . . . . . . . . . . . . 39
LISTA DE SÍMBOLOS
θ ângulo solução da cinemática inversa rad
Px posição do centro da plaforma móvel no eixo x m
Py posição do centro da plaforma móvel no eixo y m
ϕ orientação da plataforma móvel rad
~
TCP vetor configuração da plataforma móvel -
f
O origem do sistema de coordanada fixo na base m
m
O origem do sistema de coordanada fixo na plataforma m
f ~
OA vetor posição dos atuadores m
f ~
OC vetor posição das juntas passivas m
h distância entre as juntas na plataforma móvel m
L distância entre o eixo dos atuadores m
Cix coordenada horizontal do ponto C m
Cix coordenada vertical do ponto C m
~
AB vetor posição da manivela m
~
BC vetor posição do haste m
ψ ângulo da junta passiva rad
a comprimento da manivela m
b combrimento da haste m
xC distância horizontal entre os pontos A e C m
yC distância vertical entre os pontos A e C m
e1 coeficiente da equação de cinemática inversa m2
e2 coeficiente da equação de cinemática inversa m
e3 coeficiente da equação de cinemática inversa m
t variável da substituição de Weierstrass -
q vetor variável das juntas m, rad
x vetor posição da plataforma m, rad
Jx matriz Jacobiano de cinemática direta -
Jq matriz Jacobiano de cinemática inversa -
q̇ vetor velocidade das juntas m/s, rad/s
ẋ vetor velocidade da plataforma m/s, rad/s
vp velocidade linear da plataforma m/s
ωp velocidade angular da plataforma rad/s
xTCP posição hotizontal da plataforma m
yTCP posição vertical da plataforma m
xc posição horizontal do cursor pixels
yc posição vertical do cursor pixels
Ci constante de conversão -
p ponto do espaço de trabalho do robô m
m ponto da interface gráfica pixels
v posição a ser mandada para o servo graus
ch caractere lido na porta serial -
P configuração do efetuador final m, rad
ϕ ângulo de roll rad
ϑ ângulo de pitch rad
ψ ângulo de yaw rad
rb raio da base fixa m
rb raio da plataforma m
d metade da distância central de um par de juntas atuadas m
e metade da distância entre as juntas na plataforma móvel m
ri dimensão do crank m
Ri dimensão do rod m
χa ângulo de posição dos atuadores rad
χj ângulo de posição das juntas passivas na plataforma móvel rad
β ângulo de orientação dos atuadores rad
rot matriz de rotação -
~I vetor de cadeia fechada m
ω plano de rotação do crank -
ε ângulo de cinemática inversa no plano ω rad
φ ângulo de cinemática inversa no plano ω rad
α ângulo de cinemática inversa no plano ω rad
~T decomposição de ~I no plano xy m
z variável da solução de cinemática inversa m
s variável da solução de cinemática inversa m
u variável da solução de cinemática inversa m2
v variável da solução de cinemática inversa m2
w variável da solução de cinemática inversa m2
q variável da solução de cinemática inversa m
SUMÁRIO
1 INTRODUÇÃO 15
2 ROBÓTICA 17
2.1 ROBÔS SERIAIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2 ROBÔS PARALELOS . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3 CINEMÁTICA INVERSA . . . . . . . . . . . . . . . . . . . . . . . 20
3 RESVISÃO BIBLIOGRÁFICA 22
6 CONSTRUÇÃO 37
6.1 ESTRUTURA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
9 CONCLUSÃO E PERSPECTIVAS 66
REFERÊNCIAS 67
APÊNDICE A -- CÓDIGOS 69
A.1 SCILAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
A.2 PROCESSING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
A.3 ARDUINO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
15
1 INTRODUÇÃO
Desde a Revolução Industrial, tem havido uma crescente demanda para aumentar a
produtividade e reduzir os custos de produção (TSAI, 1999). No campo da manufatura,
devido aos recentes avanços em tecnologia computacional, a humanidade tem presenci-
ado uma segunda revolução industrial, uma revolução em automação.
A palavra automação foi moldada na década de 1940 e utilizada para descrever a
operação coletiva de várias máquinas (SPONG; VIDYASAGAR, 1989). Com o con-
ceito de produção em série, introduzido pela Ford Motor Company, cada processo era
realizado por uma máquina específica, assim foi possível reduzir os custos de maneira
a tornar o automóvel acessível para a população. Entretanto, como cada máquina era
projetada para realizar uma tarefa predeterminada, a cada novo lançamento toda a linha
de montagem devia ser reprojetada. Este tipo de automação é chamado de automação
pesada, apresenta alta produtividade, porém baixa flexibilidade (TSAI, 1999).
O alto custo e inflexibilidade da automação pesada, levou a uma abordagem diferente
para a automação de manufatura. Manipuladores robóticos foram introduzidos para
realizar diferentes tarefas como pegar materias, realizar soldagem ponto-a-ponto, pintura
e montagem. Por serem controlados por computadores e microprocessadores, robôs
podem ser reprogramados para diferentes tarefas. Este tipo de automação é chamada de
automação flexível (TSAI, 1999).
Robótica é um campo relativamente novo no campo da tecnologia moderna, cruzando
as fronteiras tradicionais da engenharia. O conhecimento de robótica e suas aplicações
abrange o conhecimento em engenharia mecânica, elétrica, ciências da computação,
matemática e economia (SPONG; VIDYASAGAR, 1989).
Este trabalho se situa na área de robótica paralela, focando na solução do problema
de cinemática inversa para duas arquiteturas diferentes de robôs paralelos sendo um robô
paralelo planar e o outro um robô paralelo espacial, e mostrando aplicações para estas
arquiteturas. Os princípios básicos relativos à robôs paralelos, bem como cinemática
inversa são apresentados no capítulo 2.
Para o robô planar 3-RRR tem-se como objetivo o desenvolvimento de um mecan-
ismo deste tipo bem como a implementação de um sistema de teleoperação mestre-
1 Introdução 16
escravo utilizando o mouse como mestre e o robô paralelo como escravo, seguindo a
trajetória realizada pelo mouse. Objetiva-se que o robô possa ser futuramente controlado
com o movimento do globo ocular para servir como auxílio a portadores de Esclerose
Lateral Amiotrófica por meio do uso do software livre Opengazer.
Outro objetivo consiste na formulação matemática da solução do problema de cin-
emática inversa do robô paralelo espacial 6-RUS, sendo este motivado pelo desenvolvi-
mento de um simulador de voo pela Universidade do Estado de Santa Catarina onde foi
construído um robô paralelo no Centro de Artes (CEARTE) que agrega a simulação um
ambiente de realidade virtual com a dinâmica oferecida pela plataforma.
17
2 ROBÓTICA
O termo robô foi introduzido no vocabulário inicialmente pelo escritor tcheco Karel
Capek na peça Rossum’s Universal Robots de 1920, sendo robotoa a palavra tcheca
para trabalho (SPONG; VIDYASAGAR, 1989). O termo é aplicado para uma grande
variedade de dispositivos mecânicos, como teleoperadores, veículos submersos, land
rovers autônomos, etc. De maneira geral, qualquer máquina que opera com certa au-
tonomia por meio de controle computacional é chamada de robô. Neste trabalho, robôs
são tratados como manipuladores industriais controlados por computador.
Uma definição oficial para o termo robô é dada pelo Robot Institute of Amer-
ica (RIA): Um robô é um manipulador multifuncional reprogramável projetado para
movimentar materiais, partes, ferramentas, ou dispositivos especializados para realizar
uma variedade de tarefas através de programação variada de movimentos (SPONG;
VIDYASAGAR, 1989). A enciclopédia Galática define robô como "dispositivo mecânico
que realiza tarefas humanas". O departamento de marketing da Companhia Cibernética
de Sirius define "robô"como "o seu amigão de plástico"(ADAMS, 2004).
carga
Robô massa carga Repetibilidade massa
ABB IRB 140T 98 5 ± 0.03 0.051
ABB IRB 240L 380 7 ± 0.06 0.01842
ABB IRB 4400/45 980 45 ± 0.1 0.04591
ABB IRB 6400R/3.0-100 1600 100 ± 0.15 0.0625
Fanuc Arc Mate 100i 138 6 ± 0.08 0.04347
Fanuc Arc Mate 120i 370 16 ± 0.1 0.04324
Fanuc M420iA 620 40 ± 0.5 0.064516
Fanuc R-2000iA 165F 1210 165 ± 0.3 0.13636
Fanuc S-900iB 1970 200 ± 0.5 0.101523
Kuka KR 6 235 6 ± 0.1 0.02553
Kuka KR 60-3 665 60 ± 0.2 0.09022
Kuka KR 100 1155 100 ± 0.15 0.08658
Pela definição, robôs paralelos são mecanismos de cadeia cinemática fechada onde
o efetuador final é ligado à base por diversas cadeias cinemáticas independentes (MER-
LET, 2002).
Os princípios destes mecanismos utilizando cadeias cinemáticas fechadas foram es-
tabelecidos por Gough em 1947 (MERLET, 2002), por meio de um mecanismo utlizado
para teste de pneus que permite ser posicionado e orientado de maneira conveniente.
Utilizando atuadores lineares que permitem a mudança de comprimento de juntas pris-
máticas, além de juntas esféricas para conexão com a plataforma móvel e juntas uni-
2.3 Cinemática Inversa 20
versais para conexão com a base é possível posicionar e orientar o efetuador final de
maneira desejada.
O interesse nesta estrutura se baseia na distribuição de carga, de modo que cada
atuador suporta aproximadamente 1/6 da carga total, além disso nas juntas são impostas
apenas tensões de tração/compressão, o que torna esta estrutura a mais rígida na classe
de robôs paralelos espaciais (BONEV, 2002).
Outras arquiteturas são possíveis de serem construídas, podendo o robô apresentar
mobilidade apenas em um plano ou no espaço. Tipicamente, a mobilidade do robô é
condicionada pelo número de cadeias cinemáticas, isto é, o número de graus de liberdade
do efetuador final coincide com o número de cadeias cinemáticas (MERLET, 2002).
A nomenclatura utilizada neste trabalho é a mesma utilizada por Merlet, sendo um
número correspondente ao número de cadeias cinemáticas cuja a estrutura é apresen-
tada pelas letras seguintes, onde a letra sublinhada corresponde à junta atuada, sendo
as demais passivas. As letras R, U, S, P correspondem às juntas rotativas, universais,
esféricas e prismáticas respectivamente.
No capítulo 3 é apresentada uma breve revisão bibliográfica sobre os principais as-
suntos a cereca de robôs paralelos abordados neste trabalho.
3 RESVISÃO BIBLIOGRÁFICA
~
f OA
1 = 0 î + 0 jˆ (4.1)
~
f OA
2 = L î + 0 jˆ (4.2)
√
~
f OA
L L 3 ˆ
3 = î + j (4.3)
2 2
~ = [ Px Py ϕ ] do efetuador final, tem-se que a posição
Dada uma configuração TCP
do ponto Ci é dada por:
~ i
f OC ~ − PC
= f OP ~ (4.4)
q3
B3 A3
y3
C3
h
P C2
y2
B f
y
1 1 C1 B2
y
q1 q2
A1 O x A2
~ 2
f OC = (C1x + h cos ϕ) î + C1y + hsinϕ jˆ
(4.6)
π π
~ 3
f OC = C1x + h cos + ϕ î + C1y + h sin + ϕ jˆ (4.7)
3 3
~
f OA ~ ~
i + Ai Bi + BiCi + Ci
~f O = ~0 (4.8)
P
Bi yi f
Ci
qi
x
Ai
Fonte: Do autor
Por se tratarem de juntas passivas, o ângulo ψi deve ser eliminado. Isto é feito
manipulando algebricamente a Eq. (4.8).
~
f OA ~ ~ i
~ = f OC
i + Ai Bi + BiCi (4.11)
Substituindo Eq. (4.9) e Eq. (4.10), definindo A~iCi = xCi î+yCi jˆ e analisando a Eq.( 4.13)
nas direções î e jˆ de maneira separada, tem-se que:
xC2 i + a2i cos2 θi + yC2 i + a2i sin2 θi − (2xCi ai cos θi ) − (2yCi ai sin θi ) =
b2i sin2 (θi + ψi ) + cos2 (θi + ψi )
(4.18)
1 − ti2
cos θi = (4.25)
1 + ti2
θi
ti = tan (4.26)
2
(e1i − e3i )ti2 + 2e3i ti2 + (e1i + e2i ) = 0 (4.27)
Nota-se que existem de duas respostas para a Eq. (4.29) quando e23i + e22i − e1i for
maior que zero. Além disso a não existência de uma solução real para a Eq. 4.29 tem
como significado físico o completo estiramento ou retração total de uma cadeia cin-
emática (TSAI, 1999). A escolha da solução apropriada se dá pela limitação dos servos
motores que operam apenas em ângulos entre 0 e 180 graus, sendo a resposta em que se
soma a raiz quadrada para a primeira cadeia cinemática e a resposta em que se subtrai
para as demais cadeias.
30
Neste capítulo uma análise jacobiana para o robô paralelo 3-RRR planar é apresen-
tada. A análise jacobiana aplicada a robôs paralelos é mais complexa que para robôs
seriais por ter um número maior de elos que formam um número de cadeias fechadas
(TSAI, 1999). Um método para determinar a velocidade instantânea do atuador associ-
ado as juntas utilizando as equações vetoriais de cadeia fechadas foi desenvolvido por
(MOHAMED; SANGER; DUFFY, 1983).
Uma importante limitação dos manipuladores paralelos depende do fato de existirem
configurações de singularidades dentro do espaço de trabalho fazendo como que o robô
ganhe um ou mais graus de liberdade, perdendo assim completamente a rigidez (TSAI,
1999). Uma separação em duas matrizes Jacobiano foi proposta por (GOSSELIN; AN-
GELES, 1990) dividindo em uma matriz associada à cinemática inversa e outra à cin-
emática direta.
onde Jx = ∂f
∂x e Jq = − ∂q
∂f
.
A derivação leva à duas matrizes Jx e Jq . A matriz Jacobiano global, denotada por J
é definida como:
q̇ = J ẋ (5.3)
Por existir duas matrizes Jacobiano, uma configuração singular ocorre quando uma
ou ambas matrizes são singulares, podendo assim existir três configurações de singular-
idades:
• SIngularidades combinadas.
5.2 SINGULARIDADES
Um robô apresenta uma configuração de sigularidade quando a matriz Jacobiano
se torna singular (TSAI, 1999), isto é, para uma determinada posição e orientação do
efetuador final, perde-se a rigidez no qual o robô apresentará graus de liberdade fora de
controle (MERLET, 2002).
O estudo de singularidades é de extrema importância por:
Quando Jq é singular, existem vetores q̇ que levam a vetores ẋ nulos. Dessa maneira,
existem direções em que o movimento da plataforma é restringido, perdendo um ou mais
graus de liberdade. Por outro lado, em configurações de sigularidades de cinemática
inversa, a plataforma é capaz de resistir a forças em algumas direções sem força ou
torque nos atuadores.
5.3 Determinação do Jacobiano 32
Em geral, essa condição ocorre nos limites do espaço de trabalho do robô onde há a
convergêcia das soluções da cinemática inversa.
Isto implica em vetores ẋ não nulos que resultam em vetores q̇ nulos. Isto significa
que mesmo tendo os atuadores travados, a plataforma apresenta movimento infinitesi-
mal, ganhando um ou mais graus de liberdade, desta maneira, a plataforma não consegue
resistir a esforços em algumas direções.
por se tratar de um mecanismo planar o vetor ẋ pode ser reduzido a um vetor coluna de
dimensão 3.
Da Fig. 5 que esquematiza o robô, tem-se que para esta arquitetura o vetor de var-
iáveis das juntas é definido por q = [θ1 θ2 θ3 ]T e o vetor de posição do manipulador
é definido por x = [Px Py ϕ]T . Dessa forma, para cada cadeia cinemática i = 1, 2, 3 a
equação de cadeia fechada pode ser escreita como:
q3
B3 A3
y3
C3
P
y2
B f C2
1
y1
C1 B2
y
q1 q2
A1 O x A2
necessário realizar o produto escalar de ambos os lados da Eq. (5.8) por B~iCi .
~ ~ ~ ~ ~
θ̇k̂ · Ai Bi × BiCi = BiCi · v~P + ϕ̇k̂ · PCi × BiCi (5.9)
dessa maneira:
b1x b1y e1x b1y − e1y b1x
Jx = b2x b2y e2x b2y − e2y b2x (5.10)
b3x b3y e2x b3y − e3y b3x
e
a1x b1y − a1y b1x 0 0
Jq = a2x b2y − a2y b2x (5.11)
0 0
0 0 a3x b3y − a3y b3x
Definidas as matrizes Jacobiano torna-se possível uma análise para determinar em
que casos o robô se encontra em uma configuração de singularidade.
para i = 1, 2, ou 3.
O lado esquerdo da Eq. (5.12) é definido pelo o produto vetorial entre A~i Bi e B~iCi ,
para zerarmos este lado da equação é necessário que estes vetores sejam linearmente
dependentes, isto implica em uma configuração da cadeia cinemática completamente
estirada ou completamente retraída. Para que se evite configurações desse tipo coloca-se
5.3 Determinação do Jacobiano 35
um valor mínimo para o lado esquerdo da Eq. (5.12) evitando assim entrar em condições
de singularidade inversa, através do monitoramento de aix biy − aiy bix .
• A1 A2 = A2 A3 = A1 A3 = L
• Ai Bi = √L
3
√
3
• BiCi = h 3
• Ai Bi = BiCi
5.3 Determinação do Jacobiano 36
6 CONSTRUÇÃO
6.1 ESTRUTURA
O robô paralelo 3-RRR planar é constituído por uma base de madeira na qual são
afixados os servos motores utilizados como atudores, uma plataforma móvel de madeira
em formato retangular e 6 braços de servomotor de aeromodelismo, utlizados como
manivela e haste. Na Fig. 6 é apresentado o sistema completo, incluindo o a parte de
comunicação, enquanto que na Fig. 7 é apresentado em detalhe o robô e na Fig. 8 pode-
se observar os elementos da cadeia cinemática detalhados.
Figura 6: Foto do robô paralelo 3-RRR planar e sistemas adjacentes
Como pinos para efetuar a junta rotativa, são utilizados conjuntos de parafuso-porca
autotravante M3 nos comprimentos necessários em cada cunjunto, cedidos pela Equipe
6.1 Estrutura 38
Albatroz AeroDesign.
Como atuadores são utilizados 3 servo motores S3003 da marca Futaba. A escolha
por utilização de servomotores, comumente utilizados em aeromodelismo, se deu pelo
baixo custo, aliando boa resposta no tempo com a capacidade de imprimir um torque
elevado em relação à massa do conjunto. A facilidade de uso de um servo motor se dá
ao fato de existir uma biblioteca específica para servomotores no software Arduino IDE,
facilitando assim a comunicação dos servomotores com a placa Arduino. A especifi-
cação técnica do servo motor Futaba S3003 fornecidas pelo fabricante estão dispostas
na tabela 2.
Na tabela 3 é apresentado o custo total da estrutura do robô paralelo, sem levar em
conta o preço dos elementos de fixação e parafusos.
+5V
Fonte
sejam possíveis para o robô atingir, determina-se o espaço de trabalho do robô paralelo.
Através da solução do problema de cinemática inversa com 3 loops encadeados,
para varrer pontos ao longo do eixo x, ao longo do eixo y e para varrer a orientação ϕ.
Para cada configuração tenta-se solucionar o problema de cinemática inversa, sendo que
quando há solução, sabe-se que este ponto pertence ao espaço de trabalho.
De modo a minimizar o tempo de máquina, utilizou-se limitantes para a posição e
orientação obtidos através da solução do problema de cinemática inversa em uma simu-
lação por meio de código escrito no software Scilab. O código da simulação encontra-se
no apêndice A.1.
0.13
0.12
0.11
0.1
0.09
0.08
0.07
0.06
0.05
0.04
0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18
0.13
0.12
0.11
0.1
0.09
0.08
0.07
0.06
0.05
0.04
0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18
isto, opta-se manter uma orientação fixa em ϕ = 0 durante toda operação do robô para
as condições especificadas a seguir.
e
yTCP = f (yc ) = C4 +C5 yc +C6 y2c (7.2)
onde xTCP e yTCP são, respectivamente, a posição do centro da plataforma móvel nos
eixos coordenados x e y. As variáveis xc e yc são respecitvamente a posição do cursor,
dado em pixels, nestes eixos. É necessário, então, 3 pontos para realizar a interpolação
quadrática, obtendo os dois conjuntos de equações descritos pelas Eq. 7.3 e Eq. 7.4.
2
xTCP1 = C1 +C2 xc1 +C3 xc1
xTCP2 = C1 +C2 xc2 +C3 xc22 (7.3)
xTCP = C1 +C2 xc +C3 x2
3 3 c3
2
yTCP1 = C1 +C2 yc1 +C3 yc1
yTCP2 = C1 +C2 yc2 +C3 y2c2 (7.4)
yTCP = C1 +C2 yc +C3 y2
3 3 c3
−1
2
1 xc1 xc1 xTCP1 C1
xc22 xTCP2 = C2 (7.7)
1 xc2
2
1 xc3 xc3 xTCP3 C3
−1
2
1 yc1 yc1 yTCP1 C4
y2c2 yTCP2 = C5 (7.8)
1 yc2
1 yc3 y2x3 yTCP3 C6
Solucionando analiticamente as Eq. (7.7) e Eq. (7.8) obtém-se os vetores que de-
screvem as constantes de interpolação.
(xTCP1 xc1 −xTCP2 xc1 )xc23 +(xTCP2 xc21 −xTCP1 xc22 )xc3 +xTCP3 xc1 xc22 −xTCP3 xc21 xc2
C1 (xc2 −xc1 )xc23 +(xc21 −xc22 )xc3 +xc1 xc22 −xc21 xc2
C2 = (xTCP2
−x TCP 1 ) x 2
c3
+ ( xTCP 1
−x TCP3 )x 2
c2
+( xTCP3
−x TCP2 )xc
2
1
(7.9)
2 2 2 2 2
(xc2 −xc1 )xc3 +(xc1 −xc2 )xc3 +xc1 xc2 −xc1 xc2
C3
(xTCP2 −xTCP1 )xc3 (xTCP1 −xTCP3 )xc2 +(xTCP3 −xTCP2 )xc1
− 2 2 2
(xc −xc )x +(x −x )xc +xc x −x xc 2 2
2 1 c3 c1 c2 3 1 c2 c1 2
(yTCP1 yc1 −yTCP2 yc1 )y2c3 +(yTCP2 y2c1 −yTCP1 y2c2 )yc3 +yTCP3 yc1 y2c2 −yTCP3 y2c1 yc2
C4 (yc2 −yc1 )y2c3 +(y2c1 −y2c2 )yc3 +yc1 y2c2 −y2c1 yc2
C5 = (yTCP2 −y TCP1 ) y2
c3 +( yTCP1 −y TCP3 ) y2
c2 +( yTCP3 −x TCP2 )y 2
c1
(7.10)
(yc2 −yc1 )y2c3 +(y2c1 −y2c2 )yc3 +yc1 y2c2 −y2c1 yc2
C6
( TCP2 TCP1 ) c3 ( TCP1 TCP3 ) c2 ( TCP3 TCP2 ) c1
y −y y y −y y + y −y y
− (yc −yc )y2 +(y2 −y2 )yc +yc y2 −y2 yc
2 1 c3 c1 c2 3 1 c2 c1 2
C1 = 0.09
C2 = 0.0000611
C3 = 0
C4 = 0.045
C5 = 0.0000378
C6 = 9.389(10−8 )
e
yTCP = g(xc , yc ) (7.14)
sendo
f (xc , yc ) = C1 +C2 xc +C3 yc +C4 xc yc +C5 xc2 +C6 y2c +C7 xc2 yc +C8 xc y2c +C9 xc2 y2c (7.15)
g(xc , yc ) = C10 +C11 xc +C12 yc +C13 xc yc +C14 xc2 +C15 y2c +C16 xc2 yc +C17 xc y2c +C18 xc2 y2c
(7.16)
7.1 Espaço de Trabalho 46
A Eq. (7.15) e a Eq. (7.16) podem ser escritas na forma matricial de modo que as
Eq. (7.13) e Eq. (7.14) são reescritas matricialmente como:
C
1
C2
C
3
C
4
h i h i
xTCP = 1 xc yc xc yc xc2 y2c xc2 yc xc y2c xc2 y2c
C5
(7.17)
C6
C7
C8
C9
e
C
10
C11
C
12
C
13
h i h i
yTCP = 1 xc yc xc yc xc2 y2c xc2 yc xc y2c xc2 y2c
C14
(7.18)
C15
C16
C17
C18
Define-se então 9 pontos pi dentro do espaço de trabalho do robô e 9 pontos mi
equivalentes no espaço de trabalho do cursor na iterface gráfica de controle do robô
conforme apresentado na Fig. 12 e Fig. 13.
pi = (xTCPi , yTCPi )
p1 = (0.090, 0.050)
p2 = (0.098, 0.100)
p3 = (0.122, 0.115)
p4 = (0.130, 0.045)
7.1 Espaço de Trabalho 47
0.13
0.12
p6
p3 p9
0.11
0.1
0.09
p2 p8
0.08
0.07
p5
0.06
0.05
p1 p7
0.04
0.08 0.09 0.1 0.11 0.12 0.13
p4 0.14 0.15 0.16 0.17 0.18
m3 m6 m9
m2 m5 m8
yc
xc m41 m7
m1
p5 = (0.130, 0.070)
p6 = (0.130, 0.120)
p7 = (0.170, 0.050)
7.1 Espaço de Trabalho 48
mi = (xci , yci )
m1 = (0, 0)
715
m2 = (0, )
2
m3 = (0, 715)
1310
m4 = ( , 0)
2
1310 715
m5 = ( , )
2 2
1310
m6 = ( , 715)
2
m7 = (1310, 0)
715
m8 = (1310, )
2
m9 = (1310, 715)
Repetindo as Eq. (7.13) e Eq. (7.14) para cada um dos 9 pontos escreve-se os sis-
temas em forma matricial. Invertendo a matriz formada pelas coordenadas p e multipli-
cando pela esquerda, obtém-se o valor das constantes C1 ,C2 , ... ,C18 .
x 1 xc1 yc1 xc1 yc1 xc21 y2c1 xc21 yc1 xc1 y2c1 xc21 y2c1 C1
TCP1
xTCP2 1 xc2 yc2 xc2 yc2 xc22 y2c2 xc22 yc2 xc2 y2c2 xc22 y2c2 C2
2 2 2 2 2 2
TCP3 1
x xc3 yc3 xc3 yc3 xc3 yc3 xc3 yc3 xc3 yc3 xc3 yc3 C3
2 2 2 2 2 2
TCP4 1
x xc4 yc4 xc4 yc4 xc4 yc4 xc4 yc4 xc4 yc4 xc4 yc4 C4
xTCP = 1
5 xc5 yc5 xc5 yc5 xc25 y2c5 xc25 yc5 xc5 y2c5 xc25 y2c5
C5
(7.20)
xTCP 1
6 xc6 yc6 xc6 yc6 xc26 y2c6 xc26 yc6 xc6 y2c6 xc26 y2c6
C6
xTCP7 1
xc7 yc7 xc1 yc7 xc27 y2c7 xc27 yc7 xc7 y2c7 xc27 y2c7
C7
xc8 yc8 xc8 yc8 xc28 y2c8 xc28 yc8 xc8 y2c8 xc28 y2c8 C8
xTCP8 1
2 2 2 2 2 2
xTCP9 1 xc9 yc9 xc9 yc9 xc9 yc9 xc9 yc9 xc9 yc9 xc9 yc9 C9
7.1 Espaço de Trabalho 49
y 1 xc1 yc1 xc1 yc1 xc21 y2c1 xc21 yc1 xc1 y2c1 xc21 y2c1 C10
TCP1
yTCP2 1 xc2 yc2 xc2 yc2 xc22 y2c2 xc22 yc2 xc2 y2c2 xc22 y2c2 C11
TCP3 1
y xc3 yc3 xc3 yc3 xc23 y2c3 xc23 yc3 xc3 y2c3 xc23 y2c3
C12
y
TCP
1
4 xc4 yc4 xc4 yc4 xc24 y2c4 xc24 yc4 xc4 y2c4 xc24 y2c4
C13
yTCP = 1
5 xc5 yc5 xc5 yc5 xc25 y2c5 xc25 yc5 xc5 y2c5 xc25 y2c5
C14
(7.21)
yTCP 1
6 xc6 yc6 xc6 yc6 xc26 y2c6 xc26 yc6 xc6 y2c6 xc26 y2c6
C15
yTCP7 1
xc7 yc7 xc7 yc7 xc27 y2c7 xc27 yc7 xc7 y2c7 xc27 y2c7
C16
xc8 yc8 xc8 yc8 xc28 y2c8 xc28 yc8 xc8 y2c8 xc28 y2c8 C17
yTCP8 1
2 2 2 2 2 2
yTCP9 1 xc9 yc9 xc9 yc9 xc9 yc9 xc9 yc9 xc9 yc9 xc9 yc9 C18
Resolvendo numericamente as equações matriciais Eq. (7.20) e Eq. (7.21) obtém-se
os coeficientes C1 ,C2 , ... ,C18 .
C1 = 0.09
C2 = 6.107(10−5 )
C3 = 0
C4 = 2.382(10−22 )
C5 = 4.108(10−23 )
C6 = 6.25947(10−20 )
C7 = 1.551(10−25 )
C8 = −9.556(10−11 )
C9 = −2.019(10−28 )
C10 = 0.05
C11 = −1.530(10−5 )
C12 = 1.049(10−4 )
C13 = −2(10−7 )
C14 = 1.165(10−8 )
C15 = −1.956(10−8 )
C16 = 1.565(10−10 )
7.1 Espaço de Trabalho 50
C17 = 3.464(10−10 )
C18 = −2.644(10−13 )
tipo char onde cada caractere é lido individualmente e através da Eq. (7.22) convertido
para uma variável do tipo inteira representando o ângulo do servo motor em graus. O
código escrito neste software encontra-se descrito no Apêndice A.3.
v = 10v + ch (7.22)
Dessa maneira é possível reprogramar o robô para diferentes tarefas sem a neces-
sidade de realizar o upload para o Arduíno, uma vez que a programação do robô está
escrita no software Processing, bastando alterar a conversão de espaços de trabalho para
a tarefa desejada.
53
Neste capítulo é tratada a cinemática inversa dos robôs paralelos espaciais, com
enfoque no desenvolvimento de um método para cálculo da cinemática inversa de um
robô paralelo de arquitetura 6-RUS.
A aplicação desta arquitetura de robô é bastante ampla, sendo seu uso superado
apenas pela plataforma de Stewart-Gough, de arquitetura 6-UPS (BONEV, 2002). A
aplicação descrita neste trabalho envolve a determinação da cinemática inversa para o
simulador de voo CEART Flight Simulator, presente no Centro de Artes da Universidade
do Estado de Santa Catarina.
2007).
Devido à possibilidade de impor condições inerciais correspondentes às dinâmicas
impostas durante movimento, robôs paralelos espaciais tem apresentado destaque na
aplicação de simuladores de movimento, onde diferentes modelos foram desenvolvidos
por diversas empresas, como os modelos apresentados na Fig. 16 e Fig. 17.
Figura 16: Simulador de voo 6 DoF de baixo custo produzido pela CKAS
Mechatronichs PTY LTD.
Estes dispositivos, como apresentados nas Fig. 16 e Fig. 17 são robôs paralelos
espaciais apresentando 6 graus de liberdade, possibilitando movimento completo. A
plataforma mais utilizada é plataforma de Stewart-Gough, baseada em uma arquitetura
do tipo 6-UPS, desenvolvida com o intuito de ser um simulador de voo (BONEV, 2002).
A segunda arquitetura mais utilizada é a 6-RUS, cuja a solução do problema de cin-
• Dimensão do crank ri ;
• Dimensão do rod Ri ;
• Ângulo de orientação dos atuadores, isto é, entre o eixo do motor e um eixo par-
alelo a f y, β.
8.2 Cinemática Inversa 57
~A = ~R + ~m (8.1)
~m = −m sin χa î + m cos χa jˆ + 0k̂ (8.2)
m = (−1)1−i d (8.3)
~R = rb cos χa î + rb sin χa jˆ (8.4)
~A = (rb cos χa − m sin χa ) î + (rb sin χa + m cos χa ) jˆ + 0k̂ (8.5)
~ = ~r +~n
C (8.6)
~n = −n sin χ j î + n cos χ j jˆ + 0k̂ (8.7)
n = (−1)i−1 e (8.8)
~r = r p cos χ j î + r p sin χ j jˆ + 0k̂ (8.9)
m ~ = r p cos χ j − m sin χ j î + r p sin χ j + m cos χ j jˆ + 0k̂
PC (8.10)
Para encotrar o vetor da junta atuada até a junta esférica passiva ~I a equação vetorial
Eq. (8.13) deve ser solucionada para cada cadeia cinemática i conforme apresentada na
Fig. 21.
f ~ =
OA f ~ + f PC
OP ~ + f PC
~ + f~I (8.13)
~I = f ~ − f OP
OA ~ − f PC
~ (8.14)
ao plano xy respectivamente.
~Iω = ~Iz + ~T (8.15)
π = ε+φ+α+θ (8.17)
−~T
onde = −T̂ .
k~T k
−T̂ = r̂ (8.19)
~T · r̂ = M (8.20)
M = k~rk cos θ (8.21)
2T M = 2T k~rk cos θ (8.22)
u = 2Tri (8.23)
2T M
u = (8.24)
cos θ
u T
= − (8.33)
v Iz
u
φ = − arctan (8.34)
v
Não é necessário utilizar este método para encontrar o valor de φ, uma vez que Iz
e T são conhecidos, entretanto como u e v são utilizados posteriormente, é conveniente
apresentar esta formulação.
Um método análogo é aplicado com o objetivo de encotrar as relações que solu-
cionam o problema de cinemática inversa. Chamando por s a projeção de Iω sobre ~r e
multiplicando por 2 k~rk por conveniência. Sendo também k~rk igual ao comprimento do
crank é possível substituir por ri
s =
~Iω
cos (φ + α) (8.35)
2ri s = 2ri
~Iω
cos (φ + α) (8.36)
8.2 Cinemática Inversa 63
Sendo δ o ângulo real formado entre o crank e ~I. A análise da Eq. (8.37) no plano
de rotação do crank, leva a δ = α + φ, de modo que seja definido w, um outro parâmetro
sem significado físico.
w = −2 k~rk
~Iω
cos δ (8.38)
w = Ri −
~I
− ri2
2
(8.39)
É definido outro parâmetros q sem significado físico, permitindo reescrever Eq. (8.44).
q = 2ri z (8.45)
2
q2 + (2ri )2 s2 2
~
= (2ri )
Iω
(8.46)
2
2
~
q2 (2 k~rk)
Iω
cos2 (φ + α)
=
2 (8.51)
w2 2
~
(2 k~rk)
Iω
sin2 (φ + α)
q
tan (φ + α) = (8.52)
w
q
φ + α = arctan (8.53)
w
π = ε+φ+α+θ
π
ε = −φ (8.54)
2
π
π = − φ + (φ + α) + θ (8.55)
2
π
θ = + φ − (φ + α) (8.56)
2 u q
π
θ = − arctan − arctan (8.57)
2 v w
Dessa forma, resolve-se o problema de cinempatica inversa. Uma vez que a função
arctan apresenta uma resposta dúbia, é conveniente utilizar a função atan2 para a real-
ização do cálculo de maneira computacional.
8.3 ALGORÍTIMO
Na seção anterior é apresentada a prova para uma metodologia de solução da cin-
emática inversa para um robô paralelo 6-RUS utilizando alguns parâmetros sem signifi-
cado físico, porém baseados na cadeia cinemática, através da manipulação algébrica das
equações de cadeia fechada.
Apesar da prova do método ser extensa, a aplicação é simples. A aplicação de um
algorítimo que calcula a posição das juntas passivas na plataforma móvel, dos atuadores
e calcula os parâmetros u, v, w e q conforme apresentado a fim de solucionar a cinemática
inversa apresentando com baixo custo computacional.
Por conveniência Eq. (8.23), Eq. (8.25), Eq. (8.39), Eq. (8.47) e Eq. (8.42) são ree-
scritas para computar o valor de u, v, w e q baseados em valores prévios para aplicar na
8.3 Algorítimo 65
Eq. (8.57).
O mesmo algorítimo é utilizado para encontrar o espaço de trabalho para uma dada
orientação utilizando incrementos para Px , Py e Pz e resolvendo a cinemática inversa
repetidamente. O espaço de trabalho para orientação constante ϕ = ϑ = ψ = 0 é
apresentado na Fig.25.
9 CONCLUSÃO E PERSPECTIVAS
REFERÊNCIAS
APÊNDICE A -- Códigos
A.1 SCILAB
O código a seguir é utilizado como simulação do robô, resolvendo a cinemática
inversa para uma trajetória linear entre dois pontos no plano, calculando, monitorando a
matriz Jacobiano e pausando o programa caso esta se torne singular.
1 / / P r o g r a m a que computa a c i n e m á t i c a i n v e r s a do r o b ô 3RRR p l a n a r
2 clear
3 clc
4 clf ;
5 / / I n p u t Data
6 b = 0.08890; / / r o d l e n g h t [m]
7 a = b/2; / / c r a n c k l e n g h t [m]
8 L = 0.26; / / s i d e l e n g h t o f b a s e t r i a n g l e [m]
9 l = 0.08573; / / s i d e l e n g h t o f end e f f e c t o r t r i a n g l e [m]
10 A = [ 0 , 0 ; L , 0 ; L / 2 , L∗ s q r t ( 3 ) / 2 ] ; / / c o o r d i n a t e s of motors
11
12 h o m e _ p o s i t i o n = [ L / 2 , L∗ s q r t ( 3 ) / 6 , 0 ] ’ ; / / home p o s i t i o n
13 TCP= [ h o m e _ p o s i t i o n ( 1 ) + 0 . 0 5 , h o m e _ p o s i t i o n ( 2 ) , −20] ’ ; / / tool center point
14
19 x c _ f i n a l = TCP ( 1 ) ; / / X p o s i t i o n − f i n a l time
20 y c _ f i n a l = TCP ( 2 ) ; / / Y p o s i t i o n − f i n a l time
21 p h i _ f i n a l = TCP ( 3 ) ; / / end−e f f e c t o r o r i e n t a t i o n − f i n a l t i m e [ o ]
22 n_passos = 100;
23
24 f o r j =0: n_passos
25 / / Position Analysis
26 xc = x c _ i n i c i a l + j ∗ ( x c _ f i n a l −x c _ i n i c i a l ) / n _ p a s s o s ;
A.1 Scilab 70
27 yc = y c _ i n i c i a l + j ∗ ( y c _ f i n a l −y c _ i n i c i a l ) / n _ p a s s o s ;
28 p h i = ( p h i _ i n i c i a l + j ∗ ( p h i _ f i n a l − p h i _ i n i c i a l ) / n _ p a s s o s )∗%p i / 1 8 0 ;
29 G = [ xc −( c o s (% p i / 6 + p h i ) ∗ l ∗ ( s q r t ( 3 ) / 3 ) ) , yc −(( l ∗ s q r t ( 3 ) / 3 ) ∗ s i n (% p i / 6 + p h i ) ) ] ;
30 H = [G( 1 ) + l ∗ c o s ( p h i ) , G( 2 ) + l ∗ s i n ( p h i ) ] ;
31 I = [G( 1 ) + l ∗ c o s ( p h i+%p i / 3 ) , G( 2 ) + l ∗ s i n ( p h i+%p i / 3 ) ] ;
32 B = [G ; H ; I ] ;
33 TCP = [ xc , yc ] ;
34
46 / / Jacobian
47 D = [ a∗ cos ( t h e t a ( 1 , 1 ) ) , a∗ s i n ( t h e t a ( 1 , 1 ) ) ;
48 (A( 2 , 1 ) +a ∗ c o s ( t h e t a ( 2 , 1 ) ) ) , (A( 2 , 2 ) +a ∗ s i n ( t h e t a ( 2 , 1 ) ) ) ;
49 (A( 3 , 1 ) +a ∗ c o s ( t h e t a ( 3 , 1 ) ) ) , (A( 3 , 2 ) +a ∗ s i n ( t h e t a ( 3 , 1 ) ) ) ]
50
51 a _ j = [A−D ] ;
52 b _ j = [D−B ] ;
53 f o r k =1:3
54 e _ j ( k , : ) = [ TCP−B ( k , : ) ] ;
55 end
56
57 J x = [ b _ j ( 1 , 1 ) , b _ j ( 1 , 2 ) , ( e _ j ( 1 , 1 ) ∗ b _ j ( 1 , 2 )−e _ j ( 1 , 2 ) ∗ b _ j ( 1 , 1 ) ) ;
58 b _ j ( 2 , 1 ) , b _ j ( 2 , 2 ) , ( e _ j ( 2 , 1 ) ∗ b _ j ( 2 , 2 )−e _ j ( 2 , 2 ) ∗ b _ j ( 2 , 1 ) ) ;
59 b _ j ( 3 , 1 ) , b _ j ( 3 , 2 ) , ( e _ j ( 3 , 1 ) ∗ b _ j ( 3 , 2 )−e _ j ( 3 , 2 ) ∗ b _ j ( 3 , 1 ) ) ]
60
61 f o r k =1:3
62 J q ( k , k ) = [ ( a _ j ( k , 1 ) ∗ b _ j ( k , 2 )−a _ j ( k , 2 ) ∗ b _ j ( k , 1 ) ) ] ;
63 end
64
65 i f a b s ( r e a l ( J q ( 1 , 1 ) ) ) <0.0001 t h e n b r e a k
66 end
67
68 i f a b s ( r e a l ( J q ( 2 , 2 ) ) ) <0.0001 t h e n b r e a k
69 end
70
71 i f a b s ( r e a l ( J q ( 3 , 3 ) ) ) <0.0001 t h e n b r e a k
72 end
73 J = inv ( Jq ) ∗ Jx
74
75 M = [A( 1 , 1 ) A( 1 , 2 ) ;
76 a∗ cos ( t h e t a ( 1 , 1 ) ) , a∗ s i n ( t h e t a ( 1 , 1 ) ) ;
A.2 Processing 71
77 B ( 1 , 1 ) ,B ( 1 , 2 ) ;
78 B ( 2 , 1 ) ,B ( 2 , 2 ) ;
79 (A( 2 , 1 ) +a ∗ c o s ( t h e t a ( 2 , 2 ) ) ) , (A( 2 , 2 ) +a ∗ s i n ( t h e t a ( 2 , 2 ) ) ) ;
80 A( 2 , 1 ) ,A( 2 , 2 ) ;
81 (A( 2 , 1 ) +a ∗ c o s ( t h e t a ( 2 , 2 ) ) ) , (A( 2 , 2 ) +a ∗ s i n ( t h e t a ( 2 , 2 ) ) ) ;
82 B ( 2 , 1 ) ,B ( 2 , 2 ) ;
83 B ( 3 , 1 ) ,B ( 3 , 2 ) ;
84 (A( 3 , 1 ) +a ∗ c o s ( t h e t a ( 3 , 2 ) ) ) , (A( 3 , 2 ) +a ∗ s i n ( t h e t a ( 3 , 2 ) ) ) ;
85 A( 3 , 1 ) ,A( 3 , 2 ) ;
86 (A( 3 , 1 ) +a ∗ c o s ( t h e t a ( 3 , 2 ) ) ) , (A( 3 , 2 ) +a ∗ s i n ( t h e t a ( 3 , 2 ) ) ) ;
87 B ( 3 , 1 ) ,B ( 3 , 2 )
88 B ( 1 , 1 ) ,B ( 1 , 2 ) ; ] ’ ;
A.2 PROCESSING
O código a seguir apresenta o programa escrito no software Processing para captar o
dado do cursor, realizar a conversão entre os espaços de trabalho e calcular a cinemática
inversa.
1 import processing . s e r i a l . ∗ ;
2 f l o a t xpos =90;
3 f l o a t ypos =90;
4 S e r i a l p o r t ; / / The s e r i a l p o r t we w i l l be u s i n g
5 i n t ladox =1250;
6 i n t ladoy =710;
7
8 f l o a t k1x = 0 . 0 9 ;
9 f l o a t k2x = 6 . 1 0 7 ∗ pow ( 1 0 , −5 ) ;
10 f l o a t k3x = 0 ;
11 f l o a t k4x = 2 . 3 8 2 ∗ pow ( 1 0 , −2 2 ) ;
12 f l o a t k5x = 4 . 1 0 8 ∗ pow ( 1 0 , −2 3 ) ;
13 f l o a t k6x = 6 2 5 9 4 7 4 . 8 ∗ pow ( 1 0 , −1 4 ) ;
14 f l o a t k7x = 1 . 5 5 1 ∗ pow ( 1 0 , −2 5 ) ;
15 f l o a t k8x = −9556.45∗pow ( 1 0 , −1 4 ) ;
16 f l o a t k9x = −2.019∗pow ( 1 0 , −2 8 ) ;
17
18 f l o a t k1y = 0 . 0 5 ;
19 f l o a t k2y = −0.0000153;
20 f l o a t k3y = 0 . 0 0 0 1 0 4 9 ;
21 f l o a t k4y = −0.0000002;
22 f l o a t k5y = 1 . 1 6 5 ∗ pow ( 1 0 , −8 ) ;
23 f l o a t k6y = −1.956∗pow ( 1 0 , −8 ) ;
24 f l o a t k7y = 1 . 5 6 5 ∗ pow ( 1 0 , −1 0 ) ;
25 f l o a t k8y = 3 . 4 6 4 ∗ pow ( 1 0 , −1 0 ) ;
26 f l o a t k9y = −2.644∗pow ( 1 0 , −1 3 ) ;
27
28 void setup ( )
29 {
A.2 Processing 72
30 s i z e ( ladox , ladoy ) ;
31 frameRate (100) ;
32 println ( Serial . l i s t () ) ;
33 p o r t = new S e r i a l ( t h i s , S e r i a l . l i s t ( ) [ 0 ] , 1 9 2 0 0 ) ;
34 }
35 v o i d draw ( )
36 {
37 f i l l (175) ;
38 r e c t ( 0 , 0 , ladox , ladoy ) ;
39 f i l l ( 2 5 5 , 0 , 0 ) ; / / r g b v a l u e s o RED
40 r e c t ( l a d o x / 2 , l a d o y / 2 , mouseX−l a d o x / 2 , 1 0 ) ; / / xpos , ypos , w i d t h , h e i g h t
41 f i l l ( 0 , 2 5 5 , 0 ) ; / / and GREEN
42 r e c t ( l a d o x / 2 , l a d o y / 2 , 1 0 , mouseY−l a d o y / 2 ) ;
43 u p d a t e ( mouseX , mouseY ) ;
44 }
45 void update ( i n t x , i n t y )
46 {
47
48 i n t P1 = 9 0 ;
49 i n t P2 = 9 0 ;
50 i n t P3 = 9 0 ;
51
52 f l o a t y2= l a d o y −y ;
53 x p o s = k1x+k2x ∗ x+k3x ∗ y2+k4x ∗x∗ y2+k5x ∗pow ( x , 2 ) +k6x ∗pow ( y2 , 2 ) +k7x ∗pow ( x , 2 ) ∗ y2+k8x ∗pow ( y2 , 2 ) ∗x+
k9x ∗pow ( x , 2 ) ∗pow ( y2 , 2 ) ;
54 y p o s = k1y+k2y ∗x+k3y ∗ y2+k4y ∗x∗ y2+k5y ∗pow ( x , 2 ) +k6y ∗pow ( y2 , 2 ) +k7y ∗pow ( x , 2 ) ∗ y2+k8y ∗pow ( y2 , 2 ) ∗x+
k9y ∗pow ( x , 2 ) ∗pow ( y2 , 2 ) ;
55
56 i n t phi= 0;
57
58 f l o a t A1x = 0 ; / / p o s i t i o n x of motor a x i s 1 [ m e t e r s ]
59 f l o a t A2x = 0 . 2 6 ; / / p o s i t i o n x of motor a x i s 2 [ m e t e r s ]
60 f l o a t A3x = 0 . 1 3 ; / / p o s i t i o n x of motor a x i s 3 [ m e t e r s ]
61
62 f l o a t A1y = 0 ; / / p o s i t i o n y of motor a x i s 1 [ m e t e r s ]
63 f l o a t A2y = 0 ; / / p o s i t i o n y of motor a x i s 2 [ m e t e r s ]
64 f l o a t A3y = 0 . 1 3 ∗ s q r t ( 3 ) ; / / p o s i t i o n y of motor a x i s 3 [ m e t e r s ]
65
69 f l o a t l = 0.08573; / / move p l a t f o r m d i s t a n c e b e t w e e n j o i n t [ m e t e r s ]
70
71 f l o a t C1x = x p o s − l ∗ ( c o s ( ( P I / 6 ) + p h i ) ) ∗ ( s q r t ( 3 ) / 3 ) ;
72 f l o a t C2x = C1x + l ∗ ( c o s ( p h i ) ) ;
73 f l o a t C3x = C1x + l ∗ ( c o s ( p h i + ( P I / 3 ) ) ) ;
74
75 f l o a t C1y = y p o s − l ∗ ( s i n ( ( P I / 6 ) + p h i ) ) ∗ ( s q r t ( 3 ) / 3 ) ;
76 f l o a t C2y = C1y + l ∗ ( s i n ( p h i ) ) ;
77 f l o a t C3y = C1y + l ∗ ( s i n ( p h i + ( P I / 3 ) ) ) ;
A.2 Processing 73
78
109 f l o a t t h e t a 1 = 2∗ a t a n ( t 1 ) ∗ 1 8 0 / P I ;
110 f l o a t t h e t a 2 = 2∗ a t a n ( t 2 ) ∗ 1 8 0 / P I ;
111 f l o a t t h e t a 3 = 2∗ a t a n ( t 3 ) ∗ 1 8 0 / P I ;
112
115 i f ( t h e t a 3 <0) {
116 t e t a 3 = t h e t a 3 + 180 +4 5;
117 } else {
118 t e t a 3 = t h e t a 3 −135;
119 }
120
121 i f ( d e l t a 1 <0) {
122 P1 = P1 ;
123 } else {
124 P1 = i n t ( t h e t a 1 ) ;
125 }
126
127 i f ( d e l t a 2 <0) {
A.3 Arduino 74
128 P2 = P2 ;
129 } else {
130 P2 = i n t ( t h e t a 2 ) ;
131 }
132
133 i f ( d e l t a 3 <0) {
134 P3 = P3 ;
135 } else {
136 P3 = i n t ( t e t a 3 ) ;
137 }
138
A.3 ARDUINO
O código a seguir é utilizado no Arduino para ler a porta serial e enviar um valor de
ângulo entre 0 e 180 graus para os servos.
1 # i n c l u d e < S e r v o . h>
2 Servo servo1 ; Servo servo2 ; Servo servo3 ;
3 // set i n i t i a l v a l u e s f o r x and y
4 i n t ypos = 0 ;
5 i n t xpos= 0 ;
6 void setup ( ) {
7 servo1 . a t t a c h (9) ;
8 servo2 . a t t a c h (6) ;
9 servo3 . a t t a c h (5) ;
10 S e r i a l . b e g i n ( 1 9 2 0 0 ) ; / / 19200 i s t h e r a t e o f c o m m u n i c a t i o n
11 Serial . println ( " Rolling " ) ;
12 }
13 void loop ( ) {
14 s t a t i c i n t v = 0 ; / / v a l u e t o be s e n t t o t h e s e r v o (0 −180)
15 if ( Serial . available () ) {
16 c h a r ch = S e r i a l . r e a d ( ) ; / / r e a d i n a c h a r a c t e r from t h e s e r i a l p o r t and a s s i g n t o ch
17 s w i t c h ( ch ) { / / s w i t c h b a s e d on t h e v a l u e o f ch
18 case ’0 ’ . . . ’9 ’ : / / if i t ’ s numeric
19 v = v ∗10 + ch − ’ 0 ’ ;
20
21 break ;
22 case ’p ’ :
23 servo1 . write ( v ) ;
24 v = 0;
25 break ;
26 case ’q ’ :
27 servo2 . write ( v ) ;
28 v = 0;
A.3 Arduino 75
29 break ;
30 case ’ r ’ :
31 servo3 . write ( v ) ;
32 v =0;
33 }
34 }
35 }