傾きセンサー
力が加わっていないとき、Yocto-3Dは間接的にスタンダードの重力を測ります。簡単に言うと、バネの間にある物体がどちらに寄るか計測することによって加速度計が動いていると想像してください。自由落下の状態では物体は真ん中にとどまっているはずです。しかし、システムが片方に押されたとき、物体は力の加えられたエンクロージャーの表面とは逆に動きます。この物体の移動を計測することでシステムに加わった外部の加速度を計測できます。
この原理に従って、Yocto-3Dは通常の重力と反対に働く力を計測することができます。力の角度を測ることで地表に対する角度を正確に把握できます(気泡水準器のように)。3Dで働くセンサーのため、水平方向・垂直方向、両方の角度を独立に計測できます。
YTilt roll = YTilt.FindTilt("myYocto3D.tilt1"); YTilt pitch = YTilt.FindTilt("myYocto3D.tilt2"); Console.WriteLine("Roll: " + roll.get_currentValue() + " deg"); Console.WriteLine("Pitch: " + pitch.get_currentValue() + " deg"); |
電子コンパス
本製品のマグネットメーターは補償コンパスとしての使用を予想して設計されています。水平な状態でのみ働くシンプルなコンパスとは異なり、デバイスが傾いているときにも使用できます。偏りの計測を利用して、磁針向首方向を計算するために磁場の水平なプロジェクションを自動計測します。
YCompass compass = YCompass.FindCompass("myYocto3D.compass"); Console.WriteLine("Heading: " + compass.get_currentValue() + " deg"); |
マグネットメーター
磁場を計測することによって、近くの磁石を突き止めるのにも使用できます。地球の磁場は約0.5ガウスで、それ以上の値は外部の磁力が存在することを意味します。例えば、スタンダードのエンクロージャーを使用した磁石と50mmの距離があるところで1ガウスの磁場を生み出します。
YMagnetometer mag = YMagnetometer.FirstMagnetometer(); Console.WriteLine("Magnetic field: " + mag.get_currentValue() + " gauss"); |
加速度センサーとジャイロスコープ
ドアやその他の部分が動き始めるのを見つけるために、直線の動きには加速度計を、回転の動きにはジャイロスコープを使用することができます。
YAccelerometer acc = YAccelerometer.FirstAccelerometer(); YGyro gyro = YGyro.FirstGyro(); Console.WriteLine("Acceleration: " + acc.get_currentValue() + " g"); Console.WriteLine("Rotation: " + gyro.get_currentValue() + " deg/s"); |
リアルタイム3D飛行状況の管理
すべてのセンサーの情報を集めてリアルタイムで3Dの情報を計算することができます。 ジャイロスコープとの組み合わせで、デバイスの方向を計測することができます。(一秒あたり100の見積もりが弾き出されます) 本製品はそれ自体で四元数として見積もりを出します。
例として、本製品をゲームのコントローラーにしてみると以下のようになります。"Mini Flight Sim"という名の example illustrating Google Earth Javascript API でキーボードコントロールを3Dのゲームコントローラーに変える方法を見てみましょう。
Yocto-3DをHTMLゲームコントローラーとして使用した場合
はじめにYocto-3DにアクセスするためのコードをHTMLページに加えます。下の例ではYoctopuceのライブラリファイルを加えデバイスが動くたびに自動的に呼び出されるようなコールバック機能を立ち上げます。
<script type="text/javascript" src="yocto_api.js"></script>
<script type="text/javascript" src="yocto_gyro.js"></script> |
YAPI.RegisterHub("127.0.0.1");
var gyro = YGyro.FirstGyro(); if(gyro){ gyro.registerAnglesCallback(gyroCallback); handleGyro();} |
handleGyro機能はYoctopuceAPIへの非同時的なエントリーポイントであり、デバイスから引き起こされた動きを制御するためにあります。