Exemplo n.º 1
0
        public static Apollo.CorrectedImu ApolloConvertFrom(CorrectedImuData data)
        {
            var   angles = data.Orientation.eulerAngles;
            float roll   = angles.x;
            float pitch  = angles.y;
            float yaw    = angles.z;

            return(new Apollo.CorrectedImu()
            {
                header = new Apollo.Header()
                {
                    timestamp_sec = data.Time,
                },

                imu = new Apollo.Pose()
                {
                    linear_acceleration = new Apollo.Point3D()
                    {
                        x = data.Acceleration.x, y = data.Acceleration.z, z = -data.Acceleration.y
                    },
                    angular_velocity = new Apollo.Point3D()
                    {
                        x = -data.AngularVelocity.z, y = data.AngularVelocity.x, z = -data.AngularVelocity.y
                    },
                    heading = yaw,
                    euler_angles = new Apollo.Point3D()
                    {
                        x = roll * UnityEngine.Mathf.Deg2Rad,
                        y = pitch * UnityEngine.Mathf.Deg2Rad,
                        z = yaw * UnityEngine.Mathf.Deg2Rad,
                    }
                }
            });
        }
Exemplo n.º 2
0
        public static apollo.localization.CorrectedImu ConvertFrom(CorrectedImuData data)
        {
            var   orientation = ConvertToRfu(data.Orientation);
            var   angles      = orientation.eulerAngles;
            float roll        = angles.x;
            float pitch       = angles.y;
            float yaw         = angles.z;

            return(new apollo.localization.CorrectedImu()
            {
                header = new apollo.common.Header()
                {
                    timestamp_sec = data.Time,
                },

                imu = new apollo.localization.Pose()
                {
                    linear_acceleration = ConvertToPoint(new Vector3(data.GlobalAcceleration.x, data.GlobalAcceleration.y, data.GlobalAcceleration.z)),
                    angular_velocity = ConvertToPoint(new Vector3(data.GlobalAngularVelocity.x, data.GlobalAngularVelocity.y, data.GlobalAngularVelocity.z)),
                    heading = yaw,
                    euler_angles = new apollo.common.Point3D()
                    {
                        x = roll * Mathf.Deg2Rad,
                        y = pitch * Mathf.Deg2Rad,
                        z = yaw * Mathf.Deg2Rad,
                    }
                }
            });
        }
Exemplo n.º 3
0
        void FixedUpdate()
        {
            if (IsFirstFixedUpdate)
            {
                lock (MessageQueue)
                {
                    MessageQueue.Clear();
                }
                IsFirstFixedUpdate = false;
            }

            var time = SimulatorManager.Instance.CurrentTime;

            if (time < LastTimestamp)
            {
                return;
            }

            var velocity     = transform.InverseTransformDirection(RigidBody.velocity);
            var acceleration = (velocity - LastVelocity) / Time.fixedDeltaTime;

            LastVelocity = velocity;

            acceleration -= transform.InverseTransformDirection(Physics.gravity);

            var angularVelocity = RigidBody.angularVelocity;

            var   angles      = transform.eulerAngles;
            float roll        = -angles.z;
            float pitch       = -angles.x;
            float yaw         = -angles.y;
            var   orientation = Quaternion.Euler(roll, pitch, yaw);

            data = new ImuData()
            {
                Name     = Name,
                Frame    = Frame,
                Time     = time,
                Sequence = Sequence,

                MeasurementSpan = Time.fixedDeltaTime,

                Position    = transform.position,
                Orientation = orientation,

                Acceleration    = acceleration,
                LinearVelocity  = velocity,
                AngularVelocity = angularVelocity,
            };

            var correctedData = new CorrectedImuData()
            {
                Name     = Name,
                Frame    = CorrectedFrame,
                Time     = time,
                Sequence = Sequence,

                MeasurementSpan = Time.fixedDeltaTime,

                Position    = transform.position,
                Orientation = orientation,

                Acceleration    = acceleration,
                LinearVelocity  = velocity,
                AngularVelocity = angularVelocity,
            };

            if (Bridge == null || Bridge.Status != Status.Connected)
            {
                return;
            }

            lock (MessageQueue)
            {
                MessageQueue.Enqueue(Tuple.Create(time, Time.fixedDeltaTime, (Action)(() => {
                    Writer.Write(data);
                    if (CorrectedWriter != null)
                    {
                        CorrectedWriter.Write(correctedData);
                    }
                })));
            }

            Sequence++;
        }
