public void Reset()
 {
     lock (lockobj) {
         rollingQueue.Clear();
         recentTimestamp = double.NaN;
     }
 }
示例#2
0
        public void PushAbsolutePose(AbsolutePose pose)
        {
            lock (lockobj) {
                queue.Add(pose);

                if (!queue.VerifySort(delegate(AbsolutePose l, AbsolutePose r) { return(l.timestamp.CompareTo(r.timestamp)); }))
                {
                    OperationalTrace.WriteError("absolute sort is donzoed, flushing queue");
                    queue.Clear();
                }
            }
        }
        void TrackedDistance_DataValueAdded(object sender, SourceDataValueAddedEventArgs <double> e)
        {
            // check if we received something before
            if (double.IsNaN(lastTime.ts))
            {
                // we haven't received anything, initialize starting time
                lastTime = e.Time;
            }
            else if (e.Time < lastTime)
            {
                //OperationalTrace.WriteWarning("resetting tracked distanace: event time {0}, last time {1}", e.Time, lastTime);
                // timestamp rollover/reset
                // clear everything out
                lock (lockobj) {
                    queue.Clear();
                    lastTime = e.Time;
                    lastDist = 0;
                }
            }
            else
            {
                // calculate dt
                double dt = e.Time.ts - lastTime.ts;

                // calculate delta distance
                double dx = Math.Abs(e.Value) * dt;

                // get the lock
                lock (lockobj) {
                    lastDist += dx;
                    lastTime  = e.Time;

                    //OperationalTrace.WriteVerbose("adding dist {0}, time {1}", lastDist, lastTime);
                    queue.Add(new TrackedDistanceItem(lastTime, lastDist));
                }
            }
        }