MATLAB Answers

バタワースフィルタを​併用した1回微分にお​ける領域エラーについ​て

1 view (last 30 days)
Takahiro OHASHI
Takahiro OHASHI on 7 Nov 2019
Commented: Takahiro OHASHI on 10 Nov 2019
私はMatlab Simulinkを用いてロボットの動作シミュレーションを行っているのですが、微分器の影響でエラーが出てしまい困っています。
ロボットの運動方程式、インピーダンス制御則は式(1)(2)のように表されます。
ただし、ロボットの慣性Mr・望みの慣性Mdは、手先位置rから算出されるqの変数を含みます。
・・・(1)
・・・(2)
現状は式(2)において、位置を1回微分して速度を算出する際に、Simulinkのブロックの1つであるZero-Poleを用いて微分を行っています。上記の図のように、Zero-Pole内では1回微分する際に2次のパターワースフィルタ(カットオフ周波数ωcは20 [Hz])を用いてプロバーになるようにしています。それを用いると以下のようなエラーが出ます。
% 「領域エラーです。実数 x から複素数の結果を計算するには、'asin(complex(x))' を使用してください。」
ちなみにZero-Poleを用いずに、加速度の積分により速度を算出する場合はエラーが出ずにコンパイルは正常に完了します。
また、Zero-Poleを用いてもエラーが出ずコンパイルが完了した条件は次の2つになります。
・位置の2回微分で加速度を算出する場合
・PID制御も用いているのですが、そこでのZero-Poleによる微分を用いた場合
原因がわかる方はおられますでしょうか?
現状は実機実験とほぼ同様のシミュレーションを作成したいため、Zero-Poleを用いて微分は行う必要があります。
  4 Comments
Takahiro OHASHI
Takahiro OHASHI on 9 Nov 2019
ご丁寧にありがとうございます。
パラメータの設定は以下のようになっています。
・零点    :DiffLPF(1).Zeros = 0
・極     :DiffLPF(1).Poles = zeros(1,2)
・ゲイン   :DiffLPF(1).Gain = (2*pi*omega_c)^n
        ※omega_c = 20 [Hz](カットオフ周波数)
・絶対許容誤差:auto
文字だけになりますが、パラメータが表記されている画像も添付しておきます。

Sign in to comment.

Answers (1)

Toshinobu Shintai
Toshinobu Shintai on 10 Nov 2019
ひとまず、Zero-Poleブロックの使い方を間違えていることが分かりました。ただ、領域エラーが発生している理由はよく分かりません。
Zero-Poleブロックの「極」「零点」の項目には、極と零点の値を並べたベクトルを指定します。よってOHASHI様の指定の仕方だと
(s - 0) * (2*pi*omega_c)^n
----------------------------------------
(s - 0) * (s - 0)
という伝達関数が出来上がります。これはただの積分になっています。
2次バターワースかつ微分をZero-Poleブロックで表現するには、私の画像で示した指定方法を取らなければなりません。
  3 Comments
Takahiro OHASHI
Takahiro OHASHI on 10 Nov 2019
Zero-Poleブロックの中身が想定した通りになっていることを、周波数応答から確認できました。改めてありがとうございます。
領域エラーについては引き続き原因を探っていこうと思います。

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!