37 ModuleParams(nullptr),
38 WorkItem(MODULE_NAME,
px4::wq_configurations::att_pos_ctrl),
40 _launchDetector(this),
121 PX4_ERR(
"vehicle global position callback registration failed!");
160 &(
_parameters.land_heading_hold_horizontal_distance));
287 if (land_thrust_lim_alt_relative < 0.0
f) {
371 airspeed_valid =
true;
382 airspeed_valid =
false;
408 _roll = euler_angles(0);
410 _yaw = euler_angles(2);
417 float altctrl_airspeed = 0;
433 return altctrl_airspeed;
454 float adjusted_min_airspeed =
_parameters.airspeed_min;
467 yaw_vector.normalize();
469 const float ground_speed_body = yaw_vector * ground_speed;
476 if (ground_speed_body < _groundspeed_min.get()) {
477 airspeed_demand +=
max(_groundspeed_min.get() - ground_speed_body, 0.0f);
493 t.
mode = tecs_status_s::TECS_MODE_NORMAL;
497 t.
mode = tecs_status_s::TECS_MODE_UNDERSPEED;
501 t.
mode = tecs_status_s::TECS_MODE_BAD_DESCENT;
505 t.
mode = tecs_status_s::TECS_MODE_CLIMBOUT;
615 waypoint_prev = temp_prev;
617 waypoint_prev.
valid =
true;
619 waypoint_next = temp_next;
621 waypoint_next.
valid =
true;
642 const float deadBand = 0.06f;
649 const float factor = 1.0f - deadBand;
652 bool climbout_mode =
false;
673 float pitch = -(
_manual.
x - deadBand) / factor;
677 }
else if (
_manual.
x < - deadBand) {
679 float pitch = -(
_manual.
x + deadBand) / factor;
699 return climbout_mode;
747 bool setpoint =
true;
752 Vector2f nav_speed_2d{ground_speed};
760 const float air_gnd_angle = acosf((air_speed_2d * ground_speed) / (air_speed_2d.length() * ground_speed.length()));
763 if ((fabsf(air_gnd_angle) > M_PI_2_F) || (ground_speed.length() < 3.0f)) {
764 nav_speed_2d = air_speed_2d;
818 if (pos_sp_prev.
valid) {
819 prev_wp(0) = (float)pos_sp_prev.
lat;
820 prev_wp(1) = (float)pos_sp_prev.
lon;
827 prev_wp(0) = (float)pos_sp_curr.
lat;
828 prev_wp(1) = (float)pos_sp_curr.
lon;
831 float mission_airspeed =
_parameters.airspeed_trim;
839 float mission_throttle =
_parameters.throttle_cruise;
847 if (pos_sp_curr.
type == position_setpoint_s::SETPOINT_TYPE_IDLE) {
852 }
else if (pos_sp_curr.
type == position_setpoint_s::SETPOINT_TYPE_POSITION) {
868 }
else if (pos_sp_curr.
type == position_setpoint_s::SETPOINT_TYPE_LOITER) {
876 loiter_direction = (loiter_radius > 0) ? 1 : -1;
885 float alt_sp = pos_sp_curr.
alt;
887 if (pos_sp_next.
type == position_setpoint_s::SETPOINT_TYPE_LAND && pos_sp_next.
valid 925 }
else if (pos_sp_curr.
type == position_setpoint_s::SETPOINT_TYPE_LAND) {
928 }
else if (pos_sp_curr.
type == position_setpoint_s::SETPOINT_TYPE_TAKEOFF) {
933 if (pos_sp_curr.
type != position_setpoint_s::SETPOINT_TYPE_LAND) {
938 if (pos_sp_curr.
type != position_setpoint_s::SETPOINT_TYPE_TAKEOFF) {
993 climbout_requested ?
radians(10.0
f) : pitch_limit_min,
994 tecs_status_s::TECS_MODE_NORMAL);
1084 throttle_max = 0.0f;
1095 climbout_requested ?
radians(10.0
f) : pitch_limit_min,
1096 tecs_status_s::TECS_MODE_NORMAL);
1119 pos_sp_curr.
type == position_setpoint_s::SETPOINT_TYPE_TAKEOFF &&
1129 pos_sp_curr.
type == position_setpoint_s::SETPOINT_TYPE_TAKEOFF &&
1135 pos_sp_curr.
type == position_setpoint_s::SETPOINT_TYPE_IDLE) {
1155 bool use_tecs_pitch =
true;
1159 pos_sp_curr.
type == position_setpoint_s::SETPOINT_TYPE_TAKEOFF &&
1168 if (use_tecs_pitch) {
1187 Vector2f curr_wp((
float)pos_sp_curr.
lat, (
float)pos_sp_curr.
lon);
1190 if (pos_sp_prev.
valid) {
1191 prev_wp(0) = (float)pos_sp_prev.
lat;
1192 prev_wp(1) = (float)pos_sp_prev.
lon;
1199 prev_wp(0) = (float)pos_sp_curr.
lat;
1200 prev_wp(1) = (float)pos_sp_curr.
lon;
1244 radians(takeoff_pitch_max_deg),
1250 tecs_status_s::TECS_MODE_TAKEOFF);
1298 float takeoff_throttle =
_parameters.throttle_max;
1315 radians(takeoff_pitch_max_deg),
1321 tecs_status_s::TECS_MODE_TAKEOFF);
1357 Vector2f curr_wp((
float)pos_sp_curr.
lat, (
float)pos_sp_curr.
lon);
1360 if (pos_sp_prev.
valid) {
1361 prev_wp(0) = (float)pos_sp_prev.
lat;
1362 prev_wp(1) = (float)pos_sp_prev.
lon;
1369 prev_wp(0) = (float)pos_sp_curr.
lat;
1370 prev_wp(1) = (float)pos_sp_curr.
lon;
1387 (
double)curr_wp(0), (
double)curr_wp(1));
1389 float bearing_lastwp_currwp = bearing_airplane_currwp;
1391 if (pos_sp_prev.
valid) {
1393 (
double)curr_wp(1));
1399 (
double)curr_wp(1));
1402 float wp_distance_save = wp_distance;
1404 if (fabsf(
wrap_pi(bearing_airplane_currwp - bearing_lastwp_currwp)) >=
radians(90.0
f)) {
1405 wp_distance_save = 0.0f;
1412 if (pos_sp_prev.
valid) {
1413 double lat = pos_sp_curr.
lat;
1414 double lon = pos_sp_curr.
lon;
1417 pos_sp_prev.
lat, pos_sp_prev.
lon, -1000.0f, &lat, &lon);
1419 curr_wp(0) = (float)lat;
1420 curr_wp(1) = (float)lon;
1428 if (pos_sp_prev.
valid) {
1461 float terrain_alt = pos_sp_curr.
alt;
1475 terrain_alt = pos_sp_curr.
alt;
1479 terrain_alt = pos_sp_curr.
alt;
1530 bearing_airplane_currwp);
1534 flare_curve_alt_rel = 0.0f;
1550 _land_motor_lim ? tecs_status_s::TECS_MODE_LAND_THROTTLELIM : tecs_status_s::TECS_MODE_LAND);
1583 float altitude_desired = terrain_alt;
1586 bearing_lastwp_currwp, bearing_airplane_currwp);
1590 altitude_desired = terrain_alt + landing_slope_alt_rel_desired;
1599 if (pos_sp_prev.
valid) {
1600 altitude_desired = pos_sp_prev.
alt;
1660 if (should_exit()) {
1818 float pitch_min_rad,
float pitch_max_rad,
1820 bool climbout_mode,
float climbout_pitch_min_rad,
1885 pitch_min_rad = M_DEG_TO_RAD_F * -1.0f;
1886 pitch_max_rad = M_DEG_TO_RAD_F * 5.0f;
1891 || mode == tecs_status_s::TECS_MODE_LAND_THROTTLELIM));
1902 float tmp = accel_body(0);
1903 accel_body(0) = -accel_body(2);
1904 accel_body(2) = tmp;
1924 if (PX4_ISFINITE(baro.pressure) && PX4_ISFINITE(
_parameters.throttle_alt_scale)) {
1927 const float scale =
constrain((eas2tas - 1.0
f) *
_parameters.throttle_alt_scale + 1.0f, 1.0f, 2.0f);
1929 throttle_max =
constrain(throttle_max * scale, throttle_min, 1.0
f);
1930 throttle_cruise =
constrain(throttle_cruise * scale, throttle_min + 0.01
f, throttle_max - 0.01
f);
1938 climbout_mode, climbout_pitch_min_rad,
1939 throttle_min, throttle_max, throttle_cruise,
1940 pitch_min_rad, pitch_max_rad);
1950 _object.store(instance);
1951 _task_id = task_id_is_work_queue;
1953 if (instance->
init()) {
1958 PX4_ERR(
"alloc failed");
1962 _object.store(
nullptr);
1975 PX4_INFO(
"Running");
1983 PX4_WARN(
"%s\n", reason);
1986 PRINT_MODULE_DESCRIPTION(
1989 fw_pos_control_l1 is the fixed wing position controller. 1994 PRINT_MODULE_USAGE_NAME("fw_pos_control_l1",
"controller");
1995 PRINT_MODULE_USAGE_COMMAND(
"start");
1996 PRINT_MODULE_USAGE_DEFAULT_COMMANDS();
#define VEHICLE_TYPE_FIXED_WING
ECL_TECS_MODE tecs_mode()
#define mavlink_log_info(_pub, _text,...)
Send a mavlink info message (not printed to console).
#define PARAM_INVALID
Handle returned when a parameter cannot be found.
constexpr _Tp constrain(_Tp val, _Tp min_val, _Tp max_val)
int print_status() override
uORB::SubscriptionData< vehicle_angular_velocity_s > _vehicle_rates_sub
void landing_status_publish()
bool _land_noreturn_vertical
float equivalent_airspeed_m_s
int globallocalconverter_init(double lat_0, double lon_0, float alt_0, uint64_t timestamp)
Initialize the global mapping between global position (spherical) and local position (NED)...
bool flag_control_offboard_enabled
#define mavlink_log_critical(_pub, _text,...)
Send a mavlink critical message and print to console.
void set_min_sink_rate(float rate)
uORB::Subscription _vehicle_command_sub
vehicle command subscription
void set_heightrate_ff(float heightrate_ff)
void update(float landing_slope_angle_rad_new, float flare_relative_alt_new, float motor_lim_relative_alt_new, float H1_virt_new)
float nav_bearing()
The current target bearing.
void set_speed_weight(float weight)
bool circle_mode()
Returns true if following a circle (loiter)
float total_energy_rate_error
Launch has been detected, the controller should control attitude and also throttle up the motors...
uORB::Publication< position_controller_status_s > _pos_ctrl_status_pub
navigation capabilities publication
measure the time elapsed performing an event
float _flare_curve_alt_rel_last
struct FixedwingPositionControl::@97 _parameter_handles
handles for interesting parameters
void set_max_climb_rate(float climb_rate)
void set_l1_damping(float damping)
Set the L1 damping factor.
float getPitchMax(float pitchMaxDefault)
bool flag_control_auto_enabled
bool update(void *dst)
Copy the struct if updated.
float getLandingSlopeRelativeAltitudeSave(float wp_landing_distance, float bearing_lastwp_currwp, float bearing_airplane_currwp)
void get_waypoint_heading_distance(float heading, position_setpoint_s &waypoint_prev, position_setpoint_s &waypoint_next, bool flag_init)
Get a new waypoint based on heading and distance from current position.
__EXPORT int param_get(param_t param, void *val)
Copy the value of a parameter.
uORB::SubscriptionCallbackWorkItem _global_pos_sub
void set_height_comp_filter_omega(float omega)
static constexpr float THROTTLE_THRESH
max throttle from user which will not lead to motors spinning up in altitude controlled modes ...
void set_max_sink_rate(float sink_rate)
float get_distance_to_next_waypoint(double lat_now, double lon_now, double lat_next, double lon_next)
Returns the distance to the next waypoint in meters.
SubscriptionData< vehicle_acceleration_s > _vehicle_acceleration_sub
uORB::Subscription _vehicle_land_detected_sub
vehicle land detected subscription
int main(int argc, char **argv)
struct position_setpoint_s next
hrt_abstime _last_tecs_update
float switch_distance(float waypoint_switch_radius)
Get the switch distance.
float getYaw(float navigatorYaw)
No launch has been detected.
Dcmf _R_nb
current attitude
bool _was_in_deadband
wether the last stick input was in althold deadband
hrt_abstime _time_went_in_air
time at which the plane went in the air
uORB::Subscription _pos_sp_triplet_sub
float _hdg_hold_yaw
hold heading for velocity mode
perf_counter_t _loop_perf
loop performance counter
static constexpr float HDG_HOLD_REACHED_DIST
uORB::Subscription _control_mode_sub
control mode subscription
void enable_airspeed(bool enabled)
Set the airspeed enable state.
void set_time_const(float time_const)
orb_advert_t orb_advertise(const struct orb_metadata *meta, const void *data)
FixedwingPositionControl()
hrt_abstime _launch_detection_notify
void tecs_update_pitch_throttle(float alt_sp, float airspeed_sp, float pitch_min_rad, float pitch_max_rad, float throttle_min, float throttle_max, float throttle_cruise, bool climbout_mode, float climbout_pitch_min_rad, uint8_t mode=tecs_status_s::TECS_MODE_NORMAL)
float get_pitch_setpoint()
bool _reinitialize_tecs
indicates if the TECS states should be reinitialized (used for VTOL)
static constexpr float MANUAL_THROTTLE_CLIMBOUT_THRESH
a throttle / pitch input above this value leads to the system switching to climbout mode ...
float get_terrain_altitude_takeoff(float takeoff_alt, const vehicle_global_position_s &global_pos)
Return the terrain estimate during takeoff or takeoff_alt if terrain estimate is not available...
void navigate_loiter(const matrix::Vector2f &vector_A, const matrix::Vector2f &vector_curr_position, float radius, int8_t loiter_direction, const matrix::Vector2f &ground_speed_vector)
Navigate on an orbit around a loiter waypoint.
float get_demanded_airspeed()
struct position_setpoint_s previous
static constexpr float HDG_HOLD_SET_BACK_DIST
void set_indicated_airspeed_min(float airspeed)
float _takeoff_ground_alt
ground altitude at which plane was launched
void tecs_status_publish()
void set_roll_slew_rate(float roll_slew_rate)
Set roll angle slew rate.
uORB::Subscription _vehicle_status_sub
vehicle status subscription
hrt_abstime _airspeed_last_valid
last time airspeed was received. Used to detect timeouts.
bool _hdg_hold_enabled
heading hold enabled
float pitch_integ_state()
enum FixedwingPositionControl::FW_POSCTRL_MODE FW_POSCTRL_MODE_OTHER
used to check the mode in the last control loop iteration. Use to check if the last iteration was in ...
float TAS_rate_setpoint()
void abort_landing(bool abort)
orb_advert_t _mavlink_log_pub
bool update_desired_altitude(float dt)
Update desired altitude base on user pitch stick input.
uORB::Subscription _local_pos_sub
void set_interval_ms(uint32_t interval)
Set the interval in milliseconds.
float crosstrack_error()
Get the current crosstrack error.
uORB::Publication< position_controller_landing_status_s > _pos_ctrl_landing_status_pub
landing status publication
~FixedwingPositionControl() override
float getPitch(float tecsPitch)
float getMaxPitch(float max)
void set_integrator_gain(float gain)
vehicle_land_detected_s _vehicle_land_detected
vehicle land detected
bool _airspeed_valid
flag if a valid airspeed estimate exists
#define ORB_ID(_name)
Generates a pointer to the uORB metadata structure for a given topic.
struct position_setpoint_s current
void reset_takeoff_state(bool force=false)
struct FixedwingPositionControl::@96 _parameters
local copies of interesting parameters
bool publish(const T &data)
Publish the struct.
bool flag_control_velocity_enabled
position_setpoint_triplet_s _pos_sp_triplet
triplet of mission items
bool flag_control_manual_enabled
float calculate_target_airspeed(float airspeed_demand, const Vector2f &ground_speed)
param_t land_flare_alt_relative
static void parameters_update()
update all parameters
void perf_free(perf_counter_t handle)
Free a counter.
uORB::Subscription _vehicle_attitude_sub
vehicle attitude subscription
bool pitch_reset_integral
uint8_t _pos_reset_counter
captures the number of times the estimator has reset the horizontal position
float getMinAirspeedScaling()
manual_control_setpoint_s _manual
r/c channel data
float _althold_epv
the position estimate accuracy when engaging alt hold
float target_bearing()
Bearing from aircraft to current target.
bool launchDetectionEnabled()
void control_landing(const Vector2f &curr_pos, const Vector2f &ground_speed, const position_setpoint_s &pos_sp_prev, const position_setpoint_s &pos_sp_curr)
static constexpr float ALTHOLD_EPV_RESET_THRESH
static constexpr float HDG_HOLD_YAWRATE_THRESH
uint8_t alt_reset_counter
float _target_bearing
estimated height to ground at which flare started
void waypoint_from_heading_and_distance(double lat_start, double lon_start, float bearing, float dist, double *lat_target, double *lon_target)
Creates a waypoint from given waypoint, distance and bearing see http://www.movable-type.co.uk/scripts/latlong.html.
orb_advert_t _attitude_sp_pub
attitude setpoint
Landingslope _landingslope
void set_speedrate_p(float speedrate_p)
orb_id_t _attitude_setpoint_id
float landing_slope_angle_rad()
constexpr T radians(T degrees)
Vector< float, 6 > f(float t, const Matrix< float, 6, 1 > &, const Matrix< float, 3, 1 > &)
void set_throttle_damp(float throttle_damp)
bool runwayTakeoffEnabled()
Vector2< float > Vector2f
SubscriptionData< airspeed_validated_s > _airspeed_validated_sub
vehicle_control_mode_s _control_mode
control mode
static hrt_abstime hrt_elapsed_time(const hrt_abstime *then)
Compute the delta between a timestamp taken in the past and now.
ECL_L1_Pos_Controller _l1_control
float getThrottle(float tecsThrottle)
param_t land_thrust_lim_alt_relative
float _flare_pitch_sp
Current forced (i.e. not determined using TECS) flare pitch setpoint.
vehicle_status_s _vehicle_status
vehicle status
LaunchDetectionResult getLaunchDetected()
uORB::Subscription _sensor_baro_sub
float get_bearing_to_next_waypoint(double lat_now, double lon_now, double lat_next, double lon_next)
Returns the bearing to the next waypoint in radians.
LaunchDetectionResult _launch_detection_state
float motor_lim_relative_alt()
void perf_end(perf_counter_t handle)
End a performance event.
void handle_alt_step(float delta_alt, float altitude)
Handle the altitude reset.
float hgt_rate_setpoint()
bool flag_control_acceleration_enabled
vehicle_local_position_s _local_pos
vehicle local position
float _flare_height
estimated height to ground at which flare started
bool updated()
Check if there is a new update.
void set_indicated_airspeed_max(float airspeed)
void set_l1_period(float period)
Set the L1 period.
void set_roll_throttle_compensation(float compensation)
__BEGIN_DECLS typedef uint64_t hrt_abstime
Absolute time, in microsecond units.
bool in_takeoff_situation()
Check if we are in a takeoff situation.
int orb_publish(const struct orb_metadata *meta, orb_advert_t handle, const void *data)
void set_dt(float dt)
Set control loop dt.
void do_takeoff_help(float *hold_altitude, float *pitch_limit_min)
Do takeoff help when in altitude controlled modes.
static int print_usage(const char *reason=nullptr)
bool _last_manual
true if the last iteration was in manual mode (used to determine when a reset is needed) ...
float throttle_integ_state()
constexpr _Tp min(_Tp a, _Tp b)
vehicle_attitude_setpoint_s _att_sp
vehicle attitude setpoint
float _hold_alt
hold altitude for altitude mode
void set_pitch_damping(float damping)
Type wrap_pi(Type x)
Wrap value in range [-π, π)
__EXPORT param_t param_find(const char *name)
Look up a parameter by name.
bool flag_control_altitude_enabled
float getFlareCurveRelativeAltitudeSave(float wp_landing_distance, float bearing_lastwp_currwp, float bearing_airplane_currwp)
void reset_landing_state()
void handle_command()
Handle incoming vehicle commands.
position_setpoint_s _hdg_hold_curr_wp
position to which heading hold flies
uORB::Subscription _manual_control_sub
notification of manual control updates
void update_pitch_throttle(const matrix::Dcmf &rotMat, float pitch, float baro_altitude, float hgt_setpoint, float EAS_setpoint, float indicated_airspeed, float eas_to_tas, bool climb_out_setpoint, float pitch_min_climbout, float throttle_min, float throttle_setpoint_max, float throttle_cruise, float pitch_limit_min, float pitch_limit_max)
Update the control loop calculations.
float energy_distribution_error
Vector3< float > Vector3f
void create_waypoint_from_line_and_dist(double lat_A, double lon_A, double lat_B, double lon_B, float dist, double *lat_target, double *lon_target)
Creates a new waypoint C on the line of two given waypoints (A, B) at certain distance from waypoint ...
void vehicle_command_poll()
void navigate_waypoints(const matrix::Vector2f &vector_A, const matrix::Vector2f &vector_B, const matrix::Vector2f &vector_curr_position, const matrix::Vector2f &ground_speed)
Navigate between two waypoints.
static constexpr float HDG_HOLD_DIST_NEXT
int globallocalconverter_toglobal(float x, float y, float z, double *lat, double *lon, float *alt)
Convert from local position coordinates to global position coordinates using the global reference...
void init(float yaw, double current_lat, double current_lon)
bool flag_control_position_enabled
void set_detect_underspeed_enabled(bool enabled)
constexpr _Tp max(_Tp a, _Tp b)
uint8_t _alt_reset_counter
captures the number of times the estimator has reset the altitude state
void set_l1_roll_limit(float roll_lim_rad)
Set the maximum roll angle output in radians.
uORB::Subscription _parameter_update_sub
notification of parameter updates
void update_vehicle_state_estimates(float airspeed, const matrix::Dcmf &rotMat, const matrix::Vector3f &accel_body, bool altitude_lock, bool in_air, float altitude, bool vz_valid, float vz, float az)
Updates the following vehicle kineamtic state estimates: Vertical position, velocity and acceleration...
Quaternion< float > Quatf
vehicle_attitude_s _att
vehicle attitude setpoint
float getMinPitch(float sp_min, float climbout_min, float min)
void set_time_const_throt(float time_const_throt)
__EXPORT int fw_pos_control_l1_main(int argc, char *argv[])
float energy_distribution_rate_error
float airspeed_derivative
void perf_print_counter(perf_counter_t handle)
Print one performance counter to stdout.
float getRoll(float navigatorRoll)
matrix::Vector2f getStartWP()
bool control_position(const Vector2f &curr_pos, const Vector2f &ground_speed, const position_setpoint_s &pos_sp_prev, const position_setpoint_s &pos_sp_curr, const position_setpoint_s &pos_sp_next)
float get_throttle_setpoint(void)
float height_rate_setpoint
void control_takeoff(const Vector2f &curr_pos, const Vector2f &ground_speed, const position_setpoint_s &pos_sp_prev, const position_setpoint_s &pos_sp_curr)
float airspeed_derivative_sp
static constexpr hrt_abstime T_ALT_TIMEOUT
void update(float accel_x)
void unregisterCallback()
void set_vertical_accel_limit(float limit)
bool _was_in_air
indicated wether the plane was in the air in the previous interation*/
float get_roll_setpoint()
Get roll angle setpoint for fixed wing.
float _t_alt_prev_valid
last terrain estimate which was valid
void vehicle_control_mode_poll()
bool globallocalconverter_initialized()
Checks if globallocalconverter was initialized.
vehicle_global_position_s _global_pos
global vehicle position
uint8_t lat_lon_reset_counter
void vehicle_status_poll()
void vehicle_attitude_poll()
void set_heightrate_p(float heightrate_p)
float horizontal_slope_displacement()
static constexpr float CONSTANTS_STD_PRESSURE_MBAR
hrt_abstime _time_last_t_alt
time at which we had last valid terrain alt
float _asp_after_transition
float horizontal_slope_displacement
static int custom_command(int argc, char *argv[])
vehicle_command_s _vehicle_command
vehicle commands
bool update(void *dst)
Update the struct.
hrt_abstime _control_position_last_called
last call of control_position
bool _yaw_lock_engaged
yaw is locked for heading hold
bool _land_noreturn_horizontal
static constexpr float HDG_HOLD_MAN_INPUT_THRESH
float flare_relative_alt()
hrt_abstime _time_started_landing
time at which landing started
void update(float airspeed, float alt_agl, double current_lat, double current_lon, orb_advert_t *mavlink_log_pub)
void set_speed_comp_filter_omega(float omega)
LaunchDetector _launchDetector
bool copy(void *dst)
Copy the struct.
RunwayTakeoff _runway_takeoff
void perf_begin(perf_counter_t handle)
Begin a performance event.
position_setpoint_s _hdg_hold_prev_wp
position where heading hold started
__EXPORT hrt_abstime hrt_absolute_time(void)
Get absolute time in [us] (does not wrap).
void set_throttle_slewrate(float slewrate)
void navigate_heading(float navigation_heading, float current_heading, const matrix::Vector2f &ground_speed)
Navigate on a fixed bearing.
uORB::Publication< tecs_status_s > _tecs_status_pub
TECS status publication.
static int task_spawn(int argc, char *argv[])