15 template<
int StateDim,
int InputDim>
38 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
46 static_assert(StateDim > 0,
"[DDP] Template param StateDim should be positive.");
47 static_assert(InputDim >= 0 || InputDim == Eigen::Dynamic,
48 "[DDP] Template param InputDim should be non-negative or Eigen::Dynamic.");
63 if constexpr(InputDim == Eigen::Dynamic)
65 throw std::runtime_error(
"Since input dimension is dynamic, time must be passed to inputDim().");
77 if constexpr(InputDim == Eigen::Dynamic)
79 throw std::runtime_error(
"inputDim(t) must be overridden if input dimension is dynamic.");
88 inline double dt()
const
126 Eigen::Ref<StateStateDimMatrix> state_eq_deriv_x,
127 Eigen::Ref<StateInputDimMatrix> state_eq_deriv_u)
const = 0;
142 Eigen::Ref<StateStateDimMatrix> state_eq_deriv_x,
143 Eigen::Ref<StateInputDimMatrix> state_eq_deriv_u,
144 std::vector<StateStateDimMatrix> & state_eq_deriv_xx,
145 std::vector<InputInputDimMatrix> & state_eq_deriv_uu,
146 std::vector<StateInputDimMatrix> & state_eq_deriv_xu)
const = 0;
158 Eigen::Ref<StateDimVector> running_cost_deriv_x,
159 Eigen::Ref<InputDimVector> running_cost_deriv_u)
const = 0;
174 Eigen::Ref<StateDimVector> running_cost_deriv_x,
175 Eigen::Ref<InputDimVector> running_cost_deriv_u,
176 Eigen::Ref<StateStateDimMatrix> running_cost_deriv_xx,
177 Eigen::Ref<InputInputDimMatrix> running_cost_deriv_uu,
178 Eigen::Ref<StateInputDimMatrix> running_cost_deriv_xu)
const = 0;
187 Eigen::Ref<StateDimVector> terminal_cost_deriv_x)
const = 0;
197 Eigen::Ref<StateDimVector> terminal_cost_deriv_x,
198 Eigen::Ref<StateStateDimMatrix> terminal_cost_deriv_xx)
const = 0;
virtual void calcRunningCostDeriv(double t, const StateDimVector &x, const InputDimVector &u, Eigen::Ref< StateDimVector > running_cost_deriv_x, Eigen::Ref< InputDimVector > running_cost_deriv_u) const =0
Calculate first-order derivatives of running cost.
virtual StateDimVector stateEq(double t, const StateDimVector &x, const InputDimVector &u) const =0
Calculate discrete state equation.
Eigen::Matrix< double, InputDim, 1 > InputDimVector
Type of vector of input dimension.
virtual void calcRunningCostDeriv(double t, const StateDimVector &x, const InputDimVector &u, Eigen::Ref< StateDimVector > running_cost_deriv_x, Eigen::Ref< InputDimVector > running_cost_deriv_u, Eigen::Ref< StateStateDimMatrix > running_cost_deriv_xx, Eigen::Ref< InputInputDimMatrix > running_cost_deriv_uu, Eigen::Ref< StateInputDimMatrix > running_cost_deriv_xu) const =0
Calculate first-order and second-order derivatives of running cost.
virtual double terminalCost(double t, const StateDimVector &x) const =0
Calculate terminal cost.
Eigen::Matrix< double, InputDim, InputDim > InputInputDimMatrix
Type of matrix of input x input dimension.
virtual void calcTerminalCostDeriv(double t, const StateDimVector &x, Eigen::Ref< StateDimVector > terminal_cost_deriv_x) const =0
Calculate first-order derivatives of terminal cost.
double dt() const
Gets the discretization timestep [sec].
virtual int inputDim(double) const
Gets the input dimension.
Eigen::Matrix< double, StateDim, 1 > StateDimVector
Type of vector of state dimension.
Eigen::Matrix< double, InputDim, StateDim > InputStateDimMatrix
Type of matrix of input x state dimension.
virtual double runningCost(double t, const StateDimVector &x, const InputDimVector &u) const =0
Calculate running cost.
Eigen::Matrix< double, StateDim, StateDim > StateStateDimMatrix
Type of matrix of state x state dimension.
static constexpr int stateDim()
Gets the state dimension.
virtual int inputDim() const
Gets the input dimension.
virtual void calcStateEqDeriv(double t, const StateDimVector &x, const InputDimVector &u, Eigen::Ref< StateStateDimMatrix > state_eq_deriv_x, Eigen::Ref< StateInputDimMatrix > state_eq_deriv_u, std::vector< StateStateDimMatrix > &state_eq_deriv_xx, std::vector< InputInputDimMatrix > &state_eq_deriv_uu, std::vector< StateInputDimMatrix > &state_eq_deriv_xu) const =0
Calculate first-order and second-order derivatives of discrete state equation.
virtual void calcStateEqDeriv(double t, const StateDimVector &x, const InputDimVector &u, Eigen::Ref< StateStateDimMatrix > state_eq_deriv_x, Eigen::Ref< StateInputDimMatrix > state_eq_deriv_u) const =0
Calculate first-order derivatives of discrete state equation.
EIGEN_MAKE_ALIGNED_OPERATOR_NEW DDPProblem(double dt)
Constructor.
const double dt_
Discretization timestep [sec].
virtual void calcTerminalCostDeriv(double t, const StateDimVector &x, Eigen::Ref< StateDimVector > terminal_cost_deriv_x, Eigen::Ref< StateStateDimMatrix > terminal_cost_deriv_xx) const =0
Calculate first-order and second-order derivatives of terminal cost.
Eigen::Matrix< double, StateDim, InputDim > StateInputDimMatrix
Type of matrix of state x input dimension.