Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Ayuda con VR

Iniciado por Santiago Sandrini, Abril 11, 2018, 04:22:34 AM

Tema anterior - Siguiente tema
Hola. Mi nombre es Santiago, soy estudiante de escuela secundaria técnica, especialidad electrónica, para fin de año estoy preparando un proyecto en el cual necesito conectar el arduino con Unity. Estuve aprendiendo lo básico de unity y con ayuda de ejemplos pude crear un script para poder rotar la cámara con las lecturas que realiza el arduino de un giroscopio (MPU6050). Resulta que la utilidad que le quiero dar a esto es un juego de Realidad Virtual, el caso de una montaña rusa en la cual pueda disfrutar de la experiencia en un mundo 3D, poder ver a mis alrededores, etc.
 
PROBLEMA: he logrado que la cámara rote en respuesta al sensor, pero al crear un las vías de la montaña rusa y hacer un recorrido para el carrito, montando la cámara sobre el mismo, he logrado que la cámara rote según las vías de la montaña, pero no puedo combinarlo con la rotación que proviene del giroscopio. Lo que quiero decir es que ambas rotaciones deberían sumarse, pero en realidad esto no sucede, se superponen, un script hace que la cámara rote en respuesta al sensor, y el otro en respuesta al trayecto de la vía, alguien podría ayudarme con el tema? Muchas gracias.

Cita de: Santiago Sandrini date=1523413354Lo que quiero decir es que ambas rotaciones deberían sumarse, pero en realidad esto no sucede, se superponen, un script hace que la cámara rote en respuesta al sensor, y el otro en respuesta al trayecto de la vía, alguien podría ayudarme con el tema? Muchas gracias.
   


No se bien como es la rotación del giroscopio, pero si la podés transformar a quaternions podés multiplicar uno y otro (el orden importa) y se suman las rotaciones, creo que algo así:
 

Quaternion rot1 = ...;
Quaternion rot2 = ...;
Quaternion rot3 = ...;
Quaternion rotTotal =  rot3 * rot2 * rot1;   //rotTotal rota en rot1, luego en rot2 , luego en rot3

 
Que info te brinda el giroscopio? yo usé uno en la LPC BAseBoard y estaba en grados (x,y,z) en Unity podrías transformar de Euler a Quaternion y estarías bien.
 
Sino podrías transformar todo en euler quizás, no es que me agraden los eulers pero a la larga tienen problemas.
 
Saludos
 
 

Abril 11, 2018, 02:56:35 PM #2 Ultima modificación: Abril 11, 2018, 03:04:52 PM por Igor
si, la rotacion de un giroscopio es un Quaternion
 
es como dice @lightbug, multiplicandolos seria como añadir la rotacion del segundo al primero
 

quaternionResult = quaternionA * quaternionB;

 
 
 
y si, los Euler tienen ciertos... "incovenientes" pero creo que podrias hacerlo si primero le rotas (con Rotate()) los ejes X e Y, y despues el Z
 

camera.transform.rotation = carroMontañaRusa.transform.rotation;//igualar la rotacion de la camara a la del "vagon"
Transform giroTrans = new Transform();
giroTrans.rotation = giroscopeQuaternion;
vector3 eulerGiro = girosTrans.eulerAngles;
camera.transform.Rotate(eulerGiro.x,eulerGiro.y,0f);
camera.transform.Rotate(0f,0f,eulerGiro.z);

 
 

Muchas gracias!! me ha funcionado lo de multiplicar ambos Quaternions. El único problema que tengo es el drift del giroscopio, alguno de ustedes podría recomendarme un mejor giroscopio? si conocen alguno y me pueden pasar una librería para manejarlo algún programa de ejemplo se los agradecería. El giroscopio que yo uso es el MPU6050.
 
Cita de: Igor date=1523451395si, la rotacion de un giroscopio es un Quaternion
   
   
      es como dice @lightbug, multiplicandolos seria como añadir la rotacion del segundo al primero
   
   

quaternionResult = quaternionA * quaternionB;

   
       
   
   
      y si, los Euler tienen ciertos... "incovenientes" pero creo que podrias hacerlo si primero le rotas (con Rotate()) los ejes X e Y, y despues el Z
   
   

camera.transform.rotation = carroMontañaRusa.transform.rotation;//igualar la rotacion de la camara a la del "vagon"
Transform giroTrans = new Transform();
giroTrans.rotation = giroscopeQuaternion;
vector3 eulerGiro = girosTrans.eulerAngles;
camera.transform.Rotate(eulerGiro.x,eulerGiro.y,0f);
camera.transform.Rotate(0f,0f,eulerGiro.z);

   
       
   

