Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

【Unity】カオスな連成振り子を動かしてみる♬

More than 1 year has passed since last update.

連成振り子は以下のように最近でもカオスの研究もあることから、楽しみな系である。
【参考】
二重振り子の振る舞いからカオスへ
連成振り子による非線形な振る舞いとカオス
ということで、今回はマイカオスを求めてこれを数値解とOculusGoで再現することを試みた。

やったこと

(1)かわいい天使が出てきた
(2)数値解について
(3)連成振り子をOculusGoする

(1)かわいい天使が出てきた

plot_xp1omega490.png
plot_xp2omega490.pngウワンには天使に見えたよ♬

ても振動はエネルギーが増大していて、エネルギー注入しないと実現しない。
plot_thomegavst2490g.png
plot_thomegavst1490g.png

(2)数値解について

今回の連成振り子の方程式は以下のようなものである。

def dualPendulum(y, t, b, c):
    """
    (𝑚1 +𝑚2)𝑙1^2𝜃1̈  = -(+𝑚2𝑙1𝑙2(𝜃2̈ cos(𝜃1 −𝜃2)+𝜃2̇ ^2 sin(𝜃1 −𝜃2)) +(𝑚1 +𝑚2)𝑔𝑙1 sin𝜃1)
    𝑚2𝑙2^2𝜃2̈  = -(+𝑚2𝑙1𝑙2(𝜃1̈ cos(𝜃1 −𝜃2)−𝜃1̇ 2 sin(𝜃1 −𝜃2)) +𝑚2𝑔𝑙2 sin𝜃2)
    𝜃1'' = - (a*(𝜃2''*cos(𝜃1-𝜃2)+𝜃2'^2*sint(𝜃1-𝜃2)) + b*sint𝜃1)
    𝜃2'' = -(c*(𝜃1''*cos(𝜃1-𝜃2)-𝜃1'^2*sin(𝜃1-𝜃2))+d*sin𝜃1)
    𝜃1'(t) = ω1(t)
    𝜃2'(t) = ω2(t)
    ω1'(t) = - (a*(ω2'*cos(𝜃1-𝜃2)+ω2^2*sin(𝜃1-𝜃2)) + b*sin𝜃1)
    ω2'(t) = - (c*(ω1'*cos(𝜃1-𝜃2)-ω1^2*sin(𝜃1-𝜃2)) + d*sin𝜃2)

    theta''(t) + b*theta'(t) + c*sin(theta(t)) = 0
    theta'(t) = omega(t) 
    omega'(t) = -b*omega(t) - c*sin(theta(t))
    """
    theta1, omega1,theta2, omega2 = y
    dydt = [omega1, -b*omega1 - c*np.sin(theta1)+4.90*omega2,omega2, -b*omega2 - c*np.sin(theta2)-4.90*omega1]
    return dydt

b = 0.025
c = 5.0
y0 = [np.pi - 0.1, 0.0,np.pi - 0.1, 0.0]
t = np.linspace(0, 100, 1001)
sol = odeint(dualPendulum, y0, t, args=(b, c))
x1, p1,x2,p2 = sol.T[0], sol.T[1], sol.T[2], sol.T[3]

ちょっと言い訳すると、まともの連成振り子やろうかと思ったけど、結局緩く連結する減衰振動子というイメージで相互作用は、+s*omega2や+s*theta2にしました。
※誰も言っていないけど、要はこの辺りは適当に非線形に相互作用する振動子系ならカオスな領域がありそう。。。
因みに数値解法は以前の記事見てください。
ということで、相互作用s*omega2をいろいろ変更すると以下のような特徴な絵が出てきました。
相互作用なし;目玉
plot_xp.png
0.01omega2*omega2;オタマジャクシ
plot_xp1.png
k=0.01;目ぢから
plot_xp1omega001.png
k=0.02;眼の虹彩
plot_xp1omega002.png
k=0.03;成熟したオタマジャクシ
plot_xp1omega003.png
k=0.25;串団子
plot_xp1omega025.png
k=0.45;バットマン
plot_xp1omega045.png
k=0.90;アラジンの魔法使い
plot_xp1omega090.png
k=4.90;天使
plot_xp1omega490.png
上記の代表的なthetavstを見ると
0.01omega2*omega2
plot_thomegavst1.png
k=0.25
plot_thomegavst1025g.png
k=0.90
plot_thomegavst1090g.png
omegavstを見ると
0.01omega2*omega2
plot_thomegavst2.png
k=0.25
plot_thomegavst2025g.png
k=0.90
plot_thomegavst2090g.png

(3)連成振り子をOculusGoする

とにかく連成振り子作った。。って、鎖もないから振り子作るのもちょっとでした。

【参考】
Unityで超シンプルで超カンタンに”揺れもの”の実装
参考の記載はある意味簡単に見えますが、。。。実は振り子動くまで二日かかりました。
原理的には、回転中心(固定位置)と回転方向とそもそもそれぞれの接点を合わせないといけないという。。。よくよく計算しないと動かない。。
ということで普通の振り子は以下のとおりの設定です。
penPanel.jpg
penCylinder.jpg
penSphere.jpg
連成振り子も同じように作成します。
この振り子のパネルをはずして、もう一個振り子を作成してその間を仕方ないのでCylinderで連結しました。
ということでこんな感じになりました。
dablePenCylinder0.jpg
上記の振り子のパネルの代わりにCylinder0をiskineticにチェックして動かないようにして、これでエネルギー授受を期待したましたが。。。
以下の通り。。。
【OculusGo】いわゆる緩い連成振り子♬

※画像をクリックするとYouTube動画につながります

やはり、残念ながら、なかなかカオスな振舞の領域が再現できませんでした。。。まだまだやり切れていないが。。

まとめ

・連成振り子のカオス的振舞をいろいろやってみた
・位相空間の絵が天使な図柄が出てきた。。マイカオス(笑)
・OculusGoで連成振り子を作成できた

・OculusGoはエネルギー伝達が不十分でカオスな領域を実現できていない
・連成振り子の相図作成までできていない。。そもそも相図作成のパラメーターが定まっていない

MuAuan
2021年為になる記事にする 記事420いいね2000フォロワー200 2020年;いい記事を書く 記事359/350いいね1590/1500フォロワ ー144/150 2019年 記事275/300いいね1035/1000フォロワー97/100 2018年 記事140/200いいね423/500フォロワー48/50 7/8/2018 記事90いいね227フォロワー25
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away