本文整理汇总了C++中DyLink::p方法的典型用法代码示例。如果您正苦于以下问题:C++ DyLink::p方法的具体用法?C++ DyLink::p怎么用?C++ DyLink::p使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DyLink
的用法示例。
在下文中一共展示了DyLink::p方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: calcMotionWithEulerMethod
void ForwardDynamicsABM::calcMotionWithEulerMethod()
{
calcABMLastHalf();
if(!sensorHelper.forceSensors().empty()){
updateForceSensors();
}
DyLink* root = body->rootLink();
if(!root->isFixedJoint()){
root->dv() =
root->dvo() - root->p().cross(root->dw())
+ root->w().cross(root->vo() + root->w().cross(root->p()));
Position T;
SE3exp(T, root->T(), root->w(), root->vo(), timeStep);
root->T() = T;
root->vo() += root->dvo() * timeStep;
root->w() += root->dw() * timeStep;
}
int n = body->numLinks();
for(int i=1; i < n; ++i){
DyLink* link = body->link(i);
link->q() += link->dq() * timeStep;
link->dq() += link->ddq() * timeStep;
}
}
示例2: switch
/**
\note v, dv, dw are not used in the forward dynamics, but are calculated
for forward dynamics users.
*/
void ForwardDynamicsABM::calcABMPhase1(bool updateNonSpatialVariables)
{
const LinkTraverse& traverse = body->linkTraverse();
const int n = traverse.numLinks();
for(int i=0; i < n; ++i){
DyLink* link = static_cast<DyLink*>(traverse[i]);
const DyLink* parent = link->parent();
if(parent){
switch(link->jointType()){
case Link::ROTATIONAL_JOINT:
{
const Vector3 arm = parent->R() * link->b();
link->R().noalias() = parent->R() * AngleAxisd(link->q(), link->a());
link->p().noalias() = arm + parent->p();
link->sw().noalias() = parent->R() * link->a();
link->sv().noalias() = link->p().cross(link->sw());
link->w().noalias() = link->dq() * link->sw() + parent->w();
if(updateNonSpatialVariables){
link->dw().noalias() =
parent->dw() + link->dq() * parent->w().cross(link->sw()) + (link->ddq() * link->sw());
link->dv().noalias() =
parent->dv() + parent->w().cross(parent->w().cross(arm)) + parent->dw().cross(arm);
}
break;
}
case Link::SLIDE_JOINT:
link->p().noalias() = parent->R() * (link->b() + link->q() * link->d()) + parent->p();
link->R() = parent->R();
link->sw().setZero();
link->sv().noalias() = parent->R() * link->d();
link->w() = parent->w();
if(updateNonSpatialVariables){
link->dw() = parent->dw();
const Vector3 arm = parent->R() * link->b();
link->dv().noalias() =
parent->dv() + parent->w().cross(parent->w().cross(arm)) + parent->dw().cross(arm)
+ 2.0 * link->dq() * parent->w().cross(link->sv()) + link->ddq() * link->sv();
}
break;
case Link::FIXED_JOINT:
default:
link->p().noalias() = parent->R() * link->b() + parent->p();
link->R() = parent->R();
link->w() = parent->w();
link->vo() = parent->vo();
link->sw().setZero();
link->sv().setZero();
link->cv().setZero();
link->cw().setZero();
if(updateNonSpatialVariables){
link->dw() = parent->dw();
const Vector3 arm = parent->R() * link->b();
link->dv().noalias() = parent->dv() +
parent->w().cross(parent->w().cross(arm)) + parent->dw().cross(arm);
}
goto COMMON_CALCS_FOR_ALL_JOINT_TYPES;
}
// Common for ROTATE and SLIDE
link->vo().noalias() = link->dq() * link->sv() + parent->vo();
const Vector3 dsv = parent->w().cross(link->sv()) + parent->vo().cross(link->sw());
const Vector3 dsw = parent->w().cross(link->sw());
link->cv() = link->dq() * dsv;
link->cw() = link->dq() * dsw;
}
COMMON_CALCS_FOR_ALL_JOINT_TYPES:
if(updateNonSpatialVariables){
link->v().noalias() = link->vo() + link->w().cross(link->p());
}
link->wc().noalias() = link->R() * link->c() + link->p();
// compute I^s (Eq.(6.24) of Kajita's textbook))
const Matrix3 Iw = link->R() * link->I() * link->R().transpose();
const double m = link->m();
const Matrix3 c_hat = hat(link->wc());
link->Iww().noalias() = m * c_hat * c_hat.transpose() + Iw;
link->Ivv() <<
m, 0.0, 0.0,
0.0, m, 0.0,
0.0, 0.0, m;
link->Iwv() = m * c_hat;
// compute P and L (Eq.(6.25) of Kajita's textbook)
const Vector3 P = m * (link->vo() + link->w().cross(link->wc()));
//.........这里部分代码省略.........