見出し画像

実際に使える制御工学:応用編(7)「制振フィードフォワード制御。ロボットを揺らさず動かす制御方法。」

<この記事で伝えたい事> 

  • 減速機剛性に起因する振動の周波数は、意外なほど低いです
    ロボット構造やサイズによりますが、中型クラスでも10~20Hz程度で振動することがあります。
    そうした低い周波数で振動するロボットは、高速動作させづらいです。
    (加減速度をちょっと大きくすると、すぐ振動してしまいます)

  • 低周波数で振動する(=低剛性)ロボットを、振動なく高速動作させる代表的な方法の1つが制振フィードフォワード制御です
    フィードバック制御はシステム全体への影響度が高く、製品適用前の事前テスト項目が多いです。
    開発期間が短いときは、フィードフォワード制御が適します。
    (うまくはまれば、フィードバック制御の方が高い効果が得られることが多いです)




1. はじめに 

自己紹介はこちらです。
 
この記事は、主に若手~中堅エンジニアに向けた技術紹介・解説記事シリーズの第7弾です。
 
今回は、低剛性ロボットを揺れなく高速動作させる方法の1つである制振フィードフォワード制御を紹介・解説します。


2. 二慣性系の振り返り

応用編(6)で説明したとおり、減速機(やその他機械部品)の剛性を考慮したロボット関節モデルが二慣性系です。
(下図は二慣性系のイメージ)

二慣性系のイメージ
二慣性系のイメージ

一般的に、ロータリーエンコーダ(位置センサ)が検出するのは、モータ角度です。
ロボット関節角度(=リンク角度)を検出するエンコーダを備えるロボットは稀です。
 
したがって、コントローラで制御できるのは、基本的にモータ角度です。

しかし、モータ角度を振動なく動かせたとしても、ロボット関節が振動しないとは限りません。


ロボット関節の振動は、ロボットの作業精度低下につながります。
これは、ロボットを使ったモノづくりにとって大問題です。
(せっかく作ったモノが品質不足になる可能性すらあります)
 
ここで、改めて二慣性系の運動方程式を見てみましょう。

