PhyOSCの使い方

1. インストール

1.1PhyOSCの必要動作環境

PhyOSCはiPhoneとApple Watchが必要です。動作環境は以下の通りです。

Apple Watch :watchOS 9以上 Apple Watch Series6以上を推奨
iPhone :iOS 16以上 iPhone 8以上を推奨

Apple WatchはiPhoneにペアリングされている必要があります。
iOSデバイスはWifiに接続されていることが必要です。

その他の必要な環境
Wifiに接続されていて、OSCメッセージを音に変換することができるDAW(Digital Audio Workstation:Ableton Live等)がインストールされたMacもしくはWindowsやLinux
注意:任意のTCP/IPアドレスとPort番号の通信が許可されていることが必要です。

1.2PhyOSCスクリーン関連図

install
install

2. 接続

2.1Apple WatchとiPhoneの接続

Apple WatchとiOSデバイスの接続インジケータが点灯していることを確認します。点灯していない場合はiPhoneもしくはApple Watchの接続インジケータをタップします。

connection

それでも点灯しない場合はPhyOSCアプリを終了してもう一度起動します。
Apple Watchがバックグランドに移行するとインジケータは消えます。OSCの送信中はバックグランドに移行してもインジケータは消えません。

2.2AppleWatchから送信されているデータをiPhoneで確認する

接続が完了すると、Apple Watchの動きに同期してiOSデバイス「メインスクリーン」の「データ受信インジケータ」が点滅します。
「メイン」スクリーンの右下にある「Configration」をタップして「コンフィグレーションスクリーン」を表示するとセンサーごとのデータを数値で目視することができます。

connection
Displacement(Apple Watchの移動量)はApple Watchの加速度データと角速度データの二つをPDR(Pedestrian Dead Reckoning)手法によって相対的に移動量を計算しています。どちらのデータにも不確実な領域があり誤差が発生しやすいのでトグルスイッチで無効化することができます。

3. OSC

3.1OSCメッセージ送信先の設定

OSCを受信するサーバーのIPアドレスとPort番号を入力する

「コンフィグレーションスクリーン」でIPアドレスとPort番号を入力します。

connection
注意:IPアドレスとPort番号の接続チェックは行っていません。誤入力しても警告は表示されません。

3.2データフォマット

OSC Address
第1アドレス 変更不可
第2アドレス Apple Watchのデバイス名
1.2 デバイス名スクリーン で入力したApple Watchのデバイス名
第3アドレス Configuration名
7.1 コンフグレーションの新規作成 で作成したコンフグレーション名
第4アドレス センサー名 もしくは 機械学習した腕の動きの名称
データ センサーデータ:フィルター済みのセンサーデータ
機械学習データ:AppleWatchから送られて来たセンサーの生データ [X方向の加速度、Y方向の加速度、Z方向の加速度、Pitch、Roll、Yaw]

OSC 第2アドレス変更方法

OSC Address 2nd

OSC 第4アドレス変更方法

OSC Address 4th

3.3データの種類

# センサー名/機械学習名 説明 センサー名変更可否
1 accelerateX X方向の加速度
2 accelerateY Y方向の加速度
3 accelerateZ Z方向の加速度
4 attitudeX オイラー角Pitch
5 attitudeY オイラー角Yaw
6 attitudeZ オイラー角Yaw
7 displacementX X方向の移動量
8 displacementY Y方向の移動量
9 displacementZ Z方向の移動量
10 RainbowL 機械学習した腕の動き ×
11 RainbowR 機械学習した腕の動き ×
12 HorizonL 機械学習した腕の動き ×
13 HorizonR 機械学習した腕の動き ×
14 PendulumL 機械学習した腕の動き ×
15 PendulumR 機械学習した腕の動き ×
16 WheelF 機械学習した腕の動き ×
17 WheelB 機械学習した腕の動き ×
18 Up 機械学習した腕の動き ×
19 Punch 機械学習した腕の動き ×

PhyOSCにはあらかじめ機械学習(CreateML)で12種類の腕の動きを学習させてあります。記憶した動きを認識すると動きに合わせたOSCデータを送信します。機械学習機能によるモーション認識を使う場合は「Configration」の「Motion Recongnition」をONにします。


3.4OSCの送信を開始する

OSCの送信開始は「メインスクリーン」の「Start」をタップします。送信停止は「Stop」をタップします(Apple Watchではダブルタップします)。
腕を下げたり一定時間が経過してPhyOSCがサスペンドモードに移行してスクリーンが消えてもOSCメッセージの送信は続きます。

OSC Stat iPhone OSC Stat Watch
注意:メインスクリーンで「コンフィグレーションスイッチ」が未選択/待機状態の時はOSCの送信を停止します。
OSC Pause

OSCメッセージの確認方法
以下のアプリをMac/Windows/LinuxにインストールするとOSCメッセージをモニターすることができます。

