Cinemática para movimentos de carro com braço robô com animação 3D

14
_____________________________________________________________________________ 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

Transcript of Cinemática para movimentos de carro com braço robô com animação 3D

Page 1: 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

Page 2: 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]

Contents Proposta do projeto ..................................................................................................................... 3

Modelagem ............................................................................................................................... 3

Projeto Chiforimpula .................................................................................................................. 4

Metodologia ............................................................................................................................. 4

Modelo ...................................................................................................................................... 5

Scripts e Aplicação .................................................................................................................. 7

Desafios................................................................................................................................... 12

Conclusão ............................................................................................................................... 13

Page 3: 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]

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

Page 4: 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]

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)

Page 5: 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]

Modelo

Também Criamos um modelo em 3D no Programa Blender versão 2.63ª para receberem os

Scripts python.

Page 6: 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]

Adicionalmente recebeu um “Mangual” e um sistema 4x4 de tração.

Page 7: 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]

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

Page 8: 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]

# 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

Page 9: 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]

#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

Page 10: 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]

# 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;

Page 11: 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]

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;

Page 12: 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]

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.

Page 13: 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]

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.

Page 14: 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]

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