Exemplo n.º 1
0
    /*
     *  Oculus Rift - Lots of obsolete functions, bits of which might be needed in the future if Oculus Unity Utilities support will be added
     */
    // Oculus positional tracking camera's coordinate system origin in Unity coordinate system
//	public Vector3 GetOculusCameraOriginRaw()
//	{
////		if (OVRManager.capiHmd != null)
////		{
////			Vector3 currentOvrCameraPose = OVRManager.capiHmd.GetTrackingState().CameraPose.Position.ToVector3 (); //06to08
////
////			return Quaternion.Inverse(GetOculusCameraOrientationRaw())*currentOvrCameraPose;
////		} else //06to08
//		return Vector3.zero; // HACK remove this method
//	}

    // Oculus positional tracking camera's coordinate system origin in master coordinate system
//	public Vector3 GetOculusCameraOrigin()
//	{
//		return ConvertLocation(GetOculusCameraOriginRaw(), RUISDevice.Oculus_DK2);
//	}

    // Oculus positional tracking camera's coordinate system orientation in Unity coordinates
//	public Quaternion GetOculusCameraOrientationRaw()
//	{
////		if (OVRManager.capiHmd != null)
////		{
////			return OVRManager.capiHmd.GetTrackingState().CameraPose.Orientation.ToQuaternion(); //06to08
////		} else
//		return Quaternion.identity; // HACK remove this method
//	}

//	public Vector3 ConvertRawOculusDK2Location(Vector3 position)
//	{
////		Vector3 currentcameraPosition = Vector3.zero;
////		if (OVRManager.capiHmd != null)
////			currentcameraPosition = OVRManager.capiHmd.GetTrackingState().CameraPose.Position.ToVector3(); //06to08
////		return Quaternion.Inverse(GetOculusCameraOrientationRaw())*(position - currentcameraPosition); //06to08
//
//		return UnityEngine.VR.InputTracking.GetLocalPosition(UnityEngine.VR.VRNode.Head); // HACK TODO if this doesn't work for major HMDs, add wrapper
//	}

    /// <summary>
    /// Convert velocity or angular velocity obtained with a certain device to master coordinate system, apply yaw offset, and apply Kinect pitch correction
    /// </summary>
    public Vector3 ConvertVelocity(Vector3 velocity, RUISDevice device)
    {
        Vector3 newVelocity = velocity;

        if (applyToRootCoordinates && rootDevice != device)
        {
            string devicePairString = device.ToString() + "-" + rootDevice.ToString();
            newVelocity = RUISCalibrationResultsInQuaternion[devicePairString] * newVelocity;
        }

        // Apply floor pitch rotation (which is identity to anything else than Kinect 1/2)
        if (applyToRootCoordinates || device == rootDevice)
        {
            newVelocity = RUISCalibrationResultsFloorPitchRotation[rootDevice] * newVelocity;
        }
        else
        {
            if (device == RUISDevice.Kinect_2)
            {
                newVelocity = RUISCalibrationResultsFloorPitchRotation[RUISDevice.Kinect_2] * newVelocity;
            }
            else if (device == RUISDevice.Kinect_1)
            {
                newVelocity = RUISCalibrationResultsFloorPitchRotation[RUISDevice.Kinect_1] * newVelocity;
            }
        }

        newVelocity = Quaternion.Euler(0, yawOffset, 0) * newVelocity;

        return(newVelocity);
    }
Exemplo n.º 2
0
    /// <summary>
    /// Convert rotation obtained with a certain device to master coordinate system, apply yaw offset, and apply Kinect pitch correction
    /// </summary>
    public Quaternion ConvertRotation(Quaternion inputRotation, RUISDevice device)
    {
        Quaternion outputRotation = inputRotation;

        if (applyToRootCoordinates && rootDevice != device)
        {
            string devicePairString = device.ToString() + "-" + rootDevice.ToString();
            outputRotation = RUISCalibrationResultsInQuaternion[devicePairString] * outputRotation;
        }

        // Apply floor pitch rotation (which is identity to anything else than Kinect 1/2)
        if (applyToRootCoordinates || device == rootDevice)
        {
            outputRotation = RUISCalibrationResultsFloorPitchRotation[rootDevice] * outputRotation;
        }
        else
        {
            if (device == RUISDevice.Kinect_2)
            {
                outputRotation = RUISCalibrationResultsFloorPitchRotation[RUISDevice.Kinect_2] * outputRotation;
            }
            else if (device == RUISDevice.Kinect_1)
            {
                outputRotation = RUISCalibrationResultsFloorPitchRotation[RUISDevice.Kinect_1] * outputRotation;
            }
        }

        // Apply yaw offset
        if (applyToRootCoordinates || device == rootDevice)
        {
            outputRotation = Quaternion.Euler(0, yawOffset, 0) * outputRotation;
        }

        return(outputRotation);
    }
