- 2008-10-21 (火) 22:18
- AMSTracker | MacBook | python
昨年の11月にLet’s Note W5からMacBookにチェンジした時に、最後までMacBookとThinkpadどちらにするか悩んだのですが、Thinkpadいいなあと思ってたのはこちらの記事を以前から読んでいたから。
もちろんMacBookにも緊急モーションセンサーがあるのは知っていて、購入した時から、いつかモーションセンサーを使って何かやってみようと思っていました。で、ようやくやってみたのがこの動画です(ちょっと見難いです><)。
このblogで数回ネタとして書いていますが、このところPythonが楽しくて、今回もぜひPythonでやろうと思い、緊急モーションセンサーの挙動をPythonで取得するものを捜してたら次のサイトにたどり着きました。
MacBookの緊急モーションセンサーの情報を取得するにはAMSTrackerを使用します。インストール等については上記マイコミジャーナルのサイトをご確認下さい。AMSTrackerを次のように実行すると
AMSTracker -u 0.5
このように3つの数字が表示されます。一番左の数字が左右、真ん中の数字が垂直、右の数字が前後と、それぞれの動きを表示しています。MacBookを動かすと、それぞれの数字が動くことがわかります(終了する場合はControl-C)。

また、次のように -s を付けて実行すると
AMSTracker -u 0.5 -s
0.5秒毎に数値が出力されます(終了する場合はControl-C)。

この数値をPythonスクリプトで読み取り、AppleScript経由でキーストロークをコントロールしています。
AMSTracker -u 0.3 -s | python tilt_control_osx.py
このように実行してから、ここにあるフラッシュ版テトリスを操作しています。終了はターミナル上でControl-Cを押します。
作成したコードは、へっぽこですが一応掲載させていただきます(スクリプトは何度も実行して成功しているものですが、実施は自己責任でお願いします)。
実際に実行する場合、気を付けていただきたいことは
- AMSTracker のセンサー値の取得間隔は0.3秒にしていますが、うまくいかないようでしたら、0.1〜0.5くらいで調整してみて下さい。
- THRESHOLD(しきい値)の数値30は私の経験に基づく数値で、それ以下にして実行すると敏感になりすぎてMacBookをコントロール出来なくなる可能性があります。
- DOWNキーはMacBookを手前に引く(AMSTrackerの3番目の数値がプラス値になる)のですが、時々高いマイナス値が出ます。それによってDOWNコントロールをするつもりで逆にUPする場合があります。
- コードにdebug用キーストロークをコメントアウトしてあります。そちらの挙動をターミナル上で確認してから実行するとわかりやすいかもです。
Geekな方々には、いまさら感のあるネタかもしれませんが、自分でもなんとか出来たのでうれしいです。コードに関してはもっとうまく書けると思うので、もう少し考えてみようと思います。
# coding: utf-8
# thanks Matt Webb: http://interconnected.org/home/2005/03/04/apples_powerbook
# thanks Naoki Tomita: http://e8y.net/blog/2006/10/26/p135.html
# Download AMSTracker from http://www.osxbook.com/software/sms/amstracker/
# Put AMSTracker and tilt_control_osx.py in the same directory. Go to this directory
# in the Terminal and type:
# ./AMSTracker -u 0.3 -s | python tilt_control_osx.py
# Hit ctrl-c to exit.
THRESHOLD = 30 # lower numbers makes this more sensitive
X_AXCIS = 0 # three dimensions: sideways: 0, vertical: 1, forward/back: 2
Y_AXCIS = 2 # three dimensions: sideways: 0, vertical: 1, forward/back: 2
import sys, os
def run_command(command):
script = os.popen('osascript', "w")
script.write('tell application "System Events"\r\n')
script.write('%s\r\n' % command)
script.write('end tell\r\n')
script.close()
while 1:
try:
line = sys.stdin.readline()
x, y = int(line.split()[X_AXCIS]), int(line.split()[Y_AXCIS])
if abs(x) > THRESHOLD or abs(y) > THRESHOLD:
if x > 0 and abs(x) > abs(y):
run_command('keystroke(ASCII character 28)') # move left
#run_command('keystroke "l"')
elif x < 0 and abs(x) > abs(y):
run_command('keystroke(ASCII character 29)') # move right
#run_command('keystroke "r"')
elif y > 0 and abs(y) > abs(x):
#run_command('keystroke "d"')
run_command('keystroke(ASCII character 31)') # move down
elif y < 0 and abs(y) > abs(x):
#run_command('keystroke "u"')
run_command('keystroke(ASCII character 30)') # move up
except KeyboardInterrupt:
sys.exit(0)
except:
pass
その他参考させていただいたサイト
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://aoshiman.net/weblog/2008/10/21/macbook_tetris/trackback/
- Listed below are links to weblogs that reference
- MacBookのモーションセンサーでテトリスをやってみた from “南船北馬”
