2011年1月16日日曜日

今期の視聴リスト

魔法少女まどかマギカ
バクマン
べるぜバブ
みつどもえ
夢食いメリー
ドラゴンクライシス
これはゾンビですか?
それでも町は廻っている
とある魔術の禁書目録
かみちゅ!
STAR DRIVER


未視聴
フラクタル
放浪息子
インフィニットストラトス

2011年1月7日金曜日

tar.gz ファイルを展開してファイルを一つずつ取ってくる python スクリプト

tar.gz で固めたファイルを HDD に書き出すこと無く取り出すスクリプト。


import tarfile


x = tarfile.open("something.tar.gz", "r:gz")


for f in x.getmembers():
    fileobj = x.extractfile(y.name)

2011年1月6日木曜日

kinect から 距離画像を取ってくるROSパッケージ

kinect の記事を書いたらアクセスが増えたので追加してみます。
今回は、ROS 経由でkinect の距離画像を取ってくる方法です。



(1) ROS パッケージを作成
ここでは kinectTest という名前にしてみます。

roscreate-pkg kinectTest rospy roscpp std_msgs

この辺は、 ROS のチュートリアル (http://www.ros.org/wiki/ROS/StartGuide) にあります。



(2) ROS_PACKAGE_PATH に kinectTest へのパスを通す。
ディレクトリが /opt/kinectTest だとすると、
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/opt/kinectTest



(3) node 作成。
kinectTest ディレクトリ以下に node ディレクトリを作成し、
以下のスクリプトをおく。
そして、実行権限を与える。  (chmod +x ファイル名)

#!/usr/bin/env python


import roslib
roslib.load_manifest('kinectTest')
roslib.load_manifest('openni_camera')
import rospy
from sensor_msgs.msg import PointCloud2
import numpy
import pylab
import time




def callback(data):
    resolution = (data.height, data.width)
    # 3D position for each pixel
    img = numpy.fromstring(data.data, numpy.float32)
    x = img[0::4].reshape(resolution)
    y = img[1::4].reshape(resolution)
    z = img[2::4].reshape(resolution)
    
    # show them
    print time.asctime()
    pylab.clf()
    pylab.imshow(numpy.flipud(z), interpolation="nearest",
                 vmax=3, vmin=0)
    pylab.xlim([0, data.width])
    pylab.ylim([0, data.height])
    pylab.colorbar()
    pylab.draw()




def listener():
    rospy.init_node('listener', anonymous=True)
    rospy.Subscriber('/camera/depth/points2',
                     PointCloud2, callback)
    rospy.spin()


if __name__ == "__main__":
    pylab.ion()
    listener()


(4) 走らせる。
まず kinect から画像を取得する。
roslaunch openni_camera openni_kinect.launch 

次に、本プログラムを実行
rosrun kinectTest showDepth.py

すると、距離画像がリアルタイムで表示されます。
やや遅いのは pylab.draw を使っているからでしょう。


--- 
これで z に距離画像の2次元配列を得ることができるので、
色々やると何か新しいことができそうです。

2011年1月5日水曜日

How to read MATLAB .mat by python (scipy)

python で MATLAB の .mat ファイルを読む方法



MATLAB の .mat ファイルとは、 MATLAB のコンソールで

save ファイル名 保存したい変数名

で生成される MATLAB 用のファイル。
計算結果の保存とかに使う。
例:
     save result.mat resultMatrix


scipy.io.matlab.mio を使う。
これが .mat ファイルのインターフェイスになっている。


import scipy.io.matlab.mio
import numpy
import sys


filename = sys.argv[1]
obj = scipy.io.matlab.mio.MatFile5Reader(open(filename))
var = obj.get_variables()['var'] 
#var is the name of a variable you want to get



matlab で保存した計算結果を python で扱いたいときに便利。

2010年12月23日木曜日

Ubuntu 10.04 への Kinect ドライバのインストールとROSのインストール

ROS とか kinect とかのインストールに、いろんなサイトを集めることで成功したので
以下にまとめる。
基本的に 参考URL のコピペなので、うまくいかないときは参考URL先も参照。

インストール
参考URL
     Japanese: http://tclip.blog38.fc2.com/blog-entry-103.html
     English http://www.keyboardmods.com/2010/12/howto-kinect-openninite-skeleton.html


インストール手順

  1.  必要なパッケージのインストール

    sudo apt-get install git-core cmake libglut3-dev pkg-config build-essential libxmu-dev libxi-dev libusb-1.0-0-dev doxygen graphviz

  2. gitのプロキシ設定 (必要なら)

    git config --global http.proxy proxy-address:portnumber

  3. 作業ディレクトリ作成

    mkdir /opt/kinect

  4. OpenNI インストール

    cd /opt/kinect
    git clone https://github.com/OpenNI/OpenNI.git
    cd OpenNI/Platform/Linux-x86/Build
    make && sudo make install


  5. Kinect ドライバインストール

    cd /opt/kinect
    git clone https://github.com/ros-pkg-git/Sensor.git
    cd Sensor/Platform/Linux-x86/Build
    make && sudo make install


  6. NITE インストール

    http://www.primesense.com/?p=515 の右側 Download NITE から、
    Download NITE SDKを /opt/kinect にダウンロード。
    32bit マシンなら x86, 64bit マシンならx64 を選択。

    cd /opt/kinect
    tar -xf NITE-Bin-Ubuntu-x86-1.3.0.17.tar.bz2
    cd NITE-Bin-Ubuntu-x86-1.3.0.17
    sudo ./install.bash

    # キーは 0KOIk2JeIBYClPWVnMoRKn5cdY4=

  7. xml ファイルの編集
    Niteのディレクトリの Data/*.xml を編集

    3rd line:
        <license key="0KOIk2JeIBYClPWVnMoRKn5cdY4=" vendor="PrimeSense"/>
    17th line:
        <MapOutputMode fps="30" xres="640" yres="480"/>
  8. kinect の テスト

    kinect をPCに接続 (plug kinect)
    Nite-1.3.0.17/Samples/Bin 以下のプログラムを実行
      • Sample-Players 人の識別, 骨格モデル?の検出
        Sample-PointViewer 手を降る or 手を前に突き出すことで手の位置検出、追従
  9. コツ

    kinect から2~3 m 離れると認識されやすい。
    Sample-Players で骨格トラッキングされるのは青く識別された人だけ?

ROS関係のインストール
ROS のインストール
まずは以下を参考に ROS をインストールする。http://www.ros.org/wiki/cturtle/Installation/Ubuntu
ただし、apt-get する必要があるパッケージは以下
        sudo apt-get install ros-cturtle-base


ROS ni パッケージ
参考URL
http://www.ros.org/wiki/kinect : hack版ドライバ freenect 用 ROS Stack
http://www.ros.org/wiki/ni : 公式版ドライバ用 ROS Stack
基本的には下。モータとかを使うには上を使うらしい。

インストール手順

  1. rosinstall のインストール

    sudo apt-get install python-setuptools git-core
    sudo easy_install -U rosinstall

    最後に .bashrc の編集を指示されるのでしたがう

    もしrosinstall の install に失敗したら
    以下から tar.gz をダウンロード
    http://pypi.python.org/pypi?%3Aaction=search&term=rosinstall
    tar.gz を解凍し、できたディレクトリに移動しえ、以下でインストール
    sudo python setup.py install

  2. ROS-NI をダウンロード and インストール

    echo "- git: {local-name: ni, uri: 'https://github.com/ros-pkg-git/ni.git', version: master}" > /tmp/ni.ri
    rosinstall ~/ni /opt/ros/cturtle /tmp/ni.ri
    . ~/ni/setup.sh
    rosmake ni


    .bashrc に ~/ni/setup.sh を追加しておくと便利。

  3. USBデバイスファイルの準備

    sudo cp `rospack find ps_engine`/install/55-primesense-usb.rules /etc/udev/rules.d/
    sudo adduser YOUR USERNAME users
    reboot


  4. テスト
    二つの端末で実行

    1st terminal
    roslaunch openni_camera openni_kinect.launch

    2nd terminal
    rosrun rviz rviz
    左上の: Fixed Frame を /openni_depth_frame に、Target Frame を にする。    左下の Add ボタンをクリックし、 Point Cloud2 を選択
    Topic に /camera/depth/points2 を選択
    マウスの右・左・中ボタンを駆使して表示を見る

    もし、rviz で失敗したら
         sudo apt-get install nvidia-cg-toolkit --reinstall

    もし、nvidia-cg-toolkit のインストールも失敗したら
    http://developer.nvidia.com/object/cg_download.html から Cg toolkit の deb パッケージをダウンロード
    次コマンドでインストール。ただしファイル名は環境によって変わる。
    sudo dpkg -i Cg-3.0_November2010_x86.deb

2010年12月19日日曜日

今日のワイン

ボルドー LA GARROUSSE 2006年 (Grand Vin de Bordeaux)
香りがフルーティでおいしい。
それから、カナートの地下食料品売り場 SUZUYA のフランスパンもおいしかった。
あとはフランスで買ったブルーチーズの組み合わせ。

すばらしい。

2010年12月6日月曜日

特定のディレクトリを除いてfind

ホームディレクトリ以下の、
ignore ディレクトリを除く、すべてのディレクトリから .txt を探したいとき

find $HOME -path "$HOME/ignore" -prune -o -name "*.txt"

参考URL:
http://d.hatena.ne.jp/yanma_4/20080721/1216617075