2013年5月23日木曜日

ロボットがメインストリームになるのを妨げているのはなんだろうか?

世の中完全にITがメインストリームであり、ロボットなんて全く相手にされていません。
ITはすでに飽和していると言われていて、次にロボットが期待されているわけですが、
いったいいつになったらロボットの時代が来るのか。。。
我々知能ロボットソフトウェアの開発をしている人間はみんなIT業界の連中を指をくわえて眺めている状態ではないでしょうか。

普段あまり思想とか書かないですけど、OSRFのブライアンガーキーさんの記事が目に入ったので翻訳して紹介します。我々ロボットソフトをやっている人間からすれば中身は至って普通のことが書いてありますが、なかなか明文化されている文章は見たことがなかったので、代弁してもらうことにしました。

原文: http://robohub.org/brian-gerkey-on-what-is-the-single-biggest-obstacle-preventing-robotics-from-going-mainstream/

 ロボティクスがもっと広く採用されるための最大の障壁は、ロボットアプリが経験のあるロボット開発者(roboticists)にしか作れないということだ。信頼性とロバスト性を兼ねそろえた役に立つアプリを作るためには、深く広い様々な分野の知識が必要不可欠だ。例えば状態推定や、認識、動作計画などだ。単なるソフトウェアなら多くの人が書けるが、こういったロボット開発の経験がある人はほんの少ししかいない。必要なのは多くの普通のソフトウェア開発者をロボットアプリ開発に参加させることだ。

 私がアプリ(applications)と言っているのは、それを新しいアルゴリズムの開発やコアな要素開発と区別すためだ。普通のソフトウェアのアナロジーで語れば、デスクトップアプリを作るために、プロセスのスケジューラーやファイルシステム、メモリ管理を理解する必要がないということだ。同様にウェブアプリを書くのにDNSやウェブサーバーやウェブソケットの詳細を知っている必要はない。もちろんそれらの知識はあれば役に立つが、一度コアが出来て、理解され、ドキュメントが書かれ、チュートリアルが出来てしまえば、障壁は著しく低くなる。ただコードを書けばよいというレベルになる。

 単にもっと多くの人をロボットに関わらせる、その先に行くためには、日々の生活の中でロボット技術が有益に使われるためのもっとよいアイデアが必要だ。私はロボットコミュニティーに入って15年になるが、ロボット開発者は病的なまでにアプリのアイデアを考えるのが苦手だと確信するに至った。我々は技術に魅了されており、それは重大な問題に取り組むためのモチベーションとしてはいいが、そのためにロボットとしての問題を解決することに集中してしまい、その問題が本当に人々に必要とされているのかどうかを考えていない。この問題は、我々のコミュニティーに新しく異なる分野の桁違いに多くの人を加えることで解決できる。そして、それは有能なプログラマがロボットアプリの開発をできるようにすることによって成し遂げることができる。

 AndroidやiOSプラットフォームは3G, GPS, タッチスクリーンの理解なしに、役に立ち、時には世界を変えてしまうようなモバイルアプリを作ることを可能にした。我々もロボットについて同じことができる。我々は多大な努力によってオープンで、共有できるロボットソフトウェアプラットフォームの正しい道を進んでいる。必要なのはただこの道を突き進み、それらを作るときに常に非ロボットエンジニアのことを念頭に置くことだ。

2013年5月1日水曜日

catkin化はなかなか進んでいなさそう

まだ世間でもcatkin化は進んでいないですね。

hydraから大丈夫かな。

自分で使いたいパッケージをcatkin化して回ることになりそう。

catkin化する必要性は現時点では正直あまりないんですが、
自分の作るパッケージをcatkin化したいので、
依存するものはすべてcatkinになっていないといけないのです。

とりあえず2つ程catkin化しました。

USBカメラのノードとDynamixelのノードです。

uvc_camのほうにはpullリクエストも送ってみました。
dynamixelもissue投げたので取り込まれるといいな。

どっちも早くリリースまでいってほしい。

やっとcatkinに慣れてきました。

2013年4月30日火曜日

ROSで顔認識

OpenCVで顔認識プログラムやろうかと思ったのですが、
ROSにあったので使ってみたいと思います。

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

インストールは以下でできます。
$ sudo apt-get install ros-groovy-people

一応willowのスタックのようです。

ただしこれは単眼ではなく、ステレオカメラかRGBDカメラ(Kinect / Xtion)が必要です。
3次元位置を出せるみたいです。

今回は私はUSBカメラで顔の画面上の位置だけ出したかったので、
2次元のものを探したら、やっぱりありました。

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


これはROS By Exampleを書いている人たちのプロジェクトですね。

ドキュメントもしっかりしているので、これを使ってみます。

インストールはソースからやる必要があるみたいです。
catkin化されてないです。

インストール方法を簡単に書くとuvc_camパッケージのインストール

$ git clone https://github.com/ericperko/uvc_cam.git
$ rosdep install uvc_cam
$ rosmake uvc_cam

pi_vision スタックのインストール
$ svn co http://pi-robot-ros-pkg.googlecode.com/svn/trunk/pi_vision
4 rosdep install pi_vision
$ rosmake pi_vision

ビルドは多分、いろいろ古くてうまく行かないので、以下だけやるといいと思います。

 $ roscd pi_face_tracker
 $ make

基本的にはpythonのコードなのでビルドはいらないです。

で、USBカメラでの実行は以下のコマンドでUSBカメラのノードを上げて、


$ roslaunch ros2opencv uvc_cam.launch




