<commit_before>#pragma once

#include "aerial_autonomy/common/math.h"
#include "aerial_autonomy/controllers/base_controller.h"
#include "aerial_autonomy/types/particle_state.h"
#include "aerial_autonomy/types/qrotor_backstepping_control.h"
#include "aerial_autonomy/types/qrotor_backstepping_state.h"
#include "aerial_autonomy/types/reference_trajectory.h"
#include "aerial_autonomy/types/snap.h"
#include "qrotor_backstepping_controller_config.pb.h"

#include <Eigen/Dense>
#include <memory>

/**
 * @brief A trajectory-tracking backstepping controller for a quadrotor.
 * Based on <Kobilarov, "Trajectory tracking of a class of underactuated systems
 * with
 * external disturbances", American Control Conference, 2013>
 */
class QrotorBacksteppingController
    : public Controller<
          std::pair<double, QrotorBacksteppingState>,
          std::shared_ptr<ReferenceTrajectory<ParticleState, Snap>>,
          QrotorBacksteppingControl> {
public:
  using Vector6d = Eigen::Matrix<double, 6, 1>;
  using Matrix63d = Eigen::Matrix<double, 6, 3>;
  using Matrix6d = Eigen::Matrix<double, 6, 6>;
  using Matrix36d = Eigen::Matrix<double, 3, 6>;

  /**
  * @brief Constructor
  * @param config Controller config
  */<commit_msg>Include log.h for data log<commit_after>#pragma once

#include "aerial_autonomy/common/math.h"
#include "aerial_autonomy/controllers/base_controller.h"
#include "aerial_autonomy/types/particle_state.h"
#include "aerial_autonomy/types/qrotor_backstepping_control.h"
#include "aerial_autonomy/types/qrotor_backstepping_state.h"
#include "aerial_autonomy/types/reference_trajectory.h"
#include "aerial_autonomy/types/snap.h"
#include "qrotor_backstepping_controller_config.pb.h"

#include <Eigen/Dense>
#include <aerial_autonomy/log/log.h>
#include <memory>

/**
 * @brief A trajectory-tracking backstepping controller for a quadrotor.
 * Based on <Kobilarov, "Trajectory tracking of a class of underactuated systems
 * with
 * external disturbances", American Control Conference, 2013>
 */
class QrotorBacksteppingController
    : public Controller<
          std::pair<double, QrotorBacksteppingState>,
          std::shared_ptr<ReferenceTrajectory<ParticleState, Snap>>,
          QrotorBacksteppingControl> {
public:
  using Vector6d = Eigen::Matrix<double, 6, 1>;
  using Matrix63d = Eigen::Matrix<double, 6, 3>;
  using Matrix6d = Eigen::Matrix<double, 6, 6>;
  using Matrix36d = Eigen::Matrix<double, 3, 6>;

  /**
  * @brief Constructor
  * @param config Controller config
  */
{'fraction_non_alphanumeric': 0.11177406523468576, 'fraction_numerical': 0.014319809069212411, 'mean_word_length': 5.498708010335918, 'pattern_counts': {'":': 0, '<': 26, '<?xml version=': 0, '>': 26, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4045194', 'n_tokens_mistral': 871, 'n_tokens_neox': 822, 'n_words': 174}