fc2ブログ

笑う門にも壁切れあり?

本稿はマイクロマウス Advent Calendar 2023の17日目の記事です。
前回の記事はN.Go.くんの404 Not Foundでした。予期せぬエラーが発生しました。NullPointerException...ガッ!!(ネタが古い)

◆はじめに
 ご無沙汰しております。ついに新型コロナに罹ってしまったコヒロです。
 予定通りであれば出張の移動中にのんびり書こうと思っていたのに、布団の中で震えるだけの日々を過ごしてしまったので、こうして前日に切羽詰まって書くことになりました。文章の乱れは未だ癒えぬ後遺症だと思って優しく見逃して下さい。

壁切れ補正とは?
 マウス走行時に左右どちらかの壁が”ある”区画から”ない”区画に移動した際に、光センサのA/D値が急峻に降下します。その変化した位置でもってマウスの位置を補正する技術のことです。

壁ありから壁なし区画へ移動した際の光センサのA/D値
アールティ移動型ロボットブログより転載

 最も簡単な壁切れ補正は、最短走行時に壁切れを検出するまで直進し続ける処理を加えることです。マウスが速くなってくると直線走行時のふらつきや加減速時のタイヤの滑りが大きくなり、実際に進んだ距離がエンコーダ等で計測した距離よりも短くなりがちです。壁切れ検出まで進むことでその距離ズレを詰めることができます。
 極端な例で言うと、壁にぶつかっても何事もなかったように走っていくマウスを見たことがあるかもしれません。これは正しく壁切れ補正によるものです。壁切れ補正を実装することで、多少壁にぶつかった程度では物ともしないロバスト性を手にすることができます。

壁切れ補正のTips
 私が壁切れ補正を実装する上でちょっとした工夫した点を列挙したいと思います。


Sylphy Forceのセンサ角度設計

 まずは光センサの配置について、katoさんの言及にもあるように、横壁センサの角度をマウスを中心に置いた際に半区画前を見るように配置することによって、5つのターン(大回り90度、180度、45度、135度、斜め90度)を組み合わせた走行においては、すべてのターンの直前において壁切れ補正が可能です。どのような迷路パターンでも例外はありません。
 人によっては連続ターンや特定のターンのときには壁切れを見逃しやすいので、壁切れを読まないようにしているようですが、私はすべてのターン前において壁切れを読むように実装しています。
 横壁センサの角度は半区画より先を見るとすべてのターンを網羅できず、半区画より前だとその分ターンの開始が奥まるためターンの限界速度が遅くなります。ちょうど半区画を見れるようにセンサの角度を調整することがマウスを速く安定させる上で大切な要因となります。

 続いて壁切れの検出方法について、壁切れの検出には主に、光センサのA/D値が壁ありから壁なしの閾値に変化したタイミングを検出する方法と、光センサのA/D値の変化量がある閾値を超えたタイミングを検出する方法があるように思います。
 私は前者の方法を使って壁切れを検出しています。こちらの方が壁切れ位置の再現性が高かったからという経験的な理由になりますが、今のところ壁切れを読み飛ばしたりしてないのでそのままの方法を使っています。いずれにせよ、柱のみでも安定した位置で壁切れを検出する方法を採用することが重要です。

壁ありと柱のみの壁切れ

 続いて壁切れの位置ズレについて、特にハーフサイズで顕著なのですが、壁がある場合の壁切れと壁がない柱のみの壁切れでは壁切れの検出位置が異なります。柱のみの場合では、柱を通過するのが一瞬であるために、壁ありの場合と比較して光センサのA/D値の変化率が変わっているのではないかと推測しています。同様の理由で速度が大きく異なる場合でも壁切れ位置がズレるように感じます。現に私のマウスでは探索と最短で壁切れ位置を変えられるようにしています。斜めの場合でも直線と同様に壁ありと柱のみの2パターン存在するので、私のマウスでは合計5種類(探索、直線壁あり、直線柱のみ、斜め壁あり、斜め柱のみ)の壁切れ位置のパラメータを用意しています。

 最後にタイヤ直径の調整について、これは自分への戒めでもあるのですが、壁切れ補正を実装すると多少の走行距離ズレは気にせず走れるようになります。しかしながらタイヤ直径の調整を疎かにすると壁切れのできない30区画直線などでコケるようになったり、ターンの再現性が悪くなったりと不調の原因となります。
 壁切れ補正は区画の真ん中を真っすぐ走ってこそ再現性のある位置での補正が可能となります。その他の調整も横着しては壁切れ補正の真価を発揮することができないのでご注意下さい。

