mirror of
https://github.com/ArduPilot/ardupilot.git
synced 2026-10-02 10:23:25 +08:00
Copter: add parameter table for flip mode
This commit is contained in:
@@ -1186,14 +1186,9 @@ const AP_Param::GroupInfo ParametersG2::var_info2[] = {
|
||||
#endif
|
||||
|
||||
#if MODE_FLIP_ENABLED
|
||||
// @Param: FLIP_RATE
|
||||
// @DisplayName: Flip Mode Rotational Rate
|
||||
// @Description: Rotational Rate for Flip Mode in Deg/s. Be sure to set a rotational rate that the aircraft can achieve.
|
||||
// @Units: deg/s
|
||||
// @Range: 60 1000
|
||||
// @Increment: 1
|
||||
// @User: Standard
|
||||
AP_GROUPINFO("FLIP_RATE", 23, ParametersG2, flip_rate_dps, 400),
|
||||
// @Group: FLIP_
|
||||
// @Path: mode_flip.cpp
|
||||
AP_SUBGROUPPTR(mode_flip_ptr, "FLIP_", 23, ParametersG2, ModeFlip),
|
||||
#endif
|
||||
|
||||
// ID 62 is reserved for the AP_SUBGROUPEXTENSION
|
||||
@@ -1262,6 +1257,11 @@ ParametersG2::ParametersG2(void) :
|
||||
#if MODE_POSHOLD_ENABLED
|
||||
,mode_poshold_ptr(&copter.mode_poshold)
|
||||
#endif
|
||||
|
||||
#if MODE_FLIP_ENABLED
|
||||
,mode_flip_ptr(&copter.mode_flip)
|
||||
#endif
|
||||
|
||||
{
|
||||
AP_Param::setup_object_defaults(this, var_info);
|
||||
AP_Param::setup_object_defaults(this, var_info2);
|
||||
|
||||
@@ -737,8 +737,9 @@ public:
|
||||
#endif
|
||||
|
||||
#if MODE_FLIP_ENABLED
|
||||
AP_Int16 flip_rate_dps;
|
||||
void *mode_flip_ptr;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
extern const AP_Param::Info var_info[];
|
||||
|
||||
+5
-2
@@ -958,8 +958,8 @@ private:
|
||||
class ModeFlip : public Mode {
|
||||
|
||||
public:
|
||||
// inherit constructor
|
||||
using Mode::Mode;
|
||||
// need a constructor
|
||||
ModeFlip(void);
|
||||
Number mode_number() const override { return Number::FLIP; }
|
||||
|
||||
bool init(bool ignore_checks) override;
|
||||
@@ -973,6 +973,8 @@ public:
|
||||
|
||||
void abandon_flip();
|
||||
|
||||
static const struct AP_Param::GroupInfo var_info[];
|
||||
|
||||
protected:
|
||||
|
||||
const char *name() const override { return "Flip"; }
|
||||
@@ -996,6 +998,7 @@ private:
|
||||
uint32_t start_time_ms;
|
||||
int8_t roll_dir; // roll direction (-1 = roll left, 1 = roll right)
|
||||
int8_t pitch_dir; // pitch direction (-1 = pitch forward, 1 = pitch back)
|
||||
AP_Float flip_rate_dps; // rotational rate during flip
|
||||
|
||||
bool input_is_high_magnitude(RC_Channel &input) const;
|
||||
};
|
||||
|
||||
@@ -28,6 +28,29 @@
|
||||
#define FLIP_PITCH_BACK 1 // used to set flip_dir
|
||||
#define FLIP_PITCH_FORWARD -1 // used to set flip_dir
|
||||
|
||||
#define FLIP_RATE_DEFAULT_DPS 400.0f // default flip rate in deg/s
|
||||
|
||||
const AP_Param::GroupInfo ModeFlip::var_info[] = {
|
||||
|
||||
// @Param: RATE
|
||||
// @DisplayName: Flip Mode Rotational Rate
|
||||
// @Description: Rotational Rate for Flip Mode in Deg/s. Be sure to set a rotational rate that the aircraft can achieve.
|
||||
// @Units: deg/s
|
||||
// @Range: 60 1000
|
||||
// @Increment: 1
|
||||
// @User: Standard
|
||||
AP_GROUPINFO("RATE", 1, ModeFlip, flip_rate_dps, FLIP_RATE_DEFAULT_DPS),
|
||||
|
||||
AP_GROUPEND
|
||||
};
|
||||
|
||||
// constructor
|
||||
ModeFlip::ModeFlip(void) : Mode()
|
||||
{
|
||||
// load parameter defaults
|
||||
AP_Param::setup_object_defaults(this, var_info);
|
||||
}
|
||||
|
||||
// flip_init - initialise flip controller
|
||||
bool ModeFlip::init(bool ignore_checks)
|
||||
{
|
||||
@@ -88,7 +111,7 @@ bool ModeFlip::init(bool ignore_checks)
|
||||
void ModeFlip::run()
|
||||
{
|
||||
// get flip rotation rate parameter and constrain to range from 60 to 1000 deg/s.
|
||||
const float flip_rate_rads = radians(constrain_float(g2.flip_rate_dps.get(), 60.0f, 1000.0f));
|
||||
const float flip_rate_rads = radians(constrain_float(flip_rate_dps.get(), 60.0f, 1000.0f));
|
||||
// determine timeout for flip based on rotation rate. Time is doubled to allow for poorly tuned vehicles.
|
||||
const float flip_time_out_ms = 1000.0f * (2.0f * radians(360.0f) / flip_rate_rads);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user