センサの値からボールのある角度を求める(理論編)
IF文のプログラムの限界
IF センサの値に反応したら
・・・
Else 反応しなかったら
・・・
というプログラムをまずは書いていると思います。ですがこれで制御するうちはどうしても「ガタガタ」動く、という状況ができると思います。
センサーのしきい値の境界で、ロボットが二つの命令を交互に行うような状態になるからです。
これは、制御で言えば、もっとも原始的なON/OFF制御です。
ある程度、思い通りにロボットが動くようになってきたら次の段階に進みましょう。
まずはセンサーの値ですが、IF/ELSEの判定では、どうやっても境界ができるので多少は改善できても根本的なガタガタは治りません。
ではどうしたらいいのでしょうか?
・・・思いつきますか?
隣り合ったボールセンサーの値を比較して、その差からだいたいの位置を割り出し、それを使うという方法が考えられます。
ただ、人間であればなんとなく位置の想像がつきますが、ロボットにどのように位置を伝えたらいいでしょうか。実はそれを求めることができるとっても便利な「計算式」があります。
それが「三角関数」です。 ※関数というのは何かを求める計算式のことです。
三角関数とは何か
三角関数とは何か、調べてみましょう。
三角関数とは、直角三角形の辺の長さが決まれば、角度が決まる、角度が決まれば辺の長さが決まる、だからそれを求める式を作っておこう、というものです。
例えば、この図でいえば、一番長い辺の長さを1に決めて、一つの角の角度をきめてやれば、横と縦の長さはひとつに決まります。
逆に、縦と横の辺の長さが決まれば、角度がひとつ決まります。
ここまでは分かると思います。分からない人はもう一度読み直してみて下さい。それほど難しいことは何も言っていません。
ここまで理解したとして、ここからが重要なのですが、
記憶しておく必要などなにもなく、30度の時に、それぞれの長さってどうなるんだっけ?覚えておくのは面倒だから記号で書いておいて後で計算しよう、というものが三角関数です。
そして、それぞれ
横の長さ=cos(角度) ※コサインと読みます。
縦の長さ=sin(角度) ※サインと読みます。
と書きます。
30度の時の横の長さは 「cos(30度)」です。
昔は三角関数表というものを誰かが作っておいて、それを見ながら値を出していたみたいです。
そして今なら、その計算は面倒だからコンピュータに覚えておいてやらせてしまえばいいのです。だって、誰が計算しても結果は同じなのですから。
センサの値から角度を求める
長さから角度を求める式の
コメント
コメントを投稿