Plane: Support changing update period in Motors

This commit is contained in:
Leonard Hall 2022-12-05 16:56:32 +10:30 committed by Peter Barker
parent 231fc2b18b
commit 16ccdeb058
1 changed files with 7 additions and 5 deletions

View File

@ -682,12 +682,12 @@ bool QuadPlane::setup(void)
switch ((AP_Motors::motor_frame_class)frame_class) { switch ((AP_Motors::motor_frame_class)frame_class) {
case AP_Motors::MOTOR_FRAME_TRI: case AP_Motors::MOTOR_FRAME_TRI:
motors = new AP_MotorsTri(plane.scheduler.get_loop_rate_hz(), rc_speed); motors = new AP_MotorsTri(rc_speed);
motors_var_info = AP_MotorsTri::var_info; motors_var_info = AP_MotorsTri::var_info;
break; break;
case AP_Motors::MOTOR_FRAME_TAILSITTER: case AP_Motors::MOTOR_FRAME_TAILSITTER:
// this is a duo-motor tailsitter // this is a duo-motor tailsitter
tailsitter.tailsitter_motors = new AP_MotorsTailsitter(plane.scheduler.get_loop_rate_hz(), rc_speed); tailsitter.tailsitter_motors = new AP_MotorsTailsitter(rc_speed);
motors = tailsitter.tailsitter_motors; motors = tailsitter.tailsitter_motors;
motors_var_info = AP_MotorsTailsitter::var_info; motors_var_info = AP_MotorsTailsitter::var_info;
break; break;
@ -698,7 +698,7 @@ bool QuadPlane::setup(void)
#endif // AP_SCRIPTING_ENABLED #endif // AP_SCRIPTING_ENABLED
break; break;
default: default:
motors = new AP_MotorsMatrix(plane.scheduler.get_loop_rate_hz(), rc_speed); motors = new AP_MotorsMatrix(rc_speed);
motors_var_info = AP_MotorsMatrix::var_info; motors_var_info = AP_MotorsMatrix::var_info;
break; break;
} }
@ -1986,8 +1986,10 @@ void QuadPlane::motors_output(bool run_rate_controller)
relax_attitude_control(); relax_attitude_control();
} }
// run low level rate controllers that only require IMU data and set loop time // run low level rate controllers that only require IMU data and set loop time
attitude_control->set_dt(AP::scheduler().get_last_loop_time_s()); const float last_loop_time_s = AP::scheduler().get_last_loop_time_s();
pos_control->set_dt(AP::scheduler().get_last_loop_time_s()); motors->set_dt(last_loop_time_s);
attitude_control->set_dt(last_loop_time_s);
pos_control->set_dt(last_loop_time_s);
attitude_control->rate_controller_run(); attitude_control->rate_controller_run();
last_att_control_ms = now; last_att_control_ms = now;
} }