2011年4月15日金曜日

bashの補完機能を試す(rosbashの中身を見てみる)

roscdやrostopicを初めて使ったとき、その補完機能にびっくりした人は私だけじゃないはず。
今回はこの補完機能に迫ります。

$ roscd rosbash
して、そのなかのrosbashというファイルを見てみます。

ここにはいろいろ書いてありますが以下に注目しました。

function _roscomplete {
local arg opts
COMPREPLY=()
arg="${COMP_WORDS[COMP_CWORD]}"
opts="`_ros_list_packages` `_ros_list_stacks`"
IFS=$'\n'
COMPREPLY=($(compgen -W "${opts}" -- ${arg}))
unset IFS
}
complete -F "_roscomplete" "rosmake"
$ man bash
として、compgenを検索するとこの使い方が書いてありました。
上記の例ではrosmakeというコマンドの引数の補完として、_roscomplete関数を用いる。
そして、${opts}変数に入っている文字列をIFS変数を区切り文字として使って、
現在入力中の${arg}を補完する。という意味になるみたいです。-Wはwordの意味。
-Wを-Gにすると正規表現も使えるみたいです。

試しに以下のようなファイルを作ってみました。

_hoge()
{
local arg
COMPREPLY=()
arg=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=($(compgen -W 'hokan1 hokan2 kouho1 kouho2' -- $arg))
}
complete -F _hoge hoge

_hoga()
{
local arg
COMPREPLY=()
arg=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=($(compgen -o dirnames -- $arg))
}
complete -F _hoga hoga

_hogi()
{
local arg
COMPREPLY=()
arg=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=($(compgen -G "${arg}*.txt" -- $arg))
}
complete -F _hogi hogi
これをhoge.sh
として保存して、
$ source hoge.sh
すると
hogeに対してhokan1 hokan2 kouho1 kouho2が、
hogaに対してはディレクトリが、
hogiに対しては*.txtファイルが、
それぞれ出てきます。

これでプログラムの補完ができたら、ちょっとおしゃれですね。

2011年4月14日木曜日

rospython

rospythonというコマンドをご存知でしょうか?

rospyを使うためには
import roslib
roslib.load_manifest('hogehoge')
とするのがお決まりです。
こうするとmanifest.xmlに書いてあるdependパッケージにPYTHONPATHが通るようになり、
依存パッケージを呼び出すことができる。

例えばmanifest.xmlに
<depend package="joy"/>
と書いてあるパッケージhogehogeがあったとして、

通常Pythonから使うには
$ python
>>> import roslib
>>> roslib.load_manifest('hogehoge')
>>> import joy
としないといけない。

rospythonはこれを簡単に使うためのもので、
$ rospython hogehoge
>>> import joy
と、いきなりdependパッケージを使うことができる。
ちょっと便利?

今のところroshにはこの機能はないみたいです。

2011年4月10日日曜日

TurtleBotの持つ意味

Willow GarageからTurtleBotという新しいロボットが発表されました。

http://www.willowgarage.com/turtlebot

紹介動画はこちら


PR2と比べちゃうとちょっと、、、、
という感じがしますね。

しかしWillowのrobot紹介ページでは、テレプレゼンスロボットのTexaiより上にあります。
PR2, TurtleBot, Texaiの順。
ここからもWillowのやる気をちょっと感じます。
http://www.willowgarage.com/robots

TurtleBotはiRobotのCreateというルンバの掃除機抜きバージョン(日本では未発売)+Kinect+Netbookという構成で、自律移動ができます。
僕の以前作ったロボットにちょっと似てませんかね。




この亀ロボットが持つ意味は実は大きいと思います。
Createは確か2万円くらい、Kinectは1.5万くらい、Netbookは数万、これに特注フレームを合わせても10万くらいでしょうか。
ということは普通のPCと同じかそれより安いくらいです。

WillowがやりたいのはROSにより誰でもロボットのプログラムが簡単に作れる世界の実現だと思います。今のPCのように。
しかしそれには誰でもロボットを持っていないといけない。でもロボットは誰でも持てるわけじゃない。高いし、作るにはある程度のメカ、電気の技術が必要。
そこでまず彼らがやったのはPR2を配ること。でもPR2は高すぎて(4000万円!)一般人には手がでない。
ROSとそのコミュニティのおかげでソフトはかなり揃ってきたけど、開発者の裾野はそこまで広がりきってはいない。
ハードウェアの壁は大きい。

シミュレータ上でPR2のプログラムも作れるけど、結局シミュレータでしか動かないならゲームのエージェントでも作ったほうが楽しい。やっぱりロボットの面白さは目の前で物理エージェントが動くことじゃないでしょうか。

