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

3輪オムニのうちの2輪を動かせば、偶数時(0,2,4,6,8,10時)方向の6方向へは動かせた。
次に真横も含む、奇数時(1,3,5,7,9,11時)への移動を考える。


2時方向と4時方向に同じ時間進めば、到着地点は3時方向になる。(実際には加減速の関係でズレが生じるが、ここでは無視する)

プログラムの例。


上のプログラムを直し、変数X:モーター1、変数Y:モーター2、変数Z:モーター3の3変数で6chコントローラの値をセットし同じように動かしてみる。


移動距離は「速度(=モーター値)×時間」なので、上の動きは「2時方向×時間+4時方向×時間」と書ける。数学的に時間でくくるとこの式は「(2時方向+4時方向)×時間」とも言える。
それをプログラムに反映。

最初の図で、ACとCBの距離は等しく、ABの距離はそれに比べ長い

√3≒1.732倍。ACの中点をDとしたとき、三角形ACDは正三角形の半分なので、CDの長さはACの半分。ピタゴラスの定理から、
 AC*AC=CD*CD+AD*AD
CD=0.5*ACなので、
 AD*AD=AC*AC-0.25*AC*AC=3/4*AC*AC
両辺の平方根を計算すれば、
 AD=√3/2*AC
となり
 AB=2*AD=√3*AC

分、「(2時方向+4時方向)=(3時方向)」としたときの速度は早くなるので、「(2時方向+4時方向)÷√3」とすれば同じ速度になる。C-Styleでは整数しか扱えないので、正しく計算しようとすると(1÷√3)≒0.58≒(6/10)と近似して「(2時方向+4時方向)×6÷10」のように計算する。さらに計算を楽にするなら「(2時方向+4時方向)÷2」もありと思う(この場合、X=A/2,Y=A/2,Z=-A)。


(注意)
3番めのプログラムを実験するときは、モーター3の値Zは「−A×2」となっている。6chコントローラでセットする値は−100から100までなので、「−A×2」が範囲外にならないようにすること。

(注意2)
これまでのプログラムにはモーターの個体差がないものとして考えているので、実際に動かした際には個体差により真っ直ぐす進まないことが多いと思う。この時に個体差を考慮してプログラムをすると、モーター交換時や、モーターがヘタった場合の再調整が大変面倒なので、その点はコンパスセンサを使った向き補正で対応したほうがよいと考える。

(注意3)
平方根(√)とは、a=b*bの時のaに対するbのこと。(例:9の平方根は3および-3)