バタワースフィルタを併用した1回微分における領域エラーについて
9 views (last 30 days)
Show older comments
私は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
Toshinobu Shintai
on 9 Nov 2019
再度確認なのですが、Zero-Poleブロックの設定はどのようになっているか教えていただくことはできますでしょうか。
私のMATLABでは添付画像のように設定項目がありまして、バターワースと微分を構成する場合は、きちんと伝達関数が構成されるように極とゼロ点とゲインを設定しなければならないようになっています。
Answers (1)
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
See Also
Categories
Find more on S-Parameters and Linear Components in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!