2

以下に示すモーメント交換で車輪倒立振子をシミュレートするシステムを作成したいと考えています。

ここに画像の説明を入力

これまでのところ、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 の値にのみアクセスできます (私が間違っていなければ)。アイデアと助けをありがとう。

4

2 に答える 2

0

Modelica_LinearSystems2 で定義されている同様の二重振り子モデルを見てください。

Modelica_LinearSystems2.Controller.Examples.Components.DoublePendulum

github で見つける: https://github.com/modelica/Modelica_LinearSystems2

于 2017-10-17T14:18:39.887 に答える