예제 #1
0
        void BlobTrackerImageProcessedHandler(bt.ImageProcessed processed)
        {
            if (_state.Processing || _state.Shutdown)
            {
                return;
            }

            _state.Processing = true;

            SpawnIterator(processed, DoBlobTrackerImageProcessedHandler);
        }
 /// <summary>
 /// Handles event when image is processed by the blob tracker.
 /// </summary>
 /// <param name="imageProcessed"></param>
 #region  CODECLIP 02-3
 void OnImageProcessed(blob.ImageProcessed imageProcessed)
 {
     if (_followMe)
     {
         if (imageProcessed.Body.Results.Count == 1)
         {
             if (imageProcessed.Body.Results[0].Area > 100) //object detected
             {
                 _drivePort.SetDrivePower(0.5, 0.5);
             }
             else //search object
             {
                 _drivePort.SetDrivePower(-0.3, 0.3);
             }
         }
     }
 }
예제 #3
0
        IEnumerator <ITask> DoBlobTrackerImageProcessedHandler(bt.ImageProcessed processed)
        {
            try
            {
                Fault fault = null;

                FormInvoke setTracking = new FormInvoke(
                    delegate
                {
                    if (!_form.IsDisposed)
                    {
                        _form.Tracking = processed.Body.Results;
                    }
                }
                    );

                WinFormsServicePort.Post(setTracking);

                yield return(Arbiter.Choice(
                                 setTracking.ResultPort,
                                 delegate(EmptyValue success) { },
                                 delegate(Exception e)
                {
                    fault = Fault.FromException(e);
                }
                                 ));

                if (fault != null)
                {
                    LogError(null, "Unable to set tracking information", fault);
                    yield break;
                }
            }
            finally
            {
                _mainPort.Post(new UpdateProcessing(false));
            }
        }