Exemplo n.º 3
0
    public Vector3 ConvertMoveVelocity(Vector3 velocity)
    {
        //flip the z coordinate to get into unity's coordinate system
        Vector3 newVelocity = new Vector3(velocity.x, velocity.y, -velocity.z);

        string devicePairString = RUISDevice.PS_Move.ToString() + "-" + rootDevice.ToString();

        if (applyToRootCoordinates && rootDevice != RUISDevice.PS_Move)
        {
            newVelocity = RUISCalibrationResultsIn4x4Matrix[devicePairString].MultiplyPoint3x4(newVelocity);
        }

        newVelocity *= moveToUnityScale;
        newVelocity  = Quaternion.Euler(0, yawOffset, 0) * newVelocity;

        return(newVelocity);
    }
Exemplo n.º 4
0
    /// <summary>
    /// Convert location obtained with a certain device to master coordinate system, apply position offset, and set Kinect origin to floor if applicable
    /// </summary>
    public Vector3 ConvertLocation(Vector3 inputLocation, RUISDevice device)
    {
        Vector3 outputLocation = inputLocation;

        // Transform location into master coordinate system
        if (applyToRootCoordinates && rootDevice != device)
        {
            string devicePairString = device.ToString() + "-" + rootDevice.ToString();
            outputLocation = RUISCalibrationResultsIn4x4Matrix[devicePairString].MultiplyPoint3x4(outputLocation);
//			outputLocation = RUISCalibrationResultsInQuaternion[devicePairString] * outputLocation;
        }

        // Apply yaw offset and floor pitch rotation (which is identity to anything else than Kinect 1/2)
        if (applyToRootCoordinates || device == rootDevice)
        {
            outputLocation = Quaternion.Euler(0, yawOffset, 0) * RUISCalibrationResultsFloorPitchRotation[rootDevice] * outputLocation;
        }
        else
        {
            if (device == RUISDevice.Kinect_2)
            {
                outputLocation = RUISCalibrationResultsFloorPitchRotation[RUISDevice.Kinect_2] * outputLocation;
            }
            else if (device == RUISDevice.Kinect_1)
            {
                outputLocation = RUISCalibrationResultsFloorPitchRotation[RUISDevice.Kinect_1] * outputLocation;
            }
        }

        // Set Kinect 1/2 origin to floor
        if (setKinectOriginToFloor)
        {
            if (applyToRootCoordinates || device == rootDevice)
            {
                outputLocation.y += RUISCalibrationResultsDistanceFromFloor[rootDevice];
            }
            else
            {
                if (device == RUISDevice.Kinect_2)
                {
                    outputLocation.y += RUISCalibrationResultsDistanceFromFloor[RUISDevice.Kinect_2];
                }
                else if (device == RUISDevice.Kinect_1)
                {
                    outputLocation.y += RUISCalibrationResultsDistanceFromFloor[RUISDevice.Kinect_1];
                }
            }
        }

        // Position offset
        if (applyToRootCoordinates || device == rootDevice)
        {
            outputLocation += positionOffset;
        }

        return(outputLocation);
    }
Exemplo n.º 5
0
    /// <summary>
    /// Returns an approximation of Vector3 localScale (calculated from RUISCalibrationResultsIn4x4Matrix[devicePairString]),
    /// which can be used to compensate the scale difference between the master coordinate system frame and the argument device frame.
    /// </summary>
    public Vector3 ExtractLocalScale(RUISDevice device)
    {
        if (applyToRootCoordinates && rootDevice != device)
        {
            string    devicePairString = device.ToString() + "-" + rootDevice.ToString();
            Matrix4x4 matrix           = RUISCalibrationResultsIn4x4Matrix[devicePairString];

            // Extract new local scale
            return(new Vector3(matrix.GetColumn(0).magnitude, matrix.GetColumn(1).magnitude, matrix.GetColumn(2).magnitude));
        }
        else
        {
            return(Vector3.one);
        }
    }
