示例#1
0
 public FilteredData(ulong ID, string source, float[] position, float[] velocity, float[] rawposition, float[] head, double clock, Photodiode pd)
 {
     this.ID          = ID;
     this.source      = source;
     this.position    = position;
     this.velocity    = velocity;
     this.rawposition = rawposition;
     this.head        = head;
     this.clock       = clock;
     this.photodiode  = pd;
 }
示例#2
0
        protected override void Process(FilteredData data)
        {
            counter += 1;
            if (counter == photodiodeShadowFrames)
            {
                counter  = 0;
                constant = -constant;
                this.positionService.position.X += constant;
                this.positionService.position.Y += constant;
                photoStatus = !photoStatus;
            }

            photodiode = data.photodiode;
            if (photodiode != null)
            {
                photoLvl = photodiode.Read;
                // SEE PHOTODIODE RESULT
                // Console.WriteLine(photoLvl);
            }
            this.Send <PhotoData>(new PhotoData(this.positionService.position.X, photoStatus, photoLvl, data.ID));
        }
示例#3
0
        public KalmanFilterTrack(bool use, bool twoflies, Photodiode pd)
        {
            //initialize new kalman filter with appropriate number of parameters
            kal = new Kalman(6, 3, 0);
            mk  = new ModelKalman();
            Matrix <float> state = new Matrix <float>(new float[]
            {
                0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f
            });

            //define kalman filter according with the kalman model
            kal.CorrectedState             = state;
            kal.TransitionMatrix           = mk.transitionMatrix;
            kal.MeasurementNoiseCovariance = mk.measurementNoise;
            kal.ProcessNoiseCovariance     = mk.processNoise;
            kal.ErrorCovariancePost        = mk.errorCovariancePost;
            kal.MeasurementMatrix          = mk.measurementMatrix;
            pars          = new float[3];
            this.use      = use;
            this.twoflies = twoflies;

            photodiode = pd;
        }
示例#4
0
        public void Initialize(int Size)
        {
            // Initialize vr components
            render = new RenderSubsystem(this, new StaticCamera(Size), Size);
            update = new UpdateSubsystem(this);

            // Load virtual world
            if (protName == null)
            {
                GetStimulus();
            }
            else
            {
                GetStimulus(protName);
            }

            // Initialize Photodiode & Kalman filter
            if (vRProtocol.usePhotodiode)
            {
                pd = new Photodiode(vRProtocol.portPhotodiode);
                pd.StartPhotodiode();
            }
            kft = new KalmanFilterTrack <MovementData>(false, vRProtocol.twoFlies, pd);

            // Initialize data acquisition objects
            if (vRProtocol.usePulsePal)
            {
                pp = new PulsePal <MovementData>(vRProtocol.portPulsePal);
                pp.StartPulsePal();
            }
            if (vRProtocol.useCam1)
            {
                cam1 = new uEyeCamera(0, vRProtocol.paramsPathCam1, vRProtocol.trackCam1, vRProtocol.dispCam1, 0, vRProtocol.fpsCam1, null);
                while (!cam1.m_IsLive)
                {
                }
                if (cam1.m_IsLive)
                {
                    cam1.Start();
                    if (vRProtocol.trackCam1)
                    {
                        fastT = new FastTracking <Frame>(this, cam1.firstFrame, 1, 100, 50, 0, vRProtocol.twoFlies, true);
                        fastT.Start();
                        kft.Start();
                    }
                }
            }
            if (vRProtocol.useCam2)
            {
                if (vRProtocol.usePulsePal)
                {
                    cam2 = new uEyeCamera(1, vRProtocol.paramsPathCam2, vRProtocol.trackCam2, vRProtocol.dispCam2, 800, vRProtocol.fpsCam2, pp);
                }
                else
                {
                    cam2 = new uEyeCamera(1, vRProtocol.paramsPathCam2, vRProtocol.trackCam2, vRProtocol.dispCam2, 800, vRProtocol.fpsCam2, null);
                }

                if (cam2.m_IsLive)
                {
                    cam2.Start();
                    if (vRProtocol.trackCam2)
                    {
                        fastT = new FastTracking <Frame>(this, cam2.firstFrame, 10, 5000, 35, 0, vRProtocol.twoFlies, false);
                        fastT.Start();
                        kft.Start();
                    }
                }
            }

            if (vRProtocol.recordTracking & vRProtocol.useCam2)
            {
                dataRecorder = new DataRecorder <FilteredData>(vRProtocol.recordPathTracking, cam2, true, vRProtocol.twoFlies, this);
                dataRecorder.Start();
            }
            else if (vRProtocol.recordTracking & !vRProtocol.useCam2)
            {
                dataRecorder = new DataRecorder <FilteredData>(vRProtocol.recordPathTracking, true, vRProtocol.twoFlies, this);
                dataRecorder.Start();
            }

            if (vRProtocol.recordStimulus & vRProtocol.useCam2)
            {
                stimRecorder = new StimRecorder <StimData>(vRProtocol.recordPathStimulus, cam2, true, this);
                stimRecorder.Start();
            }
            else if (vRProtocol.recordStimulus & !vRProtocol.useCam2)
            {
                stimRecorder = new StimRecorder <StimData>(vRProtocol.recordPathStimulus, true, this);
                stimRecorder.Start();
            }

            if (vRProtocol.recordPhotodiode & vRProtocol.useCam2)
            {
                photoRecorder = new PhotoRecorder <PhotoData>(vRProtocol.recordPathPhotodiode, cam2, true, this);
                photoRecorder.Start();
            }
            else if (vRProtocol.recordPhotodiode & !vRProtocol.useCam2)
            {
                photoRecorder = new PhotoRecorder <PhotoData>(vRProtocol.recordPathPhotodiode, true, this);
                photoRecorder.Start();
            }
        }