Jump to content

BastianR

Members
  • Gesamte Inhalte

    7
  • Benutzer seit

  • Letzter Besuch

BastianR's Achievements

Newbie

Newbie (1/14)

0

Reputation in der Community

  1. Hallo, ich versuche gerade in Unity ein Projekt mit dem IMU Brick umzusetzen. Dabei tritt folgendes Problem auf. Der IMU ist sehr empfindlich und selbst bei Stillstand schwanken die Quanternion so sehr ,dass das Objekt welches ich per IMu anspreche nicht wirklich zum stilltstand kommt. Das kann ich zwar unterbinden wenn ich den ConvergenceSpeed auf 0 ( max 1 ) setze, aber dann dauert es halt sehr lange bis er wirklich zum Ursprung zurück wandert. Gibt es eine Möglichkeit die Sensitivity des Filters zu beeinflussen? Würde gerne mit einem ConvergenceSpeed von 30-80 arbeiten und die Werte sollten aber nicht so sehr schwanken ( Aufgrund der Genauigkeit ). Ich hoffe ihr könnt mir folgen Bin dankbar für jede Antwort.
  2. Hallo, es gibt neues zu dem Unity/IMU Projekt. Mittlerweile ist mein IMU eingetroffen und ich hatte im vorhinein genug Zeit mich etwas in Unity einzuarbeiten. Das Projekt befindet sich momentan an folgendem Punkt. In der Unityumgebung habe ich eine Halbkugel erstellt auf welche ein 4k Video gemappt ist ( dieses besteht aus einer Realen Aufnahem und den Animierten Bildern - Compositing ). Das ganze läuft in einer Endlosschleife auf der Kugel, quasi als Videotextur. Vor der Halbkugel befindet sich eine UnityKamera welche über die IMU angesprochen werden soll bzw wird. Mit dem vorhanden Script von Tom Allen ( welches ich auf der vorherigen Seite schon gepostet habe ). Sein vorhandenden Script geht aber eher in die Richtung einer "Flugzeugsteuerung". Als erstes habe ich die _speed Variable auf 0 gesetzt, damit die Kamera sich nicht vorwärts bewegt. Jetzt habe ich folgendes Problem. Ich kann mich mit der Kamera auf dem Objekt umsehen, ABER auf der Y-Achse wandert Sie immer wieder auf den Ausgangswert zurück. Das heißt, wenn ich den IMU bewege, folgt die Kamera in Unity zwar, aber fängt dann an sich langsam wieder auf den Ausgangspunkt zu bewegen. Habe festgestellt, dass es an dem _imu.SetConvergenceSpeed liegt. Wenn ich den auf 0 setze, kann ich mich frei umsehen, aber die Kamera bewegt sich ziemlich langsam. Also bleibt nicht statisch stehen, wenn den in dem IMU nicht bewege. Ich denke, das ich nicht die richtige Lösung? Denn so arbeitet ja nur der Gyroscopesensor. Denke ich steige bei dem Code nicht komplett durch. Könnte mir da jemand unter die Arme greifen? Wäre wirklich super! Hier der CODE wie ich ihn gerade verwende: using UnityEngine; using System.Collections; using System; using Tinkerforge; public class CameraFromIMU : MonoBehaviour { private static string _host = "localhost"; private static int _port = 4223; private static string _uid = "9ekEFavqCxK"; // Change to your UID private static BrickIMU _imu; private static IPConnection _ipcon; private static Quaternion _q = new Quaternion(0.0f,0.0f,0.0f,1.0f); private static Quaternion _qOrigin = new Quaternion(0.0f,0.0f,0.0f,1.0f); private static Quaternion _qPrevious = new Quaternion(0.0f,0.0f,0.0f,1.0f); public float _speed = 100.0f; // Use this for initialization void Start () { _ipcon = new IPConnection(_host, _port); // Create connection to brickd _imu = new BrickIMU(_uid); // Create device object _ipcon.AddDevice(_imu); // Add device to IP connection // Don't use device before it is added to a connection // Set period for quaternion callback to 10ms _imu.SetQuaternionPeriod(10); // Register quaternion callback to QuaternionCB _imu.RegisterCallback(new BrickIMU.Quaternion(QuaternionCB)); // Set rotational origin to however the IMU is pointing at the start. float x,y,z,w; _imu.GetQuaternion(out x, out y, out z, out w); _qOrigin.w = w; _qOrigin.x = x; _qOrigin.y = y; _qOrigin.z = z; _imu.SetConvergenceSpeed( 0 ); // 5ms convergence. } // Quaternion callback static void QuaternionCB(float x, float y, float z, float w) { //Debug.Log("x: " + x + "\ny: " + y + "\nz: " + z + "\nw: " + w + "\n"); _qPrevious = _q; // Save q to qPrevious _q.w = w; _q.x = x; _q.y = y; _q.z = z; } void OnApplicationExit() { _ipcon.Destroy(); } void OnGUI() { GUI.Box( new Rect( 5, 5, 200, 24*2 ), "Quaternion: " + _q.ToString() + "\n" + "Camera: " + transform.rotation.ToString() ); if(GUI.Button(new Rect(20,450,80,20), "ON")) _imu.LedsOn(); if(GUI.Button(new Rect(20,480,80,20), "OFF")) _imu.LedsOff(); } // Update is called once per frame void Update () { // Conjugate of current quaternion: float x,y,z,w; x = -_q.x; y = -_q.y; z = -_q.z; w = _q.w; // Multiply with origin quaternion: float xn,yn,zn,wn; wn = w * _qOrigin.w - x * _qOrigin.x - y * _qOrigin.y - z * _qOrigin.z; xn = w * _qOrigin.x + x * _qOrigin.w + y * _qOrigin.z - z * _qOrigin.y; yn = w * _qOrigin.y - x * _qOrigin.z + y * _qOrigin.w + z * _qOrigin.x; zn = w * _qOrigin.z + x * _qOrigin.y - y * _qOrigin.x + z * _qOrigin.w; // Rotate the camera relative to the world frame axes, by the roll pitch yaw of the IMU. Quaternion q = new Quaternion( xn, yn, zn, wn ); transform.rotation = Quaternion.identity; transform.Rotate( Vector3.right * q.eulerAngles.x, Space.World ); transform.Rotate( Vector3.forward * q.eulerAngles.y, Space.World ); transform.Rotate( Vector3.up * q.eulerAngles.z, Space.World ); // Fly forwards. transform.Translate(Vector3.forward * Time.deltaTime * _speed); } }
  3. @neomutant Thank you for your Idea of using Delphi and GLszene. But i think unity3d has more power at realtime rendering than Glszene. And as we use high poly animations and renderings , we would prefer unity3d. On the other handside , we are thinking of just mapping an spherical rendering ( finished video animation ) on a sphere in unity3d , so that realtime rendering would not be necessary.
  4. Hallo nochmal, finde es klasse, wie viele Leute sich für das Projekt interessieren. Habe sowas schon geahnt und daher meinem Chef die Tinkerforge Produkte empfohlen. Habe mehrere Wochen nach der geeigneten Hardware recherchiert und bin dann bei dieser IMU gelandet. Wie ihr am dem "Chef" schon erkennen könnt, geht das ganze um die Projektabwicklung innerhalb eines Unternehmens. Genauergesagt sind wir eigentlich eine reine 3D Agentur und erstellen fotorealistische Rendering und Animationen. Bei dem projekt geht es um die Visualisierung innerer Bauteile oder Organe von Maschinen oder Lebewesen. Es soll zum Beispiel in einem realen Skelett animierte Organe gezeigt werden. Das ganze soll über einen Monitor ( welcher über 2 Achsen drehbar ist ) dem Nutzer zugänglich gemacht werden. D.h. der Nutzer sieht ein reales Skelett und wenn er durch den Monitor guckt sieht er ebenfalls das reale Skelett aber eben auch die animierten Organe usw. Dabei soll er die Möglichkeit haben den Monitor zu bewegen , und sich somit in dem Skelett umzusehen. Gelößt werden soll das ganze wie schon gesagt in Unity3D. Ich kann mir vorstellen, dass es noch einige andere Umsetzungmöglichkeiten gibt. Aber mittlerweile haben wir diese als für uns am idealsten erkannt und entwickeln gerade einen Prototypen. Ich denke mit dem IMU ( welcher an dem Monitor angebracht ist ) als Sensor für die Kamerabewegungen, welcher die Daten an die virtuelle Kamera übergibt ist das schon ein guter Lösungsansatz. Die größten Probleme werden wohl: - die genaue abnahme und übergabe der Werte an die virtuelle Kamera ( Wobei hier das Skript ja schon fast fertig zur Verfügung steht ) - und die Einberechnung der Verzerrungen von Realbilden ( Panoramaaufnahme ) und der Animationen ( über eine spherical Cam gerednert ).
  5. Danke für die Antwort, Nic. Du scheinst das Projekt verstanden zu haben Und ich habe mich wohl etwas undeutlich ausgedrückt aber es geht sehr wohl um eine virtuelle Kamera in einem 3D Raum. Dass es hier einige Experten zu der C#API gibt habe ich auch schon entdeckt. Denke wenn der Brick da ist, wird erstmal probiert und sich dann bei euch gemeldet. Bin selber gespannt, wie das alles so funktioniert. Werde berichten.
  6. Hallo und Danke für das rege Interesse. Mittlerweile habe ich einen IMU Brick bestellt und werde, sobald er ankommt mit den ersten Test beginnen. Von Unity3d habe ich leider noch gar keine Ahnung bzw gar keine Erfahrungen sammeln können. Kann daher auch leider keine Grundlagen übermitteln Werde mich selber erst ein wenig in Unity einarbeiten müssen. Aber da ja wie schon erwähnt ein nahezu fertiger C# Code vorhanden ist und Unity3d mit C# arbeitet, werde ich den Code nicht in Java übersetzen müssen. Es geht mir im Projekt um folgendes. Ich würde in Unity gerne auf eine Fläche ein Video projizieren in einem bestimmen Abstand soll dann vor der Fläche eine Kamera erstellt werden. Welche mit Hilfe der IMU bewegt werden kann. So, dass man sich mit dem Brick auf der Fläche umsehen kann. Denke dafür sollte der Code herhalte. Bin jetzt nicht der größte Programmierer, aber werde , sobald der Brick da ist , einfach den vorhandenen Code ausprobieren. Ich hoffe ihr könnt euch vorstellen worum es mir bei dem Projekt geht
  7. Hallo liebe Tinkerforge Gemeinde, ich habe folgendes vorhaben. Ich würde gerne einen IMU Brick nutzen um damit eine Kamera in Unity3D anzusteueren. Heißt die Werte sollen in Java an eine in Unity3D existierende Kamera übergeben werden. Und diese sollte sich dann nach den Werten des IMU im 3d Raum der Unity3d ausrichten. Hat jemand schonmal etwas ähnliches realisiert? Bzw. gibt es ein ähnliches Projekt welches ihr kennt? Habe nur folgendes Projekt gefunden: http://www.drtomallen.com/blog.html dort die IMUCAM. Hier der Code der Kamerasteuerung: https://github.com/Schwolop/IMUCam/blob/master/CameraFromIMU.cs Wenn ich den _speed einfach runter setzte bzw. entferne, sollte ich ja meine Kamera mit der IMU in Unity bewegen können? Grüße, Basti
×
×
  • Neu erstellen...