Myoを自分の環境で動かしてみた。

半年前にpre-orderしたMyoが先週ようやく届いたので、次の作品に使用するためにいろいろ試しています。

 

相変わらずプログラミングくそ初心者のトライアル・アンド・エラーなので参考までに。

 

まず、いつも使用しているopenFrameworksで使用しようと思い、addonを探してみるとofxMyoがある。

eddietree/ofxMyo · GitHub

ただ、これではどうもWindowでしか使えない模様。

代わりにこういうのがあった

mattfelsen/ofxMyoWebSockets · GitHub

WebSocketsを介してデータをやり取りするらしい。

今回はなるべくシステムを1つにまとめたいので(?)、これはパス。

使ってみたけど、全然わからんかった

 

公式のDeveloper Forumではご丁寧に、アドオンとかブリッジとか(?)がまとめられてた。

Thalmic Labs Developer Forum / Tools and Bindings / List of Unofficial Tools and Bindings

みんなすごい…

oFですぐ使えそうなものがなかったから、前々から気になってたCinderのBlockもあるみたいだしCinderを使ってみようかなと思ったものの、これも途中で断念。自分無能。

 

公式のSDKページを見てみたらC++での使用法について詳しく書いてたので読んでみる。

Myo SDK 0.8.0: The Myo SDK

APIとか書かれても使い方わからないです…勉強します…

 

とりあえず、SDKをダウンロード

Thalmic Labs - Makers of Myo gesture control armband

oFのprojectGeneratorで作ったプロジェクトのframeworksの中にmyo.frameworkをドラッグアンドドロップ

プロジェクトフォルダにコピーするかどうか、選択肢があるのでそこはチェックを入れといたほうがいいかも。

その次はこのページの画像に従ってセッティングを変更。

Myo SDK 0.8.0: The Myo SDK

Myo

 ∟Myo SDK Manual

   ∟The Myo SDK

     ∟Building Applications With The Myo SDK

       ∟Building C++ Applications With The Myo SDK

この階層の画像を参照しました。

 

そんで、とりあえずexampleもあるみたいなので、projectGeneratorでペロペロ〜っと作ったプロジェクトのmain.cppにexampleのhallo-myo.cppの中身をペロペロ〜っとコピペして起動。

無事ビルドできました。

 

まあ、ここからoFにhallo-myo.cppを取り入れようとして失敗しまくって、最終的には、Myoのジャイロセンサー/ロック・アンロック/手の形(動き)4種類を取得できるようになったものの、oFのdraw()画面には虹色クルクルが出てしまう。という症状が発生。

未だに解決されてません。

おそらくmainの戻り値同士が干渉してるんじゃないかなと踏んでる。

 

そしてつい一昨日にSDK v0.8.0が出たので早速DL。

その際にFarmwareもDLして

Thalmic Labs - Makers of Myo gesture control armband

 

このページに従ってMyoのFarmwareをアップデートしました。

Myo - Firmware Update

 

そんで、v0.8.0からexampleに増えたemg-data-sample.cppを試してみようということでhallo-myo.cppのときと同じようにペロペロ〜っとoFに打ち込んでみたらエラーが…

どうやらXcodeではarrayをincludeできない模様。

 

いや、できないって言われても、そんな困りますよ…って思いながらいろいろと調べてみたところ、Xcodeでは

#include <array>を#include <tr1/array>に変えるか、コンパイルC++11に変えるかしないといけない模様。

後者も試してみたけど、結果できなかったのでここではスルー。

 

arrayをtr1/arrayに変えると次はclassの一番下

std::array<int8_t, 8> emgSamples;

std::tr1::array<int8_t, 8> emgSamples;

に変更する必要がある。

さらに、

void onUnpair(myo::Myo* myo, uint64_t timestamp)
{
emgSamples.fill(0);
}

この.fill(0)を変更しろとのこと。

libstdc++: Member List

ここ見る限りではstd::tr1::arrayにもfill()はあるんだけどな…

 

まあ、onUnpair()って関数だし、ロバスト考慮してちゃんとオフにしなきゃいけないなってなった時にまたfill()については詳しく調べることにして、今回は適当にbegin()に。

ビルドするととりあえず動くし、各パーツからの筋電をmappingしなおした値も届くからいいかなと思います。

 

ちなみにoFの中に打ち込んだら、こちらもdraw()ウィンドウが虹色クルクル。この対処法もちゃんと考えないといけないな…

 

とりあえず、現状こんな感じです。

 

日本語どころか英語の情報もあまり多くはない(少なくはないけど)からいろんなところを参照して勉強になってるけど、いかんせん時間がかかる…

 

ofxOpenNIの下準備について補足

昨日書いた記事について、他のMacにも導入した際に気づいたことをメモ。

 

まず、Homebrewを導入する際に以下のコマンドでMacの状態を確認しろと言われます。