Exemplo n.º 6
0
    public void SetDistanceFromFloor(float distance, RUISDevice floorDetectingDevice)
    {
        switch (floorDetectingDevice)
        {
        case RUISDevice.Kinect_1:
            RUISCalibrationResultsDistanceFromFloor[RUISDevice.Kinect_1] = distance;
            break;

        case RUISDevice.Kinect_2:
            RUISCalibrationResultsDistanceFromFloor[RUISDevice.Kinect_2] = distance;
            break;

        default:
            Debug.LogWarning("Currently floor distance detection with " + floorDetectingDevice.ToString() + " is not supported!");
            break;
        }
    }
Exemplo n.º 7
0
    public void updateDictionaries(Dictionary <string, Vector3> RUISCalibrationResultsInVector3,
                                   Dictionary <string, Quaternion> RUISCalibrationResultsInQuaternion,
                                   Dictionary <string, Matrix4x4> RUISCalibrationResultsIn4x4Matrix,
                                   Vector3 translate, Quaternion rotation, Matrix4x4 pairwiseTransform,
                                   RUISDevice device1, RUISDevice device2)
    {
        RUISCalibrationResultsInVector3[device1.ToString() + "-" + device2.ToString()]    = translate;
        RUISCalibrationResultsIn4x4Matrix[device1.ToString() + "-" + device2.ToString()]  = pairwiseTransform;
        RUISCalibrationResultsInQuaternion[device1.ToString() + "-" + device2.ToString()] = rotation;

        // Inverses
        RUISCalibrationResultsInVector3[device2.ToString() + "-" + device1.ToString()]    = -translate;
        RUISCalibrationResultsIn4x4Matrix[device2.ToString() + "-" + device1.ToString()]  = pairwiseTransform.inverse;
        RUISCalibrationResultsInQuaternion[device2.ToString() + "-" + device1.ToString()] = Quaternion.Inverse(rotation);
    }
	public void updateDictionaries(Dictionary<string, Vector3> RUISCalibrationResultsInVector3, 
	                        Dictionary<string, Quaternion> RUISCalibrationResultsInQuaternion,
	                        Dictionary<string, Matrix4x4> RUISCalibrationResultsIn4x4Matrix,
	                        Vector3 translate, Quaternion rotation, Matrix4x4 pairwiseTransform,
	                        RUISDevice device1, RUISDevice device2)
	{
		RUISCalibrationResultsInVector3[device1.ToString() + "-" + device2.ToString()] = translate;
		RUISCalibrationResultsIn4x4Matrix[device1.ToString() + "-" + device2.ToString()] = pairwiseTransform;
		RUISCalibrationResultsInQuaternion[device1.ToString() + "-" + device2.ToString()] = rotation;		
		
		// Inverses
		RUISCalibrationResultsInVector3[device2.ToString() + "-" + device1.ToString()] = -translate;
		RUISCalibrationResultsIn4x4Matrix[device2.ToString() + "-" + device1.ToString()] = pairwiseTransform.inverse;
		RUISCalibrationResultsInQuaternion[device2.ToString() + "-" + device1.ToString()] = Quaternion.Inverse(rotation);		
	}
