AP_Motors: Heli: RotorControlState to enum class

This commit is contained in:
Iampete1 2023-12-13 02:52:56 +00:00 committed by Andrew Tridgell
parent a77faaf125
commit 287e9726d7
10 changed files with 33 additions and 33 deletions

View File

@ -190,7 +190,7 @@ void AP_MotorsHeli::output_min()
// move swash to mid // move swash to mid
move_actuators(0.0f,0.0f,0.5f,0.0f); move_actuators(0.0f,0.0f,0.5f,0.0f);
update_motor_control(ROTOR_CONTROL_STOP); update_motor_control(AP_MotorsHeli_RSC::RotorControlState::STOP);
// override limits flags // override limits flags
set_limit_flag_pitch_roll_yaw(true); set_limit_flag_pitch_roll_yaw(true);

View File

@ -189,7 +189,7 @@ protected:
AP_MotorsHeli_RSC _main_rotor; // main rotor AP_MotorsHeli_RSC _main_rotor; // main rotor
// update_motor_controls - sends commands to motor controllers // update_motor_controls - sends commands to motor controllers
virtual void update_motor_control(RotorControlState state) = 0; virtual void update_motor_control(AP_MotorsHeli_RSC::RotorControlState state) = 0;
// run spool logic // run spool logic
void output_logic(); void output_logic();

View File