brew doctor

XcodeとかXQuartzとかのバージョンが低いよ。って言われる。

それぞれを最新版にアップデートしないといけないみたいですね。

もろもろアップデートするのはいいんだけど、Xcode6にするとSDKの選択でosx10.8を選べなくなります。

(つまり、Xcode6ではofxOpenNIを使えない?)

 

 

というわけで、Xcode5.1.1をXcode6と混在させる必要があります。

Xcode6は維持したまま以下のURLからXcode5.1.1をダウンロード&インストール

Sign in with your Apple ID - Apple Developer

ここを参考にするといいかも

Xcode5と6を共存させて利用する方法のメモ - プログラミングと音楽とアニメとiPhoneとiPadとMacとAndroidとLogicとギターとテニスと車

 

 

あとは、前の記事

ofxOpenNIをMacOS10.10、Xode5.1.1でも動かす - now&tech

を参考に導入するといいと思われます。

追記の部分は、今回の記事を製作中に元のMacに生じたエラーを解消したものです。

 

というわけで、もう一つのMacでも無事動きました。

 

ここ、英語だけどすごく丁寧にまとめてありました。

Setup Microsoft Kinect on Mac OS X 10.9 (Mavericks)

ofxOpenNIをMacOS10.10、Xode5.1.1でも動かす

MacOS10.9ではできてたのに、導入にかなり手間取ったのでメモ。

 

MacOS10.10 Yosemite

Xcode5.1.1

openFrameworks v0.8.0

 

もろもろのライブラリ?はHomebrewで導入

Homebrew — OS X用パッケージマネージャー

ターミナルに以下のコメントを入れて実行

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

 

ここを参考にしながら諸ライブラリを導入

totakke/homebrew-openni · GitHub

brew tap homebrew/science
brew tap totakke/openni
brew install openni
brew install sensor
brew install nite

sensorを導入した時にsensor-kinectとのリンクを切れと言われる場合があるので、その時はターミナルに指定されているコマンドを入力して再度sensorを導入

リンクを切ったのちに以下のコマンドでsensor-kinectを導入

brew install sensor-kinect

 終わったら、以下のコマンドでサンプルを実行

cd `brew --prefix`/share/openni/samples/Bin/x64-Release
./Sample-NiSimpleViewer

黄色い画面が出てくればクリア

 

 

さて次はopenFramework側。

ofxOpenNIはv1.0を使用

gameoverhack/ofxOpenNI at v1.0 · GitHub

 

ofxOpenNIを of(なんたら)/addons/に移動。

../addons/ofxOpenNI/mac/copy_to_data_openni_path/の中にある/lib/を以下にコピペ。

../addons/ofxOpenNI/example/openNI-demoAllFeatures/bin/data/openni/

 

exampleフォルダをof(なんたら)/apps/にコピペしopenNiSample007.xcodeprojを起動

Runするだけだとtr1とかリンカエラーが出る。

ここからがだいぶ時間がかかった…

 

まずは、Xcode上でopenNISample007のPROJECTをクリック

Info>Deployment TargetとBuild Settings>Architectures>Base SDKを10.8に。

同様にTARGETSの方も

General>Deployment TargetとBuild Setting>Architectures>Base SDKを10.8に。

 

最後に、of(なんたら)/apps/examples/openNI-demoAllFeatures/bin/data/openni/lib/に移動。

libOpenNI.dylibをXcode上のopenNISample007の下層(src,openFrameworksなどと同じ階層)にドラッグアンドドロップ

 

Runすると動きました。

最後のやつはここを参照しました。

roymacdonald/ofxOpenNI · GitHub

 

今回はexampleを動かすことに専念したので、次はprojetGeneratorでプロジェクトを作った時にうまいことできるか試します。

ジェネレータを使った場合はlibとかincludeをaddons以下にドラッグアンドドロップしないといけないので、そこはここを参照してください。

 

ofxOpenNIでKinectを動かしてみる at kishi-r.com

 

ここも後で読も

ofxOpenNI getNumTrackedUsers return 0 - openFrameworks

 

 

 

_____________________________________________

 

翌日またエラーが!!

再度いろいろ試す。

最終的に再度以下のリンクを参考に解決?

Xcode5でCocoaPodsを追加したらLinker Errorが出た際の対処法 - Qiita

 

 

> Xcodeの左上にある、スキーマの選択画面から"Edit Scheme"を選択

> 設定画面が上から出てくるので、その画面の下部にある"Manage Scheme"を選択

> 最後に、自身のプロジェクトやPodsの共有をするために、一番右の欄の"Shared"をチェックして、OKボタンを押します。

> エラーが出たまま作業した場合は、Product > Cleanをしてから、ビルドしましょう。

 

一番最後のところが主に良かったのかな…?

また日を改めてちゃんと動くか確認しよう。