C-Styleでオムニホイール制御(その2 平行移動)
オムニホイールは、
- ギヤモーターにより回転が制御できるメインホイール
- メインホイールに対して直角向きに取り付けられた自在に回転するサイドホイール
で構成される。サイドホイールの形状は「樽」型や「円盤」型などあるが、形は違っても動きは変わらない。
sin・cosなどの三角関数を使って各ホイールの制御値が計算できれば、任意の角度で平行移動できるが、方向を限定してもっと簡単に考える。ここで使用するモーターの制御値は次の3通り。
- 変数「A」
- 変数「A」のRev(rAと表示される)
- 数値「0%」
変数「A」には6CHボタンの1%〜100%に相当する1から100のプラスの値をセットするが、小さい値ではモーターが回らない場合があるので、適当に調整する。
3輪(逆三角形で120度間隔)の場合
- まずは、偶数時方向(6方向)に動かす組み合わせを見つける。
- 常に1つのモーターの制御値=0
4輪(×型で90度間隔)の場合
- まずは、ななめ(4方向)に動かす組み合わせを見つける。
- 常に向かい合った2つのモーターの制御値=0
ポイントは、
- 逆方向に動かす場合は、RevのON/OFFを入れ替えるだけ。
- 変数「A」をセットするのは常に2つのモーター
- 変数「A」をセットする2つのモーターの片側はRevをONにする。
ここまでできたら、4輪(×型で90度間隔)の場合
- 前後左右(4方向)に動かす組み合わせを見つける。(先と合わせて8方向となる)
- 常に4つのモーターの制御値をセットする。(制御値=0のモーターはなし)
実際にプログラムを動かすと、モーターの個体差などで、まっすぐは動かないが、その調整方法は後で考えるので今は無視する。
(上のサンプルプログラムの簡単な説明)
- プログラムを1方向毎にファイル名分けて保存するのは面倒なので、使わないボタンは「if FALSE」と「end if」の間に移動させておく。「if FALSE」と「end if」の間のボタンは実行されない。
- 「if」の条件選択で「C code:条件を記述」を選択し、「Define」タブ内のCode「FALSE」を選んで「OK」する。
- 「else」は削除しておく。「else」が残っている場合、「else」と「end if」の間のボタンが常に実行される。
- 6CHボタンにはどのような動きをするのかコメントを常に入れておく。
- 今回は変数「A」を使ったが、「B」でも「X」でもなんでもよい。