SimMechani​csでジョイントの駆​動範囲を制限するには​どうすればよいですか​?

1 回表示 (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2009 年 6 月 29 日
編集済み: MathWorks Support Team 2020 年 11 月 11 日
SimMechanicsでジョイントの駆動範囲を制限するにはどうすればよいですか?

採用された回答

MathWorks Support Team
MathWorks Support Team 2020 年 11 月 11 日
編集済み: MathWorks Support Team 2020 年 11 月 11 日
SimMechanicsの機能にジョイントの駆動範囲を制限するようなオプションはありません。代替案として、次のいずれかの方法をご利用ください。  
1. 制限を越えると作用する力を作成 
2. SaturationブロックとSensors and Actuatorsブロックを使用して変位を制限
1. 制限を越えると作用する力を作成
制限を越えた位置や角度になると作用する力を作成します。ジョイントには2つ以上のジョイントアクチュエータを結合させることができないため、この力とジョイント上に作用するすべての力/トルクを合算して、Joint Actuatorブロックに入力します。この力のモデル化は、SimMechanicsのJoint Spring Damperブロックを利用したり、Simulinkブロックと組み合わせてユーザ独自の力を作成してモデル化します。
Simulinkブロックと組み合わせた例としては、SimMechanics標準デモのmech_bouncing_ball.mdlがあります。z軸方向の並進ジョイントにおいて、zの値が0以下になると発生する力をモデル化し、 z < 0 にならないようにしています。mech_bouncing_ball.mdモデルは、
>> mech_bouncing_ball
と入力するとオープンします。
2. SaturationブロックとSensors and Actuatorsブロックを使用して変位を制限
※この方法は、ジョイント部分に付加される力がない場合に利用できます。ジョイント部分に付加される力がある場合は、上記の 1. の方法をご利用ください。
ジョイントの位置情報の信号をSaturationブロックに通して制限を与えてからJoint Actuatorブロックに入力します。下記は、サンプルです。駆動範囲が -10 から +10 になるように、Saturation ブロックで位置信号に ±10 の上限下限を与えています。
なお、上記のモデルでは、信号を微分する際に数値的な微分を行うderivativeブロックを使用していますが、このブロックによる微分は厳密で理想的ですが安定性に欠け、SimMechanicsで使用するには非現実的な場合があります。このような場合、微分と低周波バンドパスフィルタをラプラス変換して結合した伝達関数
A*s
-----
s+A
Aは変数)
を利用することができます。この伝達関数は、入力値を微分して2π/Aより短い時間スケールを滑らかにする低周波バンドパスフィルターとして作用します。Aの値は、解析対象が必要とする周波数帯域を参考に決定します。たとえば、微分特性を近似する帯域が10[Hz]、つまり10*2*pi[rad/sec]までの場合、その50倍~100倍程度の値を目安として、A=10*2*pi*50とします。また、Aを大きくすると高周波帯域まで微分特性を近似できるようになりますが、シミュレーション時間がかかります。適切なAの値に関しては、近似精度とシミュレーションコストのバランスを見て検討してください。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeマルチボディ モデリング についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!