mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
rigidBodyDynamics: Simplify handling of quaternions by maintaining a unit quaternion in the joint state field 'q'
'w' is now obtained from 'v' using the relation w = sqrt(1 - |sqr(v)|) and 'v' is stored in the joint state field 'q' and integrated in the usual manner but corrected using quaternion transformations.
This commit is contained in:
@ -64,8 +64,7 @@ int main(int argc, char *argv[])
|
|||||||
sphericalJoint.joints()[1]
|
sphericalJoint.joints()[1]
|
||||||
(
|
(
|
||||||
quaternion(quaternion::ZYX, vector(0.3, 0, 0)),
|
quaternion(quaternion::ZYX, vector(0.3, 0, 0)),
|
||||||
sphericalJoint.state().q(),
|
sphericalJoint.state().q()
|
||||||
sphericalJoint.state().w()
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Set the gravitational acceleration
|
// Set the gravitational acceleration
|
||||||
@ -90,8 +89,7 @@ int main(int argc, char *argv[])
|
|||||||
<< t << " "
|
<< t << " "
|
||||||
<< sphericalJoint.joints()[1]
|
<< sphericalJoint.joints()[1]
|
||||||
(
|
(
|
||||||
sphericalJoint.state().q(),
|
sphericalJoint.state().q()
|
||||||
sphericalJoint.state().w()
|
|
||||||
).eulerAngles(quaternion::ZYX).x()
|
).eulerAngles(quaternion::ZYX).x()
|
||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -85,7 +85,6 @@ void Foam::RBD::joints::Pa::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -92,7 +92,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
|||||||
@ -84,7 +84,6 @@ void Foam::RBD::joints::Px::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -92,7 +92,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -88,7 +88,6 @@ void Foam::RBD::joints::Pxyz::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -92,7 +92,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -84,7 +84,6 @@ void Foam::RBD::joints::Py::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -92,7 +92,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -84,7 +84,6 @@ void Foam::RBD::joints::Pz::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -92,7 +92,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -85,7 +85,6 @@ void Foam::RBD::joints::Ra::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -92,7 +92,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
|||||||
@ -94,11 +94,10 @@ void Foam::RBD::joints::Rs::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
J.X.E() = operator()(q, w).R().T();
|
J.X.E() = operator()(q).R().T();
|
||||||
J.X.r() = Zero;
|
J.X.r() = Zero;
|
||||||
|
|
||||||
J.S = Zero;
|
J.S = Zero;
|
||||||
|
|||||||
@ -97,7 +97,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -84,7 +84,6 @@ void Foam::RBD::joints::Rx::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -92,7 +92,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -88,7 +88,6 @@ void Foam::RBD::joints::Rxyz::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -93,7 +93,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -84,7 +84,6 @@ void Foam::RBD::joints::Ry::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -92,7 +92,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -88,7 +88,6 @@ void Foam::RBD::joints::Ryxz::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -93,7 +93,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -84,7 +84,6 @@ void Foam::RBD::joints::Rz::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -92,7 +92,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -88,7 +88,6 @@ void Foam::RBD::joints::Rzyx::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -93,7 +93,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -96,11 +96,10 @@ void Foam::RBD::joints::composite::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
last().jcalc(J, q, w, qDot);
|
last().jcalc(J, q, qDot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -109,7 +109,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
|||||||
@ -236,7 +236,6 @@ public:
|
|||||||
(
|
(
|
||||||
XSvc& J,
|
XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const = 0;
|
) const = 0;
|
||||||
|
|
||||||
@ -250,8 +249,7 @@ public:
|
|||||||
// if it uses a quaternion representation for rotation
|
// if it uses a quaternion representation for rotation
|
||||||
inline quaternion operator()
|
inline quaternion operator()
|
||||||
(
|
(
|
||||||
const scalarField& q,
|
const scalarField& q
|
||||||
const scalarField& w
|
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Set the state quaternion for this joint
|
//- Set the state quaternion for this joint
|
||||||
@ -259,8 +257,7 @@ public:
|
|||||||
inline void operator()
|
inline void operator()
|
||||||
(
|
(
|
||||||
const quaternion& quat,
|
const quaternion& quat,
|
||||||
scalarField& q,
|
scalarField& q
|
||||||
scalarField& w
|
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -71,8 +71,7 @@ inline const Foam::List<Foam::spatialVector>& Foam::RBD::joint::S() const
|
|||||||
|
|
||||||
inline Foam::quaternion Foam::RBD::joint::operator()
|
inline Foam::quaternion Foam::RBD::joint::operator()
|
||||||
(
|
(
|
||||||
const scalarField& q,
|
const scalarField& q
|
||||||
const scalarField& w
|
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
if (nw() != 1)
|
if (nw() != 1)
|
||||||
@ -82,15 +81,14 @@ inline Foam::quaternion Foam::RBD::joint::operator()
|
|||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
return quaternion(w[wIndex_], q.block<vector>(qIndex_));
|
return quaternion::unit(q.block<vector>(qIndex_));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void Foam::RBD::joint::operator()
|
inline void Foam::RBD::joint::operator()
|
||||||
(
|
(
|
||||||
const quaternion& quat,
|
const quaternion& quat,
|
||||||
scalarField& q,
|
scalarField& q
|
||||||
scalarField& w
|
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
if (nw() != 1)
|
if (nw() != 1)
|
||||||
@ -100,7 +98,6 @@ inline void Foam::RBD::joint::operator()
|
|||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
w[wIndex_] = quat.w();
|
|
||||||
q[qIndex_] = quat.v().x();
|
q[qIndex_] = quat.v().x();
|
||||||
q[qIndex_+1] = quat.v().y();
|
q[qIndex_+1] = quat.v().y();
|
||||||
q[qIndex_+2] = quat.v().z();
|
q[qIndex_+2] = quat.v().z();
|
||||||
|
|||||||
@ -80,7 +80,6 @@ void Foam::RBD::joints::null::jcalc
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -92,7 +92,6 @@ public:
|
|||||||
(
|
(
|
||||||
joint::XSvc& J,
|
joint::XSvc& J,
|
||||||
const scalarField& q,
|
const scalarField& q,
|
||||||
const scalarField& w,
|
|
||||||
const scalarField& qDot
|
const scalarField& qDot
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -54,7 +54,6 @@ void Foam::RBD::rigidBodyModel::forwardDynamics
|
|||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const scalarField& q = state.q();
|
const scalarField& q = state.q();
|
||||||
const scalarField& w = state.w();
|
|
||||||
const scalarField& qDot = state.qDot();
|
const scalarField& qDot = state.qDot();
|
||||||
scalarField& qDdot = state.qDdot();
|
scalarField& qDdot = state.qDdot();
|
||||||
|
|
||||||
@ -71,7 +70,7 @@ void Foam::RBD::rigidBodyModel::forwardDynamics
|
|||||||
for (label i=1; i<nBodies(); i++)
|
for (label i=1; i<nBodies(); i++)
|
||||||
{
|
{
|
||||||
const joint& jnt = joints()[i];
|
const joint& jnt = joints()[i];
|
||||||
jnt.jcalc(J, q, w, qDot);
|
jnt.jcalc(J, q, qDot);
|
||||||
|
|
||||||
S_[i] = J.S;
|
S_[i] = J.S;
|
||||||
S1_[i] = J.S1;
|
S1_[i] = J.S1;
|
||||||
@ -208,7 +207,6 @@ void Foam::RBD::rigidBodyModel::forwardDynamicsCorrection
|
|||||||
DebugInFunction << endl;
|
DebugInFunction << endl;
|
||||||
|
|
||||||
const scalarField& q = state.q();
|
const scalarField& q = state.q();
|
||||||
const scalarField& w = state.w();
|
|
||||||
const scalarField& qDot = state.qDot();
|
const scalarField& qDot = state.qDot();
|
||||||
const scalarField& qDdot = state.qDdot();
|
const scalarField& qDdot = state.qDdot();
|
||||||
|
|
||||||
@ -223,7 +221,7 @@ void Foam::RBD::rigidBodyModel::forwardDynamicsCorrection
|
|||||||
const joint& jnt = joints()[i];
|
const joint& jnt = joints()[i];
|
||||||
const label qi = jnt.qIndex();
|
const label qi = jnt.qIndex();
|
||||||
|
|
||||||
jnt.jcalc(J, q, w, qDot);
|
jnt.jcalc(J, q, qDot);
|
||||||
|
|
||||||
S_[i] = J.S;
|
S_[i] = J.S;
|
||||||
S1_[i] = J.S1;
|
S1_[i] = J.S1;
|
||||||
|
|||||||
@ -33,7 +33,6 @@ Foam::RBD::rigidBodyModelState::rigidBodyModelState
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
q_(model.nDoF(), Zero),
|
q_(model.nDoF(), Zero),
|
||||||
w_(model.nw(), 1),
|
|
||||||
qDot_(model.nDoF(), Zero),
|
qDot_(model.nDoF(), Zero),
|
||||||
qDdot_(model.nDoF(), Zero)
|
qDdot_(model.nDoF(), Zero)
|
||||||
{}
|
{}
|
||||||
@ -46,7 +45,6 @@ Foam::RBD::rigidBodyModelState::rigidBodyModelState
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
q_(dict.lookupOrDefault("q", scalarField(model.nDoF(), Zero))),
|
q_(dict.lookupOrDefault("q", scalarField(model.nDoF(), Zero))),
|
||||||
w_(dict.lookupOrDefault("w", scalarField(model.nw(), 1))),
|
|
||||||
qDot_(dict.lookupOrDefault("qDot", scalarField(model.nDoF(), Zero))),
|
qDot_(dict.lookupOrDefault("qDot", scalarField(model.nDoF(), Zero))),
|
||||||
qDdot_(dict.lookupOrDefault("qDdot", scalarField(model.nDoF(), Zero)))
|
qDdot_(dict.lookupOrDefault("qDdot", scalarField(model.nDoF(), Zero)))
|
||||||
{}
|
{}
|
||||||
|
|||||||
@ -70,9 +70,6 @@ class rigidBodyModelState
|
|||||||
//- Joint position and orientation
|
//- Joint position and orientation
|
||||||
scalarField q_;
|
scalarField q_;
|
||||||
|
|
||||||
//- Joint quaternion
|
|
||||||
scalarField w_;
|
|
||||||
|
|
||||||
//- Joint velocity
|
//- Joint velocity
|
||||||
scalarField qDot_;
|
scalarField qDot_;
|
||||||
|
|
||||||
@ -103,7 +100,6 @@ public:
|
|||||||
inline const scalarField& q() const;
|
inline const scalarField& q() const;
|
||||||
|
|
||||||
//- Return access to the joint quaternion
|
//- Return access to the joint quaternion
|
||||||
inline const scalarField& w() const;
|
|
||||||
|
|
||||||
//- Return access to the joint velocity
|
//- Return access to the joint velocity
|
||||||
inline const scalarField& qDot() const;
|
inline const scalarField& qDot() const;
|
||||||
@ -118,7 +114,6 @@ public:
|
|||||||
inline scalarField& q();
|
inline scalarField& q();
|
||||||
|
|
||||||
//- Return access to the joint quaternion
|
//- Return access to the joint quaternion
|
||||||
inline scalarField& w();
|
|
||||||
|
|
||||||
//- Return access to the joint velocity
|
//- Return access to the joint velocity
|
||||||
inline scalarField& qDot();
|
inline scalarField& qDot();
|
||||||
|
|||||||
@ -31,12 +31,6 @@ inline const Foam::scalarField& Foam::RBD::rigidBodyModelState::q() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline const Foam::scalarField& Foam::RBD::rigidBodyModelState::w() const
|
|
||||||
{
|
|
||||||
return w_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline const Foam::scalarField& Foam::RBD::rigidBodyModelState::qDot() const
|
inline const Foam::scalarField& Foam::RBD::rigidBodyModelState::qDot() const
|
||||||
{
|
{
|
||||||
return qDot_;
|
return qDot_;
|
||||||
@ -55,12 +49,6 @@ inline Foam::scalarField& Foam::RBD::rigidBodyModelState::q()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::scalarField& Foam::RBD::rigidBodyModelState::w()
|
|
||||||
{
|
|
||||||
return w_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline Foam::scalarField& Foam::RBD::rigidBodyModelState::qDot()
|
inline Foam::scalarField& Foam::RBD::rigidBodyModelState::qDot()
|
||||||
{
|
{
|
||||||
return qDot_;
|
return qDot_;
|
||||||
|
|||||||
@ -31,7 +31,6 @@ License
|
|||||||
void Foam::RBD::rigidBodyModelState::write(dictionary& dict) const
|
void Foam::RBD::rigidBodyModelState::write(dictionary& dict) const
|
||||||
{
|
{
|
||||||
dict.add("q", q_);
|
dict.add("q", q_);
|
||||||
dict.add("w", w_);
|
|
||||||
dict.add("qDot", qDot_);
|
dict.add("qDot", qDot_);
|
||||||
dict.add("qDdot", qDdot_);
|
dict.add("qDdot", qDdot_);
|
||||||
}
|
}
|
||||||
@ -40,7 +39,6 @@ void Foam::RBD::rigidBodyModelState::write(dictionary& dict) const
|
|||||||
void Foam::RBD::rigidBodyModelState::write(Ostream& os) const
|
void Foam::RBD::rigidBodyModelState::write(Ostream& os) const
|
||||||
{
|
{
|
||||||
os.writeKeyword("q") << q_ << token::END_STATEMENT << nl;
|
os.writeKeyword("q") << q_ << token::END_STATEMENT << nl;
|
||||||
os.writeKeyword("w") << w_ << token::END_STATEMENT << nl;
|
|
||||||
os.writeKeyword("qDot") << qDot_ << token::END_STATEMENT << nl;
|
os.writeKeyword("qDot") << qDot_ << token::END_STATEMENT << nl;
|
||||||
os.writeKeyword("qDdot") << qDdot_ << token::END_STATEMENT << nl;
|
os.writeKeyword("qDdot") << qDdot_ << token::END_STATEMENT << nl;
|
||||||
}
|
}
|
||||||
@ -55,7 +53,6 @@ Foam::Istream& Foam::RBD::operator>>
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
is >> state.q_
|
is >> state.q_
|
||||||
>> state.w_
|
|
||||||
>> state.qDot_
|
>> state.qDot_
|
||||||
>> state.qDdot_;
|
>> state.qDdot_;
|
||||||
|
|
||||||
@ -77,7 +74,6 @@ Foam::Ostream& Foam::RBD::operator<<
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
os << token::SPACE << state.q_
|
os << token::SPACE << state.q_
|
||||||
<< token::SPACE << state.w_
|
|
||||||
<< token::SPACE << state.qDot_
|
<< token::SPACE << state.qDot_
|
||||||
<< token::SPACE << state.qDdot_;
|
<< token::SPACE << state.qDdot_;
|
||||||
|
|
||||||
|
|||||||
@ -76,11 +76,11 @@ void Foam::RBD::rigidBodySolver::correctQuaternionJoints()
|
|||||||
// Transform the previous time quaternion
|
// Transform the previous time quaternion
|
||||||
quaternion quat
|
quaternion quat
|
||||||
(
|
(
|
||||||
normalize(model_.joints()[i](q0(), w0())*dQuat)
|
normalize(model_.joints()[i](q0())*dQuat)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Update the joint state
|
// Update the joint state
|
||||||
model_.joints()[i](quat, q(), w());
|
model_.joints()[i](quat, q());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -75,7 +75,6 @@ protected:
|
|||||||
inline scalarField& q();
|
inline scalarField& q();
|
||||||
|
|
||||||
//- Return the current joint quaternion
|
//- Return the current joint quaternion
|
||||||
inline scalarField& w();
|
|
||||||
|
|
||||||
//- Return the current joint velocity
|
//- Return the current joint velocity
|
||||||
inline scalarField& qDot();
|
inline scalarField& qDot();
|
||||||
@ -88,7 +87,6 @@ protected:
|
|||||||
inline const scalarField& q0() const;
|
inline const scalarField& q0() const;
|
||||||
|
|
||||||
//- Return the current joint quaternion
|
//- Return the current joint quaternion
|
||||||
inline const scalarField& w0() const;
|
|
||||||
|
|
||||||
//- Return the current joint velocity
|
//- Return the current joint velocity
|
||||||
inline const scalarField& qDot0() const;
|
inline const scalarField& qDot0() const;
|
||||||
|
|||||||
@ -56,12 +56,6 @@ inline Foam::scalarField& Foam::RBD::rigidBodySolver::q()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::scalarField& Foam::RBD::rigidBodySolver::w()
|
|
||||||
{
|
|
||||||
return state().w();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline Foam::scalarField& Foam::RBD::rigidBodySolver::qDot()
|
inline Foam::scalarField& Foam::RBD::rigidBodySolver::qDot()
|
||||||
{
|
{
|
||||||
return state().qDot();
|
return state().qDot();
|
||||||
@ -80,12 +74,6 @@ inline const Foam::scalarField& Foam::RBD::rigidBodySolver::q0() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline const Foam::scalarField& Foam::RBD::rigidBodySolver::w0() const
|
|
||||||
{
|
|
||||||
return state0().w();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline const Foam::scalarField& Foam::RBD::rigidBodySolver::qDot0() const
|
inline const Foam::scalarField& Foam::RBD::rigidBodySolver::qDot0() const
|
||||||
{
|
{
|
||||||
return state0().qDot();
|
return state0().qDot();
|
||||||
|
|||||||
Reference in New Issue
Block a user