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」でもなんでもよい。