手順
1、PCを加速度センサにシリアルにて接続して、ControlObjectByGsensorUnity.cs をunity3d のcube objectにattachして、再生します。
ControlObjectByGsensorUnity.cs
using System;
using System.IO.Ports;
using System.Threading;
using UnityEngine;
public class ControlObjectByGsensorUnity: MonoBehaviour {
private const string SERIAL_PORT = "COM5";
private const int SERIAL_BAUD_RATE = 9600;
private const int SERIAL_TIMEOUT = 100;
private Thread _readThread;
private static SerialPort _serialPort;
private static bool _continue;
//private static Quaternion _handQuaternion = new Quaternion();
private static float x,y,z;
void Start() {
_readThread = new Thread(Read);
_serialPort = new SerialPort(SERIAL_PORT, SERIAL_BAUD_RATE);
_serialPort.ReadTimeout = SERIAL_TIMEOUT;
_serialPort.Open();
_continue = true;
_readThread.Start();
}
void Update() {
transform.rotation = Quaternion.AngleAxis(y, Vector3.forward) * Quaternion.AngleAxis(x, Vector3.right);
}
void OnApplicationQuit() {
_continue = false;
_readThread.Join();
_serialPort.Close();
}
private static void Read() {
string[] values;
while (_continue) {
if (_serialPort.IsOpen) {
try {
values = _serialPort.ReadLine().Split('\t');
if (values[0] != "\t") {
x = float.Parse(values[0]);
y = float.Parse(values[1]);
}
} catch (TimeoutException) {
}
}
Thread.Sleep(1);
}
}
}
2、加速度センサを傾けてみて、Cubeが動けば成功です。動かない場合は、Arduino本体のリセットボタンを押してみます。
3、3軸加速度センサは、重力加速度によるx、y軸の分量により傾斜を計算するもので、水平面に沿う回転は検知できません。水平面の回転を検知したい場合、他のセンサを組み合わせるかまたはAll in oneのセンサ例えば9軸センサを使う方法があると思います。のち9軸センサの使う実験に関するブログを公開します。
2015-6-24追記:
4、シリアルケーブル(USB)を外して、センサからPC/Unityへ wifi UDP或いはTCPにて接続して、cubeの回転動作が確認できています。
5、更に、センサからAndroid/Unity、iPad/UnityへUDP或いはTCPにて接続して、cubeの回転動作が確認できています。TCP接続と比べて、UDP接続は若干、遅延が少なくなるように見受けています(遅延時間の計測は相当難しいので、省いています)。
6、ビデオ(ジャイロセンサ~WiFi~UNity3D App)、ジャイロセンサを使っていますので、unityアプリCUBEの傾斜は多少ずれているように見えます。
【追記】Wifi UDP接続に関するソースコードは、Githubに公開済み。
関連記事
9軸IMUセンサ 6軸/9軸フュージョン 低遅延 USB出力 補正済み ROS対応
ロボット・ドローン部品お探しなら
