佐倉です。
DCモータを使ったマイクロマウス入門も6回目となりました。
今回は壁を使った直進の制御と、台形駆動、その発展を解説します。
直進の制御
実は壁センサを使った直進制御に関しては、「こうするべきだ」というような決定版の制御はありません。
前回、制御を簡略化して軌道に対するフィードバックから速度,角速度のフィードバックに変えてしまいました。
「直線を進む」というのが何を指すのかというと、「軌道を辿る」ということなので、制御を簡略化したしわ寄せがここに来てしまっている事になります。
というわけで、経験的にわりと上手くいく方法をご紹介します。
直進中の角加速度αに、
α += Kp * ( (RSensor - RReference) - (LSensor - LReference) )
と、適当な制御をかけてしまって更に、角速度の積分制御成分をリセットしてしまいます。
Ki * ∑error
の∑error を積分している変数を0でクリアしてしまう感じです。
ここはまだ色々と議論、試行錯誤されている部分なので、是非DCマウスを初めて一石を投じてみてください。
軌道をたどる方向に持っていくために、座標のセンシングをがんばるのもアリです。
目標値の与え方
こんな感じで実は速度と角速度で制御する方法には少し無理があります。
しかし、最初からほぼ完璧に計画した通りに走れば、壁からの制御なんて微々たるものだから適当でいいや、という考え方もできますね。
計画したとおりに走ってもらうには複数の要素が必要になります。
- フィードフォワード制御の出力を正確にする
- フィードバック制御を綺麗にする
- 目標値の与え方を車体にやさしい物にする
1、これが綺麗であればあるほど、車体は目標値にきっちり追従します。
2も当然です。発振なんかしてしまっていては、走りたい軌道と走る軌道がずれてしまいます。
3はわりと盲点です。
二自由度制御で綺麗に制御するといっても、絶対にできない運動というのが存在します。
絶対に追従しない目標値
例えば、速度0[m/s]から、次の瞬間にいきなり1[m/s]で走れという司令を出しても絶対に走りません。
加速度が∞になってしまう目標値の与え方なので、当たり前ですね。角速度に関しても同様です。
絶対に走らない目標値
制御教科書のレギュレータの項目には、初期値から目標値に制定されるまでのグラフが載っているので
なるほど、こうすれば良いのか。と思うかもしれませんが、それはあくまでレギュレータの話です。マイクロマウスはサーボです。
台形駆動
制御対象に慣性がある場合の目標値の与え方として一番有名なのは台形駆動です。
ある速度からある速度への遷移を等加速度でつなごうという考え方です。
台形駆動
台形といいながらも三角形になっている部分が出てきていますね。
重要なのは台形であることではなく等加速度でつなぐ事なので、こういうパターンも出てきます。
(マイクロマウス界隈でクロソイド曲線という言葉を聞いたことがあるかもしれませんが、
スラロームにこれを使うと走る軌跡の一部がクロソイド曲線になります。)
S字加速
更になめらかな目標値の与え方があります。
剛体に力を加えて動かす場合には台形駆動で良いのですが、タイヤはやわらかいですよね。
車体も正確には剛体ではありません。このように、やわらかい性質が車体のいたるところに潜んでいるわけです。
この場合に何が起こるかというと、
加速しようと思って力を出す→
力は、やわらかい部分を時間をかけて伝わる→
力が伝わりきっていないので、センサには動いたという情報が来ない→
フィードバックが追従させようとして、より大きな力を出力する→
フィードバックが伝わった時に過大な出力となって姿勢が崩れる
というような悪循環が生まれます。
フィードバックでこれが起こらないようにする方法はありますが、基本的にはフィードバックのかかり方が弱くなります。
すると、速度や角速度の追従が悪くなり、思った軌道を走らなくなってしまいます。
目標値の与え方である程度解決できるのであれば、それに越したことはありません。
台形駆動では速度と速度をなめらかにつなぐ という発想でしたが、
今度は加速度と加速度もなめらかにつなごう という発想です。
どうなるかというと、速度や角速度をS字の形で与えるS字加速と云うものを使います。
S字加速のS字を作る方法はたくさんあります。
- sin関数
- 2次関数
- 4次関数
を使うものがメジャーです。
全領域を曲線にしなくても良い事に気をつけてください。S字部分を大きくする=平均の加速度が低い=遅い なので、必要最小限のS字にするのが速く走るコツです。
あくまで、力が伝わるまでに時間がかかる事が問題なのです。
おしまい
今回でDCマウス入門は予定していた行程を終えたので、一旦終了としようと思います。是非、DCマウスを作ってみてください。
次回からはアルゴリズム系の話をしてみようかなと思います。
迷路 |
柱 | 壁 |