Exemplo n.º 9
0
    public void SetFloorNormal(Vector3 newFloorNormal, RUISDevice floorDetectingDevice)
    {
        Quaternion kinectFloorRotator = Quaternion.identity;

        kinectFloorRotator.SetFromToRotation(newFloorNormal, Vector3.up);
        kinectFloorRotator = Quaternion.Inverse(kinectFloorRotator);

        switch (floorDetectingDevice)
        {
        case RUISDevice.Kinect_1:
            RUISCalibrationResultsFloorPitchRotation[RUISDevice.Kinect_1] = kinectFloorRotator;
            break;

        case RUISDevice.Kinect_2:
            RUISCalibrationResultsFloorPitchRotation[RUISDevice.Kinect_2] = kinectFloorRotator;
            break;

        default:
            Debug.LogWarning("Currently floor normal detection with " + floorDetectingDevice.ToString() + " is not supported!");
            break;
        }
    }
	public void SaveFloorData(string filename, RUISDevice device, Vector3 normal, float distance)
	{	
		string wrapperElementName = device.ToString();
	
		XmlNode calibrationMatrixElement;
		
		XmlDocument xmlDoc = XMLUtil.LoadAndValidateXml(filename, coordinateSchema);
		XmlNode groupElement;
		
		if(xmlDoc != null) {
			calibrationMatrixElement = 	xmlDoc.DocumentElement;
			groupElement = calibrationMatrixElement.SelectSingleNode("FloorData");
			if(groupElement == null) groupElement = xmlDoc.CreateElement("FloorData");
		}
		else {
			xmlDoc = new XmlDocument();
			xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
			calibrationMatrixElement = xmlDoc.CreateElement("ns2", "RUISClibrationMatrix", "http://ruisystem.net/m2k");
			xmlDoc.AppendChild(calibrationMatrixElement);
			groupElement = xmlDoc.CreateElement("FloorData");
		}
		calibrationMatrixElement.AppendChild(groupElement);
		
		XmlElement wrapperElement = xmlDoc.CreateElement(wrapperElementName);
		groupElement.AppendChild(wrapperElement);
		
		XmlElement kinectFloorNormalElement = xmlDoc.CreateElement("floorNormal");
		
		kinectFloorNormalElement.SetAttribute("x", normal.x.ToString());
		kinectFloorNormalElement.SetAttribute("y", normal.y.ToString());
		kinectFloorNormalElement.SetAttribute("z", normal.z.ToString());
		wrapperElement.AppendChild(kinectFloorNormalElement);
		
		XmlElement kinectDistanceFromFloorElement = xmlDoc.CreateElement("distanceFromFloor");
		kinectDistanceFromFloorElement.SetAttribute("value", distance.ToString());
		
		wrapperElement.AppendChild(kinectDistanceFromFloorElement);
		
		XmlNode groupNode = xmlDoc.DocumentElement.SelectSingleNode("FloorData");
		XmlNode testNode = groupNode.SelectSingleNode(wrapperElementName);
		// Element not found
		if(testNode == null) { 	
			groupNode.AppendChild(wrapperElement);
		}
		else {// Element already exists
			var oldElem = testNode;
			groupNode.ReplaceChild(wrapperElement, oldElem);
			
		}
		
		FileStream xmlFileStream = File.Open(filename, FileMode.Create);
		StreamWriter streamWriter = new StreamWriter(xmlFileStream);
		xmlDoc.Save(streamWriter);
		streamWriter.Flush();
		streamWriter.Close();
		xmlFileStream.Close();
	}