◆壁切れ補正の応用
 本稿で書きたかったのはここからでありこれまでの話は前座です。
私のマウスではここまで書いてきた走行距離を補正する壁切れ補正のみを実装していましたが、壁切れを利用した串と斜めの制御を実装したのでその紹介をします。

 区画の中心を壁と平行して走行していれば、左右の壁センサの壁切れ位置は同じ位置となるはずですが、区画中心から離れていたり、壁と平行でなかったりした場合、左右の壁切れ位置にもズレが生じます。本制御では、左右の壁切れ位置のズレから区画中心との距離yや角度θを推定し補正します。

壁切れによる串と斜め制御

 中心位置からの距離yと角度θを同時に推定することは難しいので、距離yと角度θが単体としてズレていると仮定して推定します。
 まず、距離yのみがズレている場合を求めます。壁切れの角度つまり壁センサの角度は区画中心を走行しているときと等しいので、
    
が成り立ちます。42mmはハーフにおける区画中心から壁までの距離です。クラシックの場合は84mmと読み替えて下さい。d0は区画中心を走行時の壁切れ距離とします。ハーフで半区画先を見るようにセンサ角度を調整していればこの値は45mmとなるはずです。この式から中心位置からの距離yは以下となります。
    
 左右の壁切れ位置のズレdは、現在の車速vと左右の壁切れの時間差Δtによって、
    
とも求められます。使いやすい方で推定して下さい。

 続いて、角度θのみがズレている場合の推定ですが、途中式を忘れてしまったのでプログラムから最終式だけ転載します。導出方法を思い出したら追記します。
    

 これによって、左右の壁切れ位置のズレによって距離yと角度θを推定できました。これらの値が0になるように制御をかけて串の制御としています。
 串では左右の壁切れ位置のズレが0に近い値となるはずですが、斜めでは45sqrt(2)となるだけで基本的な考え方は一緒です。こちらも途中式を忘れてしまったので最終式だけ載せておきます。
    
    
 αは壁と平行走行時の壁切れの角度です。ハーフで半区画先を見るようにセンサ角度を調整していればこの値は以下の値となるはずです。
    

 これらの制御した結果の動画をX(Twitter)に上げていたのですが凍結されて見れなくなってしまいました。動画が見たい方は私のアカウントが解凍されるようにお祈り下さい。
 
◆終わりに
 ここまで読んで頂きありがとうございます。
 途中式や動画がない未完成状態な記事ですが、制御のニュアンスだけでも伝わっていれば幸いです。なるべく制御パラメータが増えないようにと考えた制御ですが、苦手だった串や斜めでの衝突が激減する程度には効果抜群でした。まだまだ壁切れには無限の可能性があると思いますので、皆様の壁切れ捌きもぜひ見せて頂ければと思います。

 彗星の如く現れロボトレース界の上位を独占した謎のロボット製作集団”reRo”。その筆頭たるi7先輩の正体とは…次回のマイクロマウス Advent Calendar 2023SHIMOTORI,Harukiさんの「たぶんロボットの紹介」です。お楽しみに。




スポンサーサイト



コメントの投稿

非公開コメント

プロフィール

コヒロ

Author:コヒロ
某自動車会社の子会社に就職した新入社員。某五年制大学のサークルでマイクロマウスを製作していました。現在も製作中。パソコン、自転車、読書などなど多趣味で中途半端な人間です。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR