Myoを自分の環境で動かしてみた。
半年前にpre-orderしたMyoが先週ようやく届いたので、次の作品に使用するためにいろいろ試しています。
相変わらずプログラミングくそ初心者のトライアル・アンド・エラーなので参考までに。
まず、いつも使用しているopenFrameworksで使用しようと思い、addonを探してみるとofxMyoがある。
ただ、これではどうも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++での使用法について詳しく書いてたので読んでみる。
APIとか書かれても使い方わからないです…勉強します…
とりあえず、SDKをダウンロード
Thalmic Labs - Makers of Myo gesture control armband
oFのprojectGeneratorで作ったプロジェクトのframeworksの中にmyo.frameworkをドラッグアンドドロップ。
プロジェクトフォルダにコピーするかどうか、選択肢があるのでそこはチェックを入れといたほうがいいかも。
その次はこのページの画像に従ってセッティングを変更。
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をアップデートしました。
そんで、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;
に変更する必要がある。
さらに、
この.fill(0)を変更しろとのこと。
ここ見る限りでは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でも無事動きました。
ここ、英語だけどすごく丁寧にまとめてありました。
ofxOpenNIをMacOS10.10、Xode5.1.1でも動かす
MacOS10.9ではできてたのに、導入にかなり手間取ったのでメモ。
MacOS10.10 Yosemite
Xcode5.1.1
openFrameworks v0.8.0
もろもろのライブラリ?はHomebrewで導入
ターミナルに以下のコメントを入れて実行
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をしてから、ビルドしましょう。
一番最後のところが主に良かったのかな…?
また日を改めてちゃんと動くか確認しよう。