$ roslaunch pi_face_tracker face_tracker_uvc_cam.launch 

でいいみたいです。

データセットのせいか、メガネがあると認識しづらいみたいです。
発見&追従です。



/roi
に sensor_msgs/RegionOfInterest
で座標が出ます。

OTLさん素顔公開です!!

2013年4月29日月曜日

catkinでのpythonのtestについて

catkinにはまだなれません。

catkin化したパッケージのテストについて調べたので書いてみます。
catkinはとにかくドキュメントが少なすぎて泣ける。

普段pythonしかコード書かないので、pythonのtestについてです。

catkinではpythonでのtestにnoseというフレームワークを基本的に使うみたいです。
unittestフレームワークを使ったコードはそのまま使えるので、
あまり意識しなくても大丈夫かも。

まず、テストファイルをこれまでと同様に準備します。

で、CMakeLists.txtに
catkin_add_nosetests(test/unit)

などと書きます。

noseではテストをパッケージにできるので、
test/unit以下にunittestのファイルと__init__.pyを置いておけば
すべて実行されるみたいです。

で、rostestのほうは、

add_rostest(test/***.test)

と書きます。
中身は今までどおり、rostestパッケージを使った書き方でよさそうです。

これで、

$ catkin_make run_tests
とすれば、すべてのパッケージのテストが実施されます。

$ cd WORKSPACE/build
$ make run_tests_PACKAGE_NAME

で、指定したパッケージだけのテストもできます。
いろんなソースとか調べた方法なので、もし、もっとちゃんとしたドキュメントとか
ご存知の方いたら教えてください。

2013年3月9日土曜日

ROS勉強オフ会開催中

今日はROS勉強オフ会開催中です!

Turtlebot2を買った強者が自宅に来ております。

ROSのインストールはできたけど、ロボットが動かないとか。

僕の読みでは原因はケーブルの差し忘れです。


5分後・・・・



動きました!

ROS_HOSTNAME/ROS_MASTER_URIの設定がおかしかったみたいです。

2013年2月22日金曜日

Robots for Humanity (IROS 2012 Video Track)

Willowの社長自ら解説するRobots for Humanityプロジェクトのビデオです。




2013年2月10日日曜日

catkin化: スクリプトで楽をする編

みなさんcatkin化してますか?
catkinizeというcatkin化を助けてくれるスクリプトがあるので、これを使ってみましょう。

参考URL:
http://ros.org/wiki/catkin/migrating_from_rosbuild

githubにソースがあるのでそこから取ってきてインストールします。

$ git clone https://github.com/ros-infrastructure/catkinize
$ cd catkinize
$ sudo python setup.py install


移行するためのworkspaceをつくります。
ここではlight_curtainというOTLの自作packageの移行をするものとします。

$ mkdir light_curtain_ws/src
$ cd light_curtain_ws
$ catkin_make
$ source devel/setup.bash


ここにlight_curtain packageのソースをもってきて、catkinizeします。

$ cd src
$ git clone https://github.com/OTL/light_curtain.git
$ catkinize light_curtain 0.1.0

catkinizeの引数はpathとバージョン番号です。
もし、stackならcatkinize_stackを使えばOK。もしPakcageの新規作成ならcatkin_create_pkgを使いましょう。

手動でチェック


catkinizeがすべて自動でやってくれるわけではないので、手動で対応しなければなりません。
例えばpackage.xmlの依存関係はすべてコメントアウトされた状態にあります。
また、CMakeLists.txtもTODOで、手動で埋めるべき項目が記されています。

注意:catkinではすべてのCMakeプロジェクトが1つにまとめられます。そのためCMake上の変数やターゲット名は被らないようにしなければなりません。

以下にやることを原典を参考に書いておきますが、実際にはCMakeLists.txtをいじりながら、ビルド、実行、ができる状態まで編集しつつ、分からないところを調べる、という作業になります。
  1. maintainerの項目がコメントアウトされた状態で入っている(authorと同じになっている)のでそれを確認してコメントイン。<maintainer email="hoge@hoge.com">のように、emailフィールドも入れた方がいいみたいです。
  2. dependenciesがbuild/run/testで分かれたので、確認してコメントイン。http://ros.org/wiki/catkin/package.xmlを読んで意味を理解しましょう。
  3. CMakeLists.txtが編集されているので、そこに書かれたTODOをちゃんとやる
  4. 自動的に変更された部分を確認して修正する
  5. 古いコメント部分を削除
  6. 生成するメッセージ、サービス、アクションをadd_**_filesに記入
  7. 古いincludeを削除
  8. catkin_packageマクロを埋める
  9. 変数名がユニークなものになるように変更
  10. pythonスクリプトがあるならその対応
・・・とやることいっぱいです。

また、


超はまったのが、dynamic_reconfigureで、
dynamic_reconfigure.parameter_generatorじゃなく、
dynamic_reconfigure.parameter_generator_catkin
にしないといけないところでした。

ともかく、すべてを理解してからじゃないととても無理だと思います。
package.xml, CMakeLists.txtの新しいフォーマットの理解をしましょう。
ともかく、1回やれば大体分かると思いますので、簡単なものからやってみるといいでしょう。


あと、ライブラリが自動でリンクされないので、以下のような感じに書くとcatkinで依存関係記述されたライブラリがリンクできます。

target_link_libraries(hogehoge_target ${catkin_LIBRARIES})

うーん、思ったより大変だった。
参考になるか分かりませんが、groovy化したlight_curtainをおいて置きます。


つっこみ、修正等あればgithubにて教えてください。