そこでこのTurtleBotです。
このロボットなら誰でも、PCより安い値段で手に入れることができる。
しかも3Dセンサと、自律移動のソフトも付いている。
ロボットの知識がなくても誰でもロボットプログラミングができる時代がついに来たのです。
なのでTurtleBotは今までのWillowのロボットの中でもかなり革命的だと思います。
ロボットとしては普通だけど、そのもたらす意味は革命だと思うわけです。

ROSは自律移動、画像処理系のソフトが充実しているというイメージを僕は持っています。
なのでTurtleBotはROSとの相性もいいんじゃないでしょうか?

あとはマニピュレーション系をどうするかです。
6軸以上はないと満足なマニピュレーションはできないと思います。
つまりモータが6個以上ということで、ルンバよりさらに高価になります。
このマニピュレーションが可能なロボットが安価に手に入るようになったとき、
ロボット界には真の革命が起きるでしょう。
そこを狙っている人たちもきっといるでしょう。

なんて勝手な想像をしてみました。

2011年3月28日月曜日

roshを使ってみる

みなさん震災の影響はどうでしょうか?
私のところはほとんど影響はありませんでした。
では前回の続きでroshです。

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

roshはPythonインタプリタからROSにアクセスするための便利ツールです。
私の経験上、ロボットとインタプリタの相性は抜群だと思いますので、
これはかなりいい予感がします。
(作者は予想通りKen Conleyさんですね)

個人的にはPythonのインタプリタはあまり好きではありません。(っていうほど使ったことないですけど)
roshもデフォルトのインタプリタではなく、IPythonというものを使っているようです。
(IPythonではtabの補完ができたり、デバッグにも使えるみたいです。
emacsキーバインドも使えるし、これはすごいです!!Python使いには常識?)

まずroshのインストールです。
desktop-fullでインストールしてもroshは入らないようです。

$ sudo apt-get install ros-diamondback-rosh-desktop-plugins


IPythonが初めての人は ~/.ipython/ipythonrcの以下の部分を2にセットします。(プライベートシンボルを補完しないように)

readline_omit__names 2


カスタマイズしたい人はroshrcを書くこともできます。
http://www.ros.org/wiki/rosh/roshrc

私は以下のようにして動作確認しました。

予め、自作のjtalk_node、/talk (std_msgs/String)をSubscribeするノードを動かしておきます。
$ rostopic list
/rosout
/rosout_agg
/talk
という状態です。

$ rosrun rosh rosh
で起動します。

ここで、
topics.
まで入力して、Tabを押すと


In [1]: topics.
topics.rosout      topics.rosout_agg  topics.talk      

とトピック一覧が表示されます。
で、
tをタイプしてTabすると補完されて、
In [1]: topics.talk
となります。

topics.talk[0]
とすれば最新の/talkが見れます。

topics.talk(data="hoge")
とすれば、/talkに大して、std_msgs/Stringのstring dataに"hoge"をいれたものを発行できます。

これはすごい便利な予感がしますね。
rostopicでは物足りないときはこれですね。っていうかrostopicいらない?

2011年3月10日木曜日

Diamondbackのインストール

先日ROSの新しいバージョン Diamondbackがリリースされました。

さっそくインストールしてみます。

すでにROSのリポジトリをaptにいれている人は、

$ sudo apt-get update
$ sudo apt-get install ros-diamondback-desktop-full
とするととりあえず必要なものが全部入ります。


全部は入れたくないけどrx, rvizなど、ROS+便利ツールを使いたい人は、
$ sudo apt-get install ros-diamondback-desktop


ROSそのものだけを使いたい人は
$ sudo apt-get install ros-diamondback-ros-base


とすると必要なものが入ります。

私はdesktop-fullにしました。

あとはいつも通り、環境変数をセットするために、
source /opt/ros/diamondback/setup.bash
を.bashrcに追加します。

以上です。

$ rosls common_msgs
してみると、
trajectory_msgs
などが追加されていますね。

diamondbackではPCL関連のアップデートが一番アツいと思いますが、
個人的に最も興味があるのはroshです。

2011年3月9日水曜日

Robot Sound Libraries

ロボットがどんな声を発するべきか。

日本ではいわゆる「ゆっくり」ボイスで決まり?な訳ですが、
海外ではそうはいきません。

Willowがロボット用音声を提供してくれました。

http://hri.willowgarage.com/sounds/

WEBページで直接聞けるのでいろいろ試してみてください。
みなさん、どれがお好みですか?

人っぽいものから、単なる音までいろいろ揃っています。
こういったロボット用コンテンツを共有するという、非常に面白い試みだと思います。

2011年2月8日火曜日

ハンズフリー掃除機

ニコニコにもアップしてみました。

ちゃんとこっちの意図通りのツッコミが入っていて、面白いですね。
ニコニコもいいなぁ。