ハードウェア

Input Tech

Output Tech

Input Tech (筋変位センサと加速度ジャイロセンサ)

ゲームの中で, 特に, アバターに身を投じているとき, 彼らの両手を動かせることがよくあります。
そうすることで私たちは, 多くのバーチャル世界の物体に思いのままにアクセスすることができます。

現実世界の手をバーチャル世界に取り入れるには, 現実世界の複雑な物理法則を取り入れる必要があります。
これは, 腕の位置と手の動きを取得することによって実現します。
UnlimitedHandは筋変位センサと加速度ジャイロセンサの配列からなる入力技術を用いることによって,
それを可能にしています。

このチュートリアルでは, UnlimitedHandの入力技術を理解していただきます。

1.0 筋変位センサで手と指の動きを探知する

筋変位センサは, V字型の樹脂シート上の, 前腕部へ筋肉刺激を与える場所に配置されています(図1)。
これによってUnlimitedHandは, 前腕部筋肉の光学的な動きから手と指の動きを推定します。
channel_arrangement.png

図 1. 筋変位センサの配置 (右手を使用した場合).

筋変位センサ同士のある組み合わせからシリアル値を読み取り(図2),
3つの主な種類の手の動きを推定します(表1)。
このチュートリアルからStep 4を確認していただき, シリアル値をデバイスから取得していることを確認してください。
correspondence3.png

図 2. シリアル値と筋変位センサの場所の一致(右手を使用した場合).

動きの3つの種類: ①指を曲げる動き, ②手首の動き(橈屈(とうくつ)/尺屈(しゃっくつ)), ③手を開く動き
異なる筋変位センサの値の組み合わせを処理して読み取ることも可能です。
注意: 以下の表に掲載されているのは右手に装着した場合の情報のみになります。
筋変位センサのポイント(チャンネル) 手の動き
チャンネル 0, 1, 2, 3 指を曲げる動き
(右手と左手の場合で異なります)
チャンネル 4, 7 手首の動き
(右手と左手の場合で異なります)
チャンネル 5, 6 手を開く動き, 手首の動き(拡張)

表1. 特定の動きを取得するときの筋変位センサの組み合わせ(右手を使用した場合)

1.1 使用方法

UnlimitedHandのハッカーは, デバイス上の特定のポイント(チャンネル)からデータを取得するのに以下のような関数を使用されるでしょう。

Arduino用の関数: initPR/ readPR/ readPR_array

Unity用の関数: updatePhotoSensors/ readPhotoSensors

Processing用の関数: readPhotoSensors/ updatePhotoSensors/ updatePhotoSensorsString

2.0 加速度ジャイロセンサで動きを追跡する

UnlimitedHandがしっかりと前腕部に取り付けられていれば, デバイスの中央部分に内蔵された加速度ジャイロセンサが巧妙な動きや腕の位置を追跡します。 取得した運動のデータは, ゲームのリアルタイム・インタラクションのための記録部分に送信されます。

2.1 使用方法

UnlimitedHandのハッカーであれば, 細かい動きの3次元の加速度値や, 腕の方向を示す3つの角度値を取得するのに以下のような関数を使用されるでしょう。

Arduino用の関数:setupAccelGyro/initAccelGyroKalman/readAccelGyro_XYZ_Kalman
readRawAccelValues/readRawGyroValues

Unity用の関数:readUHJointAngles/updateAngle
readUH3DAccel/readGyro/updateUH3DGyroAccel

Output Tech (EMSとバイブレーションモータ)

バーチャル世界の物体やキャラクターに両手が届いて触れ合うことができたら, よく知っている感覚を覚え, 動きの制御もしやすくなります。
しかし, バーチャル上の手に何の物理法則も適用されず, 周囲の物体を貫通してしまった途端, 没入感はたちまち崩壊してしまうのです。

UnlimitedHandは, インタラクティブなシステムでの触覚の表現を実現します。
バーチャル空間のオブジェクトをどうプログラムし, 手を動かす力をどう制御するか, これを左右する運動力学のゲームというものは特別なものです。
このチュートリアルでは, UnlimitedHandの出力技術の理解をしていただきます。

1.0 電極の配置

8つの電極は, V字型の樹脂シート上の, 前腕部へ筋肉刺激を与える場所に配置されています(図1)。
これによってUnlimitedHandは, 自分の意識とは関係なく手や指を動かす刺激となる電流を, 装着者の前腕部にある特定の筋肉に受け渡すことができます。
コンピュータがあなたの手の動きに応答する様子を思い浮かべてみてください。
electrode_arrangement.png
図1. UnlimitedHandの裏側の電極配置図(右手を使用した場合)

以下の表は, 各電極によって実現されうる8種類の動きを表しています。
以下の表では, 右手を使用した場合の情報のみが掲載されていることにご注意ください。
electrode_correspondence.png
図2. 電極 - 対応する筋肉の動き(右手を使用した場合)

1.1 使用方法

UnlimitedHandのハッカーは, 1つもしくは複数の電極に電流を受け渡すのに以下のような関数を使用されるでしょう。

Arduino用関数:
initEMS / connectMUX / keepVoltage / updateEMS / updateEMS_HighVoltage / setEMS_LOW / setStimulationTime / setStimulationChannel / setStimulationVoltage

Unity用関数:
stimulate(int padNum)/setLevelUp/setLevelDown

1.2 電気刺激を適当量に調節する

しばらくお待ちください. . .

2.0 バイブレーションモータ

デバイスの中央部にはバイブレーションモータが内蔵されています。
手の動きは取得せずに, 装着者に何かしら特定のイベントを知らせたい場合に便利です。
インタラクティブ・システムの性質上, あるイベントと他のイベントとを区別するのに, 複数のバイブレーションパターンが使用されます。

2.1 使用方法

UnlimitedHandのハッカーは, バイブレーションモータを認識したり, バイブレーションを起こしたりするのに以下のような関数を使用されるでしょう。

Arduino用の関数:
SetupVibrationMotor / MoveVibrationMotor / onVibrationMotor / offVibrationMotor /