Exemplo n.º 11
0
    public void SaveTransformDataToXML(string filename, RUISDevice device1, RUISDevice device2)
    {
        string wrapperElementName = device1.ToString() + "-" + device2.ToString();

        XmlNode calibrationMatrixElement;

        XmlDocument xmlDoc = XMLUtil.LoadAndValidateXml(filename, coordinateSchema);
        XmlNode     groupElement;

        if (xmlDoc != null)
        {
            calibrationMatrixElement = xmlDoc.DocumentElement;
            groupElement             = calibrationMatrixElement.SelectSingleNode("Transforms");
            if (groupElement == null)
            {
                groupElement = xmlDoc.CreateElement("Transforms");
            }
        }
        else
        {
            xmlDoc = new XmlDocument();
            xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
            calibrationMatrixElement = xmlDoc.CreateElement("ns2", "RUISClibrationMatrix", "http://ruisystem.net/m2k");
            xmlDoc.AppendChild(calibrationMatrixElement);
            groupElement = xmlDoc.CreateElement("Transforms");
        }
        calibrationMatrixElement.AppendChild(groupElement);

        XmlElement wrapperElement = xmlDoc.CreateElement(wrapperElementName);

        groupElement.AppendChild(wrapperElement);

        XmlElement translateElement = xmlDoc.CreateElement("translate");

        translateElement.SetAttribute("x", deviceToRootTransform[0, 3].ToString());
        translateElement.SetAttribute("y", deviceToRootTransform[1, 3].ToString());
        translateElement.SetAttribute("z", deviceToRootTransform[2, 3].ToString());

        wrapperElement.AppendChild(translateElement);

        XmlElement rotateElement = xmlDoc.CreateElement("rotate");

        rotateElement.SetAttribute("r00", deviceToRootTransform[0, 0].ToString());
        rotateElement.SetAttribute("r01", deviceToRootTransform[0, 1].ToString());
        rotateElement.SetAttribute("r02", deviceToRootTransform[0, 2].ToString());
        rotateElement.SetAttribute("r10", deviceToRootTransform[1, 0].ToString());
        rotateElement.SetAttribute("r11", deviceToRootTransform[1, 1].ToString());
        rotateElement.SetAttribute("r12", deviceToRootTransform[1, 2].ToString());
        rotateElement.SetAttribute("r20", deviceToRootTransform[2, 0].ToString());
        rotateElement.SetAttribute("r21", deviceToRootTransform[2, 1].ToString());
        rotateElement.SetAttribute("r22", deviceToRootTransform[2, 2].ToString());

        wrapperElement.AppendChild(rotateElement);

        XmlNode groupNode = xmlDoc.DocumentElement.SelectSingleNode("Transforms");
        XmlNode testNode  = groupNode.SelectSingleNode(wrapperElementName);

        // Element not found
        if (testNode == null)
        {
            groupNode.AppendChild(wrapperElement);
        }
        else
        {
            // Element already exists
            var oldElem = testNode;
            groupNode.ReplaceChild(wrapperElement, oldElem);
        }

        FileStream   xmlFileStream = File.Open(filename, FileMode.Create);
        StreamWriter streamWriter  = new StreamWriter(xmlFileStream);

        xmlDoc.Save(streamWriter);
        streamWriter.Flush();
        streamWriter.Close();
        xmlFileStream.Close();
    }
	/*
	 * 	Convert rotations obtained with a certain device to master coordinate system, apply yaw offset, and apply Kinect pitch correction
	 */
	public Quaternion ConvertRotation(Quaternion inputRotation, RUISDevice device)
	{
		Quaternion outputRotation = inputRotation;
		
		if (applyToRootCoordinates && rootDevice != device)
		{
			string devicePairString = device.ToString() + "-" + rootDevice.ToString();
			outputRotation = RUISCalibrationResultsInQuaternion[devicePairString] * outputRotation;
		}

		// Apply floor pitch rotation (which is identity to anything else than Kinect 1/2)
		if (applyToRootCoordinates || device == rootDevice)
			outputRotation = RUISCalibrationResultsFloorPitchRotation[rootDevice] * outputRotation;
		else
		{
			if(device == RUISDevice.Kinect_2)
				outputRotation = RUISCalibrationResultsFloorPitchRotation[RUISDevice.Kinect_2] * outputRotation;
			else if(device == RUISDevice.Kinect_1)
				outputRotation = RUISCalibrationResultsFloorPitchRotation[RUISDevice.Kinect_1] * outputRotation;
		}
		
		// Apply yaw offset
		if (applyToRootCoordinates || device == rootDevice)
			outputRotation = Quaternion.Euler(0, yawOffset, 0) * outputRotation;

		return outputRotation;
	}
	/*
	 * 	Convert locations obtained with a certain device to master coordinate system, apply position offset, and set Kinect origin to floor if applicable
	 */
	public Vector3 ConvertLocation(Vector3 inputLocation, RUISDevice device)
	{
		Vector3 outputLocation = inputLocation;

		// Transform location into master coordinate system
		if (applyToRootCoordinates && rootDevice != device)
		{
			string devicePairString = device.ToString() + "-" + rootDevice.ToString();
			outputLocation = RUISCalibrationResultsIn4x4Matrix[devicePairString].MultiplyPoint3x4(outputLocation);
		}

		// Apply yaw offset and floor pitch rotation (which is identity to anything else than Kinect 1/2)
		if (applyToRootCoordinates || device == rootDevice)
			outputLocation = Quaternion.Euler(0, yawOffset, 0) * RUISCalibrationResultsFloorPitchRotation[rootDevice] * outputLocation;
		else
		{
			if(device == RUISDevice.Kinect_2)
				outputLocation = RUISCalibrationResultsFloorPitchRotation[RUISDevice.Kinect_2] * outputLocation;
			else if(device == RUISDevice.Kinect_1)
				outputLocation = RUISCalibrationResultsFloorPitchRotation[RUISDevice.Kinect_1] * outputLocation;
		}

		// Set Kinect 1/2 origin to floor
		if (setKinectOriginToFloor)
		{
			if (applyToRootCoordinates || device == rootDevice)
				outputLocation.y += RUISCalibrationResultsDistanceFromFloor[rootDevice];
			else
			{
				if(device == RUISDevice.Kinect_2)
					outputLocation.y += RUISCalibrationResultsDistanceFromFloor[RUISDevice.Kinect_2];
				else if(device == RUISDevice.Kinect_1)
					outputLocation.y += RUISCalibrationResultsDistanceFromFloor[RUISDevice.Kinect_1];
			}
		}

		// Position offset
		if (applyToRootCoordinates || device == rootDevice)
			outputLocation += positionOffset;
		
		return outputLocation;
	}
	public void SetDistanceFromFloor(float distance, RUISDevice floorDetectingDevice)
    {
     	switch(floorDetectingDevice)
		{
			case RUISDevice.Kinect_1:
					RUISCalibrationResultsDistanceFromFloor[RUISDevice.Kinect_1] = distance;
				break;
			case RUISDevice.Kinect_2:
					RUISCalibrationResultsDistanceFromFloor[RUISDevice.Kinect_2] = distance;
				break;
			default:
				Debug.LogWarning("Currently floor distance detection with " + floorDetectingDevice.ToString() + " is not supported!");
			break;
		}
    }
	public void SetFloorNormal(Vector3 newFloorNormal, RUISDevice floorDetectingDevice)
    {
    	
		Quaternion kinectFloorRotator = Quaternion.identity;
		kinectFloorRotator.SetFromToRotation(newFloorNormal, Vector3.up);
		kinectFloorRotator = Quaternion.Inverse(kinectFloorRotator);
		
		switch(floorDetectingDevice)
		{
			case RUISDevice.Kinect_1:
				RUISCalibrationResultsFloorPitchRotation[RUISDevice.Kinect_1] = kinectFloorRotator;
			break;
			case RUISDevice.Kinect_2:
				RUISCalibrationResultsFloorPitchRotation[RUISDevice.Kinect_2] = kinectFloorRotator;
			break;
			default:
				Debug.LogWarning("Currently floor normal detection with " + floorDetectingDevice.ToString() + " is not supported!");
			break;
		}
    }
