// rate_controller_run - run lowest level rate controller and send outputs to the motors // should be called at 100hz or more void AC_AttitudeControl_Heli::rate_controller_run() { // call rate controllers and send output to motors object // To-Do: should the outputs from get_rate_roll, pitch, yaw be int16_t which is the input to the motors library? // To-Do: skip this step if the throttle out is zero? rate_bf_to_motor_roll_pitch(_rate_bf_target.x, _rate_bf_target.y); _motors.set_yaw(rate_bf_to_motor_yaw(_rate_bf_target.z)); }
// rate_controller_run - run lowest level rate controller and send outputs to the motors // should be called at 100hz or more void AC_AttitudeControl_Heli::rate_controller_run() { // call rate controllers and send output to motors object // if using a flybar passthrough roll and pitch directly to motors if (_flags_heli.flybar_passthrough) { _motors.set_roll(_passthrough_roll); _motors.set_pitch(_passthrough_pitch); } else { rate_bf_to_motor_roll_pitch(_rate_bf_target.x, _rate_bf_target.y); } _motors.set_yaw(rate_bf_to_motor_yaw(_rate_bf_target.z)); }
// rate_controller_run - run lowest level rate controller and send outputs to the motors // should be called at 100hz or more void AC_AttitudeControl_Heli::rate_controller_run() { Vector3f gyro_latest = _ahrs.get_gyro_latest(); // call rate controllers and send output to motors object // if using a flybar passthrough roll and pitch directly to motors if (_flags_heli.flybar_passthrough) { _motors.set_roll(_passthrough_roll/4500.0f); _motors.set_pitch(_passthrough_pitch/4500.0f); } else { rate_bf_to_motor_roll_pitch(gyro_latest, _rate_target_ang_vel.x, _rate_target_ang_vel.y); } if (_flags_heli.tail_passthrough) { _motors.set_yaw(_passthrough_yaw/4500.0f); } else { _motors.set_yaw(rate_target_to_motor_yaw(gyro_latest.z, _rate_target_ang_vel.z)); } }