Added Yaw control when descending in Alt hold
lowered kP & kD for Alt hold a tad
Adjusted RTL behavior to do speed control up to 4m to home, then go into Loiter
Fixed issue with AUTO not getting proper input.
Added Limit to high side of motors

git-svn-id: https://arducopter.googlecode.com/svn/trunk@2874 f9c3cf11-9bcb-44bc-f272-b75c42450872
This commit is contained in:
jasonshort 2011-07-16 23:08:07 +00:00
parent df26281296
commit b6db64f9be
6 changed files with 62 additions and 6 deletions

View File

@ -6,6 +6,7 @@ void output_motors_armed()
{ {
int roll_out, pitch_out; int roll_out, pitch_out;
int out_min = g.rc_3.radio_min; int out_min = g.rc_3.radio_min;
int out_max = g.rc_3.radio_max;
// Throttle is 0 to 1000 only // Throttle is 0 to 1000 only
g.rc_3.servo_out = constrain(g.rc_3.servo_out, 0, 1000); g.rc_3.servo_out = constrain(g.rc_3.servo_out, 0, 1000);
@ -57,13 +58,19 @@ void output_motors_armed()
motor_out[CH_8] -= g.rc_4.pwm_out; // CW motor_out[CH_8] -= g.rc_4.pwm_out; // CW
// limit output so motors don't stop // limit output so motors don't stop
motor_out[CH_1] = max(motor_out[CH_1], out_min); motor_out[CH_1] = max(motor_out[CH_1], out_min);
motor_out[CH_2] = max(motor_out[CH_2], out_min); motor_out[CH_2] = max(motor_out[CH_2], out_min);
motor_out[CH_3] = max(motor_out[CH_3], out_min); motor_out[CH_3] = max(motor_out[CH_3], out_min);
motor_out[CH_4] = max(motor_out[CH_4], out_min); motor_out[CH_4] = max(motor_out[CH_4], out_min);
motor_out[CH_7] = max(motor_out[CH_7], out_min); motor_out[CH_7] = max(motor_out[CH_7], out_min);
motor_out[CH_8] = max(motor_out[CH_8], out_min); motor_out[CH_8] = max(motor_out[CH_8], out_min);
motor_out[CH_1] = min(motor_out[CH_1], out_max);
motor_out[CH_2] = min(motor_out[CH_2], out_max);
motor_out[CH_3] = min(motor_out[CH_3], out_max);
motor_out[CH_4] = min(motor_out[CH_4], out_max);
motor_out[CH_7] = min(motor_out[CH_7], out_max);
motor_out[CH_8] = min(motor_out[CH_8], out_max);
#if CUT_MOTORS == ENABLED #if CUT_MOTORS == ENABLED

View File

@ -6,6 +6,7 @@ void output_motors_armed()
{ {
int roll_out, pitch_out; int roll_out, pitch_out;
int out_min = g.rc_3.radio_min; int out_min = g.rc_3.radio_min;
int out_max = g.rc_3.radio_max;
// Throttle is 0 to 1000 only // Throttle is 0 to 1000 only
g.rc_3.servo_out = constrain(g.rc_3.servo_out, 0, 1000); g.rc_3.servo_out = constrain(g.rc_3.servo_out, 0, 1000);
@ -112,6 +113,16 @@ void output_motors_armed()
motor_out[CH_10] = max(motor_out[CH_10], out_min); motor_out[CH_10] = max(motor_out[CH_10], out_min);
motor_out[CH_11] = max(motor_out[CH_11], out_min); motor_out[CH_11] = max(motor_out[CH_11], out_min);
motor_out[CH_1] = min(motor_out[CH_1], out_max);
motor_out[CH_2] = min(motor_out[CH_2], out_max);
motor_out[CH_3] = min(motor_out[CH_3], out_max);
motor_out[CH_4] = min(motor_out[CH_4], out_max);
motor_out[CH_7] = min(motor_out[CH_7], out_max);
motor_out[CH_8] = min(motor_out[CH_8], out_max);
motor_out[CH_10] = min(motor_out[CH_10], out_max);
motor_out[CH_11] = min(motor_out[CH_11], out_max);
#if CUT_MOTORS == ENABLED #if CUT_MOTORS == ENABLED
// Send commands to motors // Send commands to motors
if(g.rc_3.servo_out > 0){ if(g.rc_3.servo_out > 0){

View File

@ -6,6 +6,7 @@ void output_motors_armed()
{ {
int roll_out, pitch_out; int roll_out, pitch_out;
int out_min = g.rc_3.radio_min; int out_min = g.rc_3.radio_min;
int out_max = g.rc_3.radio_max;
// Throttle is 0 to 1000 only // Throttle is 0 to 1000 only
g.rc_3.servo_out = constrain(g.rc_3.servo_out, 0, 1000); g.rc_3.servo_out = constrain(g.rc_3.servo_out, 0, 1000);
@ -83,6 +84,16 @@ void output_motors_armed()
motor_out[CH_10] = max(motor_out[CH_10], out_min); motor_out[CH_10] = max(motor_out[CH_10], out_min);
motor_out[CH_11] = max(motor_out[CH_11], out_min); motor_out[CH_11] = max(motor_out[CH_11], out_min);
motor_out[CH_1] = min(motor_out[CH_1], out_max);
motor_out[CH_2] = min(motor_out[CH_2], out_max);
motor_out[CH_3] = min(motor_out[CH_3], out_max);
motor_out[CH_4] = min(motor_out[CH_4], out_max);
motor_out[CH_7] = min(motor_out[CH_7], out_max);
motor_out[CH_8] = min(motor_out[CH_8], out_max);
motor_out[CH_10] = min(motor_out[CH_10], out_max);
motor_out[CH_11] = min(motor_out[CH_11], out_max);
#if CUT_MOTORS == ENABLED #if CUT_MOTORS == ENABLED
// Send commands to motors // Send commands to motors
if(g.rc_3.servo_out > 0){ if(g.rc_3.servo_out > 0){

View File

@ -6,6 +6,7 @@ void output_motors_armed()
{ {
int roll_out, pitch_out; int roll_out, pitch_out;
int out_min = g.rc_3.radio_min; int out_min = g.rc_3.radio_min;
int out_max = g.rc_3.radio_max;
// Throttle is 0 to 1000 only // Throttle is 0 to 1000 only
g.rc_3.servo_out = constrain(g.rc_3.servo_out, 0, 1000); g.rc_3.servo_out = constrain(g.rc_3.servo_out, 0, 1000);
@ -57,6 +58,11 @@ void output_motors_armed()
motor_out[CH_3] = max(motor_out[CH_3], out_min); motor_out[CH_3] = max(motor_out[CH_3], out_min);
motor_out[CH_4] = max(motor_out[CH_4], out_min); motor_out[CH_4] = max(motor_out[CH_4], out_min);
motor_out[CH_1] = min(motor_out[CH_1], out_max);
motor_out[CH_2] = min(motor_out[CH_2], out_max);
motor_out[CH_3] = min(motor_out[CH_3], out_max);
motor_out[CH_4] = min(motor_out[CH_4], out_max);
#if CUT_MOTORS == ENABLED #if CUT_MOTORS == ENABLED
// Send commands to motors // Send commands to motors
if(g.rc_3.servo_out > 0){ if(g.rc_3.servo_out > 0){

View File

@ -4,6 +4,7 @@
void output_motors_armed() void output_motors_armed()
{ {
int out_min = g.rc_3.radio_min; int out_min = g.rc_3.radio_min;
int out_max = g.rc_3.radio_max;
// Throttle is 0 to 1000 only // Throttle is 0 to 1000 only
g.rc_3.servo_out = constrain(g.rc_3.servo_out, 0, 1000); g.rc_3.servo_out = constrain(g.rc_3.servo_out, 0, 1000);
@ -33,6 +34,10 @@ void output_motors_armed()
motor_out[CH_2] = max(motor_out[CH_2], out_min); motor_out[CH_2] = max(motor_out[CH_2], out_min);
motor_out[CH_4] = max(motor_out[CH_4], out_min); motor_out[CH_4] = max(motor_out[CH_4], out_min);
motor_out[CH_1] = min(motor_out[CH_1], out_max);
motor_out[CH_2] = min(motor_out[CH_2], out_max);
motor_out[CH_4] = min(motor_out[CH_4], out_max);
#if CUT_MOTORS == ENABLED #if CUT_MOTORS == ENABLED
// Send commands to motors // Send commands to motors
if(g.rc_3.servo_out > 0){ if(g.rc_3.servo_out > 0){

View File

@ -5,6 +5,7 @@
void output_motors_armed() void output_motors_armed()
{ {
int out_min = g.rc_3.radio_min; int out_min = g.rc_3.radio_min;
int out_max = g.rc_3.radio_max;
// Throttle is 0 to 1000 only // Throttle is 0 to 1000 only
g.rc_3.servo_out = constrain(g.rc_3.servo_out, 0, 1000); g.rc_3.servo_out = constrain(g.rc_3.servo_out, 0, 1000);
@ -41,6 +42,21 @@ void output_motors_armed()
motor_out[CH_1] -= g.rc_4.pwm_out; // CW motor_out[CH_1] -= g.rc_4.pwm_out; // CW
motor_out[CH_4] -= g.rc_4.pwm_out; // CW motor_out[CH_4] -= g.rc_4.pwm_out; // CW
// limit output so motors don't stop
motor_out[CH_1] = max(motor_out[CH_1], out_min);
motor_out[CH_2] = max(motor_out[CH_2], out_min);
motor_out[CH_3] = max(motor_out[CH_3], out_min);
motor_out[CH_4] = max(motor_out[CH_4], out_min);
motor_out[CH_7] = max(motor_out[CH_7], out_min);
motor_out[CH_8] = max(motor_out[CH_8], out_min);
motor_out[CH_1] = min(motor_out[CH_1], out_max);
motor_out[CH_2] = min(motor_out[CH_2], out_max);
motor_out[CH_3] = min(motor_out[CH_3], out_max);
motor_out[CH_4] = min(motor_out[CH_4], out_max);
motor_out[CH_7] = min(motor_out[CH_7], out_max);
motor_out[CH_8] = min(motor_out[CH_8], out_max);
#if CUT_MOTORS == ENABLED #if CUT_MOTORS == ENABLED
// Send commands to motors // Send commands to motors
if(g.rc_3.servo_out > 0){ if(g.rc_3.servo_out > 0){