griffon plugin を
実際に作ってみよう
     2012/01/20
    @kimukou_26
今日のアジェンダ

1. Griffon Pluginを書いてみよう
   a. 視覚的なのが面白いよね
   b. 今流行のって何だろう?
   c. Kinect動かせると面白いかも
      業務用だとASUSからでてる
      Xtion Pro Live だよね
    


● Open NI Pluginを作ってみよう〜
今日のソースコード

● プラグイン側
  ○ https://github.com/kimukou/griffon-openni-plugin
● 使用サンプル側
  ○ https://github.com/kimukou/griffontest
    ■ processtestOpenNI
 
● 備考)
  ○ 試したい方は processtestOpenNI 内で
     griffon install-plugin ../griffon-openni-plugin/griffon-openni-0.1.zip
  を事前に行ってください
〜<plugin作成編>〜
Griffon Pluginの作り方の流れ

● griffon create-plugin openni
● mv openni griffon-openni
  ○ 公式が名前を変えているみたいなので合わせる
● cd griffon-openni
● griffon create-addon openni
  ○ 今回はDSL記述しないけど(汗
● 手動で編集
● griffon package-plugin nodoc
使うライブラリは
● simple-openni
  ○ http://code.google.com/p/simple-openni/
  ○ processingのopenniラッパー(processing1.2でも動作
依存ライブラリは下記の認識なので
● griffon install-plugin jogl-compat
● griffon install-plugin processing
 
 うーん。でも依存情報書きかわらないよ
 =>手動で直しましょう
  ● plugin.xml           <dependencies>

  ●                      <plugin name='jogl-compat' version='0.1' />
                         <plugin name='processing' version='0.4' />
  ●                     </dependencies>

  ● OpenniGriffonPlugin.groovy


                                       def dependsOn = [
                                                'jogl-compat':0.1,
                                                'processing':0.4
                                            ]
                                    
次にOSごとのライブラリをコピーする設定

● 次に対応OSの記述をば
  ○ OpenniGriffonPlugin.groovy
       def platforms = ['linux','windows','windows64', 'macosx']

● こんな感じで配置して、jogl-compatあたりの
  scripts/_Event.groovyの記述をコピー編集
 
● あとは
  ○ griffon package-plugin nodoc
あたりでパッケージングして終了
   
● 多分G*的にはOpenniGriffonAddon.
  groovyに
  DSL書くのが醍醐味
  なのだろうけど(汗
 
〜<デモ>〜
〜<はまった処>〜
はまった処(実装サンプル側
● simple-openni というかopenniのインスタンスを一つ以上作
  るとアクセス例外エラー
  ○ インスタンス共用みたいなことをしてみようと
     したけどうまくいかず><

● pdeファイル=>Javaにする時、processing.coreの関数に厳
  密な型チェックがかかる

● simple-openniのコールバックはnoLoop()/loop()を記述して
  しまうと動かないっぽい
  ○ ProcesstestController.groovy 側でstop()/start()
    は可能
はまった処(実装サンプル側
● processing側のjavaコードからgroovyコード参照
  できないw(jointcompileが無理)
   
    ○ たぶんこれはgriffonの現状の動作仕様かな?
    ○ processingコード自体をgroovyで書く事自体は可能
 
● ジェスチャー登録の反応がかなり怪しい
    (一応手の認識コードです)

      kinect.addGesture("Wave");
      kinect.addGesture("Click");
      kinect.addGesture("RaiseHand");//腕あげる

                                   
はまった処(実装サンプル側
● tabbedPaneのリスナーが見当たらず
 ○ modelやcontrollerが直参照できず一度変数に入れる必
   要があった(ProcesstestView.groovy

      def model_ = model //☆
   
      tab.addChangeListener(
               new ChangeListener() {
        public void stateChanged(ChangeEvent changeEvent) {
          JTabbedPane sourceTabbedPane = (JTabbedPane) changeEvent.getSource();
          int index = sourceTabbedPane.getSelectedIndex();
          println "Tab changed to: " + sourceTabbedPane.getTitleAt(index)
                         model_.title = sourceTabbedPane.getTitleAt(index)
        }
              }
      }
   
はまった処(実装サンプル側
● @PropertyListener がサンプル記述で動かなかった><
    ○ 正確には使い方に凄く悩んだ。
    ○ bindされている変数が変更された時にトリガーで
      Controller関数を呼ぶ機能だけど
 
     def controller //☆

     @Bindable
     @PropertyListener({controller.changeActive(it)})
     String title
 
     def changeActive = {title ->
           println "changeActive ${title.dump()}"
           switch(title.newValue){ //新しい値
時間切れで出来なかったこと
● Pluginの参照インストール
    ○   install-plugin時に動く依存pluginのインストールの仕組みを調べきれなかっ
        た・・。
● tabの切替で表示をうまく切り替える
    ○   処理が途中で止まってしまう
        ■   現在はController側でnewしない形で動かすしかない><
    ○   OpenNIで複数のKinectから1つを選択して起動する方法
        あたりの対応必要?
        ■ http://tclip.blog38.fc2.com/blog-entry-113.html
         

● 参考にした資料
@kiy0taka さん Griffon不定期便〜G*ワークショップ編〜
        ■   http://www.slideshare.net/kiy0taka/griffong
    ○   http://groovy.codehaus.org/SwingBuilder.tabbedPane
 
〜<環境設定編>〜
事前環境設 (Windows:Kinect)

1. Kinect の購入
    a.   amazonで12000円ぐらい
    b.   電源が別途必要、だいぶ大きめ
    c.   商用ライセンスはまだなので、無料シーンのみ利用可能
    d.   Kinect SDKを使えば音源の方向、距離情報等も取れるらしい
 
事前環境設 (Windows:Kinect)

1. OpenNIのダウンロード
   a. http://75.98.78.94/Downloads/OpenNIModules.aspx    からDL
      i. Download OpenNI binaries
     ii. Download OpenNI compliant middleware
        それぞれ Statable/Developer Editionを
2. Driverをインストール
   a. https://github.com/avin2/SensorKinect/tree/unstable/Bin
        のバイナリを入れる

参考:OpenNIセットアップ for MMDのKinect連携
 ○ http://d.hatena.ne.jp/moccos_info/20101220/p1
事前環境設 (Windows:Xtion ProLive)

1. Xtion Pro Live の購入
    a. amazonで24000円ぐらい
    b. USB2.0接続、小さい、電源いらず
    c. 商用利用は可能(ただKinect SDKは使えない)
 
事前環境設 (Windows:Xtion ProLive)
1. OpenNIのダウンロード
   a. http://75.98.78.94/Downloads/OpenNIModules.aspx   からDL
      i. Download OpenNI Pakages
 
 
 
 
 
2. 備考
     i. kinectのドライバと共用がうまくいかない
    ii. 一度アンインストールしてから入れ直し
3. 参考サイト:Windows で Xtion LIVE + OpenNI の環境を作成する
     i. http://d.hatena.ne.jp/kaorun55/20111201/1322667126
〜<参考サイト>〜
環境構築編
● Window
  ○   http://kgxpx834.blog58.fc2.com/blog-entry-22.html
  ○   http://d.hatena.ne.jp/moccos_info/20101220/p1


● Mac:時間内に構築できなかったので下記情報から探してください
● @kaorun55 さん
  OpenNI / Kinect SDK Advent Calendar 2011 まとめ
  ○ http://d.hatena.ne.
      jp/kaorun55/20111228/1325151153
プログラム編
● @reona396 さん ProcessingとKinectで魔法使いになろう!
    ~コード編~
    ○ http://blog.livedoor.
      jp/reona396/archives/53573407.html
●   メディア技術基礎(3Dプログラミング)最終課題
    ○ http://www.syuheiuda.com/?p=62
●   日経ソフトウエア
    ○ http://itpro.nikkeibp.co.
      jp/article/MAG/20101122/354400/
     
● https://gist.github.com/gists/search?
    q=SimpleOpenNI&page=1
    ○ https://gist.github.com/1478237
 
書籍(サンプルDLは有
● Making Things See: 3d Vision With
  Kinect, Processing, Arduino, and
  Makerbot <O'Reilly Media>
  ○ http://www.amazon.co.jp/Making-Things-See-
    Processing-Makerbot/dp/1449307078

griffon plugin を 実際に作ってみよう #jggug

  • 1.
  • 2.
    今日のアジェンダ 1. Griffon Pluginを書いてみよう a. 視覚的なのが面白いよね b. 今流行のって何だろう? c. Kinect動かせると面白いかも 業務用だとASUSからでてる Xtion Pro Live だよね   ● Open NI Pluginを作ってみよう〜
  • 3.
    今日のソースコード ● プラグイン側 ○ https://github.com/kimukou/griffon-openni-plugin ● 使用サンプル側 ○ https://github.com/kimukou/griffontest ■ processtestOpenNI   ● 備考) ○ 試したい方は processtestOpenNI 内で griffon install-plugin ../griffon-openni-plugin/griffon-openni-0.1.zip を事前に行ってください
  • 4.
  • 5.
    Griffon Pluginの作り方の流れ ● griffoncreate-plugin openni ● mv openni griffon-openni ○ 公式が名前を変えているみたいなので合わせる ● cd griffon-openni ● griffon create-addon openni ○ 今回はDSL記述しないけど(汗 ● 手動で編集 ● griffon package-plugin nodoc
  • 6.
    使うライブラリは ● simple-openni ○ http://code.google.com/p/simple-openni/ ○ processingのopenniラッパー(processing1.2でも動作
  • 7.
    依存ライブラリは下記の認識なので ● griffon install-pluginjogl-compat ● griffon install-plugin processing   うーん。でも依存情報書きかわらないよ =>手動で直しましょう ● plugin.xml <dependencies> ●   <plugin name='jogl-compat' version='0.1' /> <plugin name='processing' version='0.4' /> ●   </dependencies> ● OpenniGriffonPlugin.groovy def dependsOn = [ 'jogl-compat':0.1, 'processing':0.4 ]  
  • 8.
    次にOSごとのライブラリをコピーする設定 ● 次に対応OSの記述をば ○ OpenniGriffonPlugin.groovy   def platforms = ['linux','windows','windows64', 'macosx'] ● こんな感じで配置して、jogl-compatあたりの scripts/_Event.groovyの記述をコピー編集  
  • 9.
    ● あとは ○ griffon package-plugin nodoc あたりでパッケージングして終了   ● 多分G*的にはOpenniGriffonAddon. groovyに DSL書くのが醍醐味 なのだろうけど(汗  
  • 10.
  • 11.
  • 12.
    はまった処(実装サンプル側 ● simple-openni というかopenniのインスタンスを一つ以上作 るとアクセス例外エラー ○ インスタンス共用みたいなことをしてみようと したけどうまくいかず>< ● pdeファイル=>Javaにする時、processing.coreの関数に厳 密な型チェックがかかる ● simple-openniのコールバックはnoLoop()/loop()を記述して しまうと動かないっぽい ○ ProcesstestController.groovy 側でstop()/start() は可能
  • 13.
    はまった処(実装サンプル側 ● processing側のjavaコードからgroovyコード参照 できないw(jointcompileが無理)   ○ たぶんこれはgriffonの現状の動作仕様かな? ○ processingコード自体をgroovyで書く事自体は可能   ● ジェスチャー登録の反応がかなり怪しい (一応手の認識コードです) kinect.addGesture("Wave"); kinect.addGesture("Click"); kinect.addGesture("RaiseHand");//腕あげる  
  • 14.
    はまった処(実装サンプル側 ● tabbedPaneのリスナーが見当たらず ○modelやcontrollerが直参照できず一度変数に入れる必 要があった(ProcesstestView.groovy def model_ = model //☆   tab.addChangeListener( new ChangeListener() { public void stateChanged(ChangeEvent changeEvent) { JTabbedPane sourceTabbedPane = (JTabbedPane) changeEvent.getSource(); int index = sourceTabbedPane.getSelectedIndex(); println "Tab changed to: " + sourceTabbedPane.getTitleAt(index) model_.title = sourceTabbedPane.getTitleAt(index) } } }  
  • 15.
    はまった処(実装サンプル側 ● @PropertyListener がサンプル記述で動かなかった>< ○ 正確には使い方に凄く悩んだ。 ○ bindされている変数が変更された時にトリガーで Controller関数を呼ぶ機能だけど     def controller //☆ @Bindable   @PropertyListener({controller.changeActive(it)}) String title     def changeActive = {title -> println "changeActive ${title.dump()}" switch(title.newValue){ //新しい値
  • 16.
    時間切れで出来なかったこと ● Pluginの参照インストール ○ install-plugin時に動く依存pluginのインストールの仕組みを調べきれなかっ た・・。 ● tabの切替で表示をうまく切り替える ○ 処理が途中で止まってしまう ■ 現在はController側でnewしない形で動かすしかない>< ○ OpenNIで複数のKinectから1つを選択して起動する方法 あたりの対応必要? ■ http://tclip.blog38.fc2.com/blog-entry-113.html   ● 参考にした資料 @kiy0taka さん Griffon不定期便〜G*ワークショップ編〜 ■ http://www.slideshare.net/kiy0taka/griffong ○ http://groovy.codehaus.org/SwingBuilder.tabbedPane  
  • 17.
  • 18.
    事前環境設 (Windows:Kinect) 1. Kinectの購入 a. amazonで12000円ぐらい b. 電源が別途必要、だいぶ大きめ c. 商用ライセンスはまだなので、無料シーンのみ利用可能 d. Kinect SDKを使えば音源の方向、距離情報等も取れるらしい  
  • 19.
    事前環境設 (Windows:Kinect) 1. OpenNIのダウンロード a. http://75.98.78.94/Downloads/OpenNIModules.aspx からDL i. Download OpenNI binaries ii. Download OpenNI compliant middleware それぞれ Statable/Developer Editionを 2. Driverをインストール a. https://github.com/avin2/SensorKinect/tree/unstable/Bin のバイナリを入れる 参考:OpenNIセットアップ for MMDのKinect連携 ○ http://d.hatena.ne.jp/moccos_info/20101220/p1
  • 20.
    事前環境設 (Windows:Xtion ProLive) 1.Xtion Pro Live の購入 a. amazonで24000円ぐらい b. USB2.0接続、小さい、電源いらず c. 商用利用は可能(ただKinect SDKは使えない)  
  • 21.
    事前環境設 (Windows:Xtion ProLive) 1.OpenNIのダウンロード a. http://75.98.78.94/Downloads/OpenNIModules.aspx からDL i. Download OpenNI Pakages           2. 備考 i. kinectのドライバと共用がうまくいかない ii. 一度アンインストールしてから入れ直し 3. 参考サイト:Windows で Xtion LIVE + OpenNI の環境を作成する i. http://d.hatena.ne.jp/kaorun55/20111201/1322667126
  • 22.
  • 23.
    環境構築編 ● Window ○ http://kgxpx834.blog58.fc2.com/blog-entry-22.html ○ http://d.hatena.ne.jp/moccos_info/20101220/p1 ● Mac:時間内に構築できなかったので下記情報から探してください ● @kaorun55 さん OpenNI / Kinect SDK Advent Calendar 2011 まとめ ○ http://d.hatena.ne. jp/kaorun55/20111228/1325151153
  • 24.
    プログラム編 ● @reona396 さんProcessingとKinectで魔法使いになろう! ~コード編~ ○ http://blog.livedoor. jp/reona396/archives/53573407.html ● メディア技術基礎(3Dプログラミング)最終課題 ○ http://www.syuheiuda.com/?p=62 ● 日経ソフトウエア ○ http://itpro.nikkeibp.co. jp/article/MAG/20101122/354400/   ● https://gist.github.com/gists/search? q=SimpleOpenNI&page=1 ○ https://gist.github.com/1478237  
  • 25.
    書籍(サンプルDLは有 ● Making ThingsSee: 3d Vision With Kinect, Processing, Arduino, and Makerbot <O'Reilly Media> ○ http://www.amazon.co.jp/Making-Things-See- Processing-Makerbot/dp/1449307078