mirror of https://github.com/ArduPilot/ardupilot
ArduCopter: allow payload place to be compiled out of code
This commit is contained in:
parent
5a65632a2d
commit
6b439bb2f3
|
@ -638,3 +638,7 @@
|
||||||
#ifndef AC_CUSTOMCONTROL_MULTI_ENABLED
|
#ifndef AC_CUSTOMCONTROL_MULTI_ENABLED
|
||||||
#define AC_CUSTOMCONTROL_MULTI_ENABLED FRAME_CONFIG == MULTICOPTER_FRAME && AP_CUSTOMCONTROL_ENABLED
|
#define AC_CUSTOMCONTROL_MULTI_ENABLED FRAME_CONFIG == MULTICOPTER_FRAME && AP_CUSTOMCONTROL_ENABLED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef AC_PAYLOAD_PLACE_ENABLED
|
||||||
|
#define AC_PAYLOAD_PLACE_ENABLED 1
|
||||||
|
#endif
|
||||||
|
|
|
@ -25,7 +25,9 @@ Mode::Mode(void) :
|
||||||
G_Dt(copter.G_Dt)
|
G_Dt(copter.G_Dt)
|
||||||
{ };
|
{ };
|
||||||
|
|
||||||
|
#if AC_PAYLOAD_PLACE_ENABLED
|
||||||
PayloadPlace Mode::payload_place;
|
PayloadPlace Mode::payload_place;
|
||||||
|
#endif
|
||||||
|
|
||||||
// return the static controller object corresponding to supplied mode
|
// return the static controller object corresponding to supplied mode
|
||||||
Mode *Copter::mode_from_mode_num(const Mode::Number mode)
|
Mode *Copter::mode_from_mode_num(const Mode::Number mode)
|
||||||
|
|
|
@ -29,6 +29,7 @@ private:
|
||||||
Vector3p complete_pos; // target takeoff position as offset from ekf origin in cm
|
Vector3p complete_pos; // target takeoff position as offset from ekf origin in cm
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if AC_PAYLOAD_PLACE_ENABLED
|
||||||
class PayloadPlace {
|
class PayloadPlace {
|
||||||
public:
|
public:
|
||||||
void run();
|
void run();
|
||||||
|
@ -59,6 +60,7 @@ private:
|
||||||
float descent_start_altitude_cm;
|
float descent_start_altitude_cm;
|
||||||
float descent_speed_cms;
|
float descent_speed_cms;
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
class Mode {
|
class Mode {
|
||||||
friend class PayloadPlace;
|
friend class PayloadPlace;
|
||||||
|
@ -199,8 +201,10 @@ protected:
|
||||||
land_run_vertical_control(pause_descent);
|
land_run_vertical_control(pause_descent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if AC_PAYLOAD_PLACE_ENABLED
|
||||||
// payload place flight behaviour:
|
// payload place flight behaviour:
|
||||||
static PayloadPlace payload_place;
|
static PayloadPlace payload_place;
|
||||||
|
#endif
|
||||||
|
|
||||||
// run normal or precision landing (if enabled)
|
// run normal or precision landing (if enabled)
|
||||||
// pause_descent is true if vehicle should not descend
|
// pause_descent is true if vehicle should not descend
|
||||||
|
@ -497,7 +501,9 @@ public:
|
||||||
NAVGUIDED,
|
NAVGUIDED,
|
||||||
LOITER,
|
LOITER,
|
||||||
LOITER_TO_ALT,
|
LOITER_TO_ALT,
|
||||||
|
#if AP_MISSION_NAV_PAYLOAD_PLACE_ENABLED
|
||||||
NAV_PAYLOAD_PLACE,
|
NAV_PAYLOAD_PLACE,
|
||||||
|
#endif
|
||||||
NAV_SCRIPT_TIME,
|
NAV_SCRIPT_TIME,
|
||||||
NAV_ATTITUDE_TIME,
|
NAV_ATTITUDE_TIME,
|
||||||
};
|
};
|
||||||
|
|
|
@ -149,9 +149,11 @@ void ModeAuto::run()
|
||||||
loiter_to_alt_run();
|
loiter_to_alt_run();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#if AP_MISSION_NAV_PAYLOAD_PLACE_ENABLED
|
||||||
case SubMode::NAV_PAYLOAD_PLACE:
|
case SubMode::NAV_PAYLOAD_PLACE:
|
||||||
payload_place.run();
|
payload_place.run();
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case SubMode::NAV_ATTITUDE_TIME:
|
case SubMode::NAV_ATTITUDE_TIME:
|
||||||
nav_attitude_time_run();
|
nav_attitude_time_run();
|
||||||
|
@ -539,6 +541,7 @@ bool ModeAuto::is_taking_off() const
|
||||||
return ((_mode == SubMode::TAKEOFF) && !auto_takeoff.complete);
|
return ((_mode == SubMode::TAKEOFF) && !auto_takeoff.complete);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if AC_PAYLOAD_PLACE_ENABLED
|
||||||
// auto_payload_place_start - initialises controller to implement a placing
|
// auto_payload_place_start - initialises controller to implement a placing
|
||||||
void PayloadPlace::start_descent()
|
void PayloadPlace::start_descent()
|
||||||
{
|
{
|
||||||
|
@ -568,6 +571,7 @@ void PayloadPlace::start_descent()
|
||||||
|
|
||||||
state = PayloadPlace::State::Descent_Start;
|
state = PayloadPlace::State::Descent_Start;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// returns true if pilot's yaw input should be used to adjust vehicle's heading
|
// returns true if pilot's yaw input should be used to adjust vehicle's heading
|
||||||
bool ModeAuto::use_pilot_yaw(void) const
|
bool ModeAuto::use_pilot_yaw(void) const
|
||||||
|
@ -657,9 +661,11 @@ bool ModeAuto::start_command(const AP_Mission::Mission_Command& cmd)
|
||||||
do_nav_delay(cmd);
|
do_nav_delay(cmd);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#if AP_MISSION_NAV_PAYLOAD_PLACE_ENABLED
|
||||||
case MAV_CMD_NAV_PAYLOAD_PLACE: // 94 place at Waypoint
|
case MAV_CMD_NAV_PAYLOAD_PLACE: // 94 place at Waypoint
|
||||||
do_payload_place(cmd);
|
do_payload_place(cmd);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if AP_SCRIPTING_ENABLED
|
#if AP_SCRIPTING_ENABLED
|
||||||
case MAV_CMD_NAV_SCRIPT_TIME:
|
case MAV_CMD_NAV_SCRIPT_TIME:
|
||||||
|
@ -865,9 +871,11 @@ bool ModeAuto::verify_command(const AP_Mission::Mission_Command& cmd)
|
||||||
cmd_complete = verify_land();
|
cmd_complete = verify_land();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#if AP_MISSION_NAV_PAYLOAD_PLACE_ENABLED
|
||||||
case MAV_CMD_NAV_PAYLOAD_PLACE:
|
case MAV_CMD_NAV_PAYLOAD_PLACE:
|
||||||
cmd_complete = payload_place.verify();
|
cmd_complete = payload_place.verify();
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case MAV_CMD_NAV_LOITER_UNLIM:
|
case MAV_CMD_NAV_LOITER_UNLIM:
|
||||||
cmd_complete = verify_loiter_unlimited();
|
cmd_complete = verify_loiter_unlimited();
|
||||||
|
@ -1158,6 +1166,7 @@ void ModeAuto::nav_attitude_time_run()
|
||||||
pos_control->update_z_controller();
|
pos_control->update_z_controller();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if AC_PAYLOAD_PLACE_ENABLED
|
||||||
// auto_payload_place_run - places an object in auto mode
|
// auto_payload_place_run - places an object in auto mode
|
||||||
// called by auto_run at 100hz or more
|
// called by auto_run at 100hz or more
|
||||||
void PayloadPlace::run()
|
void PayloadPlace::run()
|
||||||
|
@ -1384,6 +1393,7 @@ void PayloadPlace::run()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// sets the target_loc's alt to the vehicle's current alt but does not change target_loc's frame
|
// sets the target_loc's alt to the vehicle's current alt but does not change target_loc's frame
|
||||||
// in the case of terrain altitudes either the terrain database or the rangefinder may be used
|
// in the case of terrain altitudes either the terrain database or the rangefinder may be used
|
||||||
|
@ -1506,11 +1516,13 @@ bool ModeAuto::set_next_wp(const AP_Mission::Mission_Command& current_cmd, const
|
||||||
case MAV_CMD_NAV_WAYPOINT:
|
case MAV_CMD_NAV_WAYPOINT:
|
||||||
case MAV_CMD_NAV_LOITER_UNLIM:
|
case MAV_CMD_NAV_LOITER_UNLIM:
|
||||||
case MAV_CMD_NAV_LOITER_TIME:
|
case MAV_CMD_NAV_LOITER_TIME:
|
||||||
|
#if AP_MISSION_NAV_PAYLOAD_PLACE_ENABLED
|
||||||
case MAV_CMD_NAV_PAYLOAD_PLACE: {
|
case MAV_CMD_NAV_PAYLOAD_PLACE: {
|
||||||
const Location dest_loc = loc_from_cmd(current_cmd, default_loc);
|
const Location dest_loc = loc_from_cmd(current_cmd, default_loc);
|
||||||
const Location next_dest_loc = loc_from_cmd(next_cmd, dest_loc);
|
const Location next_dest_loc = loc_from_cmd(next_cmd, dest_loc);
|
||||||
return wp_nav->set_wp_destination_next_loc(next_dest_loc);
|
return wp_nav->set_wp_destination_next_loc(next_dest_loc);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
case MAV_CMD_NAV_SPLINE_WAYPOINT: {
|
case MAV_CMD_NAV_SPLINE_WAYPOINT: {
|
||||||
// get spline's location and next location from command and send to wp_nav
|
// get spline's location and next location from command and send to wp_nav
|
||||||
Location next_dest_loc, next_next_dest_loc;
|
Location next_dest_loc, next_next_dest_loc;
|
||||||
|
@ -1911,6 +1923,7 @@ void ModeAuto::do_winch(const AP_Mission::Mission_Command& cmd)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if AP_MISSION_NAV_PAYLOAD_PLACE_ENABLED
|
||||||
// do_payload_place - initiate placing procedure
|
// do_payload_place - initiate placing procedure
|
||||||
void ModeAuto::do_payload_place(const AP_Mission::Mission_Command& cmd)
|
void ModeAuto::do_payload_place(const AP_Mission::Mission_Command& cmd)
|
||||||
{
|
{
|
||||||
|
@ -1942,6 +1955,7 @@ void ModeAuto::do_payload_place(const AP_Mission::Mission_Command& cmd)
|
||||||
// set submode
|
// set submode
|
||||||
set_submode(SubMode::NAV_PAYLOAD_PLACE);
|
set_submode(SubMode::NAV_PAYLOAD_PLACE);
|
||||||
}
|
}
|
||||||
|
#endif // AP_MISSION_NAV_PAYLOAD_PLACE_ENABLED
|
||||||
|
|
||||||
// do_RTL - start Return-to-Launch
|
// do_RTL - start Return-to-Launch
|
||||||
void ModeAuto::do_RTL(void)
|
void ModeAuto::do_RTL(void)
|
||||||
|
@ -2011,6 +2025,7 @@ bool ModeAuto::verify_land()
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if AC_PAYLOAD_PLACE_ENABLED
|
||||||
// verify_payload_place - returns true if placing has been completed
|
// verify_payload_place - returns true if placing has been completed
|
||||||
bool PayloadPlace::verify()
|
bool PayloadPlace::verify()
|
||||||
{
|
{
|
||||||
|
@ -2030,6 +2045,7 @@ bool PayloadPlace::verify()
|
||||||
// should never get here
|
// should never get here
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool ModeAuto::verify_loiter_unlimited()
|
bool ModeAuto::verify_loiter_unlimited()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue