「Raspberry Piで学ぶ ROSロボット入門」を安価に楽しむ方法

Pocket
LINEで送る

先月30日に発売された「Raspberry Piで学ぶ ROSロボット入門」ですが、やっぱりロボットが高くて手が出しにくいという反応をいただいておりますので、なくても楽しめるように、いくつかロボットなしのプランを提示します。ついでに本書の内容もどんなものか匂わせます。

もちろん、実機があるのがベストです。

Travis CIとの格闘を楽しむ

本書はロボットを動かすための本ですが、テストがたくさん盛り込んであり、Travis CIも裏の操作対象のような位置付けになっています。また、ロボットがなくても、テストが通るかどうかで、コードが正しいかどうかは、完全ではありませんがだいたい分かります。ということで、勉強だけならTravis CIでテストを通すことを目標にしてコードを書くことができます。

また、講義では、ロボットを1人1台ではなく、教室に数台だけにしておき、テストを通した人から実機を試すという運用も考えられます。これはテストを扱っているからこそ可能になることです。また、私も職業柄、当然講義を持っておりますので、ちゃんと講義や実習が成立するように考えて書いておりますです。

実機を作る

これはかえってコストがかかるかもしれませんが、少しずつ部品を揃えて試していくこともできます。ハードウェアの使用はこちらに公開されていますので、挑戦してみるのも良いかもしれません。

シミュレータと接続

最後、ラズパイマウスのシミュレータで試すという方法もあります。ただ、本書のコードとシミュレータのつなぎこみには少し手間がかかります。少しだけ付録で説明しましたが、ちょっと本書を読み進めないと難しいかと。

ということで、シミュレータの作者にどんどんissueを投げていけば、そのうち答えが出てくるものと予想されます(ひどい)。

また、シミュレータは、入出力口を全てROSのインタフェースで持っています。が、実機はデバイスファイルがインタフェースなので、そういう点ではシミュレータは不完全です。ここをデバイスファイル(もちろん普通のファイルでも可)でブリッジできればシミュレータとして完全なのですが・・・。この点は気になっているところなので、こちらでも働きかけを続けます。

おわりに

3つ挙げたうちの後ろの2つは大変ですが、最初の項目のように、本書は一つのロボットを多人数でシェアしても大丈夫な構成になっています。また、ロボットは持っている人のところで動かして、あとはテスト環境でソフトウェアを書くということもできるようになっています。

ということで、ぜひ一読いただければと。

Pocket
LINEで送る

「Raspberry Piで学ぶ ROSロボット入門」という本を書きました

Pocket
LINEで送る

ロボットにラズパイを載っけてROSで動かすという流行りもの全部乗せの節操のない本を書きました。3月30日に出ます。以前の日経Linuxの連載をまとめて、原型を留めないほどROS化したものです。本日校了ということで、9月から12月までは執筆、1月からは書き直しや校正と、充実した地獄が終わりました。

 

 

まさか自分がROSの本を書くとは思っていませんでした。私のROSに関するコントリビューションは、たまにROS Wikiを翻訳するくらいです。あんまりROSのコミュニティーに仁義が切れてないのは、別のコミュニティーをやってる身としては褒められたものではないという認識なのですが、日経Linuxの内容を強化する上でROSが避けられず、自分も真正面から扱うことにした次第です。

本の中ではこんなことをしています。

内容は大学の講義や実習を想定しています。4月からの講義にはギリギリですが、ぜひ本を手にとっていただければと。

Pocket
LINEで送る

【やっつけ】CGIHTTPServer.test()でウェブサーバを立ち上げるROSのノードを作る

Pocket
LINEで送る

もっと簡単な方法があれば教えてくださーい

やりたいこと

roslaunchでウェブサーバを立ち上げたい。roslaunchを終わらせたらウェブサーバを落としたい。

やり方

次のようなスクリプトwebserver.pyを書いて、scriptsディレクトリに置く。

#!/usr/bin/env python
import rospy, os
import CGIHTTPServer