Protokol - https://hexler.net/protokol


3.5リセット

Apple Watch「メインスクリーン」で右にスワイプして「リセットスクリーン」を表示します。「Resetボタン」を1回タップするとAttitudeリセット、タブルタップするとDisplacementをリセットします。

reset iPhone
reset Watch

4. デジタルフィルター

4.1デジタルフィルターを設定する

PhyOSCはApple Watchから送信されたセンサーデーターをそのままOSCメッセージに変換する他にデジタルフィルター処理によりデータを加工することができます。 デジタルフィルターは「Raw」「Bool」「Nomalize」の三種類があります。
例えば、Apple Watchの角速度センサーデータの一つであるPitchは-90度から+90度の範囲のデータですが、以下のようなフィルターを施すことができます。

# フィルター名 使用例
1 Raw -45から+45の範囲のデータだけをOSCメッセージする。
2 Bool 正値なら1、負値なら0をOSCメッセージする。
3 Normaization -90から90を0から127に正規化する。
filter

「Raw」「Bool」「Nomalize」デジタルフィルターは、AccelarationのX、Y、ZとAttitudeのPitch、Roll、Yaw、DisplacementのX、Y、Zそれぞれに設定できます。
また、この三つに加えて、最小値と最大値を指定する「Input range」、実数/整数に変換する「Number type」、Attitude(角速度)専用のしきい値「Threshold」があります。

# フィルター名 使用例
4 Input range min以上max以下のデータをOSCメッセージにします。
5 Number type OSCメッセージのデータ部分をFloat(実数)Int(整数)に型変換します。
6 Threshold Attitude(角速度)の入力データを一つ前のデータと比較して、その差がしきい値以上の時にOSCメッセージを送信します。
filter

4.2Rawフィルター

センサー値に「Input Range」「Number Type」「Reverse Input Data」のフィルターを設定します。

Input Range
フィルタリングする入力の範囲を設定します。最小/最大値入力フィールドでMinを-10.0、maxを10.0に設定した時、センサー値が-10.0より小さい場合-10を出力します。センサー値が10.0より大きい場合10を出力します。

Number Type
出力を実数もしくは整数に変換します。

Reverse Input Data
センサー値の極性を反転します。

raw filter

4.3Bool Rangeフィルター

判定範囲指定スライダーの範囲を条件にして0か1を出力します。
下図のようにスライダーで最小値を-20、最大値を20に設定した場合、センサー値が-15以下もしくは15以上の時は0、-15以上15以下の場合は1を出力します。

BoolRange filter

Input Range
判定範囲スライダーの最小値と最大値を設定します。

Reverse Range
判定範囲指定スライダーの設定を反転します。スライダーで最小値を-15、最大値を15に設定した状態で、Reverse RangeをONにすると、センサー値が-15から15以内の時に0、-15以下もしくは15以上の時に1を出力します。 スライダー自体の範囲は、Input Rangeと同期しています。上図のようにInput Rangeのminが-20、maxが20の場合、判定範囲指定スライダーの最小値と最大値も-20と20になります。

Reverse Input Data
センサー値の極性を反転します。


4.4Bool Less thanフィルター

センサー値が判定範囲指定スライダーより小さい時に1を、大きい時は0を出力します。

Input Range
判定範囲指定スライダーの最小値と最大値を設定します。

Number Type
出力を実数もしくは整数に変換します。

Reverse Input Data
センサー値の極性を反転します。

Bool LT filter

4.5Bool Greater thanフィルター

センサー値が判定範囲指定スライダーより大きい時に1を、小さい時は0を出力します。

Input Range
判定範囲指定スライダーの最小値と最大値を設定します。

Number Type
出力を実数もしくは整数に変換します。

Reverse Input Data
センサー値の極性を反転します。

Bool GT filter

4.6Normalizeフィルター

入力データを「Nomarization」のMinからMaxの範囲に正規化します。

Input Range
正規化する入力の範囲を設定します。

Nomalization
Input Rangeで指定した入力をNormalizationのminからmaxの範囲で正規化します。右図のようにInput Rangeのminを-10、maxを10。Normalizationのminを0、maxを127に設定した場合、入力値が-10より小さい場合は0。入力値が0の場合は64。入力値が10より大きい場合は127を出力します。

Number Type
出力を実数もしくは整数に変換します。

Reverse Input Data
センサー値の極性を反転します。

Nomalization filter

「Input Range」のMin/Maxを−3.00/3.00、「Nomarization」のMin/Maxを0/127に設定した場合の出力例

入力データ 出力データ
-4.00 OSCメッセージを送信しません
-3.00 0
0 63.5
3.00 127
4.00 OSCメッセージを送信しません

4.7Attitudeの閾値を設定する

Attitude(角速度)のX、Y、Zは、しきい値でフィルターすることができます。 AppleWatchから受信したセンサーデータを一つ前のデートと比較して、その差がしきい値以上の時にOSCを送信します。しきい値を大きくするとAppleWatchの微小な動きを無視することができます。 反対に閾値を小さくするとAppleWatchの微小な動きに反応することができます。

Threshold

5. センサーの感度

Apple Watchが物理的に移動しているか停止しているかを判断するパラメータをMotion Sensor Sensivityスライダーで調整します。Lowにすると制動判断の閾値が大きくなり微少な動きを無視します。Hightにすると微少な動きも処理の対象とします。
意図するOSCデータを得るためには、腕の動き(速度と加速度)とMotion Sensor Sensivityの調整が大切です。

Sensivity

6. 機械学習

PhyOSCにはあらかじめ機械学習(CreateML)で12種類の腕の動きを学習させてあります。学習したアクティビティと同じ腕の動きを認識すると動きに合わせたOSCデータを送信します。
Sample Rate = 15/60秒、Predicion Window Size = 15で学習してあるので、腕の動きを認識するために1秒必要としています。

機械学習機能によるモーション認識を使う場合は「Configration」の「Motion Recongnition」をONにします。

Motion Recongnition
Apple Watch and arm

Digital Crownが肩の方に向くように装着します。

Apple Watchを腕に装着する向きはDigital Crownが肩の方に向くようにします。指先に向けると機械学習の上下左右の判定が反対になります。

Apple Watchの向きは「設定」アプリの「一般」「向き」で設定します。エクササイズ中は、「設定」アプリの「一般」から「時計に戻る」を「1時間後」にします。
PhyOSCのコンフグレーション設定中にバックグラウンドに移行しないようにするために、「設定」アプリの「画面表示の明るさ」から「スリープ解除時間」を「70秒間スリープ解除」にします。

OSCアドレス
腕の動き

/PhyOSC/第2アドレス/第3アドレス/RainblowL

腕を天に伸ばし時計の2時の位置から10時へ仰ぐ。
天に伸ばした腕の手のひらは常に前方に向ける。

/PhyOSC/第2アドレス/第3アドレス/RainblowR

腕を天に伸ばし時計の10時の位置から2時へ仰ぐ。
天に伸ばした腕の手のひらは常に前方に向ける。
Rainbow
OSCアドレス
腕の動き

/PhyOSC/第2アドレス/第3アドレス/HorizonL

腕を肩の高さで地面と水平に伸ばし、水平のまま右から左に振る。
水平に伸ばした腕の手のひらは常に地面に向ける。

/PhyOSC/第2アドレス/第3アドレス/HorizonR

腕を肩の高さで地面と水平に伸ばし、水平のまま左から右に振る。
水平に伸ばした腕の手のひらは常に地面に向ける。
Horizon
OSCアドレス
腕の動き

/PhyOSC/第2アドレス/第3アドレス/PendulumL

腕を地面と垂直に下ろし手の平を膝に向けた状態で腕を時計の振り子のように3時の位置から9時の位置に振る。
垂直に下ろした腕の手のひらは常に自分の身体の方に向ける。

/PhyOSC/第2アドレス/第3アドレス/PendulumR

腕を地面と垂直に下ろし手の平を膝に向けた状態で腕を時計の振り子のように9時の位置から3時の位置に振る。
垂直に下ろした腕の手のひらは常に自分の身体の方に向ける。
Pendulum
OSCアドレス
腕の動き

/PhyOSC/第2アドレス/第3アドレス/TwistL

腕を下ろし手首を半時計回りに回転させる

/PhyOSC/第2アドレス/第3アドレス/TwistR

腕を下ろし手首を時計回りに回転させる
Twist
OSCアドレス
腕の動き

/PhyOSC/第2アドレス/第3アドレス/Punch

ボクシングのストレートパンチのように拳を肩の位置から地面と平行に突き出す。
Punch
OSCアドレス
腕の動き

/PhyOSC/第2アドレス/第3アドレス/Up

腕を垂直に下ろした状態から拳を天に突き上げる。
Up
OSCアドレス
腕の動き

/PhyOSC/第2アドレス/第3アドレス/WheelF

腕を天に伸ばしボールの投げるように腕を振り下ろす。
天に伸ばした腕の手のひらは前方に向け、水泳のクロールのように腕を振る。
Wheel
OSCアドレス
腕の動き

/PhyOSC/第2アドレス/第3アドレス/WheelB

ソフトボールのピッチャーの投球のように腕を振り上げる。
天に伸ばした腕の手のひらは前方に向け、水泳の背泳ぎのように腕を振る。
Wheel Back

7. コンフィグレーション

