Skip to content

Commit

Permalink
wip:params and framework
Browse files Browse the repository at this point in the history
  • Loading branch information
Hwurzburg committed Nov 15, 2024
1 parent 1e99226 commit 7213288
Show file tree
Hide file tree
Showing 9 changed files with 108 additions and 2 deletions.
1 change: 1 addition & 0 deletions ArduPlane/GCS_Mavlink.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ MAV_MODE GCS_MAVLINK_Plane::base_mode() const
case Mode::Number::GUIDED:
case Mode::Number::CIRCLE:
case Mode::Number::TAKEOFF:
case Mode::Number::AUTOLAND:
#if HAL_QUADPLANE_ENABLED
case Mode::Number::QRTL:
case Mode::Number::LOITER_ALT_QLAND:
Expand Down
1 change: 1 addition & 0 deletions ArduPlane/GCS_Plane.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ void GCS_Plane::update_vehicle_sensor_status_flags(void)
case Mode::Number::GUIDED:
case Mode::Number::CIRCLE:
case Mode::Number::TAKEOFF:
case Mode::Number::AUTOLAND:
#if HAL_QUADPLANE_ENABLED
case Mode::Number::QRTL:
case Mode::Number::LOITER_ALT_QLAND:
Expand Down
4 changes: 4 additions & 0 deletions ArduPlane/Parameters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1027,6 +1027,10 @@ const AP_Param::Info Plane::var_info[] = {
// @Group: TKOFF_
// @Path: mode_takeoff.cpp
GOBJECT(mode_takeoff, "TKOFF_", ModeTakeoff),

// @Group: AUTOLAND_
// @Path: mode_autoland.cpp
GOBJECT(mode_autoland, "AUTOLAND_", ModeAutoLand),

#if AP_PLANE_GLIDER_PULLUP_ENABLED
// @Group: PUP_
Expand Down
2 changes: 1 addition & 1 deletion ArduPlane/Parameters.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ class Parameters {
k_param_sonar_old, // unused
k_param_log_bitmask,
k_param_BoardConfig,
k_param_rssi_range, // unused, replaced by rssi_ library parameters
k_param_mode_autoland, // was rssi_range
k_param_flapin_channel_old, // unused, moved to RC_OPTION
k_param_flaperon_output, // unused
k_param_gps,
Expand Down
1 change: 1 addition & 0 deletions ArduPlane/Plane.h
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,7 @@ class Plane : public AP_Vehicle {
#endif // QAUTOTUNE_ENABLED
#endif // HAL_QUADPLANE_ENABLED
ModeTakeoff mode_takeoff;
ModeAutoLand mode_autoland;
#if HAL_SOARING_ENABLED
ModeThermal mode_thermal;
#endif
Expand Down
3 changes: 3 additions & 0 deletions ArduPlane/control_modes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ Mode *Plane::mode_from_mode_num(const enum Mode::Number num)
case Mode::Number::TAKEOFF:
ret = &mode_takeoff;
break;
case Mode::Number::AUTOLAND:
ret = &mode_autoland;
break;
case Mode::Number::THERMAL:
#if HAL_SOARING_ENABLED
ret = &mode_thermal;
Expand Down
4 changes: 3 additions & 1 deletion ArduPlane/events.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ void Plane::failsafe_short_on_event(enum failsafe_state fstype, ModeReason reaso
break;
#endif // HAL_QUADPLANE_ENABLED

case Mode::Number::AUTO: {
case Mode::Number::AUTO:
case Mode::Number::AUTOLAND: {
if (failsafe_in_landing_sequence()) {
// don't failsafe in a landing sequence
break;
Expand Down Expand Up @@ -169,6 +170,7 @@ void Plane::failsafe_long_on_event(enum failsafe_state fstype, ModeReason reason
#endif // HAL_QUADPLANE_ENABLED

case Mode::Number::AUTO:
case Mode::Number::AUTOLAND:
if (failsafe_in_landing_sequence()) {
// don't failsafe in a landing sequence
break;
Expand Down
38 changes: 38 additions & 0 deletions ArduPlane/mode.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ class Mode
#if HAL_QUADPLANE_ENABLED
LOITER_ALT_QLAND = 25,
#endif
AUTOLAND = 26,
};

// Constructor
Expand Down Expand Up @@ -835,6 +836,43 @@ class ModeTakeoff: public Mode
// flag that we have already called autoenable fences once in MODE TAKEOFF
bool have_autoenabled_fences;

};

class ModeAutoLand: public Mode
{
public:
ModeAutoLand();

Number mode_number() const override { return Number::AUTOLAND; }
const char *name() const override { return "AUTOLAND"; }
const char *name4() const override { return "AUTOLAND"; }

// methods that affect movement of the vehicle in this mode
void update() override;

void navigate() override;

bool allows_throttle_nudging() const override { return true; }

bool does_auto_navigation() const override { return true; }

bool does_auto_throttle() const override { return true; }


// var_info for holding parameter information
static const struct AP_Param::GroupInfo var_info[];

AP_Int16 final_wp_alt;
AP_Int16 final_wp_dist;

protected:
bool _enter() override;


private:



};

#if HAL_SOARING_ENABLED
Expand Down
56 changes: 56 additions & 0 deletions ArduPlane/mode_autoland.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#include "mode.h"
#include "Plane.h"
#include <GCS_MAVLink/GCS.h>

/*
mode AutoLand parameters
*/
const AP_Param::GroupInfo ModeAutoLand::var_info[] = {
// @Param: WP_ALT
// @DisplayName: Final approach WP altitude
// @Description: This is the target altitude for final approach waypoint
// @Range: 0 200
// @Increment: 1
// @Units: m
// @User: Standard
AP_GROUPINFO("WP_ALT", 1, ModeAutoLand, final_wp_alt, 55),

// @Param: DIST
// @DisplayName: Final approach WP distance
// @Description: This is the distance from Home that the final approach waypoint is set. The waypoint point will be in the opposite direction of takeoff (the direction the plane is facing when the plane sets its takeoff heading)
// @Range: 0 700
// @Increment: 1
// @Units: m
// @User: Standard
AP_GROUPINFO("WP_DIST", 2, ModeAutoLand, final_wp_dist, 400),

AP_GROUPEND
};

ModeAutoLand::ModeAutoLand() :
Mode()
{
AP_Param::setup_object_defaults(this, var_info);
}

bool ModeAutoLand::_enter()
{
// upon enter we setup a final wp and land wp based on home and takeoff_dir
const Location &home = ahrs.get_home();
plane.set_target_altitude_current();
plane.next_WP_loc.offset_bearing(bearing_cd, home.alt*0.01f + final_wp_alt);
plane.prev_WP_loc = plane.current_loc;
plane.nav_controller->update_waypoint(plane.prev_WP_loc, plane.next_WP_loc);
return true;
}

void ModeAutoLand::update()
{
plane.calc_nav_roll();
plane.update_fbwb_speed_height();
}

void ModeAutoLand::navigate()
{

}

0 comments on commit 7213288

Please sign in to comment.