JASALMAのプログラム解読Part5 壁制御2
昨日に引き続きまて壁制御のお話です。
昨日書き残していた壁があるか内科の判断基準のセンサー値(閾値)と吸い込まれ吸い込まれ対策についてです。
前回の記事で左右の壁の状態によって制御量の式を変えなければならない、という話をしました。
閾値(←しきいち派です)とは壁が有るか無いか判断するために使うセンサー値の基準値になります。
つまりセンサー値がある値(閾値)よりも小さければ壁は無い、それ以上ならある、って判断をするための値です。
この値をどう設定するかも宗教によるものだと思います。
例えば区画中心のセンサー値の半分とか?(←適当に言ってみました)
僕が先輩に聞いて、実装していたのは壁を30mm遠ざけた時のセンサー値を閾値とする、というものでした。
これは後々左手法や足立法において壁が有るかどうか判断するときにも使うものです。
さて、次は吸い込まれについて書いていきます。
・・・と思ったところで壁制御について書き忘れていたことに気が付いたので順序が悪いですがここで書いていきます。
それが制御量の計算をどこでやるのか、ってところです。
これは1ms毎に割り込まれるCMTで行っています。
そして求めた制御量(速度と同じ次元になっている)をMTU割り込みのタイミングで書くモーターに代入する速度に足す形にしました。
ここまでのことで壁制御は出来ると思います。
左右に寄せて直進を走らせてみましょう!
1区画くらいで中心に戻りましたか?
それで最後に吸い込まれ対策です。
吸い込まれとは壁が急になるところや櫛(くし)を走る場合にまっすぐ区画中心をはしらずふらふらしてしまう状態です。
以下でその原因と対策方法についてまとめていきます。
まずその原因についてですがその説明のためにMice Wikiの画像(↓↓)
用いて説明します。
これは急に壁がなくなった時のセンサー値を示しています。
黒が理想のセンサー値、赤が実際のセンサー値です。
閾値はこのグラフでいうHighとLowの間のどこかに設定されていると思います。
が、赤が示すセンサー値が閾値に到達するまで壁がなくなったほうに近づいて行ってしまいますよね。
これが吸い込まれの原因です。
これはセンサー値が閾値以下に落ちるまでに1ms以上の時間がかかってしまうために生じるものです。
そのためセンサー値の急激な変化を検知した瞬間に壁制御を止めてあげればいいと思います。
なので3msや5ms前のセンサー値と現在のセンサー値でいくつずれていたら壁制御を停止、などという処理を加えてあげましょう。
何ms前、どれだけの変化で止めるか、によって吸い込まれ対策の強さを変化させられると思います。
以上で壁制御の大まかな説明は終了!
後はプチ情報的な感じでいくつか
- 旋回させているときは壁制御OFF
- 機体と前壁の距離が近くなったら壁制御OFF
- 速度が遅くなったら壁制御OFF(ないし弱める)
- etc(なんかあるかも?)
以上、今日は終わります!
ではでは(^.^)/~~~
C