Program Listing for File surface_dynamics.h¶
↰ Return to documentation for file (dynamics/surface_dynamics.h)
#pragma once
#include <yaml-cpp/yaml.h>
#include <random>
#include "lupnt/dynamics/dynamics.h"
#include "lupnt/states/state.h"
namespace lupnt {
// ****************************************************************************
// Dynamics for Surface Objects (ground stations, rovers, etc.)
// ****************************************************************************
class StaticDynamics : public Dynamics {
public:
StaticDynamics();
StaticDynamics(Config& config);
State Propagate(const State& x0, Real t0, Real tf, const State* u = nullptr) override;
StateType GetStateType() const override { return State::TYPE; }
};
class SurfaceDynamics2D : public Dynamics {
protected:
int seed_ = 0;
bool add_noise_ = false;
Mat3d Q_ = Mat3d::Zero(); // [km^2/s^2, km^2/s^2, rad^2/s^2]
Ptr<std::mt19937> rng_ = nullptr;
public:
SurfaceDynamics2D();
SurfaceDynamics2D(Config& config);
using Dynamics::Propagate;
State Propagate(const State& x0, Real t0, Real tf, const State* u = nullptr) override;
void SetSeed(int seed) {
seed_ = seed;
rng_ = MakePtr<std::mt19937>(seed_);
add_noise_ = true;
}
int GetSeed() const { return seed_; }
void SetQ(const Mat3d& Q) {
Q_ = Q;
add_noise_ = true;
}
Mat3d GetQ() const { return Q_; }
StateType GetStateType() const override { return SurfaceState2D::TYPE; }
};
} // namespace lupnt