|
|
|
@ -775,31 +775,10 @@ static void do_within_distance(const AP_Mission::Mission_Command& cmd)
@@ -775,31 +775,10 @@ static void do_within_distance(const AP_Mission::Mission_Command& cmd)
|
|
|
|
|
|
|
|
|
|
static void do_yaw(const AP_Mission::Mission_Command& cmd) |
|
|
|
|
{ |
|
|
|
|
// get current yaw target |
|
|
|
|
int32_t curr_yaw_target = attitude_control.angle_ef_targets().z; |
|
|
|
|
|
|
|
|
|
// get final angle, 1 = Relative, 0 = Absolute |
|
|
|
|
if (cmd.content.yaw.relative_angle == 0) { |
|
|
|
|
// absolute angle |
|
|
|
|
yaw_look_at_heading = wrap_360_cd(cmd.content.yaw.angle_deg * 100); |
|
|
|
|
}else{ |
|
|
|
|
// relative angle |
|
|
|
|
yaw_look_at_heading = wrap_360_cd(curr_yaw_target + cmd.content.yaw.angle_deg * 100); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// get turn speed |
|
|
|
|
if (cmd.content.yaw.turn_rate_dps == 0 ) { |
|
|
|
|
// default to regular auto slew rate |
|
|
|
|
yaw_look_at_heading_slew = AUTO_YAW_SLEW_RATE; |
|
|
|
|
}else{ |
|
|
|
|
int32_t turn_rate = (wrap_180_cd(yaw_look_at_heading - curr_yaw_target) / 100) / cmd.content.yaw.turn_rate_dps; |
|
|
|
|
yaw_look_at_heading_slew = constrain_int32(turn_rate, 1, 360); // deg / sec |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// set yaw mode |
|
|
|
|
set_auto_yaw_mode(AUTO_YAW_LOOK_AT_HEADING); |
|
|
|
|
|
|
|
|
|
// TO-DO: restore support for clockwise and counter clockwise rotation held in cmd.content.yaw.direction. 1 = clockwise, -1 = counterclockwise |
|
|
|
|
set_auto_yaw_look_at_heading( |
|
|
|
|
cmd.content.yaw.angle_deg, |
|
|
|
|
cmd.content.yaw.turn_rate_dps, |
|
|
|
|
cmd.content.yaw.relative_angle); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|