Sei sulla pagina 1di 14

_____________________________________________________________________________

Fatec Carapicuba

Trabalho (P2) de Fsica


Turma: noturna

Cinemtica para Movimentos de Carro com


brao Rob com animao 3D

Alunos:
Edgard Pinheiro Gonalves
1430431113051
Ricardo da Verdade Silva
1430431113074
Kaique Nascimento
1430431113064
Mait Boniolo
1430431013176
Marcel Holanda Cavalcante Ribeiro
1430431113096

____________________________________________________________
http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - contato@fateccarapicuiba.edu.br

_____________________________________________________________________________
Fatec Carapicuba

Contents
Proposta do projeto ..................................................................................................................... 3
Modelagem ............................................................................................................................... 3
Projeto Chiforimpula .................................................................................................................. 4
Metodologia ............................................................................................................................. 4
Modelo ...................................................................................................................................... 5
Scripts e Aplicao .................................................................................................................. 7
Desafios................................................................................................................................... 12
Concluso ............................................................................................................................... 13

____________________________________________________________
http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - contato@fateccarapicuiba.edu.br

_____________________________________________________________________________
Fatec Carapicuba

Proposta do projeto
Usar geometria e cinemtica para modelar o seguinte manipulador de no mnimo 2 G.L.
(Graus de liberdade), e executar a programao.
Grupo de at 5 alunos, nota de 0 a 10, com entrega at dia 23/06/2012.

Modelagem
- Brao rob sobre base mvel (eixo x).
- Para projetos 3D opcionalmente considere girar a Base no prprio eixo.

L2

L2.sen(1 + 2)

L1.sen(1)

L1
1

x
L1.cos(1)

L2.cos(1 + 2)

____________________________________________________________
http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - contato@fateccarapicuiba.edu.br

_____________________________________________________________________________
Fatec Carapicuba

Projeto Chiforimpula
O nome do projeto uma homenagem a um episdio do Chaves em
que ele apresenta um desenho na escola (link na bibliografia), que
mesmo com traos feios e tortos e no lembrando nada, (como
normalmente so os desenhos de programadores..) conseguem
expressar toda a criatividade nas entrelinhas. ( em nosso caso, em
linhas de cdigo. :)
O projeto nasceu da integrao das nossas matrias de Script para
Jogos e Fsica, e sua concluso foi possvel graas a pacincia,
auxlio e materiais gentilmente fornecidos pelo professor Olmpio,
sobre um projeto semelhante, que utilizamos como base, e aulas e
dicas do professor Antnio.

Metodologia
Adaptamos o cdigo que recebemos em c, nas linguagens Python, procurando manter as
caractersticas basicas de distancias , angulos, velocidade e fora:

Rotao 0 a 90
na Articulao 1
Rotao -45 a 90
Na Articulao 2
Rotao 360
na Base do Brao

Movimentao das rodas


nos planos x e y (para
frente, para trs,
esquerda e direita)

____________________________________________________________
http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - contato@fateccarapicuiba.edu.br

_____________________________________________________________________________
Fatec Carapicuba

Modelo
Tambm Criamos um modelo em 3D no Programa Blender verso 2.63 para receberem os
Scripts python.

____________________________________________________________
http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - contato@fateccarapicuiba.edu.br

_____________________________________________________________________________
Fatec Carapicuba

Adicionalmente recebeu um Mangual e um sistema 4x4 de trao.

____________________________________________________________
http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - contato@fateccarapicuiba.edu.br

_____________________________________________________________________________
Fatec Carapicuba

Scripts e Aplicao
A Simulao da Fsica em modelos 3D, mesmo com o auxlio das conhecidas Games Engines
no fcil ou intuitiva. As simulaes de movimento esto prontas mas so como qualquer
frmula, sem noes de fsica e matemtica, so impossveis de aplicar. Abaixo demonstramos
atravs do Mapa da estrutura, ou Outliner dos Objetos e Heranas, onde foram aplicados os
scripts em Python.

Controle.py e Fisica.py

movetorre.py

- Objeto concreto
- Objeto vazio
- Base do modelo (cubo, esfera, cone, etc.. )
- Restries Fisicas
- Visivel, Selecionavel e Renderizavel