$$
\left\{
\begin{array}{lll}
J_m\cdot\ddot{\theta}_m&=\tau-\frac{K_c}{N}\cdot\theta_s&\cdots(1)\\
J_L\cdot\ddot{\theta}_L&=K_c\cdot\theta_s&\cdots(2)\\
\theta_s&=\frac{\theta_m}{N}-\theta_L&\cdots(3)
\end{array}
\right.
$$

$$
\begin{array}{lll}
J_m&:&\text{モータイナーシャ}\\
J_L&:&\text{リンクイナーシャ}\\
K_c&:&\text{減速機剛性}\\
N&:&\text{減速比}\\
\tau&:&\text{モータトルク}\\
\theta_m&:&\text{モータ角度}\\
\theta_L&:&\text{リンク角度}\\
\theta_s&:&\text{ねじれ角}
\end{array}
$$

(1),(2)式に(3)式を代入すると、下式が得られます。

$$
\left\{
\begin{array}{lll}
J_m\cdot\ddot{\theta}_m&=\tau-\frac{K_c}{N}\cdot\left(\frac{\theta_m}{N}-\theta_L\right)&\cdots(4)\\
J_L\cdot\ddot{\theta}_L&=K_c\cdot\left(\frac{\theta_m}{N}-\theta_L\right)&\cdots(5)
\end{array}
\right.
$$

(5)式をラプラス変換して変形すると、モータ角度$${\theta_m}$$-リンク角度$${\theta_L}$$間の伝達関数が得られます。

$$
\begin{array}{l}
J_L\cdot s^2\cdot \theta_L=K_c\cdot\left(\frac{\theta_m}{N}-\theta_L\right)\\
\left(J_L\cdot s^2+K_c\right)\cdot \theta_L=\frac{K_c}{N}\cdot \theta_m 
\end{array}
$$

$$
\begin{array}{ll}
\therefore \cfrac{\theta_L}{\theta_m}&=\cfrac{K_c}{N}\cdot\cfrac{1}{J_L\cdot s^2+K_c}\\
&=\cfrac{1}{N}\cdot\cfrac{K_c}{J_L\cdot s^2+K_c}\\
&=\cfrac{1}{N}\cdot\cfrac{\frac{K_c}{J_L}}{s^2+\frac{K_c}{J_L}}\\
&=\cfrac{1}{N}\cdot\cfrac{{\omega_a}^2}{s^2+{\omega_a}^2}
\end{array}
$$

この$${\theta_m\text{-}\theta_L}$$間伝達関数は、下図の特性を持ちます。
($${J_L=12.0_{[kgm^2]}}$$,$${K_c=6\times10^4_{[Nm/rad]}}$$,$${N=100_{[-]}}$$のとき)

共振特性
θm-θL間伝達関数の周波数特性

仮に、モータ角度$${\theta_m}$$を完璧に指令どおりに動かせても、リンク角度$${\theta_L}$$が共振現象によって振動してしまいます。
 
$${\theta_m\text{-}\theta_L}$$間伝達関数が共振特性を持っていても、リンク角度$${\theta_L}$$を振動なく動かせる方法の1つが制振フィードフォワード制御です。


3. 制振フィードフォワード制御の設計

世の中では、様々な制振フィードフォワード(以下、FF)制御技術が開発されています。

今回は、最もシンプルと思われる制振FF制御を紹介します。 


前提として、フィードバック(以下、FB)制御は3重ループ制御とします。

このため、制振FF制御は、リンクを振動させないモータ角度・角速度・トルク(≒電流)を、動作指令から計算する方法となります。

以下、設計手順をステップ分けで説明します。
(3ステップ)

STEP1
動作指令$${\theta^{ref}}$$=リンク角度FF信号$${\theta_{LFF}}$$とする。
(わざと$${\theta^{ref}}$$を振動させない限り、$${\theta_{LFF}}$$は振動しません)

STEP2
式(5)に基づき、モータ角度FF信号$${\theta_{mFF}}$$を計算する。

$${J_L\cdot\ddot{\theta}_{LFF}=K_c\cdot \left(\cfrac{\theta_{mFF}}{N}-\theta_{LFF}\right)}$$
$${J_L\cdot\ddot{\theta}_{LFF}+K_c\cdot \theta_{LFF}=K_c\cdot \cfrac{\theta_{mFF}}{N}}$$

$${\begin{array}{ll}\therefore\theta_{mFF}&=\cfrac{N}{K_c}\cdot\left(J_L\cdot\ddot{\theta}_{LFF}+K_c\cdot\theta_{LFF}\right)\\ &=\cfrac{N\cdot J_L}{K_c}\cdot \ddot{\theta}_{LFF}+N\cdot\theta_{LFF}\end{array}}$$

$${\theta_{mFF}}$$の波形は、歪むことがあります。
この歪みは、リンクを振動させないために生じるものです。
(リンクに生じるはずの振動を、逆位相の波で打ち消すイメージ)

ただ、機械寿命・耐久性の都合で、$${\theta_{mFF}}$$波形を歪ませないよう要求されるケースがあります。
加減速度を抑えるなどして$${\theta_{LFF}}$$波形を滑らかにすれば、$${\theta_{mFF}}$$は歪みにくくなります。
(滑らかなほど動作が遅くなるトレードオフはありますが)

STEP3
式(4)に基づき、モータトルクFF信号$${\tau_{FF}}$$を計算する。

$${J_m\cdot\ddot{\theta}_{mFF}=\tau_{FF}-\cfrac{K_c}{N}\cdot\left(\cfrac{\theta_{mFF}}{N}-\theta_{LFF}\right)}$$

$${\therefore \tau_{FF}=J_m\cdot\ddot{\theta}_{mFF}+\cfrac{K_c}{N^2}\cdot\theta_{mFF}-\cfrac{K_c}{N}\cdot\theta_{LFF}}$$

なお、モータ角速度FF信号は、$${\theta_{mFF}}$$を1階微分して求められます。

以上が、最もシンプルと思われる制振FF制御の設計手順です。
(実装時は、後退差分による近似微分計算を用いる想定)


下図は、3重ループ制御に制振FF制御を組み合わせたブロック線図です。
速度PI制御後段のイナーシャは、リンクイナーシャと減速比を考慮した全体のイナーシャです。
(減速機があると、モータからみたリンクイナーシャは$${\frac{1}{N^2}}$$倍されます)

制振FF制御ブロック線図
制振FF制御ブロック線図

4. シミュレーション検証

下表は、制振FF制御の効果検証シミュレーションに用いたパラメータをまとめたものです。


下図は、制振FF制御あり/なしのリンク角度シミュレーション結果を比較したものです。

制振FF制御により、振動低減と指令追従速度の高速化を同時に達成できているのが確認できます。

リンク角度シミュレーション結果
リンク角度シミュレーション結果


下図は、制振FF制御あり/なしのモータ角度シミュレーション結果を比較したものです。
(動作指令をモータ側換算にするため、減速比$${N}$$を掛けています)

センサ検出信号を使ってFB制御をかけているので、制振FF制御あり/なしのいずれでも、モータ角度はそれほど振動しません。

モータ角度シミュレーション結果
モータ角度シミュレーション結果

ただ、制振FF制御ありの場合は、モータ角度波形に歪みが出ました。
前述のとおり、動作指令波形を滑らかにすれば、この歪みは改善します。


5. ノッチフィルタとの使い分け

応用編(3)で紹介したノッチフィルタ(による振動抑制)は、
「ロボットを振動なく動かす」
ことを目的とする点が、制振FF制御と共通します。
 
そこで、この2つをどう使い分けるか説明します。


制振FF制御は、数理モデルに基づき、
「振動させたくない部分(今回はリンク角度)を揺らさず動かすには、モータをどう動かすべきか?」
を導出する方法です。

このため、数理モデルから事前予想できる振動については、制振FF制御を用いると良いです。


一方、ノッチフィルタは、
「FB制御ゲインを上げすぎたことで生じる振動」
を低減する目的で使われることがほとんどです。

性能向上を狙ってFB制御ゲインを上げた結果として振動が生じた場合、ノッチフィルタを用いるのが良いです。


なお、制振FF制御には、数理モデルに組み込まれていない外乱を抑圧する効果はありません。

外乱抑圧性能の向上のため、FB制御ゲインを上げることはあります。

その結果、振動が生じた場合は、制振FF制御とノッチフィルタを併用すると良いです。


6. おわりに

この記事では、制振フィードフォワード制御について紹介・解説しました。
 
FF制御は、モーションと同様に、制御の安定性を気にせず設計できます。
このためか、FF制御にはメーカ毎の独自色が出やすいです。 


今回紹介した制振FF制御は、数ある方法の中でも最もシンプルな部類です。
高度なものだと、パラメータの自動調整をした上で、複数種類の振動を低減することが可能です。 


FF制御のおおまかな情報は、メーカの製品カタログなどからも得られます。
また、製品マニュアルから、ある程度の仕組みまで分かる場合もあります。
(製品を購入せずとも、メーカwebサイトからマニュアルをDLできることも多いです)
 
そういう目線でカタログやマニュアルを読むのも面白いかもしれませんね。 


前回:応用編(6)「ロボット関節のモデリング」はこちら
次回:応用編(8)「ACモータのベクトル制御」はこちら


いいなと思ったら応援しよう!