public override void Loop() { var img = Eye.GetLatestData(); var faces = Brain.DetectFaces(img); if (faces.Length > 0) { var firstFace = faces.First(); // map the location var x = firstFace.FaceRectangle.Left + firstFace.FaceRectangle.Width / 2; var y = firstFace.FaceRectangle.Top + firstFace.FaceRectangle.Height / 2; var coordinateX = 80; var coordinateZ = 60 + 120 * (1 - (y * 1.0) / img.Height); var pose = Arm.ConvertToPose(new Tuple <double, double, double>(coordinateX, 0, coordinateZ)); var rotate = 45 + 90 * (1 - x * 1.0 / img.Width); var rotateStep = Arm.AngleToMM(rotate); pose.MotorThreeSteps = rotateStep; // Command ARM Arm.MoveTo(pose); } else { Console.WriteLine("Face is not detected!"); } //Thread.Sleep(10); }