本文整理汇总了C++中SimObj::getJointPosition方法的典型用法代码示例。如果您正苦于以下问题:C++ SimObj::getJointPosition方法的具体用法?C++ SimObj::getJointPosition怎么用?C++ SimObj::getJointPosition使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SimObj
的用法示例。
在下文中一共展示了SimObj::getJointPosition方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getPointedTrashName
std::string RobotController::getPointedTrashName(std::string entName)
{
// 発話者の名前からSimObjを取得します
SimObj *tobj = getObj(entName.c_str());
// メッセージ送信者の左肘関節の位置を取得します
Vector3d jpos;
if(!tobj->getJointPosition(jpos, "RARM_JOINT4")) {
LOG_ERR(("failed to get joint position"));
return "";
}
// メッセージ送信者の左肘から左手首をつなぐベクトルを取得します
Vector3d jvec;
if(!tobj->getPointingVector(jvec, "RARM_JOINT4", "RARM_JOINT7")) {
LOG_ERR(("failed to get pointing vector"));
return "";
}
double distance = 0.0;
std::string objName = "";
// 全ゴミオブジェクトでループします
int trashboxSize = m_trashboxs.size();
for(int i = 0; i < trashboxSize; i++) {
// エンティティの位置を取得します
SimObj *obj = getObj(m_trashboxs[i].c_str());
Vector3d objVec;
obj->getPosition(objVec);
// エンティティと左肘関節を結ぶベクトルを作成します
objVec -= jpos;
// cos角度が不の場合(指差した方向と反対側にある場合)は対象から外します
double cos = jvec.angle(objVec);
if(cos < 0)
continue;
// 指差した方向ベクトルまでの最短距離の計算
double theta = acos(cos);
double tmp_distance = sin(theta) * objVec.length();
// 最小距離の場合は名前、距離を保存しておく
if(tmp_distance < distance || distance == 0.0){
distance = tmp_distance;
objName = obj->name();
}
}
// エンティティでループして最も近いオブジェクトの名前を取得する
return objName;
}