/** * Set servo positions (0.0 to 1.0) translated from normalized values * (-1.0 to 1.0). * * @param normalizedHorizontal Pan Position from -1.0 to 1.0. * @param normalizedVertical Tilt Position from -1.0 to 1.0. */ void setServoPositions(float normalizedHorizontal, float normalizedVertical) { float servoH = NormalizeToRange(normalizedHorizontal); /* narrow vertical range keep vertical servo from going too far */ //float servoV = NormalizeToRange(normalizedVertical, 0.2, 0.8); float servoV = NormalizeToRange(normalizedVertical); float currentH = horizontalServo->Get(); float currentV = verticalServo->Get(); /* make sure the movement isn't too small */ if (fabs(servoH - currentH) > servoDeadband) { horizontalServo->Set(servoH); /* save new normalized horizontal position */ horizontalPosition = RangeToNormalized(servoH, 1); } if (fabs(servoV - currentV) > servoDeadband) { verticalServo->Set(servoV); // save new normalized vertical position verticalPosition = RangeToNormalized(servoV, 1); } ShowActivity("Servo set to: x: %f y: %f", servoH, servoV); }
void panForTarget(Servo *panServo, double sinStart) { float normalizedSinPosition = (float)SinPosition(NULL, sinStart); float newServoPosition = NormalizeToRange(normalizedSinPosition); panServo->Set( newServoPosition ); //ShowActivity ("pan x: normalized %f newServoPosition = %f" , // normalizedSinPosition, newServoPosition ); }
/** * Adjust servo positions (0.0 to 1.0) translated from normalized * values (-1.0 to 1.0). * * @param normalizedHorizontal Pan adjustment from -1.0 to 1.0. * @param normalizedVertical Tilt adjustment from -1.0 to 1.0. */ void adjustServoPositions(float normDeltaHorizontal, float normDeltaVertical) { /* adjust for the fact that servo overshoots based on image input */ normDeltaHorizontal /= 8.0; normDeltaVertical /= 4.0; /* compute horizontal goal */ float currentH = horizontalServo->Get(); float normCurrentH = RangeToNormalized(currentH, 1); float normDestH = normCurrentH + normDeltaHorizontal; /* narrow range keep servo from going too far */ if (normDestH > 1.0) normDestH = 1.0; if (normDestH < -1.0) normDestH = -1.0; /* convert inputs to servo range */ float servoH = NormalizeToRange(normDestH); /* compute vertical goal */ float currentV = verticalServo->Get(); float normCurrentV = RangeToNormalized(currentV, 1); float normDestV = normCurrentV + normDeltaVertical; if (normDestV > 1.0) normDestV = 1.0; if (normDestV < -1.0) normDestV = -1.0; float servoV = NormalizeToRange(normDestV, 0.2, 0.8); /* make sure the movement isn't too small */ if (fabs(currentH - servoH) > servoDeadband) { horizontalServo->Set(servoH); /* save new normalized horizontal position */ horizontalPosition = RangeToNormalized(servoH, 1); } if (fabs(currentV - servoV) > servoDeadband) { verticalServo->Set(servoV); // save new normalized vertical position verticalPosition = RangeToNormalized(servoV, 1); } ShowActivity("Servo set to: x: %f y: %f", servoH, servoV); }
/** * Set servo positions (0.0 to 1.0) translated from normalized values (-1.0 to 1.0). * * @param normalizedHorizontal Pan Position from -1.0 to 1.0. * @param normalizedVertical Tilt Position from -1.0 to 1.0. */ void setServoPositions(float normalizedHorizontal, float normalizedVertical) { float servoH = NormalizeToRange(normalizedHorizontal); float servoV = NormalizeToRange(normalizedVertical); float currentH = horizontalServo->Get(); float currentV = verticalServo->Get(); /* make sure the movement isn't too small */ if ( fabs(servoH - currentH) > servoDeadband ) { horizontalServo->Set( servoH ); /* save new normalized horizontal position */ horizontalPosition = RangeToNormalized(servoH, 1); } if ( fabs(servoV - currentV) > servoDeadband ) { verticalServo->Set( servoV ); verticalPosition = RangeToNormalized(servoV, 1); } }