【MATLAB】Simscape Multibody 入門1 二重振子の作成

Nです.今回はMATLABのツールボックスの一つであるSimscape Multibodyについて紹介します(初心者なので間違っているところはコメントで教えてもらえると助かります).このツールボックスには3次元の複数のリンクからなるモデルのシミュレーションを簡単に行うための機能が詰まっています.まずSimscape Multibodyについてなれるために以下のようなピンジョイントでつながった2リンクの振り子を作ってみたいと思います.

図1: 今回作成する剛体リンク
図2: SimScape Multibodyで図的に作成したモデル
スポンサーリンク

基本的な環境を決めるブロック

  • World Frame: グローバル座標系の原点.ここを基準にいろいろなブロックの位置を決めていく.
  • Mechnism Configuration: 重力の方向や大きさを決めるブロック
  • Solver Configuration: ソルバーの設定を行うブロック(今回は触らない)
スポンサーリンク

剛体リンクを定義するブロック(Brick Solid)

直方体の剛体を定義できるブロックです.直方体のサイズや質量を定義できます.Rポートはリンクの中心として定義されるリンクのローカル座標系を出力できます.

図3: Brick Solidウィンドウの例.Dimensionsはリンクのサイズ,Inertiaは慣性の計算方法と質量,Graphicはリンクの色を定義できる.

座標間の関係を定義するブロック(Rigid Transform)

Simscapeでは座標系のことをフレーム(Frame)と呼びます.Rigid Transformは固定された2つのフレーム間の関係を平行移動と回転で定義します.

ブロックにはB(base)とF(follower)という2つのポートが存在します.B側にはRigid Transformで定義する際のbase(基準)側となるフレームをつなぎます.F側につないだフレームはBase側のフレームから平行移動と回転を行った場所が原点となります.

今回はリンクの側をBaseにジョイント側をFollowerにします(個人的なルール,リンク内のフレームをリンクのローカル座標系基準で定義したい).リンクのフレームはリンクの中心にあるのでリンクの長さの半分だけ平行移動させることでリンクの端にジョイントをつなぐためのフレームを設定します.

図4: Rigid Transformウィンドウの例.Rotationで回転,Translationで平行移動を定義できる.

ピンジョイントを定義するブロック(Revolute Joint)

Revolute Jointはピンジョイントを定義できるブロックです.Bに入力したフレームのZ軸回りに回転します.BとFにフレームをつなぐことで2つのフレームの間にz軸回りに回転するピンジョイントを定義できます.ピンジョイントはWorld Frameに近い側をBaseとして組み立てます(個人的なルール,World Frame側からリンクがつなげられていくイメージがあるので).

図5: Revolute Jointウィンドウの例.State Targetsでは初期角度,角速度を,Actuationでは入力トルクを,Sensingでは出力するセンサー情報を定義できる.

ブロックをつなげる

上記で紹介したブロックをライブラリーブラウザから取り出して図2のようにつなげます.リンクとジョイントを直接つなげるとリンクの中心(リンクのフレーム)にジョイントができてしまいます.そこでRigid Transformでリンクの端にフレームを作ります.このフレームのz軸がピンジョイントの回転の軸になります.

今回は2つのリンクを[x, y, z] = [0.5, 0.1, 0.1] m,質量を10 kgで作りました.Link1の座標系をBaseとしてx軸方向の±0.25にRigid Transformでフレームを作成し,Revolute Jointで地面とLink1の間と,Link1とLink2の間にピンジョイントを作成しました.また,Mechanism Configurationでy軸方向の重力を-9.81にしています.つまりy軸方向が鉛直上方となります.

図2(再掲): SimScape Multibodyで図的に作成したモデル

シミュレーション

シミュレーションはタブの実行ボタンでシミュレーションを実行できます.今回関節トルクはありませんが重力に従って動きます.

コメント

タイトルとURLをコピーしました