「コンフィグレーション」スクリーンで設定するOSC受信サーバーのIPアドレス/Portとデジタルフィルターは、コンフグレーションとして保存することができます。iOSデバイスはこのコンフィグレーションに従ってApple Watchから受信したセンサーデータをOSCメッセージに変換して送信します。 コンフィグレーションは複数作成して保存することができますが、複数のコンフィクレーションを同時に使用することができません。詳しくは、 7.4 コンフィグレーションの切り替え を参照してください。

注意 無料版ではPhyOSCアプリを終了するとユーザーが作成したコンフィグレーションをロードすることができなくなる制限があります。 新規に作成することは可能です。非消費型アプリ内課金でPhyOSC Unlimitedにアップグレードすると、この制限はなくなります。

7.1新規作成

「コンフィグレーション」スクリーンの右下にあるaddをタップしてコンフィグレーションの名前を入力します。

New

7.2修正

「コンフィグレーション」スクリーンの左下にあるformat_list_bulletedをタップして、表示される作成済みのコンフィグレーションリストから修正するコンフィグレーションを選択します。

Modify

7.3複製

現在表示中のコンフィグレーションを複製します。
「コンフィグレーション」スクリーンの右下にある をタップして、コンフィグレーションの名前を入力しDuplicateをタップします。

Duplicate

7.4削除

「コンフィグレーション」スクリーンの左下にあるformat_list_bulletedをタップして、表示される作成済みのコンフィグレーションリストから削除するコンフィグレーションを左へスワイプします。

Delete

7.5コンフィグレーションの切り替え

複数のコンフィグレーションを同時に使用することはできませんが、切り替えて使用することができます。

7.5.1「メイン」スクリーンにコンフィグレーションを登録する

「メイン」スクリーンで任意の「コンフィグレーションボタン」をダブルタップして「コンフィグレーション選択リスト」を表示し、「メイン」スクリーンに登録するコンフィグレーションを選択します。
「メイン」スクリーンの「コンフィグレーションスイッチボタン」に選択したコンフィグレーションが表示されますが、まだこの状態では使用できません。選択したコンフィグレーションを有効にするには、「コンフィグレーションスイッチボタン」をタップして有効状態にします。もう一度「コンフィグレーションスイッチボタン」をタップすると無効状態に変わります。

Change

7.5.2二つ目のコンフィグレーションを登録する

二つ目のコンフィグレーションを登録する「コンフィグレーションスイッチボタン」をタップしてコンフィグレーションを選択します。

Add

7.5.3コンフィグレーションを切り替える

「メイン」スクリーンで登録した「コンフィグレーションスイッチボタン」をタップするとコンフィグレーションを切り替えることができます。

7.5.4コンフィグレーションスイッチボタンの色を変える

「メイン」スクリーンで登録した「コンフィグレーションスイッチボタン」の色を変えて視認性を高めることができます。色を変えるコンフィグレーションスイッチボタンをタップして選択し、スクリーン右下の「コンフィグレーション」設定ボタンをタップして「コンフィグレーション」スクリーンを表示します。 次に、「コンフィグレーション」スクリーンの「カラー選択」をタップして表示される「カラー選択」シートで色を選択し最後に「Done」をタップします。

Change Color

7.5.5「コンフィグレーションスイッチボタン」に登録したコンフィグレーションを解除する

「コンフィグレーションスイッチボタン」をダブルタップして「コンフィグレーション選択リスト」を表示し、をタップして選択を解除します。

Deselect

8. アップグレード

PhyOSCは無料のアプリですが、アプリ内課金でPhyOSC Unlimitedにアップグレードすることによって機能が向上します。 無料版と有料版の機能の相違はOSCの連続送信時間の長さと作成済みのコンフィグレーションが再利用できるか否かです。既に購入済みの場合は購入ボタンの下にある「以前の購入を復元する」をタップします。

Purchase

無料版とアップグレード版(有料)の違い

OSC連続送信時間 コンフィグレーション
無料版 5分 PhyOSCアプリを終了するとDefault以外のコンフィグレーションをロードすることができなくなります。
新規に作成することは可能です。
アップグレード版(有料)
PhyOSC Unlimited
60分 コンフィグレーションの制約はありません。
無料版で作成したコンフィグレーションも有効になります。

9. 制限事項

  • 一台のiOSデバイスに複数のApple Watchを同時にペアリングしてPhyOSCを実行することはできません。
  • AppleWatchを微速に移動した場合や反対に高速に移動した場合は、データを正しく測定できません。
  • Displacement(移動量)は「加速度センサー」と「角速度センサー」の二つのデータでPDR(Pedestrian Dead Reckoning)手法によって相対的に移動量を計測していますが、どちらのデータにも不確実な領域があるため誤差が発生します。
  • 機械学習の認識率の精度は100%ではありません。腕の動きの速さや角度等によって誤った結果が出力されることがあります。精度が高められるように最新研究を調べ新しいアプローチを探し続けます。