運動方程式の確認と変更
倒立振子の運動方程式は,Pendulum とかかれたブロック
の中で定義されている.
後で 2 重倒立振子系に変更するときに,この部分を変更する必要があるので,
中の様子を見てみよう.
Pendulum ブロックを選択(シングルクリック)した後,
Edit タグの Look Under Mask を選択すると,以下のウィンドウが開く.
Pendulum ブロックの中身
このブロックの入力端 U は台車に加わる力で,
出力端 Cart には 台車の変位が出力される.
出力端 Pendulum には振子の角度が出力される.
運動方程式の中身は,f(u) と書かれた 2 つのブロック中に記載されている.
それぞれダブルクリックすると中身を見ることができる.
上側の f(u) ブロックは,力,角速度, 角度を入力とし,
台車の加速度を出力とするブロック.
下側の f(u) ブロックは,台車の加速度を出力とするブロックである.
ブロック中,力,角速度,角度はそれぞれ u(1), u(2), u(3) と記載されている.
2 つの f(u) ブロックの記述を整理して,つぎの連立微分方程式が記述されていることを確認せよ.
この運動方程式の導出については,ここでは説明しない.
(2 重倒立振子の運動方程式の導出手順が ここ にある.
1 重倒立振子の運動方程式は,2 本目のリンクの質量を 0 とおくことにより得られる)
この運動方程式は,振子の重心まわりの慣性モーメントを 0 とおいて導出されている.
振子の重心まわりの慣性モーメントを J とおくと,つぎの運動方程式が得られる.
ここで J = 0 とおくと,前出の運動方程式に一致することを確認せよ.
振子の質量が均等に分布している場合には,慣性モーメントはつぎのように求まる.
2 つの f(u) ブロックに書かれた運動方程式を変更し,
振子の慣性モーメントを考慮してシミュレーションを行え.
ただし,運動方程式の記述には,慣性モーメントを表す変数 J を用いること.
設定例:
Fcn1 (台車の加速度の式):
((m*l*l+J)*(u[1]+m*l*power(u[2],2)*sin(u[3]))-m*m*l*l*g*sin(u[3])*cos(u[3]))/((M+m)*(m*l*l+J)- power(m*l*cos(u[3]),2))
Fcn2 (振子の角速度の式):
((M+m)*m*g*l*sin(u[3])-(u[1]+m*l*power(u[2],2)*sin(u[3]))*m*l*cos(u[3]))/((M+m)*(m*l*l+J)-power(m*l*cos(u[3]),2))
注意:
変数 J を定義は,つぎのように行う:
pendulum ブロックを選択(左クリック)してから
Edit タグ → Edit Mask → Initialization → Add と選択し,
Variable: フィールドに J を入力する.
慣性モーメント J が (4) 式で与えられる場合と,J = 0 の場合の時間応答をグラフに表示して比較せよ.
実行例:
(penddemo モデルウィンドウ左端の,Reference ブロックをダブルクリックして,カートの目標位置 5 を入力する)
(J = 0 としてシミュレーション実行)
>>y0 = y;
(J = 0.21*(0.61/2)^2/3 としてシミュレーション実行)
>> plot(t, y0(:,2), 'b--', t, y(:,2), 'b', t, y0(:,3), 'r--', t, y(:,3), 'r')
>> xlabel('Time [sec]');
>> ylabel('Displacement of cart and angle of pendulum');
青:台車の位置
赤:振子の角度
破線: J = 0 の場合
実線: J を (4) 式で与える場合
振子の重心まわりの慣性モーメントを無視して設計された補償器にもかかわらず,
慣性モーメントを考慮する場合でも制御系を安定化させることができた.
このように,制御対象のパラメータが変動した場合にも,所望の制御性能を達成する補償器のことを,ロバスト補償器という.
台車の質量, 振子の質量, 振子の長さを適当に変えて,変える前と後の応答を比較してみよ.