Open Dynamics Engine

バネとダンパの作り方

 ODEにおいてバネもしくはダンパを作成する方法は,関節の動作範囲を0とし,その上で,動作の上下限の粘弾性値『dParamStopERP&dParamStopCFM』を設定することで可能となります.ERPとCFMはその関節の粘弾性係数に変換される(参照)ので,それらkpとkdを調整することで,バネにもダンパにもなりえます.

double kp; // 弾性係数[N/m]
double kd; // 粘性係数[Ns/m]
// 粘性係数を低く,弾性係数を高くすることで,仮想バネ
// 弾性係数を低く,粘性係数を高くすることで,仮想ダンパ
// 粘性係数と弾性係数を適切に調整することで,仮想サスペンション

回転型バネ/ダンパ(ヒンジ1自由度における粘弾性関節)

joint[i] = dJointCreateHinge (world,0);
dJointAttach (joint[i],body[2*i],body[2*i+1]);
dJointSetHingeAnchor (joint[i],joint_x[i],joint_y[i],joint_z[i]);
dJointSetHingeAxis (joint[i],0,1,0);
dJointSetHingeParam (joint[i],dParamLoStop,-0);
dJointSetHingeParam (joint[i],dParamHiStop,+0);
dJointSetHingeParam (joint[i],dParamStopERP,(DT*kp)/(DT*kp+kd));
dJointSetHingeParam (joint[i],dParamStopCFM,1/(DT*kp+kd));

直動型バネ/ダンパ(スライダー型粘弾性関節)

joint[i] = dJointCreateSlider(world,0);
dJointAttach (joint[i],body[2*i],body[2*i+1]);
dJointSetSliderAxis (joint[i],0,0,1);
dJointSetSliderParam (joint[i],dParamLoStop,0);
dJointSetSliderParam (joint[i],dParamHiStop,0);
dJointSetSliderParam (joint[i],dParamStopERP,(DT*kp)/(DT*kp+kd)); 
dJointSetSliderParam (joint[i],dParamStopCFM,1/(DT*kp+kd));

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-10-08 (月) 17:39:01 (3635d)