2011年1月30日日曜日

Kinectを使ったジェスチャ認識でルンバを操縦する

Kinectでルンバを操縦してみました。

ハードウェア接続は
Kinect =USB=> PC =Bluetooth=> Roomba
という感じです。


openni_trackerというパッケージを使ってtfのボーンを作り、
tfのデータから腰と手先位置の差分をとって似非ジェスチャ認識させています。
Kinectの目の前にいないと操縦できないのがいまいちですね。

ソースも適当ですが、
一応otl_niスタックとして上げました。
むちゃくちゃ簡単でした。

ルンバのBluetoothモジュールは@longjie0723 のFRISK Roombaを使っています。
http://orientalrobotics.blogspot.com/2011/01/friskroomba.html
非常に快適です。

2011年1月29日土曜日

オリロボ

ROSと全く無関係ですが、ちょっといい本を見つけたので紹介します。

その名もORIROBO。
オリジナルロボットではなく、折り紙ロボットの本です。



かなり詳しく折り方が書いてあります。

さっそく折ってみました!
かっちょえーー!
30分くらいかかりました。

これを切り込みなしの1枚の紙で作れるというのが衝撃的でした。

他にも武器とか、子供心をくすぐるアイテムがいくつも載っています。
これはよい。

安いサーボと組み合わせたらなんか面白いことできそうな予感がしました。

2011年1月22日土曜日

FRISK Roomba動作確認編

@longjie0723 さんにFRISK Roombaモジュールをいただきましたので、
早速動作確認させていただきました。

http://orientalrobotics.blogspot.com/2011/01/friskroomba.html



当方ホストPCがUbuntu10.04、Roomba577での動作確認になります。

まず、FRISKをうちのルンバにぶすっとさします。

この状態で以下のコマンドを打ちます。
$ hcitool scan

Scanning ...

00:01:95:09:06:0C Roomba-001
これでモジュールが正常起動していることと、MACアドレスが分かりました。



/etc/bluetooth/rfcomm.conf
を以下のように編集しました。

rfcomm0 {
        # Automatically bind the device at startup
        bind yes;

        # Bluetooth address of the device
        device 00:01:95:09:06:0C;

        # RFCOMM channel for the connection
        channel 1;

        # Description of the connection
        comment "FRISK Roomba";
}


deviceのところにさっき調べたMACアドレスを書きます。

この状態で

$ sudo /etc/init.d/bluetooth stop
$ sudo /etc/init.d/bluetooth start
して、

$ sudo rfcomm bind hci0
とします。
すると、
/dev/rfcomm0
というデバイスファイルができています。

誰でも使えるようにパーミッションをだしておきましょう。
$ sudo chmod 666 /dev/rfcomm0

あとは、これをシリアルデバイスだと思ってプログラムを走らせればOK。

$ sudo rfcomm bind hci0
は起動するたびに実行しないといけません。
/etc/rc.local
などにかきましょう。


ルンバ関係ないですが、PS3のジョイスティックが使えなくなっていたので、
/etc/init/bluetooth/main.conf
に
DisablePlugins = input
としました。
ルンバとの共存は問題ないようです。

使ったプログラムは以前作ったものをそのまんまで動きました。
無線化うれしい!
とりえあず動作確認まで。

2010年12月14日火曜日

ni (OpenNIのrosスタック)を試す。

OpenNIはKinectを利用する認識・デバイス操作ライブラリです。

ROSからOpenNIを利用するには以下を参考にインストールしましょう。
Ubuntu 10.04, cturtleを前提とします。

http://www.ros.org/wiki/ni


$ 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
$ source ~/ni/setup.sh
$ rosmake ni --rosdep-install
$ sudo cp `rospack find ps_engine`/install/55-primesense-usb.rules /etc/udev/rules.d/


そしてリブートしましょう。


これでインストール終了。


試すには
$ roslaunch openni_camera openni_kinect.launch
$ rosrun rviz rviz
して、
Fixed FrameとTarget Frameを/openni_depthにして、
Point Cloud2として、
/camera/depth/points2を指定すると
rviz上で3D色付きイメージが見れます。ぐりぐり動かせます。

人物抽出サンプルを実行するには


export XN_SENSOR_VENDOR_ID=0x045E 
export XN_SENSOR_PRODUCT_ID=0x02AE
export XN_HOST_PROTOCOL_ALGORITHM_REGISTRATION=0x40
rosrun openni Sample-NiUserTracker

とします。
http://www.ros.org/wiki/nite
のドキュメントには64bitのみ対応と書いてありますが、
すでにソースはちゃんと対応してあるので、x86(32bit)でも普通に実行できます。

