元高専生のロボット作り

元高専生のロボット作り

主にプログラミング, 電子系について書きます。たまに機械系もやります。メモ代わりの記事ばっか書きます

アブソリュートエンコーダを使って位置制御を行うときの問題点と解決策

アブソリュートエンコーダを使用すると絶対角度を取得することができます。

ここで、アブソリュートエンコーダを使用して位置制御を行うことを考えると、以下のような問題が思いつきます。

ケース1

  • 1.例えば、現在の角度が10degのとき、目標角度を350degに設定します。
  • 2.目標値に向かって制御しますが、ここでオーバーシュートして350degを超え、現在の角度は370degになりました。
  • 3.アブソリュートエンコーダによって絶対角度を取得すると10degなので、また1に戻り、ずっとぐるぐる回り続けてしまいます。

また、そもそも10degから20deg戻れば絶対角度では350degになるので、戻るように制御したいところです。

ケース2
現在の角度が350deg、目標角度を0degに設定しても、ケース1と同様に逆向きにぐるぐる回り続けてしまいます。

f:id:sgrsn1711:20200828015603p:plain


解決策

微分または差分を使う方法

エンコーダから取得した角度を常に微分しておき、その値が急激に大きくなった時が0degと360degの境界です
なので、これを利用して、360degを超えて10degになったとしても、370degなんだと判断がつきそうです。
まあ、この方法はわりとすぐに思いつきますね。



現在の値を2通り用意する方法

現在値に±360deg加減算したものを用意し、目標値との偏差がもっとも小さい値を利用します。
例えば、目標値350deg、エンコーダから取得した角度10degだとします。

A: 10deg
B: 10+360=370 deg
C: 10-360=-350 deg

A, B, Cのうち、目標値350degとの偏差が最も小さい値はBの370degなので、これを使用して制御を行うようにすればよいです。