Esempio n. 1
0
    private void ReceiveAsyncMessage(object sender, SpheroDeviceMessenger.MessengerEventArgs eventArgs)
    {
        // Handler method for the streaming data. This code copies the data values
        SpheroDeviceSensorsAsyncData message =
            (SpheroDeviceSensorsAsyncData)eventArgs.Message;
        SpheroDeviceSensorsData sensorsData = message.Frames[0];

        // There can be some discontinuation with vision data coming in, and what we requested,
        // so check if the data actually exists
        SpheroAttitudeData attitudeData = sensorsData.AttitudeData;

        if (attitudeData != null)
        {
            SpheroYaw = sensorsData.AttitudeData.Yaw;
        }

        SpheroQuaternionData quaternionData = sensorsData.QuaternionData;

        if (quaternionData != null)
        {
            SpheroQuaternion = new Quaternion(sensorsData.QuaternionData.Q1,
                                              sensorsData.QuaternionData.Q2,
                                              sensorsData.QuaternionData.Q3,
                                              sensorsData.QuaternionData.Q0);
        }
    }
Esempio n. 2
0
    private void ReceiveAsyncMessage(object sender,
                                     SpheroDeviceMessenger.MessengerEventArgs eventArgs)
    {
        if (Time.timeScale > 0)
        {
            // Event Handler function
            SpheroDeviceSensorsAsyncData message =
                (SpheroDeviceSensorsAsyncData)eventArgs.Message;

            SpheroDeviceSensorsData sensorsData = message.Frames[0];

            // Get the yaw value which is used to rotate the on screen Sphero
            yaw1 = sensorsData.AttitudeData.Yaw;

            // Update the on screen Sphero position using the accelerometer values for x and y
            float   xAcceleration   = sensorsData.AccelerometerData.Normalized.X;
            float   yAcceleration   = sensorsData.AccelerometerData.Normalized.Y;
            Vector3 currentPosition = transform.position;

            // Create a new position by filtering the accelerometer data using the low pass
            // filtering formula (alpha * filteredValue + (1 - alpha) * newValue)
            position = new Vector3(0.9f * currentPosition.x + 0.35f * xAcceleration,
                                   0.9f * currentPosition.y + 0.1f * yAcceleration, 0.0f);
        }
    }
Esempio n. 3
0
    private void ReceiveAsyncMessage(object sender,
                                     SpheroDeviceMessenger.MessengerEventArgs eventArgs)
    {
        // Handler method for the streaming data. This code copies the data values
        // to instance variables, which are updated on the screen in the OnGUI method.
        SpheroDeviceSensorsAsyncData message =
            (SpheroDeviceSensorsAsyncData)eventArgs.Message;
        SpheroDeviceSensorsData sensorsData = message.Frames[0];

        acceleration = sensorsData.AccelerometerData.Normalized;

        pitch = sensorsData.AttitudeData.Pitch;
        roll  = sensorsData.AttitudeData.Roll;
        yaw   = sensorsData.AttitudeData.Yaw;

        q0 = sensorsData.QuaternionData.Q0;
        q1 = sensorsData.QuaternionData.Q1;
        q2 = sensorsData.QuaternionData.Q2;
        q3 = sensorsData.QuaternionData.Q3;
    }
        public void TestDecode()
        {
            string encodedString = File.ReadAllText("/Users/brian/Documents/code/development/unity-plugin/ExampleProject/SensorStreaming/Assets/Plugins/SpheroTests/DataStreamingExample.json");

            // Test that a message is created.
            SpheroDeviceMessage message =
                SpheroDeviceMessageDecoder.messageFromEncodedString(encodedString);

            Assert.NotNull(message);
            Assert.True(message is SpheroDeviceSensorsAsyncData);
            Assert.Equal(123456, message.TimeStamp);

            // Specific test for SpheroDeviceSensorsAsyncData
            SpheroDeviceSensorsAsyncData sensorsAsyncData =
                (SpheroDeviceSensorsAsyncData)message;

            Assert.Equal(2, sensorsAsyncData.FrameCount);
            Assert.Equal(0xF0000000E067E060, sensorsAsyncData.Mask);
            Assert.NotNull(sensorsAsyncData.Frames);
            Assert.True(sensorsAsyncData.Frames.Length > 1);

            // Check values for a DeviceSensorsData object
            SpheroDeviceSensorsData sensorsData = sensorsAsyncData.Frames[0];

            // Accelerometer
            Assert.Equal(1.23f, sensorsData.AccelerometerData.Normalized.X);
            Assert.Equal(1.23f, sensorsData.AccelerometerData.Normalized.Y);
            Assert.Equal(1.23f, sensorsData.AccelerometerData.Normalized.Z);
            Assert.Equal(4096, sensorsData.AccelerometerData.Raw.x);
            Assert.Equal(4096, sensorsData.AccelerometerData.Raw.y);
            Assert.Equal(4096, sensorsData.AccelerometerData.Raw.z);

            // Attitude
            Assert.Equal(45.0f, sensorsData.AttitudeData.Pitch);
            Assert.Equal(180.0f, sensorsData.AttitudeData.Roll);
            Assert.Equal(270.0f, sensorsData.AttitudeData.Yaw);

            // Quaternion
            Assert.Equal(0.3f, sensorsData.QuaternionData.Q0);
            Assert.Equal(0.7f, sensorsData.QuaternionData.Q1);
            Assert.Equal(0.3f, sensorsData.QuaternionData.Q2);
            Assert.Equal(1.0f, sensorsData.QuaternionData.Q3);

            // back EMF
            Assert.Equal(200, sensorsData.BackEMFData.Filtered.right);
            Assert.Equal(200, sensorsData.BackEMFData.Filtered.left);
            Assert.Equal(200, sensorsData.BackEMFData.Raw.right);
            Assert.Equal(200, sensorsData.BackEMFData.Raw.left);

            // locator
            Assert.Equal(190.2f, sensorsData.LocatorData.Position.x);
            Assert.Equal(85.6f, sensorsData.LocatorData.Position.y);
            Assert.True(Math.Abs(208.5746868630036f - sensorsData.LocatorData.Position.Magnitude()) < 0.001);
            Assert.Equal(9.99f, sensorsData.LocatorData.Velocity.x);
            Assert.Equal(86.4f, sensorsData.LocatorData.Velocity.y);

            // gyro
            Assert.Equal(300, sensorsData.GyroData.RotationRate.x);
            Assert.Equal(300, sensorsData.GyroData.RotationRate.y);
            Assert.Equal(300, sensorsData.GyroData.RotationRate.z);
            Assert.Equal(300, sensorsData.GyroData.RotationRateRaw.x);
            Assert.Equal(300, sensorsData.GyroData.RotationRateRaw.y);
            Assert.Equal(300, sensorsData.GyroData.RotationRateRaw.z);
        }