Cinemática para movimentos de carro com braço robô com animação 3D
-
Upload
marcel-holanda-cavalcante-ribeiro -
Category
Documents
-
view
739 -
download
5
Transcript of Cinemática para movimentos de carro com braço robô com animação 3D
_____________________________________________________________________________
Fatec Carapicuíba
____________________________________________________________ http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuíba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - [email protected]
Trabalho (P2) de Física
Turma: noturna
Cinemática para Movimentos de Carro com
braço Robô com animação 3D
Alunos:
Edgard Pinheiro Gonçalves
1430431113051
Ricardo da Verdade Silva
1430431113074
Kaique Nascimento
1430431113064
Maitê Boniolo
1430431013176
Marcel Holanda Cavalcante Ribeiro
1430431113096
_____________________________________________________________________________
Fatec Carapicuíba
____________________________________________________________ http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuíba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - [email protected]
Contents Proposta do projeto ..................................................................................................................... 3
Modelagem ............................................................................................................................... 3
Projeto Chiforimpula .................................................................................................................. 4
Metodologia ............................................................................................................................. 4
Modelo ...................................................................................................................................... 5
Scripts e Aplicação .................................................................................................................. 7
Desafios................................................................................................................................... 12
Conclusão ............................................................................................................................... 13
_____________________________________________________________________________
Fatec Carapicuíba
____________________________________________________________ http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuíba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - [email protected]
Proposta do projeto Usar geometria e cinemática para modelar o seguinte manipulador de no mínimo 2 G.L.
(Graus de liberdade), e executar a programação.
Grupo de até 5 alunos, nota de 0 a 10, com entrega até dia 23/06/2012.
Modelagem
- Braço robô sobre base móvel (eixo x).
- Para projetos 3D opcionalmente considere girar a Base no próprio eixo.
y
x
L1.cos(α1) L2.cos(α1 + α2)
L1.sen(α1)
L2.sen(α1 + α2)
αααα1
αααα2
L1
L2
_____________________________________________________________________________
Fatec Carapicuíba
____________________________________________________________ http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuíba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - [email protected]
Projeto Chiforimpula
O nome do projeto é uma homenagem a um episódio do Chaves em
que ele apresenta um desenho na escola (link na bibliografia), que
mesmo com traços feios e tortos e não lembrando nada, (como
normalmente são os desenhos de programadores..) conseguem
expressar toda a criatividade nas entrelinhas. ( em nosso caso, em
linhas de código. :)
O projeto nasceu da integração das nossas matérias de Script para
Jogos e Física, e sua conclusão foi possível graças a paciência,
auxílio e materiais gentilmente fornecidos pelo professor Olímpio,
sobre um projeto semelhante, que utilizamos como base, e aulas e
dicas do professor Antônio.
Metodologia
Adaptamos o código que recebemos em c, nas linguagens Python, procurando manter as
características basicas de distancias , angulos, velocidade e força:
Rotação 360°
na Base do Braço
Rotação 0° a 90°
na Articulação 1
Rotação -45° a 90°
Na Articulação 2
Movimentação das rodas
nos planos x e y (para
frente, para trás,
esquerda e direita)
_____________________________________________________________________________
Fatec Carapicuíba
____________________________________________________________ http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuíba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - [email protected]
Modelo
Também Criamos um modelo em 3D no Programa Blender versão 2.63ª para receberem os
Scripts python.
_____________________________________________________________________________
Fatec Carapicuíba
____________________________________________________________ http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuíba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - [email protected]
Adicionalmente recebeu um “Mangual” e um sistema 4x4 de tração.
_____________________________________________________________________________
Fatec Carapicuíba
____________________________________________________________ http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuíba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - [email protected]
Scripts e Aplicação
A Simulação da Física em modelos 3D, mesmo com o auxílio das conhecidas Games Engines
não é fácil ou intuitiva. As simulações de movimento estão prontas mas são como qualquer
fórmula, sem noções de física e matemática, são impossíveis de aplicar. Abaixo demonstramos
através do Mapa da estrutura, ou Outliner dos Objetos e Heranças, onde foram aplicados os
scripts em Python.
- Objeto concreto
- Objeto vazio
- Base do modelo (cubo, esfera, cone, etc.. )
- Restrições Fisicas
- Visivel, Selecionavel e Renderizavel
#Controle.py # importando modulos
from bge import logic as g, events
# obter o controle
c = g.getCurrentController()
Controle.py e Fisica.py
movetorre.py
_____________________________________________________________________________
Fatec Carapicuíba
____________________________________________________________ http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuíba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - [email protected]
# obter o objeto conectado, o carro
o = c.owner
#obter o teclado
tc = g.keyboard.events
# variaveis carro
freio = 0.0
virar = 0.0
acelerador = 0.0
# Comandos Carro
if tc[events.WKEY]: acelerador -= 80.0
if tc[events.SKEY]: acelerador = 80.0
if tc[events.AKEY]: virar -= 1.5
if tc[events.DKEY]: virar = 1.5
if tc[events.SPACEKEY]: freio = 1.0
#linkar fisica do Controle.py com o Fisica.py
carro = o["carro"]
# aplicar aceleração nas rodas 1,2,3,4
carro.applyEngineForce(acelerador,0)
carro.applyEngineForce(acelerador,1)
carro.applyEngineForce(acelerador,2)
carro.applyEngineForce(acelerador,3)
# vira roda 0.1
carro.setSteeringValue(virar,0)
carro.setSteeringValue(virar,1)
#freia rodas 0, 1, 2, 3
carro.applyBraking(freio,0)
carro.applyBraking(freio,1)
carro.applyBraking(freio,2)
carro.applyBraking(freio,3)
#########################################################
#Fisica.py #importar modulos
from bge import logic as g
import PhysicsConstraints as pc
_____________________________________________________________________________
Fatec Carapicuíba
____________________________________________________________ http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuíba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - [email protected]
#obter controle
c = g.getCurrentController()
#obter Cena e Objetos da Cena
s = g.getCurrentScene().objects
#nome das Rodas
rd_1 = s["roda001"]
rd_2 = s["roda002"]
rd_3 = s["roda003"]
rd_4 = s["roda004"]
# posicao das rodas x y z
rd_p1 = [ -4.5, 3.0, -5.4 ]
rd_p2 = [ 4.5, 3.0, -5.4 ]
rd_p3 = [ -4.5, -3.0, -5.4 ]
rd_p4 = [ 4.5, -3.0, -5.4 ]
# angulo da suspensao x y z
rd_an1 = [ 0.0, 0.0, -0.5]
rd_an2 = [ 0.0, 0.0, -0.5]
rd_an3 = [ 0.0, 0.0, -0.5]
rd_an4 = [ 0.0, 0.0, -0.5]
#Direçao de rolamento x y z
rd_e1 = [ 0.0, 1.0, 0.0 ]
rd_e2 = [ 0.0, 1.0, 0.0 ]
rd_e3 = [ 0.0, 1.0, 0.0 ]
rd_e4 = [ 0.0, 1.0, 0.0 ]
#altura da suspensao
rd_as1 = 0.4
rd_as2 = 0.4
rd_as3 = 0.4
rd_as4 = 0.4
#raio das rodas
rd_r1 = 1.897
rd_r2 = 1.897
rd_r3 = 1.897
rd_r4 = 1.897
# direcao
rd_d1 = True
rd_d2 = True
rd_d3 = False
rd_d4 = False
_____________________________________________________________________________
Fatec Carapicuíba
____________________________________________________________ http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuíba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - [email protected]
# Obter o objeto conectado, o carro
o = c.owner
# criando a fisica
carro = pc.createConstraint(o.getPhysicsId(),0,11)
carro = carro.getConstraintId()
o["carro"] = carro = pc.getVehicleConstraint(carro)
# add as rodas no carro
carro.addWheel( rd_1, rd_p1, rd_an1, rd_e1, rd_as1, rd_r1, rd_d1 )
carro.addWheel( rd_2, rd_p2, rd_an2, rd_e2, rd_as2, rd_r2, rd_d2 )
carro.addWheel( rd_3, rd_p3, rd_an3, rd_e3, rd_as3, rd_r3, rd_d3 )
carro.addWheel( rd_4, rd_p4, rd_an4, rd_e4, rd_as4, rd_r4, rd_d4 )
# limite da rotaçao do carro, evitar capotamento
carro.setRollInfluence(0.05,0)
carro.setRollInfluence(0.05,1)
carro.setRollInfluence(0.05,2)
carro.setRollInfluence(0.05,3)
#########################################################
#movetorre.py #importar modulos
import bpy
import math
from bge import logic as g, events
# get object list
objList = g.getCurrentScene().objects
# Variaveis
torre = objList[ "rotacaoTorre" ]
umgl = objList[ "rotacaoPriSeg" ]
dogl = objList[ "no2glCorda" ]
#tempo velocidade Aceleração
t=0.03; v=0.0; a=0.0;
#distancia inicial
l1 = 4.892;
l2 = 4.892;
l3 = 1.250;
#variaveis auxiliares
x_ant=0.0; y_ant=0.0; z_ant=0.0;
vx_ant=0.0; vy_ant=0.0; vz_ant=0.0;
_____________________________________________________________________________
Fatec Carapicuíba
____________________________________________________________ http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuíba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - [email protected]
t1=0.0; t2=0.0; t3=0.0;
a1=0.0; a2=0.0; a3=0.0;
x=0.0; y=0.0; z=0.0;
ax=0.0; ay=0.0; az=0.0;
vx=0.0; vy=0.0; vz=0.0;
#obter o teclado
tc = g.keyboard.events
# Comandos do Primeiro Braco
if tc[events.UPARROWKEY]: a1 -= 0.02;
if tc[events.DOWNARROWKEY]: a1 = 0.02;
# Comandos do Segundo Braco
if tc[events.QKEY]: a2 -= 0.02;
if tc[events.EKEY]: a2 = 0.02;
# Comandos da torre
if tc[events.LEFTARROWKEY]: a3 -= 0.02;
if tc[events.RIGHTARROWKEY]: a3 = 0.02;
t1 = ( 3.141596 * a1 ) / 180;
t2 = ( 3.141596 * a2 ) / 180;
t3 = ( 3.141596 * a3 ) / 180;
x = ( l1 * math.cos(t2) + l3 * math.cos(t2+t3) ) * math.cos(t1);
y = ( l2 * math.cos(t2) + l3 * math.cos(t2+t3) ) * math.sin(t1);
z = ( l1+l2 * math.sin(t2) + l3 * math.sin(t2+t3) );
#Velocidade
vx = ( x - x_ant ) / t;
vy = ( y - y_ant ) / t;
vz = ( z - z_ant ) / t;
#Aceleracao
ax = ( vx - vx_ant) / t;
ay = ( vy - vy_ant) / t;
az = ( vz - vz_ant) / t;
x_ant = x;
y_ant = y;
z_ant = z;
vx_ant = vx;
_____________________________________________________________________________
Fatec Carapicuíba
____________________________________________________________ http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuíba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - [email protected]
vy_ant = vy;
vz_ant = vz;
#Imprime simulação de dados
print ("x y z:",x, y, z);
print ("Posicao t1 t2 t3:",t1, t2, t3);
print ("Velocidade vx vy vz:",vx,vy,vz);
#atualiza posição dos bracos e torre
umgl.applyRotation((0,a1,0), False);
umgl.applyRotation((0,a1,0), False);
dogl.applyRotation((0,a2,0), False);
dogl.applyRotation((0,a2,0), False);
torre.applyRotation((0,0,a3), False);
torre.applyRotation((0,0,a3), False);
#########################################################
Desafios
Como sempre, a falta de tempo nos proporcionam desafios
adicionais como falta de tempo para pesquisar e aprender
as ferramentas, e estudar como aproveitar de forma mais
inteligente a física no mundo dos games.
Nos programas visuais como o Blender 2.63ª, a tendencia
é encapsular toda a lógica debaixo de icones e biblioteca
de scripts, Para demonstrar os principios que aprendemos
decidimos realizar uma abstração no script movetorre.py,
onde os angulos são dados em passos predefinidos que são
incrementados 0.02 vezes 30 frames por segundo, ou seja:
0.6 por segundo que o usuario segurar os botões:
• Seta para cima, Seta para baixo, (move bracos 1 e
respectivamente braco2 e mangual verticalmente)
• Seta Direita, Seta esquerda, (gira Base dos Braços
e mangual no próprio eixo)
• Tecla Q e Tecla E, (move braço 2 e
respectivamente o mangual)
Então capturamos estes dados para simular as contas que o blender está “escondendo” do
usuário e imprimimos no console.
_____________________________________________________________________________
Fatec Carapicuíba
____________________________________________________________ http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuíba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - [email protected]
Decidimos Utilizar a biblioteca PhysicsConstraints do blender para
simular os movimentos do carro como Aceleração, Inercia, Frenagem,
etc.
Nós também construimos um mangual, que demonstraria perfeitamente
todas as aplicações da fisica que estudamos, (e causaria mais
destruição..). Mas o modelo ficou muito pesado na renderização interna
do Blender. (a própria Mango, recomenda renderizadores externos.. mas
não houve tempo para aplicarmos esta solução..), e trocamos por um
“chocalho de bebê” gigante de 100Kg..
A situação mais difícil foi acertar as heranças entre Objetos no Blender. Depois que aplicamos
os conceitos de Design Patterns de programação (Obrigado Java..), Onde Objetos vazios
representam interfaces e Objetos concretos as classes, facilitou bastante o trabalho.
Não houve tempo hábil para realizar tratamento de erros no código e na física de colisão.. Então
quando o carro se acerta ele entra em looping e literalmente sai voando pela tela..
Conclusão
Aprendemos física na prática, este tipo de projeto é altamente eficiente no ensino dos alunos e
poderia ser iniciado nas primeiras semanas de aula e trabalhado em partes durante o semestre,
para sua respectiva entrega no fim do semestre.
Agradeçemos aos professores pela oportunidade e a todos que igualmente contribuiram para a
realização deste projeto.
_____________________________________________________________________________
Fatec Carapicuíba
____________________________________________________________ http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuíba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - [email protected]
Bibliografia
Origem do Chiforimpula / Chorofompila - http://www.youtube.com/watch?v=E0fmuHJFhck
Blender 2.59 - Tutorial Python - Física de carro Realista - Parte 1 de 2 - #9 -
http://www.youtube.com/watch?v=Jehf8sILOyA
Blender 2.59 - Tutorial Python - Física de carro Realista - Parte 2 de 2 - #9 -
http://www.youtube.com/watch?v=ap2IVLdvQqM
Tutorial Blender 2.59 – Corrente - http://www.youtube.com/watch?v=rEqFRoiUkts
Python Number cos() Function - http://www.tutorialspoint.com/python/number_cos.htm
Conteúdo do DVD que segue com o trabalho:
• Programas
o Blender 2.63ª – linux / windows (32 / 64bits)
o Foxit Reader – leitor de PDF
o Linux Ubuntu 11.04.ISO
o DAEMON Tools Lite Setup linux / windows (32 / 64bits)
o VirtualBox-4.1.0-73009-Win
• Arquivos
o Cinemática para Movimentos de Carro com braço Robô com animação 3D.pdf
o ModeloTrabdeFisicaP2.pdf
o novotanque.blend
o robo.c