動画はgtk-recordmydesktopですべてのフレームをキャプチャするオプションをONにしてとりました。
エンコードは
$ mencoder out.ogv -oac mp3lame -ovc lavc -lavcopts vcodec=mpeg4 -o output.mp4
という感じ。

2010年12月4日土曜日

pcl(unstable)のインストール

pcl (point cloud library)をインストールします。
http://www.ros.org/wiki/pcl

pclは3Dのレーザーデータから物体認識するためのライブラリ(たぶん)です。
これまでそんな3Dセンサ持っていないので関係ないと思っていましたが、
Kinectのおかげでpclが使えそうな雰囲気がしてきたのでとりえあず触ってみたいと思います。

私の環境ではROSはcturtleを利用していますが、いろんなところで
cturtleのpclは古すぎて、APIも変わっているしオススメしない、という雰囲気を感じるので
なるべく新しいものを入れたいと思います。

pclを使っている@garaemonさんに聞いたところによると「まじunstableおすすめ」ということでしたので、
いれてみます。

以下のような記述をpcl.rosintallとして保存して、
$ rosinstall ros pcl.rosinstall
でソースを入手しました。


- svn:
    uri: https://code.ros.org/svn/ros-pkg/stacks/perception_pcl/tags/unstable
    local-name: perception_pcl
- svn:
    uri: https://code.ros.org/svn/ros-pkg/stacks/perception_pcl_addons/tags/unstable
    local-name: perception_pcl_addons

ROS全部makeするのめんどくさかったので、ROS本体はcturtleのまま、
pclだけunstable版でやってみます。

環境変数ROS_PACKAGES_PATHのcturtleのほうより先に、このunstable版がくるようにして、
$ roscd pcl_tutorial
$ rosmake --rosdep-install
としてみました。

試しに
$ roscd pcl_tutorial
$ cd data
$ ../bin/tutorial_narf_keypoint_extraction ./office_scene.pcd
としてみると、以下のようにnarf特徴点の抽出と表示ができたようです。


早くKinectのデータで試してみたいですね。
Tutorialがあるので必要ありそうなところだけやってみたいと思います。

2010年11月22日月曜日

joint_state_publisher

URDFのチュートリアルが追加されました。
http://www.ros.org/wiki/urdf/Tutorials

2. Learning URDF Step by Step

というやつです。


    そこでなかなか便利なツールを見つけたので紹介します。
    joint_state_publisherです。

    http://www.ros.org/wiki/joint_state_publisher

    wu-ros-pkgからインストールしてください。


    URDFでロボットファイルを作るときに、GUIで
    任意のロボット関節角度をPublishしてくれます。


    ↓みたいな感じです。
    便利。

    2010年11月21日日曜日

    KinectをROSで使ってみる

    Kinect10分くらい前に1日遅れでやっと届きました。
    Amazon遅すぎです。。。

    でも入手10分でデプスイメージまで取れました。
    世界のハッカーありがとう。


    黒いところは問題ない様子。透明部分は当然ながら取れない。

    近すぎると距離が取れない(白く抜けてしまっている)

    模様がなくても取れるのがステレオカメラとの違い。

    遠いところ(扉の奥)は見えない(白く抜けている)

    やっぱり直射日光には弱い。



    全体的にのっぺりしたところが得意みたいです。

    全体的にイイです。
    想定した通りのイメージ。

    障害物回避に使うには、近距離が見えなすぎるので実用的ではないきがしてきました。
    どうしましょう。

    以下インストールから実行方法。

    基本的に以下の通りにやりました。
    http://www.ros.org/wiki/kinect


    1. rosintallスクリプトとgitのインストール
      sudo apt-get install python-setuptools
      sudo easy_install -U rosinstall
      sudo apt-get install git-core
    2. rosintallファイルを入手
      wget http://github.com/ros-pkg-git/kinect/raw/master/kinect.rosinstall --no-check-certificate
    3. ROS-kinect stackの入手
      rosinstall ~/kinect-devel /opt/ros/cturtle kinect.rosinstall
    4. libfreenectをgitで入手
      cd ~/kinect-devel/kinect
      git submodule update --init --recursive
    5. ビルド
      . ~/kinect-devel/setup.sh
      rosmake kinect --rosdep-install

    ただし、このままでは動かないので
    $ sudo chmod -R 777  /dev/bus/usb/
    しました。

    実行方法は
    $ roscore
    $ roscd kinect_camera
    $ bin/kinect_node
    して、
    もうひとつのターミナルで
    $ rosrun image_view image_view image:=/camera/depth/image_raw
    で、デプスイメージの表示

    $ rosrun image_view image_view image:=/camera/rgb/image_raw
    でカメラ画像の表示です。

    これからPCLも試してみます。