Smiley

なんでも一回は作ろうとする人

6自由度のトラックボールを作りたい(調査編①)

6自由度、つまりXYZ軸の回転と移動を操作できるトラックボールが欲しくなりました

一応商品としては3DConnexionのSpace mouseとかがあります

 

が、トラックボールが単純に好きなのでこれをトラックボールでできたらなと思っています。

 

まずどうやって3軸の回転データを手に入れるかを考えます。

自分用メモを含むので詳しく解説していきますが、間違っている可能性高いので

間違っていたら教えていただけると助かります。

 

トラックボールの仕組み

トラックボールは球体で、3軸すべての方向に360度回りますが、とれるデータは2軸です。

理由はセンサーが普通のマウスと一緒の物を使用していて、このオプティカルフローセンサーというものが平面用だからです。

黄色い点がセンサーとして、緑と赤の線の回転しか取れないということです。



もしもZ軸回転を行ったとしてもXとY軸での回転はないのでセンサーでは読み取れません。(実際にはセンサーの特性上、多少は動きがあると思います。)

 

Z軸回転も取得する方法

これは単純な話で、Z軸の回転を取得できる場所にもう一つセンサーを置くことです。

これで各センサーの値を取得すればXYZすべての回転がわかります。

 

各回転軸の移動量/回転角

下のセンサーをSaとして、横についてるセンサーをSbとします

各センサーの値を以下のように格納します。

X = Sa.Y

Y = Sa.X

Z = Sb.X

回転なので、XとYが反転しているのは注意です。

 

次は回転角を求めます。

センサーからのデータは、ICにもよりますが大体CPIをかけるとインチに変換できると思います。

1インチ25.4mmなのでそれをふまえ以下のように計算します

Xmm = X/CPI*25.4

Ymm = Y/CPI*25.4

Zmm = Z/CPI*25.4

これで移動量(mm)が手に入りました

 

次に実際の回転角を求めます。

トラックボールの半径をrとして計算します。

円弧の長さLから中心核x°を求める公式は

x°=180ℓ/πr

なのでそれぞれ読み替えていくと以下になります

普通のトラックボールは直径34mmが多いみたいなのでその場合rは17になります

Xd=(180*Xmm)/(πr)

Yd=(180*Ymm)/(πr)

Zd=(180*Zmm)/(πr)

でしょうか・・・・・

合ってますかね💦・・・・・

 

ただ実際に使うときはDPI調整と称して感度をいじると思うので

一個目の式で事足りそうな気もしています