以前のリビジョンの文書です
この記事ではスラローム走行について書きたいと思います。前提条件として、物理量ベースであることを要求します。 ちょっと物理量ベースの復習をしてみましょう。普通、物理量ベースというと下のような関数を使うと思います。
//**************************************// //関数名 void move(float v, float omega) // // // //引数: 速度 v [m/s] // // 角速度 omega [deg/sec] // // // //指定した速度と加速度で移動する関数 // //**************************************//
引数の単位系は別に同じでなくてもかまいません。物理量ベースになっているのなら、こんな感じの関数は自前で持っていると思います。ステッパでかつ二輪ならば左右のタイヤの回転数を調節することによって、所望の速度と角速度で走ることはさほど難しくないはずです。この辺は物理の話なのでよく分からない人は物理を勉強してください。 物理量ベースなので次のようなグローバル変数を持っていると思います
位置,速度,加速度 : x,v,a 角度,角速度,角加速度 : angle,omega,alpha
復習になりますが、物理量ベースというのは周期Tごとに上の変数たちを更新して、moveに代入みたいな感じです。全部書くのもつまらないので、この辺は自分で考えてください。ここに出ているものもあくまでもいろんな方法がある中の一つです。プログラムというのは同じ概念を実装するのに、無限の方法があります。だから、ここでは実装の仕方というよりも概念を説明したいと思います。要は自分で考えないとダメということです。
突然ですが、重心速度v,半径rでマウスを進ませることはできますか。これができればとりあえずスラローム走行ができると思います。しかし、この円弧によるスラロームには問題があります。それは直進から円弧に急に移ると角速度が不連続になるという問題です。だから、この欠点を補ったクロソイドという軌跡を使うことになります。しかし、速度がそんなに高くなかったら別にそこまで問題は無いでしょう。
疲れたから今日はここまで