void update_motors() { // call update motors 1000 times to get any ramp limiting completed for (uint16_t i=0; i<1000; i++) { motors.output(); } }
void apmotors_output_set(const struct controloutput *ctl, const struct flightmode *fm) { if (motors.armed() && !(fm->armed)) { motors.armed(false); } else if (!motors.armed() && (fm->armed)) { motors.armed(true); } s_roll.servo_out = angular_scale(ctl->roll); s_pitch.servo_out = angular_scale(ctl->pitch); s_yaw.servo_out = angular_scale(ctl->yaw); s_throttle.servo_out = throttle_scale(ctl->throttle); motors.output(); }
// stability_test void stability_test() { int16_t value, roll_in, pitch_in, yaw_in, throttle_in, throttle_radio_in, avg_out; int16_t testing_array[][4] = { // roll, pitch, yaw, throttle { 0, 0, 0, 0}, { 0, 0, 0, 100}, { 0, 0, 0, 200}, { 0, 0, 0, 300}, { 4500, 0, 0, 300}, { -4500, 0, 0, 300}, { 0, 4500, 0, 300}, { 0, -4500, 0, 300}, { 0, 0, 4500, 300}, { 0, 0, -4500, 300}, { 0, 0, 0, 400}, { 0, 0, 0, 500}, { 0, 0, 0, 600}, { 0, 0, 0, 700}, { 0, 0, 0, 800}, { 0, 0, 0, 900}, { 0, 0, 0, 1000}, { 4500, 0, 0, 1000}, { -4500, 0, 0, 1000}, { 0, 4500, 0, 1000}, { 0, -4500, 0, 1000}, { 0, 0, 4500, 1000}, { 0, 0, -4500, 1000}, {5000, 1000, 0, 1000}, {5000, 2000, 0, 1000}, {5000, 3000, 0, 1000}, {5000, 4000, 0, 1000}, {5000, 5000, 0, 1000}, {5000, 0, 1000, 1000}, {5000, 0, 2000, 1000}, {5000, 0, 3000, 1000}, {5000, 0, 4500, 1000} }; uint32_t testing_array_rows = 32; hal.console->printf("\nTesting stability patch\nThrottle Min:%d Max:%d\n",(int)rc3.radio_min,(int)rc3.radio_max); // arm motors motors.armed(true); // run stability test for (int16_t i=0; i < testing_array_rows; i++) { roll_in = testing_array[i][0]; pitch_in = testing_array[i][1]; yaw_in = testing_array[i][2]; throttle_in = testing_array[i][3]; motors.set_pitch(roll_in); motors.set_roll(pitch_in); motors.set_yaw(yaw_in); motors.set_throttle(throttle_in); motors.output(); // calc average output throttle_radio_in = rc3.radio_out; avg_out = ((hal.rcout->read(0) + hal.rcout->read(1) + hal.rcout->read(2) + hal.rcout->read(3))/4); // display input and output hal.console->printf("R:%5d \tP:%5d \tY:%5d \tT:%5d\tMOT1:%5d \tMOT2:%5d \tMOT3:%5d \tMOT4:%5d \t ThrIn/AvgOut:%5d/%5d\n", (int)roll_in, (int)pitch_in, (int)yaw_in, (int)throttle_in, (int)hal.rcout->read(0), (int)hal.rcout->read(1), (int)hal.rcout->read(2), (int)hal.rcout->read(3), (int)throttle_radio_in, (int)avg_out); } // set all inputs to motor library to zero and disarm motors motors.set_pitch(0); motors.set_roll(0); motors.set_yaw(0); motors.set_throttle(0); motors.armed(false); hal.console->println("finished test."); }