可動域制限

CreateLimitは可動範囲制約オブジェクトのディスクリプタを引数にとります. $1$自由度関節の可動範囲制約の場合,Vec2d rangeが可動域を表します.range[0]が可動域の下限,range[1]が上限です.range[0] < range[1]が満たされているときに限り可動範囲制約が有効となります. デフォルトではrange[0] > range[1]となる値が設定されていて,可動範囲制約は無効となっています.

関節の変位が可動範囲限界に到達したとき,範囲を超過しないように可動範囲制約の拘束力が作用します. このとき,関節変位を範囲内に押し戻す力はバネ・ダンパモデルで計算されます. このバネ係数とダンパ係数はそれぞれディスクリプタのspringdamperで指定します.

tips 可動範囲用のspringdamperは初期値でも十分大きな値が設定されていますが,関節制御において非常に大きなバネ・ダンパ係数を用いると可動範囲制約のバネ・ダンパが負けてしまうことがあります.その場合には関節制御より大きな係数を適切に再設定すると,可動範囲内で関節を制御する事ができるようになります.

$1$自由度関節の場合

= =0trueptPH1DJointLimitDescクラス height0.75pt

Vec2d range

 

可動範囲を表します.range[0]が下限,range[1]が上限です.

double spring

 

double damper

 

可動範囲を制限するためのバネ・ダンパモデルの係数です.

= =0trueptPH1DJointLimitIfクラス height0.75pt

IsOnLimit()

 

現在の関節姿勢が可動範囲外にある時にtrueを返します.この関数がtrueを返すような時,関節には可動域制約を実現するための拘束力が発生しています.

ボールジョイントの場合

ボールジョイントの可動範囲はFig #.#.#(b)に示すSwing-Twist座標系によって指定します.

ボールジョイントに対しては2種類の可動範囲制約を使用することができます.

ここではConeLimitについて説明します(SplineLimitについては後述します).

= =0trueptPHBallJointConeLimitDescクラス height0.75pt

Vec2d limitSwing

 

スイング角の可動範囲です.概念的には,関節が一定以上に折れ曲がらないようにする制約です(スイング角の下限を設定する事もできるので,実際には一定以上にまっすぐにならないようにする機能も有しています).

limitSwing[0]が下限,limitSwing[1]が上限です.limitSwingを取得・設定するためのAPIは

PHBallJointConeLimitIf::[Set]SwingRange(range)

です.

limitSwing[0] > limitSwing[1]となる時は無効化されます.デフォルトではlimitSwing[0] > limitSwing[1]となる値がセットされています.

Vec2d limitTwist

 

ツイスト角の可動範囲です.概念的には,関節が一定以上にねじれないようにするための制約です.

limitTwist[0]が下限,limitTwist[1]が上限です.limitTwistを取得・設定するためのAPIは

PHBallJointConeLimitIf::[Set]TwistRange(range)

です.

limitTwist[0] > limitTwist[1]となる時は無効化されます.デフォルトではlimitTwist[0] > limitTwist[1]となる値がセットされています.

double spring

 

double damper

 

可動範囲を制限するためのバネ・ダンパモデルの係数です.$1$自由度関節の場合と同じです.

= =0trueptPHBallJointConeLimitIfクラス height0.75pt

IsOnLimit()

 

現在の関節姿勢が可動範囲外にある時にtrueを返します.$1$自由度関節の場合と同じです.