Camera.pde: Implemented gyro based camera stabilization to support continuous servo gimbals.

This commit is contained in:
Adam M Rivera 2012-07-04 21:08:03 -05:00
parent 6e93ab6af6
commit 857ad6c706

View File

@ -18,18 +18,21 @@ static void init_camera()
static void static void
camera_stabilization() camera_stabilization()
{ {
int32_t p_sensor_value = g.camera_pitch_continuous ? (ahrs.get_gyro().y * 100) : ahrs.pitch_sensor;
int32_t r_sensor_value = g.camera_roll_continuous ? (ahrs.get_gyro().x * 100) : ahrs.roll_sensor;
// PITCH // PITCH
// ----- // -----
// Allow user to control camera pitch with channel 6 (mixed with pitch DCM) // Allow user to control camera pitch with channel 6 (mixed with pitch DCM)
if(g.radio_tuning == 0) { if(g.radio_tuning == 0) {
g.rc_camera_pitch.set_pwm(g.rc_6.radio_in); g.rc_camera_pitch.set_pwm(g.rc_6.radio_in);
g.rc_camera_pitch.servo_out = g.rc_camera_pitch.control_mix(ahrs.pitch_sensor); g.rc_camera_pitch.servo_out = g.rc_camera_pitch.control_mix(p_sensor_value);
}else{ }else{
// unless channel 6 is already being used for tuning // unless channel 6 is already being used for tuning
g.rc_camera_pitch.servo_out = ahrs.pitch_sensor * -1; g.rc_camera_pitch.servo_out = p_sensor_value * -1;
} }
g.rc_camera_pitch.servo_out = (float)g.rc_camera_pitch.servo_out * g.camera_pitch_gain; g.rc_camera_pitch.servo_out = (float)g.rc_camera_pitch.servo_out * g.camera_pitch_gain;
// limit // limit
//g.rc_camera_pitch.servo_out = constrain(g.rc_camera_pitch.servo_out, -4500, 4500); //g.rc_camera_pitch.servo_out = constrain(g.rc_camera_pitch.servo_out, -4500, 4500);
@ -43,7 +46,7 @@ camera_stabilization()
*/ */
// dont allow control mixing // dont allow control mixing
g.rc_camera_roll.servo_out = (float)-ahrs.roll_sensor * g.camera_roll_gain; g.rc_camera_roll.servo_out = (float)-r_sensor_value * g.camera_roll_gain;
// limit // limit
//g.rc_camera_roll.servo_out = constrain(-ahrs.roll_sensor, -4500, 4500); //g.rc_camera_roll.servo_out = constrain(-ahrs.roll_sensor, -4500, 4500);