以下に示すモーメント交換で車輪倒立振子をシミュレートするシステムを作成したいと考えています。
これまでのところ、3 つのモデルで構成されるシステムがあります。
回転振り子.mo
model RotationalPendulum
import Modelica.SIunits;
Modelica.Mechanics.Rotational.Interfaces.Flange_a p;
parameter SIunits.Length L = 1.0;
parameter SIunits.Mass m = 1.0;
protected
SIunits.AngularVelocity omega;
SIunits.AngularAcceleration alpha;
parameter SIunits.MomentOfInertia J = m * L ^ 2;
constant Real g = Modelica.Constants.g_n;
equation
// equation to compute p.tau
end RotationalPendulum;
フリクションレスジョイント.mo
model FrictionlessJoint
Modelica.Mechanics.Rotational.Interfaces.Flange_a a;
Modelica.Mechanics.Rotational.Interfaces.Flange_b b;
equation
a.tau = 0;
b.tau = 0;
end FrictionlessJoint;
PendulumSystem.mo
model PendulumSystem "Simple pendulum"
RotationalPendulum pend(m = 1, p(phi(start = 1, fixed = true)));
FrictionlessJoint joint;
Modelica.Mechanics.Rotational.Components.Fixed fixed;
equation
connect(pend.p,joint.a);
connect(joint.b,fixed.flange);
end PendulumSystem;
RotationalPendulum.mo では、モデルは Tau の値を計算するための方程式であり、次の形式を持ちます。
tau=gamma1*sin(q1)+kp*(q2+gamma2*q1)+kv*(d/dt(q2)+gamma2*d/dt(q1))
ここで、gamma1、gamma2、kp、kv は定数で、q1 = theta1、q2 = (theta1 + theta2) です。
私が抱えている問題は、ロッドの角度であるため theta1 の値を取得する方法がわからないことですが、方程式は回転振り子のモデルにあり、p.phi である theta2 の値にのみアクセスできます (私が間違っていなければ)。アイデアと助けをありがとう。