123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- #pragma once
- #include <AP_Math/AP_Math.h>
- #include <AP_AHRS/AP_AHRS.h>
- #include <AP_Param/AP_Param.h>
- #include <AP_Navigation/AP_Navigation.h>
- #include <AP_SpdHgtControl/AP_SpdHgtControl.h>
- #include <AP_Common/Location.h>
- class AP_L1_Control : public AP_Navigation {
- public:
- AP_L1_Control(AP_AHRS &ahrs, const AP_SpdHgtControl *spdHgtControl)
- : _ahrs(ahrs)
- , _spdHgtControl(spdHgtControl)
- {
- AP_Param::setup_object_defaults(this, var_info);
- }
-
- AP_L1_Control(const AP_L1_Control &other) = delete;
- AP_L1_Control &operator=(const AP_L1_Control&) = delete;
-
- int32_t nav_roll_cd(void) const override;
- float lateral_acceleration(void) const override;
-
- int32_t nav_bearing_cd(void) const override;
-
- int32_t bearing_error_cd(void) const override;
- float crosstrack_error(void) const override { return _crosstrack_error; }
- float crosstrack_error_integrator(void) const override { return _L1_xtrack_i; }
- int32_t target_bearing_cd(void) const override;
- float turn_distance(float wp_radius) const override;
- float turn_distance(float wp_radius, float turn_angle) const override;
- float loiter_radius (const float loiter_radius) const override;
- void update_waypoint(const struct Location &prev_WP, const struct Location &next_WP, float dist_min = 0.0f) override;
- void update_loiter(const struct Location ¢er_WP, float radius, int8_t loiter_direction) override;
- void update_heading_hold(int32_t navigation_heading_cd) override;
- void update_level_flight(void) override;
- bool reached_loiter_target(void) override;
-
- void set_default_period(float period) {
- _L1_period.set_default(period);
- }
- void set_data_is_stale(void) override {
- _data_is_stale = true;
- }
- bool data_is_stale(void) const override {
- return _data_is_stale;
- }
-
- static const struct AP_Param::GroupInfo var_info[];
- void set_reverse(bool reverse) override {
- _reverse = reverse;
- }
- private:
-
- AP_AHRS &_ahrs;
-
- const AP_SpdHgtControl *_spdHgtControl;
-
-
- float _latAccDem;
-
- float _L1_dist;
-
- bool _WPcircle;
-
- float _nav_bearing;
-
- float _bearing_error;
-
- float _crosstrack_error;
-
- int32_t _target_bearing_cd;
-
- AP_Float _L1_period;
-
- AP_Float _L1_damping;
-
- float _last_Nu;
-
- void _prevent_indecision(float &Nu);
-
-
- float _L1_xtrack_i = 0;
- AP_Float _L1_xtrack_i_gain;
- float _L1_xtrack_i_gain_prev = 0;
- uint32_t _last_update_waypoint_us;
- bool _data_is_stale = true;
- AP_Float _loiter_bank_limit;
- bool _reverse = false;
- float get_yaw();
- float get_yaw_sensor();
- };
|