[[開発者向け情報>devel]] ~ PHConstraintの整理・改良を行いました. - 作業用ブランチ: svn+ssh://springhead.info/home/svn/spr2/Springhead2/branches/JointRefactoring2011 - 卒論・修論への影響が出なくなった頃(2月中旬?)にTrunkへのマージを予定しています. * APIの仕様変更 [#wa6bdde8] - JointのLimitをAPIクラスとし,If / Desc / Stateを付けました. -- これに伴い,Limitを使用するにはjointのCreateLimitを呼ぶ必要が生じます. /* PH1DJointIf* jo; */ jo = phScene->CreateJoint(/* ・・・ */) PH1DJointLimitDesc descLimit; descLimit.range = Vec2d(Rad(-10), Rad(20)); jo->CreateLimit(desc); -- また,Limitのパラメータを変更するにはGetLimit()を用いることになります. jo->GetLimit()->SetRange(Vec2d(0, Rad(90))); - PHJoint1D*** → PH1DJoint*** に名称変更しました. - PHBallJointの円錐可動域とSpline曲線可動域が別クラスとなり,If/Desc/Stateも別となりました. -- これにより,SplineLimitが実用可能となりました. /* PHBallJointIf* jo */ PHBallJointSplineLimitDesc descLimit; limit = jo->CreateLimit(descLimit) limit->AddNode( Rad(90), Rad(0), Rad(10), Rad(50), Rad(-85), Rad(0)); ... - FWSceneにJointLimitを描画する機能が付きました. // JointLimitの描画を有効にする fwScene->EnableRenderLimit(true); - IKActuatorのSpring/Damperがなくなりました. -- これはJointのリファクタリングとは直接関係ないのですが,同時期に行いました. * 実装上の主要な変更 [#r61d79f3] - PHConstraintに,拘束軸を管理するAxisIndexクラス(axes)を導入しました. -- SetupLCP()から呼ばれるSetupAxisIndex()においてaxes.Enable(i)により使用する軸を有効にし, -- SetupLCP()の中で axes.CreateList() が呼ばれた時点でEnableされていた軸を並べたリストaxes[n]を作成 -- IterateLCP()の中ではaxes[n]に従って計算 - (なお,SetupAxisIndexは従来のSetConstrainedIndexに相当する機能ですが,Set-だとSetter/Getterだと勘違いすること,軸管理クラスの名前をAxisIndexクラスとしたことから名前を変えました.) - Limit/Motor の f を,基本的にはPHConstraintのfに統合しました. -- このため,Limit/MotorからSetupLCP/IterateLCPが撤廃されました.基本的にはSetupAxisIndex / CompBiasのみを持ちます. -- BallJointLimitは独自の座標系を持つため,独自にfを持っています.そのためSetupLCP/IterateLCPも独自です. - Motorの機能をクラステンプレート一つにまとめました. -- N自由度関節用モーター PHNDJointMotor<NDOF> -- PHSpringについても実装はPHSpringMotor(PHNDJointMotor<6>を継承)に委譲する構造としました. * サンプル [#i6cd5975] - Samples/Physics/Joints の Scene:0(Chain) と Scene:1(Link) と Scene:2(Arm) - Samples/EmbPython/PythonSpr (main.pyに記述されています) * 未確認の機能 [#k05f97d5] 以下の機能は整理しましたが動作を確認していません. - PathJoint - 3要素モデル(機能自体はNDJointMotorに組み込まれています) - ContactSurface ** 既知の未実装(メモ) [#ha6fe520] - MotorのsecondMoment - SplineLimitのlimitDir - ABA時のSliderJointのbConstraintRollX=false -- movableAxesを変更すれば解決すると思われる - LimitのSaveStateがされてない可能性がある -- PHConstraintEngineをいじる必要があるかも