Tokyo MotionControl Network tech-cafe Vol.01に行ってきた。

肝心のLeap Motionは会社にあったのを適当に持ち出したのだが、イベントへの参加自体は完全に趣味。ボランティア。自己満足。
あいにく明日明後日は私用のため参加できないのだが、初日の今日だけでもかなり参加した甲斐はあったと思う。

TMCNに参戦する上で、まずネックだったのがLeap Motionの箱。
デバイス本体はフリスクケース数個分程度なのに、箱がとかくデカい。

んで、邪魔だから会社の3DプリンタでLeap Motion専用保護ケースを作ってみた。

Leap Motionケース。

実は当初寸法の詰めが甘くてハマらないとか出力後サポート材を除去するタイミングで破損するとか色々あったのだが、とりあえずしっくりハマっていい感じ。
会社名のロゴも入れといたのだが、流石にここではモザイク処理しとく。
今度出力するとしたら、もうちょっと肉厚にして剛性感を高めて、センサの放出面に当たる部分には不織布でも貼り付けられるようにしようかと思う。
あと、全体的にもうちょっと緩めでもいい気がする。


肝心のイベントだが、中村薫さんのプレゼンはなかなか軽快で、同席した方々とも多少情報交換したりと楽しかった。
しかし惜しむらくは、開発言語を尋ねられた時にPythonを指名したのが私含めたった2名しか居なかった事。
大方どんな言語でも開発出来ると聞いてこりゃPythonで組むっきゃないなーとか意気込んでいたのだが、あわや完全にアウェー状態。
ここで引き下がってはPythonistaとしての名が廃るので、結局Pythonでごり押しする事に。

…いいよ、これ。
Pythonでも全然ストレス無くコーディング出来る。

という事で、明日明後日参加出来ないフラストレーションを発散すべく今日のお題を一応完成したのでサンプルコードをアップしておく。
両手を差し出してじゃんけんして、勝ったのが左右どちらか表示するプログラム。

下準備

/LeapSDK/libディレクトリ内の

  • Leap.py
  • LeapPython.so
  • libLeap.dylib

をPythonコードと同階層にコピーしておく。

サンプルコード

一応テスト済だが、内容に一切の責任は持たない。

import Leap
import time

def janken_id(num):
    if num == 0:
        return 0
    elif num == 2:
        return 1
    elif num == 5:
        return 2
    else:
        return -1

def janken(num_l, num_r):
    l = janken_id(num_l)
    r = janken_id(num_r)
    if l == -1:
        print('Left is wrong!: ' + str(num_l))
    if r == -1:
        print('Right is wrong!: ' + str(num_r))
    if l >= 0 and r >= 0:
        if l == r:
            print('Draw!')
        elif l - r == -1 or l - r == 2:
            print('Left win!')
        elif l - r == 1 or l - r == -2:
            print('Right win!')

c = Leap.Controller()

num_l = 0
num_r = 0
while True:
    time.sleep(0.2)
    f = c.frame()
    if len(f.hands) >= 2:
        flag = False
        left = (f.hands[0].fingers[0].tip_position.x > f.hands[1].fingers[0].tip_position.x)
        if num_l != len(f.hands[left].fingers):
            num_l = len(f.hands[left].fingers)
            flag = True
        if num_r != len(f.hands[1 - left].fingers):
            num_r = len(f.hands[1 - left].fingers)
            flag = True
        if flag:
            janken(
                len(f.hands[left].fingers),
                len(f.hands[1 - left].fingers),
            )

また機会があれば是非参加したいイベントであった。

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>