Auterion App SDK
Auterion SDK is a library that can be used by AuterionOS apps to communicate with the system.
Loading...
Searching...
No Matches
los_specific_force_controller.hpp
1/****************************************************************************
2 *
3 * Copyright 2026 Auterion. All rights reserved.
4 *
5 ****************************************************************************/
6
7#pragma once
8
9#include <Eigen/Eigen>
10#include <limits>
11#include <memory>
12
13namespace auterion {
14
20
30 public:
31 struct Parameters {
33 double sf_p{0.05};
35 double sf_i{5.0};
39 double sf_sp_p_weight{0.0};
41 double att_lpf_tc{0.1};
43 double roll_limit_deg{180.0};
45 double pitch_limit_deg{90.0};
48 double cam_vfov{30.0};
51 double cam_hfov{0.0};
53 double cam_pitch{0.0};
58 double thrust_min{0.0};
60 double thrust_max{1.0};
63 double thrust_los_x_max{std::numeric_limits<double>::infinity()};
70 };
71
72 struct State {
74 Eigen::Matrix3d los_to_enu{Eigen::Matrix3d::Identity()};
76 Eigen::Vector3d sf_sp_enu{Eigen::Vector3d::Zero()};
79 Eigen::Vector3d sf_sp_los{Eigen::Vector3d::Zero()};
81 Eigen::Vector3d sf_los{Eigen::Vector3d::Zero()};
83 Eigen::Vector3d thrust_sp_enu{Eigen::Vector3d::Zero()};
85 Eigen::Vector3d thrust_sp_los{Eigen::Vector3d::Zero()};
89 Eigen::Quaterniond attitude_sp_enu{Eigen::Quaterniond::Identity()};
93 double thrust_command_abs{0.0};
96 Eigen::Vector3d sf_los_prev{Eigen::Vector3d::Zero()};
99 Eigen::Vector3d sf_sp_los_prev{Eigen::Vector3d::Zero()};
101 bool initialized{false};
102 };
103
108 explicit LosSpecificForceController(const Parameters& parameters);
109
114 void setParameters(const Parameters& parameters);
115
129 void setInitialThrustNormalized(double thrust_normalized);
130
142 void update(float dt_s, bool hold, double max_thrust_rate_los_x, const Eigen::Vector3d& los,
143 const Eigen::Vector3d& acc_sp_enu, const Eigen::Quaterniond& attitude_enu,
144 const Eigen::Vector3d& specific_force_flu);
145
149 const State& state() const;
150
151 private:
152 std::shared_ptr<LosSpecificForceControllerImpl> _impl;
153};
154
155} // namespace auterion
Implementation details for the LosSpecificForceController class.
Line-of-Sight (LOS) attitude controller for multicopters.
Definition los_specific_force_controller.hpp:29
LosSpecificForceController(const Parameters &parameters)
Constructs a LosSpecificForceController with the given parameters.
const State & state() const
Returns a const reference to the current controller state.
void setParameters(const Parameters &parameters)
Updates the controller parameters.
void update(float dt_s, bool hold, double max_thrust_rate_los_x, const Eigen::Vector3d &los, const Eigen::Vector3d &acc_sp_enu, const Eigen::Quaterniond &attitude_enu, const Eigen::Vector3d &specific_force_flu)
Runs one update step of the LOS controller.
void setInitialThrustNormalized(double thrust_normalized)
Seed the initial normalized thrust for a glitch-free takeover.
Definition los_specific_force_controller.hpp:31
double thrust_min
Minimum normalized thrust command output [0, 1].
Definition los_specific_force_controller.hpp:58
double sf_sp_p_weight
Definition los_specific_force_controller.hpp:39
double hover_thrust_normalized
Definition los_specific_force_controller.hpp:56
double cam_pitch
Camera pitch angle relative to the drone body, positive up [deg].
Definition los_specific_force_controller.hpp:53
double sf_i
Integral gain of the specific-force controller.
Definition los_specific_force_controller.hpp:35
double att_lpf_tc
Time constant of the attitude setpoint low-pass filter [s]. Set to 0 to disable.
Definition los_specific_force_controller.hpp:41
double thrust_max
Maximum normalized thrust command output [0, 1].
Definition los_specific_force_controller.hpp:60
double cam_vfov
Definition los_specific_force_controller.hpp:48
double sf_p
Proportional gain of the specific-force controller.
Definition los_specific_force_controller.hpp:33
double thrust_los_x_max
Definition los_specific_force_controller.hpp:63
double roll_limit_deg
Maximum roll angle [deg]. Set to 180 to disable.
Definition los_specific_force_controller.hpp:43
double roll_max_rate_deg_per_s
Maximum roll rate in body frame [deg/s]. Set to 0 to disable.
Definition los_specific_force_controller.hpp:67
double yaw_max_rate_deg_per_s
Maximum yaw rate in body frame [deg/s]. Set to infinity to disable.
Definition los_specific_force_controller.hpp:69
double pitch_limit_deg
Maximum pitch angle [deg]. Set to 90 to disable.
Definition los_specific_force_controller.hpp:45
double tilt_max_rate_deg_per_s
Maximum tilt rate [deg/s]. Limits how fast the thrust vector can tilt.
Definition los_specific_force_controller.hpp:65
double cam_hfov
Definition los_specific_force_controller.hpp:51
Definition los_specific_force_controller.hpp:72
Eigen::Vector3d sf_los_prev
Definition los_specific_force_controller.hpp:96
double thrust_command_normalized
Normalized thrust command in [0, 1].
Definition los_specific_force_controller.hpp:91
double desired_thrust_rate_los_x
Thrust rate being applied along the LOS x-axis [normalized/s].
Definition los_specific_force_controller.hpp:87
Eigen::Vector3d thrust_sp_enu
Thrust setpoint in ENU frame [normalized].
Definition los_specific_force_controller.hpp:83
Eigen::Matrix3d los_to_enu
Rotation matrix from LOS frame to ENU frame.
Definition los_specific_force_controller.hpp:74
Eigen::Vector3d sf_sp_los
Definition los_specific_force_controller.hpp:79
double thrust_command_abs
Absolute thrust command [normalized, unbounded before hover thrust scaling].
Definition los_specific_force_controller.hpp:93
bool initialized
False until the first call to update(), after which the controller is fully initialized.
Definition los_specific_force_controller.hpp:101
Eigen::Vector3d sf_sp_enu
Specific force setpoint in ENU frame [m/s²].
Definition los_specific_force_controller.hpp:76
Eigen::Vector3d sf_los
Measured specific force in LOS frame [m/s²]. X component is always 0.
Definition los_specific_force_controller.hpp:81
Eigen::Vector3d thrust_sp_los
Thrust setpoint in LOS frame [normalized].
Definition los_specific_force_controller.hpp:85
Eigen::Vector3d sf_sp_los_prev
Definition los_specific_force_controller.hpp:99
Eigen::Quaterniond attitude_sp_enu
Attitude setpoint in ENU frame (after filtering and limiting).
Definition los_specific_force_controller.hpp:89