Exemplo n.º 16
0
    void Start()
    {
        if ((firstDevice == RUISDevice.Kinect_2 && secondDevice == RUISDevice.Oculus_DK2) ||
            (secondDevice == RUISDevice.Kinect_2 && firstDevice == RUISDevice.Oculus_DK2))
        {
            skeletonController.bodyTrackingDeviceID = RUISSkeletonManager.kinect2SensorID;
            coordinateSystem.rootDevice             = RUISDevice.Kinect_2;
            calibrationProcess = new RUISKinect2ToOculusDK2CalibrationProcess(calibrationProcessSettings);
        }
        else if ((firstDevice == RUISDevice.Kinect_1 && secondDevice == RUISDevice.Kinect_2) ||
                 (secondDevice == RUISDevice.Kinect_1 && firstDevice == RUISDevice.Kinect_2))
        {
            skeletonController.bodyTrackingDeviceID = RUISSkeletonManager.kinect1SensorID;
            coordinateSystem.rootDevice             = RUISDevice.Kinect_1;
            calibrationProcess = new RUISKinect2ToKinectCalibrationProcess(calibrationProcessSettings);
        }
        else if ((firstDevice == RUISDevice.Kinect_1 && secondDevice == RUISDevice.PS_Move) ||
                 (secondDevice == RUISDevice.Kinect_1 && firstDevice == RUISDevice.PS_Move))
        {
            skeletonController.bodyTrackingDeviceID = RUISSkeletonManager.kinect1SensorID;
            coordinateSystem.rootDevice             = RUISDevice.Kinect_1;
            calibrationProcess = new RUISKinectToPSMoveCalibrationProcess(calibrationProcessSettings);
        }
        else if ((firstDevice == RUISDevice.Kinect_2 && secondDevice == RUISDevice.PS_Move) ||
                 (secondDevice == RUISDevice.Kinect_2 && firstDevice == RUISDevice.PS_Move))
        {
            skeletonController.bodyTrackingDeviceID = RUISSkeletonManager.kinect2SensorID;
            coordinateSystem.rootDevice             = RUISDevice.Kinect_2;
            calibrationProcess = new RUISKinect2ToPSMoveCalibrationProcess(calibrationProcessSettings);
        }
        else if ((firstDevice == RUISDevice.PS_Move && secondDevice == RUISDevice.Oculus_DK2) ||
                 (secondDevice == RUISDevice.PS_Move && firstDevice == RUISDevice.Oculus_DK2))
        {
            skeletonController.bodyTrackingDeviceID = RUISSkeletonManager.customSensorID;
            coordinateSystem.rootDevice             = RUISDevice.Oculus_DK2;
            calibrationProcess = new RUISPSMoveToOculusDK2CalibrationProcess(calibrationProcessSettings);
        }
        else if ((firstDevice == RUISDevice.Kinect_1 && secondDevice == RUISDevice.Oculus_DK2) ||
                 (secondDevice == RUISDevice.Kinect_1 && firstDevice == RUISDevice.Oculus_DK2))
        {
            skeletonController.bodyTrackingDeviceID = RUISSkeletonManager.kinect1SensorID;
            coordinateSystem.rootDevice             = RUISDevice.Kinect_1;
            calibrationProcess = new RUISKinectToOculusDK2CalibrationProcess(calibrationProcessSettings);
        }
        else if (firstDevice == RUISDevice.Kinect_1 && secondDevice == RUISDevice.Kinect_1)
        {
            skeletonController.bodyTrackingDeviceID = RUISSkeletonManager.kinect1SensorID;
            coordinateSystem.rootDevice             = RUISDevice.Kinect_1;
            calibrationProcess = new RUISKinectFloorDataCalibrationProcess(calibrationProcessSettings);
        }
        else if (firstDevice == RUISDevice.Kinect_2 && secondDevice == RUISDevice.Kinect_2)
        {
            skeletonController.bodyTrackingDeviceID = RUISSkeletonManager.kinect2SensorID;
            coordinateSystem.rootDevice             = RUISDevice.Kinect_2;
            calibrationProcess = new RUISKinect2FloorDataCalibrationProcess(calibrationProcessSettings);
        }

        else
        {
            calibrationProcess = null;
        }

        if (calibrationProcess == null)
        {
            upperText.text = "";
            lowerText.text = "Selected calibration device combination\n not yet supported.";

            foreach (Transform child in this.deviceModels.transform)
            {
                child.gameObject.SetActive(false);
            }

            foreach (Transform child in this.depthViews.transform)
            {
                child.gameObject.SetActive(false);
            }

            foreach (Transform child in this.icons.transform)
            {
                child.gameObject.SetActive(false);
            }

            this.calibrationResultPhaseObjects.SetActive(false);
            currentPhase = RUISCalibrationPhase.Invalid;
        }
        else
        {
            currentPhase = RUISCalibrationPhase.Initial;
        }
        string devicePairName  = firstDevice.ToString() + "-" + secondDevice.ToString();
        string devicePairName2 = secondDevice.ToString() + "-" + firstDevice.ToString();

        coordinateSystem.RUISCalibrationResultsIn4x4Matrix[devicePairName]     = Matrix4x4.identity;
        coordinateSystem.RUISCalibrationResultsDistanceFromFloor[firstDevice]  = 0.0f;
        coordinateSystem.RUISCalibrationResultsFloorPitchRotation[firstDevice] = Quaternion.identity;

        coordinateSystem.RUISCalibrationResultsIn4x4Matrix[devicePairName2]     = Matrix4x4.identity;
        coordinateSystem.RUISCalibrationResultsDistanceFromFloor[secondDevice]  = 0.0f;
        coordinateSystem.RUISCalibrationResultsFloorPitchRotation[secondDevice] = Quaternion.identity;
    }
