Program Listing for File attitude_dynamics.h

Return to documentation for file (dynamics/attitude_dynamics.h)

#pragma once
#include "lupnt/dynamics/dynamics.h"
#include "lupnt/interfaces/yaml.h"
#include "lupnt/states/state.h"

namespace lupnt {
  class AttitudeDynamics : public Dynamics {
  public:
    AttitudeDynamics() = default;

    AttitudeDynamics(Config& config);

    StateType GetStateType() const override { return Attitude::TYPE; }

    using Dynamics::Propagate;

    virtual State Propagate(const State& qw, Real t0, Real tf, const State& rv);
  };

  class FixedAttitudeDynamics : public AttitudeDynamics {
  public:
    FixedAttitudeDynamics() = default;

    FixedAttitudeDynamics(Config& config);

    using AttitudeDynamics::Propagate;

    State Propagate(const State& qw, Real t0, Real tf, const State* u = nullptr) override;

    StateType GetStateType() const override { return Attitude::TYPE; }
  };

  class FixedPointingDynamics : public AttitudeDynamics {
  private:
    Axis primary_axis_, secondary_axis_;
    BodyId primary_body_id_, secondary_body_id_;

  public:
    FixedPointingDynamics() = default;

    FixedPointingDynamics(Config& config);

    void SetPrimaryPointing(Axis axis, BodyId body_id) {
      primary_axis_ = axis;
      primary_body_id_ = body_id;
    }

    void SetSecondaryPointing(Axis axis, BodyId body_id) {
      secondary_axis_ = axis;
      secondary_body_id_ = body_id;
    }

    using AttitudeDynamics::Propagate;

    State Propagate(const State& qw, Real t0, Real tf, const State& rv) override;

    State Propagate(const State& qw, Real t0, Real tf, const State* u) override;

    StateType GetStateType() const override { return Attitude::TYPE; }
  };
}  // namespace lupnt