Exemplo n.º 4
0
        void FixedUpdate()
        {
            if (IsFirstFixedUpdate)
            {
                lock (MessageQueue)
                {
                    MessageQueue.Clear();
                }
                IsFirstFixedUpdate = false;
            }

            var time = SimulatorManager.Instance.CurrentTime;

            if (time < LastTimestamp)
            {
                return;
            }

            var position = transform.position;

            position.Set(position.z, -position.x, position.y);
            minX = Mathf.Min(minX, position.x);
            maxX = Mathf.Max(maxX, position.x);
            minY = Mathf.Min(minY, position.y);
            maxY = Mathf.Max(maxY, position.y);
            minZ = Mathf.Min(minZ, position.z);
            maxZ = Mathf.Max(maxZ, position.z);

            var velocity = transform.InverseTransformDirection(Dynamics.Velocity);

            velocity.Set(velocity.z, -velocity.x, velocity.y);
            var acceleration = (velocity - LastVelocity) / Time.fixedDeltaTime;

            LastVelocity = velocity;

            var localGravity = transform.InverseTransformDirection(Physics.gravity);

            acceleration -= new Vector3(localGravity.z, -localGravity.x, localGravity.y);

            var angularVelocity = Dynamics.AngularVelocity;

            angularVelocity.Set(-angularVelocity.z, angularVelocity.x, -angularVelocity.y); // converting to right handed xyz

            var orientation = transform.rotation;

            orientation.Set(-orientation.z, orientation.x, -orientation.y, orientation.w); // converting to right handed xyz
            minGyroX = Mathf.Min(minGyroX, orientation.x);
            maxGyroX = Mathf.Max(maxGyroX, orientation.x);
            minGyroY = Mathf.Min(minGyroY, orientation.y);
            maxGyroY = Mathf.Max(maxGyroY, orientation.y);
            minGyroZ = Mathf.Min(minGyroZ, orientation.z);
            maxGyroZ = Mathf.Max(maxGyroZ, orientation.z);

            var data = new ImuData()
            {
                Name     = Name,
                Frame    = Frame,
                Time     = time,
                Sequence = Sequence,

                MeasurementSpan = Time.fixedDeltaTime,

                Position    = position,
                Orientation = orientation,

                Acceleration    = acceleration,
                LinearVelocity  = velocity,
                AngularVelocity = angularVelocity,
            };

            latestData = data;

            var correctedData = new CorrectedImuData()
            {
                Name     = Name,
                Frame    = CorrectedFrame,
                Time     = time,
                Sequence = Sequence,

                MeasurementSpan = Time.fixedDeltaTime,

                Position    = position,
                Orientation = orientation,

                Acceleration    = acceleration,
                LinearVelocity  = velocity,
                AngularVelocity = angularVelocity,
            };

            if (Bridge == null || Bridge.Status != Status.Connected)
            {
                return;
            }

            lock (MessageQueue)
            {
                MessageQueue.Enqueue(Tuple.Create(time, Time.fixedDeltaTime, (Action)(() =>
                {
                    if (Bridge != null && Bridge.Status == Status.Connected)
                    {
                        Publish(data);
                        CorrectedWriter?.Invoke(correctedData);
                    }
                })));
            }

            Sequence++;
        }
Exemplo n.º 5
0
        void FixedUpdate()
        {
            if (IsFirstFixedUpdate)
            {
                lock (MessageQueue)
                {
                    MessageQueue.Clear();
                }
                IsFirstFixedUpdate = false;
            }

            var time = SimulatorManager.Instance.CurrentTime;

            if (time < LastTimestamp)
            {
                return;
            }

            var position = transform.position;

            position.Set(position.z, -position.x, position.y);
            var velocity = transform.InverseTransformDirection(RigidBody.velocity);

            velocity.Set(velocity.z, -velocity.x, velocity.y);
            var acceleration = (velocity - LastVelocity) / Time.fixedDeltaTime;

            LastVelocity = velocity;

            var localGravity = transform.InverseTransformDirection(Physics.gravity);

            acceleration -= new Vector3(localGravity.z, -localGravity.x, localGravity.y);

            var angularVelocity = RigidBody.angularVelocity;

            angularVelocity.Set(-angularVelocity.z, angularVelocity.x, -angularVelocity.y); // converting to right handed xyz

            var orientation = transform.rotation;

            orientation.Set(-orientation.z, orientation.x, -orientation.y, orientation.w); // converting to right handed xyz

            data = new ImuData()
            {
                Name     = Name,
                Frame    = Frame,
                Time     = time,
                Sequence = Sequence,

                MeasurementSpan = Time.fixedDeltaTime,

                Position    = position,
                Orientation = orientation,

                Acceleration    = acceleration,
                LinearVelocity  = velocity,
                AngularVelocity = angularVelocity,
            };

            var correctedData = new CorrectedImuData()
            {
                Name     = Name,
                Frame    = CorrectedFrame,
                Time     = time,
                Sequence = Sequence,

                MeasurementSpan = Time.fixedDeltaTime,

                Position    = position,
                Orientation = orientation,

                Acceleration    = acceleration,
                LinearVelocity  = velocity,
                AngularVelocity = angularVelocity,
            };

            if (Bridge == null || Bridge.Status != Status.Connected)
            {
                return;
            }

            lock (MessageQueue)
            {
                MessageQueue.Enqueue(Tuple.Create(time, Time.fixedDeltaTime, (Action)(() => {
                    Writer.Write(data);
                    if (CorrectedWriter != null)
                    {
                        CorrectedWriter.Write(correctedData);
                    }
                })));
            }

            Sequence++;
        }
