180度ターンと、直線から斜めに入る135度のターンの補正を入れる
①でターン直前にターン方向と逆の壁との距離を測り、壁に近づき過ぎている場合にはターンの半径を大きくする。ここでは、外側の壁が無い場合もありえるので壁に近い場合のみを評価している
②今回補正の対象とする2つのターンは内側に壁があることが保証されているので、その壁との距離を測る。具体的には壁切れの20~25mm前の壁との距離を測る、内側に近づき過ぎている場合はターン半径を小さくし、内側から離れすぎている場合はターン半径を大きくする
マイクロマウス
ターン中の壁切れチェック
前壁がある場合に前壁との距離を合わせ、ターン中に壁切れを監視し、
ターン後に壁切れからの距離を評価して、
基準値よりも距離が長ければ、ターン後のオフセット距離を長くし、
基準値よりも距離が短かければ、ターン後のオフセット距離を短くする
これで、やっと↓のパターンの迷路をクリアできるようになった
超信地旋回の処理
180度一括で回転するようにして、回転後に左右壁が見えるまで後退するようにする。
さらに、袋小路では左右の壁との距離を測って、直後のターンでターン後のオフセット距離を変更する。
こつこつ
吸引ファンの厚みはあまりいらないらしいので薄くしたものを描いて発注する
連続ターンの横壁補正
探索中のターンの中で前壁補正が使えないパターンが苦手だったのが解決できた
まず①で、右ターンの直前に左壁との距離を測り、ターン後のオフセット距離を補正することでX方向のズレを補正する
次に②で、左ターンの直前に右壁との距離を測り、ターン後のオフセット距離を補正することでY方向のズレを補正する
串区間の制御
〇久々に串区間の制御を入れる
左右の壁切れ位置の差を測って、差が5mm以上差があるようなら、進行方向を3度ずらして30mm進む。
〇変則四輪では90度づつの超信地旋回はあまり適切ではないのでないか?タイヤの汚れ具合にによっては90度回転したときに車体の位置が前後左右に大きくズレることがある。
だとすれば、素直に1回で180度回転をして、その後に、左右センサで左右のずれを測定して、壁切れで前後位置のズレを測定して、次のターンのオフセット距離で補正したほうが良いように思う
〇直線の終わりの定速度走行区間
ターン前には一定速度で走る区間はどのくらいにすべきか?というか揺らぎはどの程度が?
最高速度から定加速度で減速していく作りなので、最高速度が速いほどに減速中の誤差の蓄積が厳しくなってしまう。
とりあえず2cm、または、最高速度で10ms進む距離(4m/sなら4cm)の長いほうに設定するが、
リアルタイムに位置と速度から加速度を更新したほうがよいのだろうか?
こつこつ
ターンの目標最終角度をグローバルな角度にしているため、長期間の探索で0度がずれてくるのが不安になっていた。
そこで、5区間以上両壁がある区間で左右のセンサ値が少ないまま走行している場合に現在の角度を0度にするように変更。
前壁での角度補正を、壁に近づきすぎている場合には行わないように変更。
センサの値がサチル寸前なのと、左右の前センサのバラツキの修正が難しいので一旦無視する。
上2つの処理を入れていると前壁センサは左右に2つも要らないような気がしてきた
前1個、真横2個、斜め2個の5個の構成が気になる
壁センサの消費電流
小まめに壁センサをOFFすることで省エネ化を進めているが実際に壁センサがどの程度電力を使っていたか測定する。主電源での平均電流を測定する
通常アイドル時:99.6mA
壁センサOFF時:78.1mA
思っていたよりも多い印象である
こつこつ(ログ保存方法変更)
吸引力が上がったので加速度を上げて最高速度を早くしたい。ところが、今のソフトではログの都合により2.5m/s以上の速度が設定できなかった。
8bitで1bit=0.1m/sで目標速度を保存していたのを、10bit割いて1bit=0.05m/sで保存することにした。これで5m/sまで保存できる。
ついでに、左右のタイヤの回転速度をそれぞれ8bitで保存していたのを、走行速度(左右タイヤの回転速度の合計)は目標速度との差分を8bitで保存して、左右のタイヤの回転差を8bitで保存することに
15m/ss加速はふらつきが酷い、まずは12m/ssが妥当な目標に感じる