|
|
|
@ -48,7 +48,7 @@ bool ModeAuto::init(bool ignore_checks)
@@ -48,7 +48,7 @@ bool ModeAuto::init(bool ignore_checks)
|
|
|
|
|
wp_nav_index = 0; // nav 重新开始计数
|
|
|
|
|
updown_state = 0; // 起飞悬停状态清0
|
|
|
|
|
first_wp_dec = false; |
|
|
|
|
gcs().send_text(MAV_SEVERITY_INFO, "auto init:up:%d,wp:%d",updown_state,wp_nav_index); |
|
|
|
|
// gcs().send_text(MAV_SEVERITY_INFO, "auto init:up:%d,wp:%d",updown_state,wp_nav_index);
|
|
|
|
|
return true; |
|
|
|
|
} else { |
|
|
|
|
return false; |
|
|
|
@ -148,7 +148,7 @@ void ModeAuto::takeoff_start(const Location& dest_loc)
@@ -148,7 +148,7 @@ void ModeAuto::takeoff_start(const Location& dest_loc)
|
|
|
|
|
Location dest(dest_loc); |
|
|
|
|
|
|
|
|
|
last_loc = dest_loc; |
|
|
|
|
if (g.zr_tk_req_alt > 0 && updown_state == 0){ |
|
|
|
|
if (g.zr_tk_delay > 0 && g.zr_tk_req_alt > 0 && updown_state == 0){ // 有设置起飞到高度悬停
|
|
|
|
|
updown_state = 1; |
|
|
|
|
dest.alt = g.zr_tk_req_alt; |
|
|
|
|
gcs().send_text(MAV_SEVERITY_INFO, "updownStatus:%d",copter.updownStatus); |
|
|
|
@ -654,7 +654,6 @@ bool ModeAuto::verify_command(const AP_Mission::Mission_Command& cmd)
@@ -654,7 +654,6 @@ bool ModeAuto::verify_command(const AP_Mission::Mission_Command& cmd)
|
|
|
|
|
if (copter.flightmode != &copter.mode_auto) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool cmd_complete = false; |
|
|
|
|
|
|
|
|
|
switch (cmd.id) { |
|
|
|
@ -768,16 +767,11 @@ void ModeAuto::takeoff_run()
@@ -768,16 +767,11 @@ void ModeAuto::takeoff_run()
|
|
|
|
|
copter.updownStatus < UpDown_RequestClimb && \
|
|
|
|
|
updown_state == 2) |
|
|
|
|
{ |
|
|
|
|
updown_state = 3; |
|
|
|
|
updown_state = 3; // 到达悬停高度,状态更新到等待
|
|
|
|
|
copter.updownStatus = UpDown_RequestClimb; |
|
|
|
|
gcs().send_text(MAV_SEVERITY_INFO, "updownStatus:%d",copter.updownStatus); |
|
|
|
|
gcs().send_message(MSG_ZR_FLYING_STATUS); |
|
|
|
|
countdown = g.zr_tk_delay; |
|
|
|
|
Vector3f stopping_point; |
|
|
|
|
wp_nav->get_wp_stopping_point(stopping_point); |
|
|
|
|
|
|
|
|
|
// initialise waypoint controller target to stopping point
|
|
|
|
|
wp_nav->set_wp_destination(stopping_point); |
|
|
|
|
// hold yaw at current heading
|
|
|
|
|
auto_yaw.set_mode(AUTO_YAW_HOLD); |
|
|
|
|
}else if(copter.position_ok() && copter.updownStatus == UpDown_RequestClimb ){ |
|
|
|
@ -807,9 +801,11 @@ void ModeAuto::takeoff_run()
@@ -807,9 +801,11 @@ void ModeAuto::takeoff_run()
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
}else if(copter.updownStatus > UpDown_RequestClimb){ |
|
|
|
|
updown_state = 4; |
|
|
|
|
// gcs().send_text(MAV_SEVERITY_INFO, "NOTICE: 执行继续任务");
|
|
|
|
|
|
|
|
|
|
if(updown_state < 4){ // 地面站弹框确定,发送新的值,状态位同步更新
|
|
|
|
|
updown_state = 4; |
|
|
|
|
gcs().send_text(MAV_SEVERITY_INFO, "gcs ctl updownStatus:%d",copter.updownStatus); |
|
|
|
|
takeoff_start(last_loc); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(g.zr_8_circle == 1){ |
|
|
|
@ -959,18 +955,16 @@ void ModeAuto::circle_run()
@@ -959,18 +955,16 @@ void ModeAuto::circle_run()
|
|
|
|
|
if (abs(wrap_180_cd(ahrs.yaw_sensor-initial_armed_bearing)) <= 200) { //转到角度
|
|
|
|
|
circle_init_yaw = true; |
|
|
|
|
auto_yaw.set_mode(last_yaw_mode); |
|
|
|
|
gcs().send_text(MAV_SEVERITY_INFO, "circ init: y: %d -- %d ",initial_armed_bearing,ahrs.yaw_sensor); |
|
|
|
|
// gcs().send_text(MAV_SEVERITY_INFO, "circ init: y: %d -- %d ",initial_armed_bearing,ahrs.yaw_sensor);
|
|
|
|
|
}else{ |
|
|
|
|
|
|
|
|
|
if(wp_nav->set_wp_destination(last_loc)) { |
|
|
|
|
if (auto_yaw.mode() != AUTO_YAW_FIXED) { |
|
|
|
|
if(wp_nav->set_wp_destination(last_loc)) { // 设置第一个WayPoint点为期望值
|
|
|
|
|
if (auto_yaw.mode() != AUTO_YAW_FIXED) { // 需要转角度,yaw mode使用AUTO_YAW_FIXED
|
|
|
|
|
last_yaw_mode = auto_yaw.mode(); |
|
|
|
|
gcs().send_text(MAV_SEVERITY_INFO, "auto_yaw: y: %d ",auto_yaw.mode()); |
|
|
|
|
// gcs().send_text(MAV_SEVERITY_INFO, "auto_yaw: y: %d ",auto_yaw.mode());
|
|
|
|
|
auto_yaw.set_mode(AUTO_YAW_FIXED); |
|
|
|
|
} |
|
|
|
|
attitude_control->input_euler_angle_roll_pitch_yaw(wp_nav->get_roll(), wp_nav->get_pitch(), initial_armed_bearing,true); |
|
|
|
|
}else{ |
|
|
|
|
|
|
|
|
|
}else{ // 第一个WayPoint点获取失败,直接绕圈
|
|
|
|
|
circle_init_yaw = true; |
|
|
|
|
gcs().send_text(MAV_SEVERITY_INFO, "--- circle turn false ---"); |
|
|
|
|
} |
|
|
|
@ -1261,7 +1255,9 @@ void ModeAuto::do_nav_wp(const AP_Mission::Mission_Command& cmd)
@@ -1261,7 +1255,9 @@ void ModeAuto::do_nav_wp(const AP_Mission::Mission_Command& cmd)
|
|
|
|
|
loiter_time_max = cmd.p1; |
|
|
|
|
// Set wp navigation target
|
|
|
|
|
wp_start(target_loc); |
|
|
|
|
|
|
|
|
|
if(wp_nav_index < 2){ // 传给绕圈用,只有第一个wp需要绕圈,后面就不赋值了
|
|
|
|
|
last_loc = target_loc; |
|
|
|
|
} |
|
|
|
|
// if no delay as well as not final waypoint set the waypoint as "fast"
|
|
|
|
|
AP_Mission::Mission_Command temp_cmd; |
|
|
|
|
bool fast_waypoint = false; |
|
|
|
@ -1282,14 +1278,15 @@ void ModeAuto::do_nav_wp(const AP_Mission::Mission_Command& cmd)
@@ -1282,14 +1278,15 @@ void ModeAuto::do_nav_wp(const AP_Mission::Mission_Command& cmd)
|
|
|
|
|
static int32_t last_yaw_cd; |
|
|
|
|
if(mission.get_next_nav_cmd(cmd.index, next_2_cmd)){ |
|
|
|
|
float wp_distance = next_2_cmd.content.location.get_distance(temp_cmd.content.location); |
|
|
|
|
if(wp_distance < 5.0){// 两个航点距离太近,正常是仿地降高度航点,则取再下一个航点
|
|
|
|
|
if(wp_distance < 5.0 && wp_nav_index < 2){ // 第一个wp需要转向相关。两个航点距离太近,正常是仿地降高度航点,则取再下一个航点
|
|
|
|
|
// gcs().send_text(MAV_SEVERITY_CRITICAL, "-wp too close:%.2f",wp_distance);
|
|
|
|
|
if(mission.get_next_nav_cmd(cmd.index+2, temp_cmd)){ |
|
|
|
|
wp_yaw_cd = next_2_cmd.content.location.get_bearing_to(temp_cmd.content.location); |
|
|
|
|
// gcs().send_text(MAV_SEVERITY_CRITICAL, "-new rad:%d",wp_yaw_cd);
|
|
|
|
|
// gcs().send_text(MAV_SEVERITY_CRITICAL, "-b new rad:%d",wp_yaw_cd);
|
|
|
|
|
} |
|
|
|
|
}else{ |
|
|
|
|
wp_yaw_cd = next_2_cmd.content.location.get_bearing_to(temp_cmd.content.location); |
|
|
|
|
// gcs().send_text(MAV_SEVERITY_CRITICAL, "-a new rad:%d",wp_yaw_cd);
|
|
|
|
|
} |
|
|
|
|
if(copter.wp_nav->get_fast_waypoint() == 2){ |
|
|
|
|
static float last_dist = 0; |
|
|
|
@ -1682,7 +1679,6 @@ bool ModeAuto::verify_takeoff()
@@ -1682,7 +1679,6 @@ bool ModeAuto::verify_takeoff()
|
|
|
|
|
{ |
|
|
|
|
// have we reached our target altitude?
|
|
|
|
|
const bool reached_wp_dest = copter.wp_nav->reached_wp_destination(); |
|
|
|
|
|
|
|
|
|
// retract the landing gear
|
|
|
|
|
if (reached_wp_dest) { |
|
|
|
|
copter.landinggear.set_position(AP_LandingGear::LandingGear_Retract); |
|
|
|
@ -1692,17 +1688,13 @@ bool ModeAuto::verify_takeoff()
@@ -1692,17 +1688,13 @@ bool ModeAuto::verify_takeoff()
|
|
|
|
|
}else{ // 常规起飞判断,增加设置绕圈相关初始设置
|
|
|
|
|
copter.circle_nav->set_circle_8_finish(false); |
|
|
|
|
first_wp_dec = false; |
|
|
|
|
if(g.zr_tk_req_alt > 0 ){ |
|
|
|
|
if(g.zr_tk_delay > 0 && g.zr_tk_req_alt > 0 ){ // 启用到高度悬停
|
|
|
|
|
|
|
|
|
|
if(reached_wp_dest && updown_state <2){ |
|
|
|
|
if(reached_wp_dest && updown_state <2){ // 原到达航点判断,到达起飞悬停位置
|
|
|
|
|
updown_state = 2; |
|
|
|
|
}else if(updown_state >= 4){ |
|
|
|
|
}else if(updown_state >= 4){ // 悬停倒计时结束,或者地面站点继续
|
|
|
|
|
return reached_wp_dest; |
|
|
|
|
} |
|
|
|
|
static uint8_t last_state = 0; |
|
|
|
|
if(last_state != updown_state){ |
|
|
|
|
last_state = updown_state; |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
}else{ |
|
|
|
|
return reached_wp_dest; |
|
|
|
@ -2020,11 +2012,13 @@ bool ModeAuto::verify_nav_wp(const AP_Mission::Mission_Command& cmd)
@@ -2020,11 +2012,13 @@ bool ModeAuto::verify_nav_wp(const AP_Mission::Mission_Command& cmd)
|
|
|
|
|
gcs().send_text(MAV_SEVERITY_INFO, "circle ok,Reached command #%i,nav:%d",cmd.index,wp_nav_index); |
|
|
|
|
first_wp_dec = true;
|
|
|
|
|
wp_nav_index += 1; // nav 计数
|
|
|
|
|
copter.mission_nav_index = wp_nav_index; |
|
|
|
|
} |
|
|
|
|
return cyc_ret; |
|
|
|
|
}else{ |
|
|
|
|
gcs().send_text(MAV_SEVERITY_INFO, "Reached command #%i,nav:%d",cmd.index,wp_nav_index); |
|
|
|
|
wp_nav_index += 1; // nav 计数
|
|
|
|
|
copter.mission_nav_index = wp_nav_index; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -2064,6 +2058,8 @@ bool ModeAuto::verify_nav_wp_flow_measure(const AP_Mission::Mission_Command& cmd
@@ -2064,6 +2058,8 @@ bool ModeAuto::verify_nav_wp_flow_measure(const AP_Mission::Mission_Command& cmd
|
|
|
|
|
|
|
|
|
|
copter.flow_measure.set_reach_flow_wp(false);
|
|
|
|
|
gcs().send_text(MAV_SEVERITY_INFO, "获取数据超时,序号:#%i",cmd.index); |
|
|
|
|
wp_nav_index += 1; // nav 计数
|
|
|
|
|
copter.mission_nav_index = wp_nav_index; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|