@ -360,12 +360,12 @@ void AP_MotorsHeli_Dual::mix_intermeshing(float pitch_input, float roll_input, f
} }
// update_motor_controls - sends commands to motor controllers // update_motor_controls - sends commands to motor controllers
void AP_MotorsHeli_Dual::update_motor_control(RotorControlState state) void AP_MotorsHeli_Dual::update_motor_control(AP_MotorsHeli_RSC::RotorControlState state)
{ {
// Send state update to motors // Send state update to motors
_main_rotor.output(state); _main_rotor.output(state);
if (state == ROTOR_CONTROL_STOP) { if (state == AP_MotorsHeli_RSC::RotorControlState::STOP) {
// set engine run enable aux output to not run position to kill engine when disarmed // set engine run enable aux output to not run position to kill engine when disarmed
SRV_Channels::set_output_limit(SRV_Channel::k_engine_run_enable, SRV_Channel::Limit::MIN); SRV_Channels::set_output_limit(SRV_Channel::k_engine_run_enable, SRV_Channel::Limit::MIN);
} else { } else {
@ -528,20 +528,20 @@ void AP_MotorsHeli_Dual::output_to_motors()
switch (_spool_state) { switch (_spool_state) {
case SpoolState::SHUT_DOWN: case SpoolState::SHUT_DOWN:
// sends minimum values out to the motors // sends minimum values out to the motors
update_motor_control(ROTOR_CONTROL_STOP); update_motor_control(AP_MotorsHeli_RSC::RotorControlState::STOP);
break; break;
case SpoolState::GROUND_IDLE: case SpoolState::GROUND_IDLE:
// sends idle output to motors when armed. rotor could be static or turning (autorotation) // sends idle output to motors when armed. rotor could be static or turning (autorotation)
update_motor_control(ROTOR_CONTROL_IDLE); update_motor_control(AP_MotorsHeli_RSC::RotorControlState::IDLE);
break; break;
case SpoolState::SPOOLING_UP: case SpoolState::SPOOLING_UP:
case SpoolState::THROTTLE_UNLIMITED: case SpoolState::THROTTLE_UNLIMITED:
// set motor output based on thrust requests // set motor output based on thrust requests
update_motor_control(ROTOR_CONTROL_ACTIVE); update_motor_control(AP_MotorsHeli_RSC::RotorControlState::ACTIVE);
break; break;
case SpoolState::SPOOLING_DOWN: case SpoolState::SPOOLING_DOWN:
// sends idle output to motors and wait for rotor to stop // sends idle output to motors and wait for rotor to stop
update_motor_control(ROTOR_CONTROL_IDLE); update_motor_control(AP_MotorsHeli_RSC::RotorControlState::IDLE);
break; break;
} }
} }

View File

@ -65,7 +65,7 @@ protected:
void init_outputs () override; void init_outputs () override;
// update_motor_controls - sends commands to motor controllers // update_motor_controls - sends commands to motor controllers
void update_motor_control(RotorControlState state) override; void update_motor_control(AP_MotorsHeli_RSC::RotorControlState state) override;
// get_swashplate - calculate movement of each swashplate based on configuration // get_swashplate - calculate movement of each swashplate based on configuration
float get_swashplate(int8_t swash_num, int8_t swash_axis, float pitch_input, float roll_input, float yaw_input, float coll_input); float get_swashplate(int8_t swash_num, int8_t swash_axis, float pitch_input, float roll_input, float yaw_input, float coll_input);

View File

@ -145,12 +145,12 @@ void AP_MotorsHeli_Quad::calculate_roll_pitch_collective_factors()
} }
// update_motor_controls - sends commands to motor controllers // update_motor_controls - sends commands to motor controllers
void AP_MotorsHeli_Quad::update_motor_control(RotorControlState state) void AP_MotorsHeli_Quad::update_motor_control(AP_MotorsHeli_RSC::RotorControlState state)
{ {
// Send state update to motors // Send state update to motors
_main_rotor.output(state); _main_rotor.output(state);
if (state == ROTOR_CONTROL_STOP) { if (state == AP_MotorsHeli_RSC::RotorControlState::STOP) {
// set engine run enable aux output to not run position to kill engine when disarmed // set engine run enable aux output to not run position to kill engine when disarmed
SRV_Channels::set_output_limit(SRV_Channel::k_engine_run_enable, SRV_Channel::Limit::MIN); SRV_Channels::set_output_limit(SRV_Channel::k_engine_run_enable, SRV_Channel::Limit::MIN);
} else { } else {
@ -276,20 +276,20 @@ void AP_MotorsHeli_Quad::output_to_motors()
switch (_spool_state) { switch (_spool_state) {
case SpoolState::SHUT_DOWN: case SpoolState::SHUT_DOWN:
// sends minimum values out to the motors // sends minimum values out to the motors
update_motor_control(ROTOR_CONTROL_STOP); update_motor_control(AP_MotorsHeli_RSC::RotorControlState::STOP);
break; break;
case SpoolState::GROUND_IDLE: case SpoolState::GROUND_IDLE:
// sends idle output to motors when armed. rotor could be static or turning (autorotation) // sends idle output to motors when armed. rotor could be static or turning (autorotation)
update_motor_control(ROTOR_CONTROL_IDLE); update_motor_control(AP_MotorsHeli_RSC::RotorControlState::IDLE);
break; break;
case SpoolState::SPOOLING_UP: case SpoolState::SPOOLING_UP:
case SpoolState::THROTTLE_UNLIMITED: case SpoolState::THROTTLE_UNLIMITED:
// set motor output based on thrust requests // set motor output based on thrust requests
update_motor_control(ROTOR_CONTROL_ACTIVE); update_motor_control(AP_MotorsHeli_RSC::RotorControlState::ACTIVE);
break; break;
case SpoolState::SPOOLING_DOWN: case SpoolState::SPOOLING_DOWN:
// sends idle output to motors and wait for rotor to stop // sends idle output to motors and wait for rotor to stop
update_motor_control(ROTOR_CONTROL_IDLE); update_motor_control(AP_MotorsHeli_RSC::RotorControlState::IDLE);
break; break;
} }
} }

View File

@ -49,7 +49,7 @@ protected:
void init_outputs () override; void init_outputs () override;
// update_motor_controls - sends commands to motor controllers // update_motor_controls - sends commands to motor controllers
void update_motor_control(RotorControlState state) override; void update_motor_control(AP_MotorsHeli_RSC::RotorControlState state) override;
// calculate_roll_pitch_collective_factors - setup rate factors // calculate_roll_pitch_collective_factors - setup rate factors
void calculate_roll_pitch_collective_factors (); void calculate_roll_pitch_collective_factors ();

View File

@ -275,7 +275,7 @@ void AP_MotorsHeli_RSC::output(RotorControlState state)
} }
switch (state) { switch (state) {
case ROTOR_CONTROL_STOP: case RotorControlState::STOP:
// set rotor ramp to decrease speed to zero, this happens instantly inside update_rotor_ramp() // set rotor ramp to decrease speed to zero, this happens instantly inside update_rotor_ramp()
update_rotor_ramp(0.0f, dt); update_rotor_ramp(0.0f, dt);
@ -296,7 +296,7 @@ void AP_MotorsHeli_RSC::output(RotorControlState state)
_idle_throttle = get_idle_output(); _idle_throttle = get_idle_output();
break; break;
case ROTOR_CONTROL_IDLE: case RotorControlState::IDLE:
// set rotor ramp to decrease speed to zero // set rotor ramp to decrease speed to zero
update_rotor_ramp(0.0f, dt); update_rotor_ramp(0.0f, dt);
@ -348,7 +348,7 @@ void AP_MotorsHeli_RSC::output(RotorControlState state)
_control_output = _idle_throttle; _control_output = _idle_throttle;
break; break;
case ROTOR_CONTROL_ACTIVE: case RotorControlState::ACTIVE:
// set main rotor ramp to increase to full speed // set main rotor ramp to increase to full speed
update_rotor_ramp(1.0f, dt); update_rotor_ramp(1.0f, dt);

View File

@ -30,13 +30,6 @@
// RSC governor defaults // RSC governor defaults
#define AP_MOTORS_HELI_RSC_GOVERNOR_RANGE_DEFAULT 100 #define AP_MOTORS_HELI_RSC_GOVERNOR_RANGE_DEFAULT 100
// rotor controller states
enum RotorControlState {
ROTOR_CONTROL_STOP = 0,
ROTOR_CONTROL_IDLE,
ROTOR_CONTROL_ACTIVE
};
// rotor control modes // rotor control modes
enum RotorControlMode { enum RotorControlMode {
ROTOR_CONTROL_MODE_DISABLED = 0, ROTOR_CONTROL_MODE_DISABLED = 0,
@ -60,6 +53,13 @@ public:
AP_Param::setup_object_defaults(this, var_info); AP_Param::setup_object_defaults(this, var_info);
}; };
// rotor controller states
enum class RotorControlState {
STOP = 0,
IDLE,
ACTIVE
};
// init_servo - servo initialization on start-up // init_servo - servo initialization on start-up
void init_servo(); void init_servo();

View File

@ -347,13 +347,13 @@ uint32_t AP_MotorsHeli_Single::get_motor_mask()
} }
// update_motor_controls - sends commands to motor controllers // update_motor_controls - sends commands to motor controllers
void AP_MotorsHeli_Single::update_motor_control(RotorControlState state) void AP_MotorsHeli_Single::update_motor_control(AP_MotorsHeli_RSC::RotorControlState state)
{ {
// Send state update to motors // Send state update to motors
_tail_rotor.output(state); _tail_rotor.output(state);
_main_rotor.output(state); _main_rotor.output(state);
if (state == ROTOR_CONTROL_STOP){ if (state == AP_MotorsHeli_RSC::RotorControlState::STOP){
// set engine run enable aux output to not run position to kill engine when disarmed // set engine run enable aux output to not run position to kill engine when disarmed
SRV_Channels::set_output_limit(SRV_Channel::k_engine_run_enable, SRV_Channel::Limit::MIN); SRV_Channels::set_output_limit(SRV_Channel::k_engine_run_enable, SRV_Channel::Limit::MIN);
} else { } else {
@ -504,20 +504,20 @@ void AP_MotorsHeli_Single::output_to_motors()
switch (_spool_state) { switch (_spool_state) {
case SpoolState::SHUT_DOWN: case SpoolState::SHUT_DOWN:
// sends minimum values out to the motors // sends minimum values out to the motors
update_motor_control(ROTOR_CONTROL_STOP); update_motor_control(AP_MotorsHeli_RSC::RotorControlState::STOP);
break; break;
case SpoolState::GROUND_IDLE: case SpoolState::GROUND_IDLE:
// sends idle output to motors when armed. rotor could be static or turning (autorotation) // sends idle output to motors when armed. rotor could be static or turning (autorotation)
update_motor_control(ROTOR_CONTROL_IDLE); update_motor_control(AP_MotorsHeli_RSC::RotorControlState::IDLE);
break; break;
case SpoolState::SPOOLING_UP: case SpoolState::SPOOLING_UP:
case SpoolState::THROTTLE_UNLIMITED: case SpoolState::THROTTLE_UNLIMITED:
// set motor output based on thrust requests // set motor output based on thrust requests
update_motor_control(ROTOR_CONTROL_ACTIVE); update_motor_control(AP_MotorsHeli_RSC::RotorControlState::ACTIVE);
break; break;
case SpoolState::SPOOLING_DOWN: case SpoolState::SPOOLING_DOWN:
// sends idle output to motors and wait for rotor to stop // sends idle output to motors and wait for rotor to stop
update_motor_control(ROTOR_CONTROL_IDLE); update_motor_control(AP_MotorsHeli_RSC::RotorControlState::IDLE);
break; break;
} }

View File

@ -86,7 +86,7 @@ protected:
void init_outputs() override; void init_outputs() override;
// update_motor_controls - sends commands to motor controllers // update_motor_controls - sends commands to motor controllers
void update_motor_control(RotorControlState state) override; void update_motor_control(AP_MotorsHeli_RSC::RotorControlState state) override;
// heli_move_actuators - moves swash plate and tail rotor // heli_move_actuators - moves swash plate and tail rotor
void move_actuators(float roll_out, float pitch_out, float coll_in, float yaw_out) override; void move_actuators(float roll_out, float pitch_out, float coll_in, float yaw_out) override;