@@ -104,15 +104,10 @@ void CalculateControlVector(float *euler_angles, float *g, float *motor_control_
104
104
float roll_angle_deg = 0 ;
105
105
float pitch_rate_deg = 0.0 ;
106
106
float roll_rate_deg = 0.0 ;
107
- float deltaF_pitch_old;
108
- float deltaF_roll_old;
109
- float moment_pitch;
110
- float moment_roll;
107
+ float delta_force_pitch;
108
+ float delta_force_roll;
111
109
float pitch_err_rad = 0.0 ;
112
110
float roll_err_rad = 0.0 ;
113
- float scale_val = 1.0 ; // value for scaling controller feedback at low RPM
114
- // float pitch_rate_err = 0.0;
115
- // float roll_rate_err = 0.0;
116
111
117
112
// Read primary throttle value from left stick
118
113
float input_left_throttle = input_radio_values[INDEX_LEFT_STICK];
@@ -147,39 +142,33 @@ void CalculateControlVector(float *euler_angles, float *g, float *motor_control_
147
142
// deltaF_roll = (radioRecieverVals[INDEX_RIGHT_STICK_LEFTRIGHT]*Nbar - roll*kP)*DEG2RAD + (0.0f*Nbar - roll_rate*kD)*DEG2RAD;
148
143
// ------------------------------
149
144
150
- // ------------------------------
151
-
152
- // --- PD Controller design ---
153
- // deltaF_pitch_old = pitch_err*kP + (0.0f - pitch_rate)*DEG2RAD*kD;
154
- // deltaF_roll_old = roll_err*kP + (0.0f - roll_rate)*DEG2RAD*kD;
155
-
156
145
// --- PID Controller design w/ integrator limit ---
157
146
// scale_val = min(1.0, (input_left_throttle / 100.0) * (input_left_throttle / 100.0));
158
147
pitch_err_rad = (-input_radio_values[INDEX_RIGHT_STICK_UPDOWN] - pitch_angle_deg) * DEG2RAD;
159
148
roll_err_rad = (input_radio_values[INDEX_RIGHT_STICK_LEFTRIGHT] - roll_angle_deg) * DEG2RAD;
160
149
161
150
// Only accrue integrator error once we're flying (so it doesn't ratchet up on the ground)
162
- if (input_left_throttle > 50 )
151
+ if (input_left_throttle > 70 )
163
152
{
164
153
integrated_pitch_err_rad = constrain (integrated_pitch_err_rad * 0.999 + (pitch_err_rad * delta_time), -0.25 , 0.25 );
165
154
integrated_roll_err_rad = constrain (integrated_roll_err_rad * 0.999 + (roll_err_rad * delta_time), -0.25 , 0.25 );
166
155
}
167
- moment_pitch = (pitch_err_rad * kP ) + ((0 .0f - pitch_rate_deg) * DEG2RAD * kD ) + (integrated_pitch_err_rad * kI );
168
- moment_roll = (roll_err_rad * kP ) + ((0 .0f - roll_rate_deg) * DEG2RAD) * kD + (integrated_roll_err_rad * kI );
169
-
170
- const float force_pitch = moment_pitch / (4 * 0.0995 );
171
- const float force_roll = moment_roll / (4 * 0.0995 );
156
+ delta_force_pitch = (pitch_err_rad * kP ) + ((0 .0f - pitch_rate_deg) * DEG2RAD * kD ) + (integrated_pitch_err_rad * kI );
157
+ delta_force_roll = (roll_err_rad * kP ) + ((0 .0f - roll_rate_deg) * DEG2RAD * kD ) + (integrated_roll_err_rad * kI );
172
158
173
159
// otherwise include pitch and roll force requirements
174
- motor_control_vector[0 ] = thrustToMotorValNonlinear (-force_pitch - force_roll , input_left_throttle);
175
- motor_control_vector[2 ] = thrustToMotorValNonlinear (force_pitch + force_roll , input_left_throttle);
176
- motor_control_vector[1 ] = thrustToMotorValNonlinear (-force_pitch + force_roll , input_left_throttle);
177
- motor_control_vector[3 ] = thrustToMotorValNonlinear (force_pitch - force_roll , input_left_throttle);
160
+ motor_control_vector[0 ] = thrustToMotorValNonlinear (-delta_force_pitch - delta_force_roll , input_left_throttle);
161
+ motor_control_vector[2 ] = thrustToMotorValNonlinear (delta_force_pitch + delta_force_roll , input_left_throttle);
162
+ motor_control_vector[1 ] = thrustToMotorValNonlinear (-delta_force_pitch + delta_force_roll , input_left_throttle);
163
+ motor_control_vector[3 ] = thrustToMotorValNonlinear (delta_force_pitch - delta_force_roll , input_left_throttle);
178
164
}
179
165
}
180
166
else
181
167
{
182
- Serial.println (" -------------- DEAD ------------------" );
168
+ if (DEBUG_MODE)
169
+ {
170
+ Serial.println (" -------------- DEAD ------------------" );
171
+ }
183
172
184
173
// if no radio signal, power off the motors
185
174
motor_control_vector[0 ] = 0.0 ;
@@ -189,12 +178,9 @@ void CalculateControlVector(float *euler_angles, float *g, float *motor_control_
189
178
}
190
179
}
191
180
192
- if (dumb_counter > 15 )
181
+ if (dumb_counter > 15 && DEBUG_MODE )
193
182
{
194
183
195
- Serial.print (scale_val);
196
- Serial.print (" | \t " );
197
-
198
184
// Serial.print(pitch);
199
185
// Serial.print(F("\t"));
200
186
Serial.print (pitch_err_rad);
0 commit comments