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も試してみます。

    2010年11月19日金曜日

    rosmsg users

    いつのまにかros-kinectメーリングリストまでできてますね。
    興味のある人はSubscribeしておいたほうがいいのでは。

    ROSメーリスを読んでいて見つけた小ネタですが、
    あるメッセージタイプを利用しているファイルを全部見つけてくれるコマンドが
    rosmsgにあったんですね。

    geometry_msgs/Twistを利用しているファイルを見つけたいときは

    $ rosmsg users geometry_msgs/Twist

    とするとstacksからすべて列挙してくれます。
    便利。

    2010年11月12日金曜日

    ROS Kinect node

    Kinectはご存知ですか?
    http://www.xbox.com/ja-JP/kinect
    XBOX360のWiiに対抗?したコントローラー?で、
    カメラで人の形状を認識して、ジェスチャなどで遊ぶことができます。

    で、それに使われているのがPrime Sense
    http://www.primesense.com/
    というセンサで、3次元形状が単眼カメラ+プロジェクタで取得できるというものです。

    Kinectも同じように3次元形状を取得できるはずですが、
    XBOX360の発売元のMicrosoftはそれをしてほしくない
    (ゲームのコントローラだから安く売れる、つまりゲームソフトで元を取る)
    ので、APIなどは公開されていません。

    それをハックした人がいました。
    (ハックには懸賞金$3000($1000から徐々にあがりました)がかけられていました。)

    で、さらにそれをROSで使いやすいようにした人がいます。
    ↓はそのビデオ。3次元形状がとれてますね。Viewerはrvizのようです。



    最近はこの話題でもちきりです。僕の中では。
    何がスゴイって、安いんです。12000円で買えるんです。
    普通のレーザーだって40万とか、3Dだと100万円でも安いほう?
    ですから、この値段は本当に驚異的です。
    さすがに精度はでないと思うので、用途は限定的になるかと思いますが、
    非常に想像力を掻き立てられます!

    早速Kinect予約しました。日本では11/20発売です。
    XBOX360は持ってません!

    届いたらこれを使ってPCLやらいろいろ認識系ソフトを試してみたいと思います。
    それまでにキャリブレーションとかできるようになっていることに期待。