二重振り子の運動シミュレーション(粘性抵抗も考えるよ!)
卒論も終わり一息ついたので、ラグランジュの運動方程式の復習として二重振り子の運動方程式の導出と、導出した運動方程式を用いた運動シミュレーションをやってみた。
運動方程式の導出
上図のようにジョイント1、2の回転角をそれぞれ、おもり1、2の質量をそれぞれ、ロッド1、2の長さをそれぞれとする。 このとき、おもり1、2の位置ベクトルはそれぞれ次のようになる。
これらを時間で微分して各おもりの速度を求める。
二重振り子の運動エネルギーは次式のようになる。
途中で加法定理を使った。重力加速度をとおくとポテンシャルエネルギーは次のようになる。
これらより、ラグランジアンは次のように求められる。
(この辺りから計算が嫌になってくる)
一般化座標をとすると、ラグランジュの運動方程式は次の二式となる。
ただし、はそれぞれに対する一般化力である。一般化力はあとで考えるから、とりあえずこのようにおいておく。ラグランジュの運動方程式に上で求めたを代入してゴリゴリ計算していく。
について:
について:
(計算ミスがこわい)
以上から、運動方程式は次のように得られる。
もう少し見やすくするためにとして次のように行列形式に整理しておく。
左辺の行列を、右辺をと書くことにすると、運動方程式は次のように角加速度について解ける(は常に正則)。
これを4次のルンゲ=クッタ法で時間発展させることで二重振り子の運動をシミュレーションする!
粘性抵抗について
ジョイント1およびジョイント2には粘性抵抗(ジョイントの摺動速度に比例する抵抗)がはたらくとする。 粘性抵抗はこの場合トルクである。 ジョイント1、2の粘性抵抗は比例係数をそれぞれとして次のように表せる。
粘性抵抗はジョイントの回転速度に比例するのではなく、摺動速度(ジョイントの軸受けがすべって回転する速度)に比例するから、ジョイント2の抵抗を とするのは不適切。
粘性抵抗は保存力ではないから、この抵抗は一般化力の項に入ってくる。問題はどのように入ってくるか。
これを考えるには二重振り子の状態が微小変化したときに抵抗がする微小仕事を考えればいい。抵抗による微小仕事は次のように与えられる。
一方で、一般化力は次で定義される。
よって、粘性抵抗による一般化力は次のようになる。
運動シミュレーション
二重振り子の各パラメータは下表のように設定した。
パラメータ | 値 | 単位 |
---|---|---|
(m1, m2) | (1, 1) | kg |
(l1, l2) | (0.6, 0.6) | m |
また、重力加速度はg = 9.80665 [m/s2]とし、シミュレーション刻みは0.001[s]とした。
計算はMATLABで行った。
粘性抵抗なし
まずは、粘性抵抗なしの場合(c1 = c2 = 0 [kgm2/s])についてシミュレーションをした。
初期条件を、とした場合:
リハビリとして2重振子の運動方程式の導出と,そのシミュレーションをやってみた pic.twitter.com/kLyZuAvuui
— スコル (@__scol__p) February 24, 2019
いわゆる「カオス運動」をしているのが見てとれる。振り子を二つ繋げただけなのにこんな複雑な運動をするのは相変わらずすごい。
粘性抵抗がない場合は保存系となるから力学的エネルギーは保存されるはず。そのため、力学的エネルギーの推移を見れば導いた運動方程式や計算結果の正しさをある程度判断することができる。 さて、どうなっているか・・・ 力学的エネルギーの変動は非常に小さいから正しいといえるだろう。 図見ると、「大きく変動して少し下がる」というのを繰り返しているのが分かる。二重振り子が急激な運動をしているときに力学的エネルギーが大きく変動している。
今回はシミュレーション刻みを一定としたが、二重振り子の運動方程式ようにゆっくりとした変動と激しい変動がともに出てくる微分方程式(硬い方程式というらしい)の時間発展行う場合は、刻み幅を制御しながら計算する方法を用いるのがより適切らしい。埋め込み型ルンゲ=クッタ法というものを使えば誤差の評価と刻み幅の制御が行えるそうだ。
また、保存量をきちんと保存しながら数値積分を行える方法もあり、これをシンプレクティック数値積分というらしい。
ところで、大角度ならいつでもカオスになると思っていたけど、カオスにならない場合もあった。それが次の場合である。
初期条件を、、とした場合:
カオス運動をすることで有名な2重振子だが,初期角度を120°,90°にしたら周期的な運動が出てきた.大角度でもカオスにならないことはあるんだな......
— スコル (@__scol__p) February 24, 2019
カオスにならないための条件って求められてたりするのかな? pic.twitter.com/mtm9zGjDsz
とが同時に0になるのがカオスにならないポイントなのかなと思った。
粘性抵抗あり
ここからは、すべて初期条件を、とした。
まずは、2つのジョイントに弱い抵抗がある場合(c1 = 0.04 [kgm2/s]、c2 = 0.02 [kgm2/s]):
2つのジョイントに粘性抵抗(角速度に比例する抵抗)がある場合の2重振子
— スコル (@__scol__p) February 25, 2019
抵抗がある方が自然な感じがする pic.twitter.com/cjieQSPg1O
運動は次第に穏やかになり、非線形項の効果が小さくなって最終的には周期的な運動に落ち着いている。今回のシミュレーション条件では、微小かつ周期的な振動をしているとき、その振幅比はかの2パターンであることが微小振動時の線形化運動方程式を調べることによりわかる(マイナスは逆向きの振動をするという意味)。
抵抗があるから、このときはもちろん力学的エネルギーは保存されない。
次は、ジョイント1には強い抵抗がありジョイント2には抵抗がない場合(c1 = 5 [kgm2/s]、c2 = 0 [kgm2/s]):
上のジョイント:強い抵抗
— スコル (@__scol__p) February 25, 2019
下のジョイント:抵抗なし
下の振子の振動が上の振子に吸収されている pic.twitter.com/Hvy2Tzs0u0
上の振り子が動吸振器の役割を果たし、振動は急速に減衰している。動吸振器というのは、一言でいえば「振動を吸収する装置」。地震の振動を抑えるために高いビルの屋上についている可動式のおもりは動吸振器の一種である。
最後は、ジョイント1には抵抗がなくジョイント2には強い抵抗がある場合(c1 = 0 [kgm2/s]、c2 = 5 [kgm2/s]):
上のジョイント:抵抗なし
— スコル (@__scol__p) February 25, 2019
下のジョイント:強い抵抗
そりゃそうだろうなという結果 pic.twitter.com/8HS3ccoRsw
そりゃそうだろなという結果。ジョイント2に強い抵抗があればそりゃ単振り子みたいな運動をするだろう。さっきと違って、この場合は振動はほとんど減衰されない。
まとめ
二重振り子の運動シミュレーションを通じてラグランジュの運動方程式を一般化力を含めて軽く復習できた。 実際にシミュレーションを行って振り子がひょこひょこ動いているのを見ると何だか愛着が湧いてくるね。
シミュレーションプログラム(MATLAB)
間違いなどありましたらご指摘ください。