[[開発者向け情報>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をいじる必要があるかも