Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <towr/constraints/time_discretization_constraint.h>
00031
00032 #include <cmath>
00033
00034 namespace towr {
00035
00036
00037 TimeDiscretizationConstraint::TimeDiscretizationConstraint (double T, double dt,
00038 std::string name)
00039 :ConstraintSet(kSpecifyLater, name)
00040 {
00041 double t = 0.0;
00042 dts_ = {t};
00043
00044 for (int i=0; i<floor(T/dt); ++i) {
00045 t += dt;
00046 dts_.push_back(t);
00047 }
00048
00049 dts_.push_back(T);
00050 }
00051
00052 TimeDiscretizationConstraint::TimeDiscretizationConstraint (const VecTimes& times,
00053 std::string name)
00054 :ConstraintSet(kSpecifyLater, name)
00055 {
00056 dts_ = times;
00057 }
00058
00059 int
00060 TimeDiscretizationConstraint::GetNumberOfNodes () const
00061 {
00062 return dts_.size();
00063 }
00064
00065 TimeDiscretizationConstraint::VectorXd
00066 TimeDiscretizationConstraint::GetValues () const
00067 {
00068 VectorXd g = VectorXd::Zero(GetRows());
00069
00070 int k = 0;
00071 for (double t : dts_)
00072 UpdateConstraintAtInstance(t, k++, g);
00073
00074 return g;
00075 }
00076
00077 TimeDiscretizationConstraint::VecBound
00078 TimeDiscretizationConstraint::GetBounds () const
00079 {
00080 VecBound bounds(GetRows());
00081
00082 int k = 0;
00083 for (double t : dts_)
00084 UpdateBoundsAtInstance(t, k++, bounds);
00085
00086 return bounds;
00087 }
00088
00089 void
00090 TimeDiscretizationConstraint::FillJacobianBlock (std::string var_set,
00091 Jacobian& jac) const
00092 {
00093 int k = 0;
00094 for (double t : dts_)
00095 UpdateJacobianAtInstance(t, k++, var_set, jac);
00096 }
00097
00098 }
00099
00100