Exemplo n.º 6
0
        void FixedUpdate()
        {
            if (IsFirstFixedUpdate)
            {
                lock (MessageQueue)
                {
                    MessageQueue.Clear();
                }
                IsFirstFixedUpdate = false;
            }

            var time = SimulatorManager.Instance.CurrentTime;

            if (time < LastTimestamp)
            {
                return;
            }

            var position = transform.position;

            position.Set(position.z, -position.x, position.y);
            var velocity = transform.InverseTransformDirection(RigidBody.velocity);

            velocity.Set(velocity.z, -velocity.x, velocity.y);
            var acceleration    = (velocity - LastVelocity) / Time.fixedDeltaTime;
            var localGravity    = transform.InverseTransformDirection(Physics.gravity);
            var angularVelocity = RigidBody.angularVelocity;
            var orientation     = transform.rotation;

            orientation.Set(-orientation.z, orientation.x, -orientation.y, orientation.w);

            if (activateFailure && time > failTime && time < failStopTime)
            {
                health         = false;
                healthWasFalse = true;
            }
            else
            {
                health = true;
            }

            if (!initialized)
            {
                LastPosition    = position;
                LastVelocity    = velocity;
                LastOrientation = orientation;
                initialized     = true;
            }
            else
            {
                if (health)
                {
                    if (healthWasFalse)
                    {
                        position = LastPosition + velocity * Time.fixedDeltaTime;
                    }
                    LastVelocity    = velocity;
                    LastPosition    = position;
                    LastOrientation = orientation;

                    acceleration -= new Vector3(localGravity.z, -localGravity.x, localGravity.y);
                    angularVelocity.Set(-angularVelocity.z, angularVelocity.x, -angularVelocity.y);

                    if (activateBias)
                    {
                        dAcceleration = new Vector3(genBias(sAcceleration), genBias(sAcceleration), genBias(sAcceleration));
                        acceleration += dAcceleration;
                        dVelocity     = dVelocity + dAcceleration * Time.fixedDeltaTime;
                        velocity     += dVelocity;
                        dPosition     = dPosition + dVelocity * Time.fixedDeltaTime;
                        position     += dPosition;

                        dAngularVelocity = new Vector3(genBias(sAngularVelocity), genBias(sAngularVelocity), genBias(sAngularVelocity));
                        angularVelocity += dAngularVelocity;
                        dAttitude        = dAttitude + dAngularVelocity * Time.fixedDeltaTime;
                        var attitude = dAttitude + orientation.eulerAngles;
                        orientation = Quaternion.Euler(attitude.x, attitude.y, attitude.z);
                    }
                }
                else
                {
                    position     = LastPosition;
                    velocity     = LastVelocity;
                    orientation  = LastOrientation;
                    acceleration = new Vector3(0, 0, 0);
                    angularVelocity.Set(0, 0, 0);
                }
            }

            /*position.Set(position.z, -position.x, position.y);
             * velocity.Set(velocity.z, -velocity.x, velocity.y);
             * LastVelocity = velocity;
             * acceleration -= new Vector3(localGravity.z, -localGravity.x, localGravity.y);
             * angularVelocity.Set(-angularVelocity.z, angularVelocity.x, -angularVelocity.y); // converting to right handed xyz
             * orientation.Set(-orientation.z, orientation.x, -orientation.y, orientation.w); // converting to right handed xyz*/

            data = new ImuData()
            {
                Name     = Name,
                Frame    = Frame,
                Time     = time,
                Sequence = Sequence,

                MeasurementSpan = Time.fixedDeltaTime,

                Position    = position,
                Orientation = orientation,

                Acceleration    = acceleration,
                LinearVelocity  = velocity,
                AngularVelocity = angularVelocity,
            };

            var correctedData = new CorrectedImuData()
            {
                Name     = Name,
                Frame    = CorrectedFrame,
                Time     = time,
                Sequence = Sequence,

                MeasurementSpan = Time.fixedDeltaTime,

                Position    = position,
                Orientation = orientation,

                Acceleration    = acceleration,
                LinearVelocity  = velocity,
                AngularVelocity = angularVelocity,
            };

            if (Bridge == null || Bridge.Status != Status.Connected)
            {
                return;
            }

            lock (MessageQueue)
            {
                MessageQueue.Enqueue(Tuple.Create(time, Time.fixedDeltaTime, (Action)(() => {
                    Writer.Write(data);
                    if (CorrectedWriter != null)
                    {
                        CorrectedWriter.Write(correctedData);
                    }
                })));
            }

            Sequence++;
        }