前回までは角度の現状維持を主に行ってきました。
それなりに安定して立つのですが、あくまで現状維持なのでそのままでは誤差等で角度が付いてしまった場合にその角度を維持しようとします。また速度が付いてしまうとその速度を維持しようとします。
そこで、
・角度を0に戻す
・速度を0に戻す
制御を導入します。
2023/03/13 ちょっと雑バージョンで公開
速度を制御するために
普通の車両の場合、速度を0に戻したい場合は減速(進行方向と逆向きに加速度を発生)すればいいのですが倒立制御の場合はちょっと違います。
直立で安定して走行している状態から単純にタイヤを減速すると進行方向に向かって傾いてしまいます。
倒立を維持するには加速するしかないので結局止まることができません。
従って、倒立ロボットを減速するには違う事を考える必要があります。
ここで、物理バランス基礎でのモーメントのバランスに戻ります。
ロボットが傾いているとき、転倒モーメントをキャンセルするために加速させました。
倒立が安定している場合転倒角度と加速度には以下の関係が成り立ちます。
加速度 = 重力加速度×tan(角度)
角度のために加速度を発生させましたが、逆に加速度を発生させるときには角度を付ければいいのです。
ではどうすれば後ろ向きに傾くのか?
最終的には「
進行方向に向かって加速すると
後ろに傾くので
減速する」要するに「
加速すると
減速する」というちょっと不思議な事になります。
角度に応じて
減速度が決まるので
大きく減速させたい時ほど
大きく傾けることになります。
直立状態から傾けるのは比較的簡単ですが、一度傾いたものを戻すにはかなりの加速が必要になります。あまりにも傾きすぎると
装置性能によっては立て直せなくなります。
速度制御のために
どこまで傾けて良いか制限をかけておいた方が良さそうです。
望みの角度に対してオープンループで加速度を与えるだけでは望みの角度を維持できない様です。望みの角度と現在の角度を比較してフィードバックを行う必要がありそうです。(後日詳細を確認予定)
エネルギーの蓄積
やっとそれっぽい話になります。
質量mのロボットが速度V1で移動しているとき、ロボットは
運動エネルギー:1/2 m*V1^2
を蓄えていることになります。
また、設定した目標速度Vrefに合わせて走行している場合、
運動エネルギー:1/2 m*(V1-Vref)^2
を余剰の運動エネルギーとして蓄えていると考える事ができます。
前進の運動エネルギーが蓄積されているときは後方に傾斜すれば減速できます。
しかし、先に説明したように単純に運動エネルギーに係数をかけたものを角度としてしまうと傾きすぎて立て直せなくなる可能性があります。
そこで、一旦
仮の目標角度=運動エネルギー×係数
として角度を計算しておいて、傾けて良い最大角度に収まるように目標角度を制限するのが良さそうです。
角度などを使って運動エネルギーを制限する事で目標速度にあわせて走行する事ができるようになります。
後日もう少し細かく解説する予定