本文整理汇总了C++中DyLink::dd方法的典型用法代码示例。如果您正苦于以下问题:C++ DyLink::dd方法的具体用法?C++ DyLink::dd怎么用?C++ DyLink::dd使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DyLink
的用法示例。
在下文中一共展示了DyLink::dd方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void ForwardDynamicsABM::calcABMPhase2()
{
const LinkTraverse& traverse = body->linkTraverse();
const int n = traverse.numLinks();
for(int i = n-1; i >= 0; --i){
DyLink* link = static_cast<DyLink*>(traverse[i]);
link->pf() -= link->f_ext();
link->ptau() -= link->tau_ext();
// compute articulated inertia (Eq.(6.48) of Kajita's textbook)
for(DyLink* child = link->child(); child; child = child->sibling()){
if(child->isFixedJoint()){
link->Ivv() += child->Ivv();
link->Iwv() += child->Iwv();
link->Iww() += child->Iww();
}else{
const Vector3 hhv_dd = child->hhv() / child->dd();
link->Ivv().noalias() += child->Ivv() - child->hhv() * hhv_dd.transpose();
link->Iwv().noalias() += child->Iwv() - child->hhw() * hhv_dd.transpose();
link->Iww().noalias() += child->Iww() - child->hhw() * (child->hhw() / child->dd()).transpose();
}
link->pf() .noalias() += child->Ivv() * child->cv() + child->Iwv().transpose() * child->cw() + child->pf();
link->ptau().noalias() += child->Iwv() * child->cv() + child->Iww() * child->cw() + child->ptau();
if(!child->isFixedJoint()){
const double uu_dd = child->uu() / child->dd();
link->pf() += uu_dd * child->hhv();
link->ptau() += uu_dd * child->hhw();
}
}
if(i > 0){
if(!link->isFixedJoint()){
// hh = Ia * s
link->hhv().noalias() = link->Ivv() * link->sv() + link->Iwv().transpose() * link->sw();
link->hhw().noalias() = link->Iwv() * link->sv() + link->Iww() * link->sw();
// dd = Ia * s * s^T
link->dd() = link->sv().dot(link->hhv()) + link->sw().dot(link->hhw()) + link->Jm2();
// uu = u - hh^T*c + s^T*pp
link->uu() = link->u() -
(link->hhv().dot(link->cv()) + link->hhw().dot(link->cw()) +
link->sv().dot(link->pf()) + link->sw().dot(link->ptau()));
}
}
}
}
示例2: initialize
void ForwardDynamicsABM::initialize()
{
DyLink* rootLink = body->rootLink();
rootLink->sw().setZero();
rootLink->sv().setZero();
rootLink->cv().setZero();
rootLink->cw().setZero();
rootLink->hhv().setZero();
rootLink->hhw().setZero();
rootLink->uu() = 0.0;
rootLink->dd() = 0.0;
initializeSensors();
calcABMFirstHalf();
}
示例3: a
void ForwardDynamicsABM::calcABMPhase3()
{
const LinkTraverse& traverse = body->linkTraverse();
DyLink* root = static_cast<DyLink*>(traverse[0]);
if(root->isFreeJoint()){
// - | Ivv trans(Iwv) | * | dvo | = | pf |
// | Iwv Iww | | dw | | ptau |
Eigen::Matrix<double, 6, 6> M;
M << root->Ivv(), root->Iwv().transpose(),
root->Iwv(), root->Iww();
Eigen::Matrix<double, 6, 1> f;
f << root->pf(),
root->ptau();
f *= -1.0;
Eigen::Matrix<double, 6, 1> a(M.colPivHouseholderQr().solve(f));
root->dvo() = a.head<3>();
root->dw() = a.tail<3>();
} else {
root->dvo().setZero();
root->dw().setZero();
}
const int n = traverse.numLinks();
for(int i=1; i < n; ++i){
DyLink* link = static_cast<DyLink*>(traverse[i]);
const DyLink* parent = link->parent();
if(!link->isFixedJoint()){
link->ddq() = (link->uu() - (link->hhv().dot(parent->dvo()) + link->hhw().dot(parent->dw()))) / link->dd();
link->dvo().noalias() = parent->dvo() + link->cv() + link->sv() * link->ddq();
link->dw().noalias() = parent->dw() + link->cw() + link->sw() * link->ddq();
}else{
link->ddq() = 0.0;
link->dvo() = parent->dvo();
link->dw() = parent->dw();
}
}
}