Cita de: lightbug date=1523450966No se bien como es la rotación del giroscopio, pero si la podés transformar a quaternions podés multiplicar uno y otro (el orden importa) y se suman las rotaciones, creo que algo así:
   
   

Quaternion rot1 = ...;
Quaternion rot2 = ...;
Quaternion rot3 = ...;
Quaternion rotTotal =  rot3 * rot2 * rot1;   //rotTotal rota en rot1, luego en rot2 , luego en rot3

   
      Que info te brinda el giroscopio? yo usé uno en la LPC BAseBoard y estaba en grados (x,y,z) en Unity podrías transformar de Euler a Quaternion y estarías bien.
   
   
      Sino podrías transformar todo en euler quizás, no es que me agraden los eulers pero a la larga tienen problemas.
   
   
      Saludos
   
   
       
   


 

yo he usado esto:
 

Quaternion gyroRotation = Input.gyro.attitude;

 
cuidado, es posible que el gyroscopio este "apagado" en tu dispositivo, y entonces no te dara la rotacion...
 
para activarlo uso:
 

Input.gyro.enabled = true;

 
no se si te funcionara...

Hola. Quiero armar un proyecto de una Montaña Rusa para realidad virtual. Soy nuevo en Unity, ¿alguien podría recomendarme algún tutorial para hacer una? 

¿Que quieres hacer exactamente? Lo pregunto porque tengo unos amigos que han montado una basada en Oculus Rift con un vagón con motores, movimientos, vibración, ventiladores sincronizados para que te de el aire en las bajadas en función de la velocidad, etc. todo conectado con la cacharreria que está controlada por un Arduino. No se si es un proyecto de este tipo y donde tienes la dificultad, si en la conexión con hardware externo, en la programación con Unity, en el tema de RV, en el SDK de un determinado headset. Danos alguna pista :)

Aviso de Admin: He decidido unirte ambos temas porque tratan exactamente del mismo caso. Por favor, trata de ser ordenado y claro en el foro.

Cita de: FNP date=1525247211¿Que quieres hacer exactamente? Lo pregunto porque tengo unos amigos que han montado una basada en Oculus Rift con un vagón con motores, movimientos, vibración, ventiladores sincronizados para que te de el aire en las bajadas en función de la velocidad, etc. todo conectado con la cacharreria que está controlada por un Arduino. No se si es un proyecto de este tipo y donde tienes la dificultad, si en la conexión con hardware externo, en la programación con Unity, en el tema de RV, en el SDK de un determinado headset. Danos alguna pista :)
   


Quiero hacer exactamente lo que cuentas que hicieron tus amigos, la dificultad está en la programación en Unity, no sé cómo hacer para que un objeto siga las vías de la montaña rusa y además vaya rotando según la rotación de las mismas, que también aumente la velocidad en las bajadas, etc 

Cita de: Santiago Sandrini date=1525264499Quiero hacer exactamente lo que cuentas que hicieron tus amigos, la dificultad está en la programación en Unity, no sé cómo hacer para que un objeto siga las vías de la montaña rusa y además vaya rotando según la rotación de las mismas, que también aumente la velocidad en las bajadas, etc 
   


te serviria un asset de deformacion por curvas, hay algunos en la store...
 
asi si tienes el modelo definido x curvas luego solo tienes q seguir la misma
 
pero si lo haces con modelos modulares podrias modelar un plano oculto q siga el contorno y luego obtener su normal en cada punto para seguirlo
 
o desde el editor crear un spline para definir la curva
(necesitas un codigo de splines q pase x una lista de transforms o algo asi, no existe en el editor, lo creas o lo importas)

Cita de: Braltor date=1525265811te serviria un asset de deformacion por curvas, hay algunos en la store...
   
   
      asi si tienes el modelo definido x curvas luego solo tienes q seguir la misma
   
   
      pero si lo haces con modelos modulares podrias modelar un plano oculto q siga el contorno y luego obtener su normal en cada punto para seguirlo
   
   
      o desde el editor crear un spline para definir la curva
   
   
      (necesitas un codigo de splines q pase x una lista de transforms o algo asi, no existe en el editor, lo creas o lo importas)
   


Tienes algún tutorial para explicarme como puedo hacer el trayecto con las curvas? y para agregarle la rotacion del giroscopio y que funcionen ambas a la vez, disculpa es que soy nuevo en todo esto.

la parte del "spline" aqui tienes un tutorial....
 
http://catlikecoding.com/unity/tutorials/curves-and-splines/
 
luego sumar la rotacion del giroscopio es superfacil..

Si te presentas en la Comunidad en el foro apropiado, tal vez te podamos ayudar mejor...

Etiquetas: