39 typedef std::shared_ptr<PendulumFactor1> shared_ptr;
43 : Base(
noiseModel::Constrained::All(1,
std::abs(mu)), k1, k, velKey), h_(h) {}
46 gtsam::NonlinearFactor::shared_ptr
clone()
const override {
51 Vector
evaluateError(
const double& qk1,
const double& qk,
const double& v,
55 if (H1) *H1 = -Matrix::Identity(p,p);
56 if (H2) *H2 = Matrix::Identity(p,p);
57 if (H3) *H3 = Matrix::Identity(p,p)*h_;
58 return (Vector(1) << qk+v*h_-qk1).finished();
89 typedef std::shared_ptr<PendulumFactor2 > shared_ptr;
93 : Base(
noiseModel::Constrained::All(1,
std::abs(mu)), vk1, vk, qkey), h_(h), g_(g), r_(r) {}
96 gtsam::NonlinearFactor::shared_ptr
clone()
const override {
101 Vector
evaluateError(
const double & vk1,
const double & vk,
const double & q,
105 if (H1) *H1 = -Matrix::Identity(p,p);
106 if (H2) *H2 = Matrix::Identity(p,p);
107 if (H3) *H3 = -Matrix::Identity(p,p)*h_*g_/r_*cos(q);
108 return (Vector(1) << vk - h_ * g_ / r_ * sin(q) - vk1).finished();
140 typedef std::shared_ptr<PendulumFactorPk > shared_ptr;
144 double h,
double m = 1.0,
double r = 1.0,
double g = 9.81,
double alpha = 0.0,
double mu = 1000.0)
145 : Base(
noiseModel::Constrained::All(1,
std::abs(mu)), pKey, qKey, qKey1),
146 h_(h), m_(m), r_(r), g_(g), alpha_(alpha) {}
149 gtsam::NonlinearFactor::shared_ptr
clone()
const override {
154 Vector
evaluateError(
const double & pk,
const double & qk,
const double & qk1,
159 double qmid = (1-alpha_)*qk + alpha_*qk1;
160 double mr2_h = 1/h_*m_*r_*r_;
161 double mgrh = m_*g_*r_*h_;
163 if (H1) *H1 = -Matrix::Identity(p,p);
164 if (H2) *H2 = Matrix::Identity(p,p)*(-mr2_h + mgrh*(1-alpha_)*(1-alpha_)*cos(qmid));
165 if (H3) *H3 = Matrix::Identity(p,p)*( mr2_h + mgrh*(1-alpha_)*(alpha_)*cos(qmid));
167 return (Vector(1) << mr2_h * (qk1 - qk) + mgrh * (1 - alpha_) * sin(qmid) - pk).finished();
198 typedef std::shared_ptr<PendulumFactorPk1 > shared_ptr;
202 double h,
double m = 1.0,
double r = 1.0,
double g = 9.81,
double alpha = 0.0,
double mu = 1000.0)
203 : Base(
noiseModel::Constrained::All(1,
std::abs(mu)), pKey1, qKey, qKey1),
204 h_(h), m_(m), r_(r), g_(g), alpha_(alpha) {}
207 gtsam::NonlinearFactor::shared_ptr
clone()
const override {
212 Vector
evaluateError(
const double & pk1,
const double & qk,
const double & qk1,
217 double qmid = (1-alpha_)*qk + alpha_*qk1;
218 double mr2_h = 1/h_*m_*r_*r_;
219 double mgrh = m_*g_*r_*h_;
221 if (H1) *H1 = -Matrix::Identity(p,p);
222 if (H2) *H2 = Matrix::Identity(p,p)*(-mr2_h - mgrh*(1-alpha_)*alpha_*cos(qmid));
223 if (H3) *H3 = Matrix::Identity(p,p)*( mr2_h - mgrh*alpha_*alpha_*cos(qmid));
225 return (Vector(1) << mr2_h * (qk1 - qk) - mgrh * alpha_ * sin(qmid) - pk1).finished();
double m_
time step
Definition: Pendulum.h:130
double alpha_
gravity
Definition: Pendulum.h:191
Definition: NonlinearFactor.h:431
double alpha_
gravity
Definition: Pendulum.h:133
Definition: Pendulum.h:23
PendulumFactor1()
Definition: Pendulum.h:30
PendulumFactor2()
Definition: Pendulum.h:78
virtual Vector evaluateError(const ValueTypes &... x, OptionalMatrixTypeT< ValueTypes >... H) const=0
Definition: NonlinearFactor.h:68
double g_
length
Definition: Pendulum.h:190
double g_
length
Definition: Pendulum.h:132
Definition: Pendulum.h:120
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition: Pendulum.h:149
Definition: Pendulum.h:71
PendulumFactorPk1()
Definition: Pendulum.h:185
PendulumFactorPk1(Key pKey1, Key qKey, Key qKey1, double h, double m=1.0, double r=1.0, double g=9.81, double alpha=0.0, double mu=1000.0)
Constructor.
Definition: Pendulum.h:201
double m_
time step
Definition: Pendulum.h:188
double r_
mass
Definition: Pendulum.h:131
PendulumFactor1(Key k1, Key k, Key velKey, double h, double mu=1000.0)
Constructor. k1: q_{k+1}, k: q_k, velKey: velocity variable depending on the chosen method...
Definition: Pendulum.h:42
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition: NonlinearFactor.h:245
Matrix * OptionalMatrixType
Definition: NonlinearFactor.h:55
Vector evaluateError(const double &pk1, const double &qk, const double &qk1, OptionalMatrixType H1, OptionalMatrixType H2, OptionalMatrixType H3) const override
Definition: Pendulum.h:212
PendulumFactor2(Key vk1, Key vk, Key qkey, double h, double r=1.0, double g=9.81, double mu=1000.0)
Constructor. vk1: v_{k+1}, vk: v_k, qkey: q's key depending on the chosen method, h: time step...
Definition: Pendulum.h:92
Vector evaluateError(const double &vk1, const double &vk, const double &q, OptionalMatrixType H1, OptionalMatrixType H2, OptionalMatrixType H3) const override
Definition: Pendulum.h:101
double r_
mass
Definition: Pendulum.h:189
Vector evaluateError(const double &qk1, const double &qk, const double &v, OptionalMatrixType H1, OptionalMatrixType H2, OptionalMatrixType H3) const override
Definition: Pendulum.h:51
Definition: chartTesting.h:28
Definition: Pendulum.h:178
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition: Pendulum.h:207
PendulumFactorPk(Key pKey, Key qKey, Key qKey1, double h, double m=1.0, double r=1.0, double g=9.81, double alpha=0.0, double mu=1000.0)
Constructor.
Definition: Pendulum.h:143
Non-linear factor base classes.
PendulumFactorPk()
Definition: Pendulum.h:127
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition: Pendulum.h:96
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:102
Vector evaluateError(const double &pk, const double &qk, const double &qk1, OptionalMatrixType H1, OptionalMatrixType H2, OptionalMatrixType H3) const override
Definition: Pendulum.h:154
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition: Pendulum.h:46