フィードフォワード制御


本稿では,モータに任意の電圧eを入力として与えることができると考える.また,制御周期はミリ秒単位であり,インダクタンスの影響L\dot{i}は無視できると仮定する.

このような条件下で,どのような電圧を与えれば,どのような加速度,速度をモータが出力するか考えよう.

ダイナミクスを考える

仮定より,モータの電気系・機械系を合わせた状態方程式は以下のようにあらわされる.

(1)    \begin{align*} e          =&Ri+K_E\omega\\ \tau       =&K_Mi=J\dot{\omega}+B\omega+M_Rsgn(\omega)\\ sgn(\omega):=&\left\{ \begin{array}{l} -1(\omega<0)\\  0(\omega=0)\\  1(\omega>0)\\ \end{array} \right. \end{align*}

式を変形して,

(2)    \begin{align*} e          =&\frac{RJ}{K_M}\dot{\omega}+(\frac{RB}{K_M}+K_E)\omega+M_Rsgn(\omega)\\ \end{align*}

記号をおきかえて,

(3)    \begin{align*} e          =&a_1\dot{\omega}+a_2\omega+a_3sgn(\omega)\\ a_1 :=&\frac{RJ}{K_M}\\ a_2 :=&\frac{RB}{K_M}+K_E\\ a_3 :=&M_R \end{align*}

定数a_1,a_2,a_3が既知であれば,回転速度\omega,回転角速度\dot{\omega}をある程度自由に制御できることがわかる.

定数を推定する

a_1,a_2,a_3を得る方法として,a_1,a_2,a_3を構成する定数すべてを調べることがまず考えられるが,機械系全体の慣性モーメントJや,粘性摩擦抵抗Bを得ることは難しい.そこで,モータの各パラメータを計測するのではなく,実験によってa_1,a_2,a_3全体を推定することを考える.

まず,モータに一定のデューティe_1を十分長い時間(1秒程度)与える.
ただし,e_1はモータが回転し始める程度に大きい正の値とする:e_1>a_3>0.定常状態になったら,エンコーダ値のログ\theta_1(t)を記録する.計測したエンコーダ値\theta_1(t)より,定常状態の回転角速度\omega_1=\dot{\theta}を求める.(エンコーダ値の傾きが回転角速度になっている)

定常状態では,\dot{\omega}\to 0,sgn(\omega)=1となるから,

(4)    \begin{align*} e_1          =&a_2\omega_1+a_3\\ \end{align*}

というa_2,a_3間の関係式を得る.同様の計測を繰り返せば,さまざまなデューティe_1,e_2,...,e_nに対する回転角速度\omega_1,\omega_2,...,\omega_nが得られる.

(5)    \begin{align*} e_i          =&a_2\omega_i+a_3\\ \end{align*}

各計測には誤差が乗っているため,複数の計測結果をマージすることで,それらしい値を推定する.たとえば,最小二乗法を使う場合,以下の二乗誤差S:(a_2,a_3)\mapsto S(a_2,a_3)を最小化するa_2,a_3を採用すればよい.

(6)    \begin{align*} S(a_2,a_3):=\sum^n_{i=1,...,n}(a_2\omega_i+a_3-e_i)^2 \end{align*}

この式を最小化するa_2,a_3は以下のように求まる.

(7)    \begin{align*} a_2 &=\frac{nD-BE}{nA-B^2}\\ a_3 &=\frac{AE-BD}{nA-B^2}\\ A&:=\sum^n_{i=1}\omega_i^2, B:=\sum^n_{i=1}\omega_i\\ D&:=\sum^n_{i=1}\omega_i e_i^2, E:=\sum^n_{i=1}e_i \end{align*}

ただし,定数のおきかえとして,A,B,D,Eを置いた.

このa_2,a_3をベースにしてロボットを走らせ,加速度・速度のログをもとにa_1をチューニングすればよいと思われる.(この推定法を上位陣がつかっているかどうかは不明)

使い方

モータを時刻毎にどう動かしたいかのプロファイル\theta(t)を用意する.そして,モータに以下の電圧e(t)を与えればよい.

(8)    \begin{align*} e(t)=a_2\ddot{\theta}(t)+a_3\dot{\theta}(t) \end{align*}

例えば,\dot{\theta}(0)=0,\ddot{\theta}(0)=0の条件下で,加速度m_a\in\mathbb{R}で等加速度運動をしたい場合,

(9)    \begin{align*} \theta(t)=&\frac{m_a}{2}t^2\\ \dot{\theta}(t)=&m_at\\ \ddot{\theta}(t)=&m_a \end{align*}

であるから,

(10)    \begin{align*} e(t)=a_2m_a+a_3m_at \end{align*}

のように入力電圧eを与えればよい.

摩擦トルクは無視できるか

摩擦トルクK_Mや,粘性摩擦Bはモータが小型化するほど大きくなる傾向にある.摩擦トルクはギアのかみ合いによっても増える.ゆえに,真面目に機械設計をしてギアのかみ合わせを滑らかにし,かつ,そこそこ大きいモータを使えば無視できなくはないようである.

逆に,ハーフサイズマイクロマウスのように,振動モータを使う場合は摩擦トルクが増大する.ギアのモジュールが小さくなると相対的に機械制度は落ちるため,どうしてもギアのかみ合わせによる摩擦も増える.

マイクロマウスクラシックでは摩擦項は無視できるかもしれないが,ハーフサイズマイクロマウスでは,摩擦項は無視できない.PID制御などの線形制御理論は摩擦項のような不連続性を扱うことはできない.パラメータチューニングによっては,たまたま動くこともありえるかもしれないが,あくまで「たまたま」でしか動いていないことに注意すべきである.

外部リンク

参考文献

  • 見城, 佐渡友, 木村: イラスト・図解 小型モータ 最新のすべてがわかる, 技術評論社(2006)