#Controle.py
# importando modulos
from bge import logic as g, events
# obter o controle
c = g.getCurrentController()
____________________________________________________________
http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - contato@fateccarapicuiba.edu.br

_____________________________________________________________________________
Fatec Carapicuba
# 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 acelerao 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
____________________________________________________________
http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - contato@fateccarapicuiba.edu.br

_____________________________________________________________________________
Fatec Carapicuba
#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]
#Direao 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

____________________________________________________________
http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - contato@fateccarapicuiba.edu.br

_____________________________________________________________________________
Fatec Carapicuba
# 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 rotaao 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 Acelerao
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;
____________________________________________________________
http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - contato@fateccarapicuiba.edu.br

_____________________________________________________________________________
Fatec Carapicuba
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;
____________________________________________________________
http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - contato@fateccarapicuiba.edu.br

_____________________________________________________________________________
Fatec Carapicuba
vy_ant = vy;
vz_ant = vz;
#Imprime simulao 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 posio 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 fsica no mundo dos games.
Nos programas visuais como o Blender 2.63, a tendencia
encapsular toda a lgica debaixo de icones e biblioteca
de scripts, Para demonstrar os principios que aprendemos
decidimos realizar uma abstrao no script movetorre.py,
onde os angulos so dados em passos predefinidos que so
incrementados 0.02 vezes 30 frames por segundo, ou seja:
0.6 por segundo que o usuario segurar os botes:

Seta para cima, Seta para baixo, (move bracos 1 e


respectivamente braco2 e mangual verticalmente)
Seta Direita, Seta esquerda, (gira Base dos Braos
e mangual no prprio eixo)
Tecla Q e Tecla E, (move brao 2 e
respectivamente o mangual)

Ento capturamos estes dados para simular as contas que o blender est escondendo do
usurio e imprimimos no console.

____________________________________________________________
http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - contato@fateccarapicuiba.edu.br

_____________________________________________________________________________
Fatec Carapicuba
Decidimos Utilizar a biblioteca PhysicsConstraints do blender para
simular os movimentos do carro como Acelerao, Inercia, Frenagem,
etc.
Ns tambm construimos um mangual, que demonstraria perfeitamente
todas as aplicaes da fisica que estudamos, (e causaria mais
destruio..). Mas o modelo ficou muito pesado na renderizao interna
do Blender. (a prpria Mango, recomenda renderizadores externos.. mas
no houve tempo para aplicarmos esta soluo..), e trocamos por um
chocalho de beb gigante de 100Kg..
A situao mais difcil foi acertar as heranas entre Objetos no Blender. Depois que aplicamos
os conceitos de Design Patterns de programao (Obrigado Java..), Onde Objetos vazios
representam interfaces e Objetos concretos as classes, facilitou bastante o trabalho.
No houve tempo hbil para realizar tratamento de erros no cdigo e na fsica de coliso.. Ento
quando o carro se acerta ele entra em looping e literalmente sai voando pela tela..

Concluso
Aprendemos fsica na prtica, 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.
Agradeemos aos professores pela oportunidade e a todos que igualmente contribuiram para a
realizao deste projeto.

____________________________________________________________
http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - contato@fateccarapicuiba.edu.br

_____________________________________________________________________________
Fatec Carapicuba

Bibliografia
Origem do Chiforimpula / Chorofompila - http://www.youtube.com/watch?v=E0fmuHJFhck
Blender 2.59 - Tutorial Python - Fsica de carro Realista - Parte 1 de 2 - #9 http://www.youtube.com/watch?v=Jehf8sILOyA
Blender 2.59 - Tutorial Python - Fsica 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

Contedo 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 Cinemtica para Movimentos de Carro com brao Rob com animao 3D.pdf
o ModeloTrabdeFisicaP2.pdf
o novotanque.blend
o robo.c

____________________________________________________________
http://www.fateccarapicuiba.edu.br/
Avenida Francisco Pignatari, 650 - Vila Gustavo Correia, Carapicuba - SP - CEP: 06310-390
(11)4184-8404 / 4183-6849 / 4183-6827 - contato@fateccarapicuiba.edu.br

Potrebbero piacerti anche