Exemplo n.º 17
0
    public void SaveFloorData(string filename, RUISDevice device, Vector3 normal, float distance)
    {
        string wrapperElementName = device.ToString();

        XmlNode calibrationMatrixElement;

        XmlDocument xmlDoc = XMLUtil.LoadAndValidateXml(filename, coordinateSchema);
        XmlNode     groupElement;

        if (xmlDoc != null)
        {
            calibrationMatrixElement = xmlDoc.DocumentElement;
            groupElement             = calibrationMatrixElement.SelectSingleNode("FloorData");
            if (groupElement == null)
            {
                groupElement = xmlDoc.CreateElement("FloorData");
            }
        }
        else
        {
            xmlDoc = new XmlDocument();
            xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
            calibrationMatrixElement = xmlDoc.CreateElement("ns2", "RUISClibrationMatrix", "http://ruisystem.net/m2k");
            xmlDoc.AppendChild(calibrationMatrixElement);
            groupElement = xmlDoc.CreateElement("FloorData");
        }
        calibrationMatrixElement.AppendChild(groupElement);

        XmlElement wrapperElement = xmlDoc.CreateElement(wrapperElementName);

        groupElement.AppendChild(wrapperElement);

        XmlElement kinectFloorNormalElement = xmlDoc.CreateElement("floorNormal");

        kinectFloorNormalElement.SetAttribute("x", normal.x.ToString());
        kinectFloorNormalElement.SetAttribute("y", normal.y.ToString());
        kinectFloorNormalElement.SetAttribute("z", normal.z.ToString());
        wrapperElement.AppendChild(kinectFloorNormalElement);

        XmlElement kinectDistanceFromFloorElement = xmlDoc.CreateElement("distanceFromFloor");

        kinectDistanceFromFloorElement.SetAttribute("value", distance.ToString());

        wrapperElement.AppendChild(kinectDistanceFromFloorElement);

        XmlNode groupNode = xmlDoc.DocumentElement.SelectSingleNode("FloorData");
        XmlNode testNode  = groupNode.SelectSingleNode(wrapperElementName);

        // Element not found
        if (testNode == null)
        {
            groupNode.AppendChild(wrapperElement);
        }
        else
        {
            // Element already exists
            var oldElem = testNode;
            groupNode.ReplaceChild(wrapperElement, oldElem);
        }

        FileStream   xmlFileStream = File.Open(filename, FileMode.Create);
        StreamWriter streamWriter  = new StreamWriter(xmlFileStream);

        xmlDoc.Save(streamWriter);
        streamWriter.Flush();
        streamWriter.Close();
        xmlFileStream.Close();
    }
    public void SaveTransformDataToXML(string filename, RUISDevice device1, RUISDevice device2)
	{	
		string wrapperElementName = device1.ToString() + "-" + device2.ToString();
	
		XmlNode calibrationMatrixElement;
		
		XmlDocument xmlDoc = XMLUtil.LoadAndValidateXml(filename, coordinateSchema);
		XmlNode groupElement;
		
		if(xmlDoc != null) {
			calibrationMatrixElement = 	xmlDoc.DocumentElement;
			groupElement = calibrationMatrixElement.SelectSingleNode("Transforms");
			if(groupElement == null) groupElement = xmlDoc.CreateElement("Transforms");
			}
		else {
			xmlDoc = new XmlDocument();
			xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
			calibrationMatrixElement = xmlDoc.CreateElement("ns2", "RUISClibrationMatrix", "http://ruisystem.net/m2k");
			xmlDoc.AppendChild(calibrationMatrixElement);
			groupElement = xmlDoc.CreateElement("Transforms");
		}
		calibrationMatrixElement.AppendChild(groupElement);
		
		XmlElement wrapperElement = xmlDoc.CreateElement(wrapperElementName);
		groupElement.AppendChild(wrapperElement);
		
		XmlElement translateElement = xmlDoc.CreateElement("translate");
		translateElement.SetAttribute("x", deviceToRootTransform[0, 3].ToString());
		translateElement.SetAttribute("y", deviceToRootTransform[1, 3].ToString());
		translateElement.SetAttribute("z", deviceToRootTransform[2, 3].ToString());
		
		wrapperElement.AppendChild(translateElement);
		
		XmlElement rotateElement = xmlDoc.CreateElement("rotate");
		rotateElement.SetAttribute("r00", deviceToRootTransform[0, 0].ToString());
		rotateElement.SetAttribute("r01", deviceToRootTransform[0, 1].ToString());
		rotateElement.SetAttribute("r02", deviceToRootTransform[0, 2].ToString());
		rotateElement.SetAttribute("r10", deviceToRootTransform[1, 0].ToString());
		rotateElement.SetAttribute("r11", deviceToRootTransform[1, 1].ToString());
		rotateElement.SetAttribute("r12", deviceToRootTransform[1, 2].ToString());
		rotateElement.SetAttribute("r20", deviceToRootTransform[2, 0].ToString());
		rotateElement.SetAttribute("r21", deviceToRootTransform[2, 1].ToString());
		rotateElement.SetAttribute("r22", deviceToRootTransform[2, 2].ToString());
		
		wrapperElement.AppendChild(rotateElement);
		
		XmlNode groupNode = xmlDoc.DocumentElement.SelectSingleNode("Transforms");
		XmlNode testNode = groupNode.SelectSingleNode(wrapperElementName);
		// Element not found
		if(testNode == null) { 	
			groupNode.AppendChild(wrapperElement);
		}
		else {// Element already exists
			var oldElem = testNode;
			groupNode.ReplaceChild(wrapperElement, oldElem);
		
		}
		
		FileStream xmlFileStream = File.Open(filename, FileMode.Create);
		StreamWriter streamWriter = new StreamWriter(xmlFileStream);
		xmlDoc.Save(streamWriter);
		streamWriter.Flush();
		streamWriter.Close();
		xmlFileStream.Close();
	}