ぱわぷろ活動日誌

ゆったりまったり技術を学んでいます。備忘録代わりのブログです。書いてあることは私見が多いので参考程度にしてください。

クラシックマウスを作ろう!(13)〜壁制御と姿勢制御〜

初めましての方は初めまして。

そうでない方はお疲れ様です。

しぶとく生きてるぱわぷろです。

今回はマウスでよく言われる壁制御、一般的には姿勢制御に関する話です。

またまた、宗教戦争が繰り広げられる場面なので、話半分に解釈していただければと思います。

 

目次はこちらの通り。

 

 

姿勢制御とは

まず「姿勢」に関してです。ざっくり言うと位置はそのままで、どんな角度状態かって話です。

人形が静止して北を向いているとしても、立っている、寝転んでいる、逆立ちしている状態があります。これは人形を回転させることで互換可能です。

 

姿勢のリンク : https://www.jsme.or.jp/jsme-medwiki/14:1005171

 

工学っぽくなると、ワールド座標系に対するロボット座標系の回転角度が「姿勢」になるのかと思います。

3次元の姿勢を制御している代表例は人工衛星やドローンに付いているカメラのジンバルでしょうか。

これらを計算するにはオイラー角やロール、ピッチ、ヨーで三角関数をゴリゴリ解く方法もありますが、特異点を原因とするジンバルロック現象が特有の問題です。クォータニオンに拡張することでこの問題を解決できることが広く知られています。

 

マウスではここまでは余談でした。

マイクロマウスは独立差動二輪方式のロボットであり基本的に2次元の運動です。

したがって、マウスで言う姿勢とは「機体の先端が向いている方向」ぐらいの認識でよいです。

この方向を制御するにあたって既にこのシリーズでは角速度制御について触れています。

該当記事:

ss-sholaw-wmmc.hatenablog.com

しかし、姿勢制御は角速度制御だけではありません。

同じジャイロセンサでも角度制御を用いる場合もありますし、場合によっては他の内界センサからの情報を基にして姿勢を制御することもありますね。

 

そして、マウスの迷路には特殊なオブジェクトがあります。

それが「壁」であり、これをマウスの位置・姿勢制御に利用する手法を総じて「壁制御」と呼んでいます。

参考:

blog.tokor.org

元々は後述する「横壁制御」の事を「壁制御」と呼んでいましたが、近年は前壁補正や壁切れ、斜め制御など壁を利用した様々な制御方法が提案されており、それらと区別するため本記事では以下のように定義します。

  • 壁制御...迷路の壁を利用した制御の総称

この辺りは基本的でありながら非常に奥が深い分野で、今も議論が尽きない分野ですので、自分がやっていた方式についてだけ簡単に説明します。

横壁制御

本記事では、マウス進行方向に対して横にある壁を利用する制御を便宜上「横壁制御」と呼称します。マウス大会で言う「壁制御」=「横壁制御」ぐらいの認識です。

横壁制御については過去に様々な人が各々のブログでその手法を紹介しています。

blog.tokor.org

kt33.hatenablog.com

 

横壁制御ですが、自分はクラシックのステッパー時代から「近い壁から少し離れる」のを目的にしています。初歩的です。

手法は極めて単純です。

まず、マウスをスタートラインに置いた際には必ず左右の壁が存在します。

この時の壁センサ値を基準とします。

 

走行中にタイマ割込で取得した値と基準値の差分を取り、壁から離れるようにモータへの出力に加えます。

この場合、左右のセンサ値が変数になるので2変数になります。これらを統合して1変数で処理する手法も存在します。

 

参考: 

壁制御 [Mice Wiki]

 

また、センサ値と実際の壁までの距離特性を測定し、近似関数によって制御に用いる手法なども存在します。

 

それぞれの制御との干渉

壁センサの値は壁に対する位置や姿勢に依存しています。

特に両壁との距離を保とうとする場合は、姿勢の要素が強く入ってきています。

 

これをそのまま機体制御に入れると、他の制御との干渉などにより悪さをする場合があります。

 

過去に自分が経験した例としては

1.角速度制御と横壁制御の干渉による異常な振動

2.並進が低速の場合(発進時など)に横壁制御による振動

3.片壁や串に突入した瞬間に壁or柱に突っ込む

などがあります。

 

それぞれの解決方法は様々なものがあります。

自分は次の様な方法で解決を図っています。

適切な方法か否かは検討しきれていませんが、見た目はマシになっています。

 

1. 壁制御のゲインを大きく下げておく

2. 重心速度が一定値以下の場合は壁制御カット

3.壁センサ値が一定値以下の場合、片側の制御をカット

 

壁制御の手法は様々であると言いましたが、それらが何故工夫されているか。問題に当たるたびに気付かされることが沢山あります。

ただし、他の制御との兼ね合いを理由とした問題は少なからず存在するので、知識として知っていただければ幸いです。

 

他の壁制御

これまでは横壁制御に関してつらつらと述べてきました。ここからは壁や柱を用いた技術の紹介です。

 

前壁距離合わせ

探索時などに袋小路で行われる自己位置の修正。壁センサの目標値から偏差を計算し、PD制御などで位置制御を行い、実現させることが多い。袋小路の場合は1回目は前壁、2回目は左右壁のどちらか1つで行われる。

この時に姿勢も修正する手法もある。

 

前壁補正(スラローム時)

スラロームターンの前後には僅かに直線で走行し距離合わせをする区間が存在する。

この直線走行距離を前壁センサの値によって変化し、距離のズレを吸収する補正。

スラローム参考: こいずみさんの

 

壁切れ

連続した壁の切れ目を検知して走行距離の補正を行う手法。壁センサ値の変化を観測するために、過去数十msec分のセンサ値を保持する必要がある。

 

壁制御は必要なのか

ここまで書いといて何を言ってるんだと思われそうですが、壁制御って必要だと思いますか?

 

以下は、個人的な意見です。

エンコーダとIMUできっちり頑張ってズレずにできるならそれでいいんじゃないかと思います。

ただし、センサ値にはノイズが混ざるし、積分処理すると積分誤差が溜まります。その誤差を補正するために他のセンサ情報を用いて修正する手法は一般的に用いられています。

ロボットを作る上で避けては通れない道でしょう。

したがって、マイクロマウスで補正に使うことができる最も馴染み深いオブジェクトとして、壁制御は真剣に考えていきたいと思ってます。

 

もちろん、「壁制御をしないで安定する手法を確立する!」というのもマウスを作る目的になると思うので、そこは人次第かと思います。

人の数だけ目的があるのがマイクロマウスの世界の良いところだと思います。

 

以上、今回の記事では「壁制御」を1つのテーマとして進めてきました。非常に奥深く、自分が書いていいのか悩ましいほどに理解が足りていない分野ではあります。クラシックマウス・マイクロマウスの制作を志す人の一助となれば嬉しいです。

 

次回は最終回、「探索と経路導出」についてです。DCのクラシックマウスを作ることを目的とした場合、ほぼ余談になりますが、探索法と経路導出をどう解釈するかについて書いて終わろうと思います。

 

1度始めたからには終わらせないと締まりが悪いので、区切りです。

 

では、また。