続・オムニホイールの使い方

これまでのプログラムでは、whileループ中で進行方向Bを変化させていないため、直進しかできなかったが、ループ中でBを変化させることで複雑な動きが実現できる。


とりあえず、0.2秒毎に進行方向を1時間分(30度)づつ増やして回転するサンプル。12方位(0〜11時)の移動ができるようにしたので、Bを1づつ足しているが、6方位(0,2,4,6,8,10時)の移動しかできない場合でも、Bを2づつ足せば6角形を描いて移動できる。

また、このように12通りの状態がある場合、1〜12でなく、0〜11で状態を区別すると「%(剰余:割った余り)」の演算子が有効活用できる。(1〜12ではif分が必要になる)

プログラムを整理して、以下の2箇所はサブルーチンにしてみた。このような構造にしておけば、Bを決める部分のみ作りなおせばよいので、後が楽になる。

  • 進行方向Bからモーター値XYZ決定
  • コンパス補正値C・スタート時向きDでモーター値XYZ補正
    • スタート時右手方向は、サブルーチン内で毎回(D+90)を計算することにし、変数Eは廃止


サブルーチンを使う場合、サブルーチン内で必要な変数を上書きしない用に注意する。上記のサンプルでは、変数A,C,Dがプログラム中で書き換えてしまうと、意図する動作をしなくなる。書き換えては行けない変数と、書き換えてもよい変数を意識して使い分ける。

▼動作例
http://youtube.com/watch?v=ATGDSiiD814