def kill():
    os.system("kill -KILL " + str(os.getpid()))

os.chdir(os.path.dirname(__file__))
rospy.init_node("webserver")
rospy.on_shutdown(kill)
CGIHTTPServer.test()

launchファイルにノードを次のように書く。

<launch>
  <node pkg="hoge_webserver" name="webserver" type="webserver.py" required="true" args="8080" />
</launch>

解説

スクリプト中のkillは、自分自身のプロセスをぶっ殺す関数で、CGIHTTPServer.test()もろともシステムから消し去ります。これがないと、CGIHTTPServer.test()のスレッド(?)が死にません。

また、roslaunchからこのノードを立ち上げると、システムのディレクトリがドキュメントルートになるので、8行目でディレクトリをscriptsに変更しています。

また、roslaunchからwebserver.pyを立ち上げると引数に余計なものが入るので、ローンチファイルでwebserver.pyに指定する引数をargs=”8080″と明示的に指定しています。

以上。

Pocket
LINEで送る

価値反復のROSパッケージ作った

Pocket
LINEで送る

いつも研究で使っている価値反復のコードをROS化しました。オフライン計算をするためのものなんですが、わざわざROSにしました。なんか使ってもらえそうというアホな理由と、移動ロボットの経路計画くらいならそろそろ半リアルタイム(ロボットが動く前に数秒で計算するとかいう用途)に使えそうだという割と本気の理由から。

使い方はREADMEに書きましたが、日本語でも書いておきます。ウリはマルチスレッドで一気に計算できることです。これを分散処理にまで持っていく(そしてGPU対応にする)のが当面の目標。何千もCPUがあれば並列処理が簡単な分、普通のリアルタイムな探索より速くなったりして(未確認)。

まず、value_iterationというノードを立ち上げます。これがソルバです。

$ rosrun simple_value_iteration_ros value_iteration 

で立ち上がります。

試しに下のような単純なタイルワールドでstate 2に前後左右に移動して到達するという問題を解いてみましょう。

|-----------------------|
|       |       |       |
|state 0|state 1|state 2|
|       |       |       |
|-----------------------|
|       |       |       |
|state 3|state 4|state 5|
|       |       |       |
|-------|-------|-------|
|       |       |       |
|state 6|state 7|state 8|
|       |       |       |
|-------|-------|-------|

解くときは、value_iterationノードに状態数がいくつでどんな行動があるか、状態遷移はどんなのがあるか、終端状態はどれかを書いたファイルを食わせて計算させます。そのファイルがこれ:

なんとなく分かるような気もするけど、分からんような気もする。ちなみに確率的な状態遷移も扱えます。example_state_trans_probが例です。

パッケージには、このファイルをvalue_iterationに食わせて結果を表示するサンプルコードがあります。

simple_value_iteration_ros/scripts/sample.py

です。実行してみます。すぐ収束してしまいますが、価値関数が収束して適切な方策が得られます。

$ rosrun simple_value_iteration_ros sample.py 
### sweep 1 ###
values:
    0 70368744177664        1 1000      2 0 
    3 70368744177664        4 2000      5 1000  
    6 70368744177664        7 3000      8 2000  

policy:
    0 null      1 right     2 null  
    3 null      4 up        5 up    
    6 null      7 up        8 up    

### sweep 2 ###
values:
    0 2000      1 1000      2 0 
    3 3000      4 2000      5 1000  
    6 4000      7 3000      8 2000  

policy:
    0 right     1 right     2 null  
    3 up        4 up        5 up    
    6 up        7 up        8 up  

・・・もっと詳しい説明が必要なんだけど・・・

寝る。

Pocket
LINEで送る

Ubuntu 14.04 server用のROS一撃インストールシェルスクリプト

Pocket
LINEで送る

こういうものは世にたくさんあると思いますが、サーバ版のものはないかもしれません。ちゃんとケアします。

ryuichiueda/ros_setup_scripts_Ubuntu14.04_server

Pocket
LINEで送る