mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-09 01:18:29 -04:00
Copter: support send_extended_sys_state
This commit is contained in:
parent
34e09a55be
commit
281dbfcef8
@ -1368,3 +1368,17 @@ uint64_t GCS_MAVLINK_Copter::capabilities() const
|
|||||||
MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION |
|
MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION |
|
||||||
GCS_MAVLINK::capabilities());
|
GCS_MAVLINK::capabilities());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MAV_LANDED_STATE GCS_MAVLINK_Copter::landed_state() const
|
||||||
|
{
|
||||||
|
if (copter.ap.land_complete) {
|
||||||
|
return MAV_LANDED_STATE_ON_GROUND;
|
||||||
|
}
|
||||||
|
if (copter.flightmode->is_landing()) {
|
||||||
|
return MAV_LANDED_STATE_LANDING;
|
||||||
|
}
|
||||||
|
if (copter.flightmode->is_taking_off()) {
|
||||||
|
return MAV_LANDED_STATE_TAKEOFF;
|
||||||
|
}
|
||||||
|
return MAV_LANDED_STATE_IN_AIR;
|
||||||
|
}
|
||||||
|
@ -42,6 +42,9 @@ protected:
|
|||||||
void send_nav_controller_output() const override;
|
void send_nav_controller_output() const override;
|
||||||
uint64_t capabilities() const override;
|
uint64_t capabilities() const override;
|
||||||
|
|
||||||
|
virtual MAV_VTOL_STATE vtol_state() const { return MAV_VTOL_STATE_MC; };
|
||||||
|
virtual MAV_LANDED_STATE landed_state() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void handleMessage(mavlink_message_t * msg) override;
|
void handleMessage(mavlink_message_t * msg) override;
|
||||||
|
@ -87,6 +87,7 @@ protected:
|
|||||||
virtual bool has_manual_throttle() const = 0;
|
virtual bool has_manual_throttle() const = 0;
|
||||||
virtual bool allows_arming(bool from_gcs) const = 0;
|
virtual bool allows_arming(bool from_gcs) const = 0;
|
||||||
|
|
||||||
|
virtual bool is_landing() const { return false; }
|
||||||
virtual bool landing_gear_should_be_deployed() const { return false; }
|
virtual bool landing_gear_should_be_deployed() const { return false; }
|
||||||
|
|
||||||
virtual const char *name() const = 0;
|
virtual const char *name() const = 0;
|
||||||
@ -176,6 +177,7 @@ protected:
|
|||||||
void auto_takeoff_attitude_run(float target_yaw_rate);
|
void auto_takeoff_attitude_run(float target_yaw_rate);
|
||||||
// altitude below which we do no navigation in auto takeoff
|
// altitude below which we do no navigation in auto takeoff
|
||||||
static float auto_takeoff_no_nav_alt_cm;
|
static float auto_takeoff_no_nav_alt_cm;
|
||||||
|
virtual bool is_taking_off() const;
|
||||||
|
|
||||||
// pass-through functions to reduce code churn on conversion;
|
// pass-through functions to reduce code churn on conversion;
|
||||||
// these are candidates for moving into the Mode base
|
// these are candidates for moving into the Mode base
|
||||||
@ -299,8 +301,11 @@ public:
|
|||||||
void spline_start(const Location& destination, bool stopped_at_start, AC_WPNav::spline_segment_end_type seg_end_type, const Location& next_destination);
|
void spline_start(const Location& destination, bool stopped_at_start, AC_WPNav::spline_segment_end_type seg_end_type, const Location& next_destination);
|
||||||
void nav_guided_start();
|
void nav_guided_start();
|
||||||
|
|
||||||
|
bool is_landing() const override;
|
||||||
bool landing_gear_should_be_deployed() const override;
|
bool landing_gear_should_be_deployed() const override;
|
||||||
|
|
||||||
|
bool is_taking_off() const override;
|
||||||
|
|
||||||
// return true if this flight mode supports user takeoff
|
// return true if this flight mode supports user takeoff
|
||||||
// must_nagivate is true if mode must also control horizontal position
|
// must_nagivate is true if mode must also control horizontal position
|
||||||
virtual bool has_user_takeoff(bool must_navigate) const override { return false; }
|
virtual bool has_user_takeoff(bool must_navigate) const override { return false; }
|
||||||
@ -719,6 +724,8 @@ public:
|
|||||||
void limit_set(uint32_t timeout_ms, float alt_min_cm, float alt_max_cm, float horiz_max_cm);
|
void limit_set(uint32_t timeout_ms, float alt_min_cm, float alt_max_cm, float horiz_max_cm);
|
||||||
bool limit_check();
|
bool limit_check();
|
||||||
|
|
||||||
|
bool is_taking_off() const override;
|
||||||
|
|
||||||
bool do_user_takeoff_start(float final_alt_above_home) override;
|
bool do_user_takeoff_start(float final_alt_above_home) override;
|
||||||
|
|
||||||
GuidedMode mode() const { return guided_mode; }
|
GuidedMode mode() const { return guided_mode; }
|
||||||
@ -790,6 +797,7 @@ public:
|
|||||||
bool has_manual_throttle() const override { return false; }
|
bool has_manual_throttle() const override { return false; }
|
||||||
bool allows_arming(bool from_gcs) const override { return false; };
|
bool allows_arming(bool from_gcs) const override { return false; };
|
||||||
bool is_autopilot() const override { return true; }
|
bool is_autopilot() const override { return true; }
|
||||||
|
bool is_landing() const override { return true; };
|
||||||
bool landing_gear_should_be_deployed() const override { return true; };
|
bool landing_gear_should_be_deployed() const override { return true; };
|
||||||
|
|
||||||
void do_not_use_GPS();
|
void do_not_use_GPS();
|
||||||
@ -902,6 +910,7 @@ public:
|
|||||||
// this should probably not be exposed
|
// this should probably not be exposed
|
||||||
bool state_complete() { return _state_complete; }
|
bool state_complete() { return _state_complete; }
|
||||||
|
|
||||||
|
bool is_landing() const override;
|
||||||
bool landing_gear_should_be_deployed() const override;
|
bool landing_gear_should_be_deployed() const override;
|
||||||
|
|
||||||
void restart_without_terrain();
|
void restart_without_terrain();
|
||||||
|
@ -349,6 +349,24 @@ void Copter::ModeAuto::nav_guided_start()
|
|||||||
}
|
}
|
||||||
#endif //NAV_GUIDED
|
#endif //NAV_GUIDED
|
||||||
|
|
||||||
|
bool Copter::ModeAuto::is_landing() const
|
||||||
|
{
|
||||||
|
switch(_mode) {
|
||||||
|
case Auto_Land:
|
||||||
|
return true;
|
||||||
|
case Auto_RTL:
|
||||||
|
return copter.mode_rtl.is_landing();
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Copter::ModeAuto::is_taking_off() const
|
||||||
|
{
|
||||||
|
return _mode == Auto_TakeOff;
|
||||||
|
}
|
||||||
|
|
||||||
bool Copter::ModeAuto::landing_gear_should_be_deployed() const
|
bool Copter::ModeAuto::landing_gear_should_be_deployed() const
|
||||||
{
|
{
|
||||||
switch(_mode) {
|
switch(_mode) {
|
||||||
|
@ -139,6 +139,11 @@ void Copter::ModeGuided::posvel_control_start()
|
|||||||
auto_yaw.set_mode(AUTO_YAW_HOLD);
|
auto_yaw.set_mode(AUTO_YAW_HOLD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Copter::ModeGuided::is_taking_off() const
|
||||||
|
{
|
||||||
|
return guided_mode == Guided_TakeOff;
|
||||||
|
}
|
||||||
|
|
||||||
// initialise guided mode's angle controller
|
// initialise guided mode's angle controller
|
||||||
void Copter::ModeGuided::angle_control_start()
|
void Copter::ModeGuided::angle_control_start()
|
||||||
{
|
{
|
||||||
|
@ -337,6 +337,11 @@ void Copter::ModeRTL::land_start()
|
|||||||
auto_yaw.set_mode(AUTO_YAW_HOLD);
|
auto_yaw.set_mode(AUTO_YAW_HOLD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Copter::ModeRTL::is_landing() const
|
||||||
|
{
|
||||||
|
return _state == RTL_Land;
|
||||||
|
}
|
||||||
|
|
||||||
bool Copter::ModeRTL::landing_gear_should_be_deployed() const
|
bool Copter::ModeRTL::landing_gear_should_be_deployed() const
|
||||||
{
|
{
|
||||||
switch(_state) {
|
switch(_state) {
|
||||||
|
@ -173,3 +173,17 @@ void Copter::Mode::auto_takeoff_attitude_run(float target_yaw_rate)
|
|||||||
// roll & pitch from waypoint controller, yaw rate from pilot
|
// roll & pitch from waypoint controller, yaw rate from pilot
|
||||||
attitude_control->input_euler_angle_roll_pitch_euler_rate_yaw(nav_roll, nav_pitch, target_yaw_rate);
|
attitude_control->input_euler_angle_roll_pitch_euler_rate_yaw(nav_roll, nav_pitch, target_yaw_rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Copter::Mode::is_taking_off() const
|
||||||
|
{
|
||||||
|
if (!has_user_takeoff(false)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (ap.land_complete) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (takeoff.running()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user