ROS(Robot Operating System)を初学者がやってみた!#3<トピック通信!トピック、配信、購読編>
はい、どーも!まっちゃんです!!
前回までのあらすじを軽く説明すると達成したい課題が4つありました!そのためにまずは基礎知識を身につけるため、コマンド「rosrun」を使用してパッケージ「turtlesim」のノード「turtlesim_node」を起動したところでしたね!
前回は亀を召喚したんです!かわいかったですね〜!
ボクはROSを魔法のようだと思ってます!
なので召喚とか魔術とか魔法陣のような単語を使って説明していますので、「これからROSを企業や大学で学ぶつもり」とか「魔法を使ってみたい!」なんて人はぜひ今回の記事も読んでみてください!
ボク自身、PCに詳しいわけではないんです。ふつーにやってると分からない単語や考え方が多いし、できないことも多くて辛いです。
それでも工夫して学ぶことでもっと楽しくできるとボクは信じています!本来はROSでも他の勉強でもそうなんですけど、人生を豊かにする道具なんです!
しかしその道具の使い方が分からないからゴミ同然になってしまっている...
この状況をなんとかしたいなっと思ってこのシリーズの記事を書いています!
この記事がこれからROSを勉強する人や今苦戦して学んでいる人の励みになってくれたら嬉しいですね!
あ、注意点としてこの記事はROSの使い方や考え方を大雑把に学べればいいなと思って自分の頭の整理がてら書いています!より正確な情報がほしかったり、もっと深く知りたいということでしたら自分で調べてみることをおすすめします!
それでは本編スタートです!今回も長くなるかもしれませんが、ぜひ最後まで楽しんでいってください!
<ノードの起動>
さあ、前回の続きです!
もし一度電源を落としてしまったらもう一度前回の記事を見て、最後の状態にしてください!
前回は亀の召喚魔法を習得しました!
そこで思い出してほしい!ノードの性質を!!
そう!!ノードは他のノードと合わせ技をすることでよりできることの幅が広がるんだ!ということ!!
これは魔法と魔法を組み合わせてより強力な魔法を発動させることに似ていると思う!!
今回はそれを実際にボクと体験してみよう!!
そこで!前回やったコマンド「rosrun」を覚えているかな??
そう!!魔法を発動させる時に最初に詠唱する部分!!
「rosrun」の場合はノードを起動する時に前回は使用したね!
しかし、当たり前だけどこれ以外にもたくさんあるみたい
今回はまた新たなコマンドを学ぶぞ!!
しかもこれから紹介するコマンドはこの魔法(ノード)がどんな性質を持つのかを知る手がかりになる重要なコマンドだよ!!
これが分かれば、初めて出会う魔法も速攻で使いこなせるようになるはず!!
さらに自分が今使ってる魔法(ノード)について深く知ることで自分の知らない未知の使い方や可能性にも出会えるかもしれない!!
これは知るしかないでしょ!!
さあ、ここで紹介するコマンドはこちら!
$ rosnode
「おいおい〜なんだかショボそうだな!前やったやつはもっと長かったぜ?」っと思ったあなた!まだ余裕ですね!
実はふつーに学んでいるともうギブアップしてる人がいるくらい難しい内容なんですよ!?(特にノードの説明とかパッケージとかさ!)
さすが!理解力が長けていますね!!ボクも負けないようにしないと!
まずはこのコマンドを実行してみてください!するとこんなものが出てくると思います!
rosnode is a command-line tool for printing information about ROS Nodes.
Commands:
rosnode ping test connectivity to node
rosnode list list active nodes
rosnode info print information about node
rosnode machine list nodes running on a particular machine or list machines
rosnode kill kill a running node
rosnode cleanup purge registration information of unreachable nodes
Type rosnode <command> -h for more detailed usage, e.g. 'rosnode ping -h'
な、なんだか意味分からんもんがいっぱい出てきた...
しかし、実はこれから魔法(ノード)を動かしていくボクらに冒険のヒントを与えてくれているんだ!
上から2行目の「Commands:」ってとこから下の行に注目ー!
「rosnode ping」「rosnode list」みたいにいっぱい英語が並んでます!
そう!実はこれ1つ1つがコマンドなんです!!
「rosnode 〇〇」っていうのがコマンド部分、それ以降が説明文になっています!
「rosnode」から始まる魔法詠唱はこんなにもたくさんあるんですね〜
(これ、SAOだとアンダーワールドでアドミニストレータがやってた全コマンドリストを表示させるものと似てます!エンタイアコマンドリストだっけ??)
もう感のいい方ならお気づきですね!この「rosnode」は「ROSのノード(node)を動かしまっせ」というコマンドを指していました!
さあ、とりあえずやってみましょう!
今回は「Command:」の上から3行目に書いてある魔法、「rosnode info」を唱えてみましょう!以下のコマンドを実行してみてください!
$ rosnode info /turtlesim
「rosnode info」は先程のコマンド一覧に書かれたいた詠唱文句、さらに後ろに「/turtlesim」というノードの名前を一緒に唱えることでこの魔法(ノード)の中身を表示します!これを発動させるとこんなものができます!
Node [/turtlesim]
Publications:
* /turtle1/color_sensor [turtlesim/Color]
* /rosout [rosgraph_msgs/Log]
* /turtle1/pose [turtlesim/Pose]
Subscriptions:
* /turtle1/cmd_vel [unknown type]
Services:
* /turtle1/teleport_absolute
* /turtlesim/get_loggers
* /turtlesim/set_logger_level
* /reset
* /spawn
* /clear
* /turtle1/set_pen
* /turtle1/teleport_relative
* /kill
contacting node http://VBUbuntu:35832/ ...
Pid: 2732
Connections:
* topic: /rosout
* to: /rosout
* direction: outbound
* transport: TCPROS
うおっ!意味分からんものがいっぱい出てきましたw
実はこれ、さっき発動した魔法(ノード)がどんな動きを影でしているのかを確認するコマンドだったんです!!
そう、亀を召喚しただけだと思われたいたあの魔法...実はボクらの目に見えないところで想像以上のはたらきをしています
これが先程説明した未知の力や可能性を知るということなんです!
この未知の可能性を知ることで、ボクらの使える魔法の質がグッと上がります!!どういうことか、詳しく説明していきましょう
まず、「Publications:」「Subscriptions:」「Services:」という文字が見えますか?
そう、さっき「rosnode」で表示させたものに似ていますね〜
さあ、ここで「配信(Pubricatin)」「購読(Subscriptin)」「トピック」という超重要な考え方が出てきます!(Serviceに関してはボクもまだ学んでないので今回はパスで!いづれ説明します!!)
は〜〜〜????ですねw
配信ってYoutubeに動画あげるの??笑
でもそーいやYoutubeのチャンネル登録ボタンのとこに「Subscribe」とか書いてあったよーな...
そうです!!イメージはそんな感じでいいと思います!!
前回、ノードは複数のノードと組み合わせることでより大きな力を発揮すると言いました!つまり、それぞれが役割分担して動かしているわけです!
ノード同士でうまくはたらくようにやり取りをしているんですね〜
情報を渡したり〜受け取ったり〜っといった具合です!
この渡す動作のことを「配信(Pubrication)」受け取る動作のことを「購読(Subscriptin)」と言うんです!
そして、その仲介を担当しているのが「トピック」です!
つまり、ノードが配信した情報はノードに直接送られるのではなく、一度トピックというものに集められます!そしてその集めた情報の中から別のノードが必要な情報を購読してノードを動かしているわけです
Youtube(トピック)に動画(情報)をあげたり(配信する)、Youtube(トピック)にあがった動画の中から見たいチャンネルをチャンネル登録してそのあがった動画(情報)を見たり(購読する)ってことと全く同じことをノードもしていたんですね〜
結果として表に見えるものはボクも見て確認できます。(亀が現れたとか消えたとか見れば簡単に分かります)がもしうまく動かないっとなった時、その役割のノードが機能がダメなのか確認する必要があるわけです!
その時にどんなノードが起動してるのかはせめて分からないと解決しようがないですもんね〜w
つまり!魔法(ノード)同士は互いの役割をちゃんと機能させるため、お互いに必要な魔力(情報)を一旦トピックに分け与え(配信)たり、トピックで集めた魔力(情報)を受け取ったり(購読)したりしているってことという認識でいいと思います!
発動するのに必要な種類の魔力をトピックから補充したりトピックに預けたりしてるみたい
実際に実感してみないとピンと来ないのでこの辺は実際にやっていく中で「これのことか!」と分かるように知識として知っておきましょうか!
さてさて、コマンド「rosnode info」で発動して出てきた出力結果を解説していませんでしたねw
上の方にある「Pubrications:」から下に書いてある文字がこのノード(魔法)が分け与えて(配信)しているトピックとその情報(魔力の情報)
その下にある「Subscriptions:」から下に書いてある文字がこのノード(魔法)が受け取って(購読)しているトピックとその情報(魔力の情報)です
どーやらボクには見えないところで魔法を発動させるのに必要な種類の魔力をトピックというところから調達してたみたいです...
そんな仕組みで魔法を発動してたんですね〜
いや〜ただ単に「魔法!発動!!」と言ってもこんなに奥が深いとは...
まあ、ここで言いたかったのはコマンド「rosnode」でノードに関するコマンドが見れるよ!ってことと配信、購読、トピックの関係性でした!!
さて、次回はついに召喚した亀を使ってより強力な魔法を使う練習を実践するぞ!
まあ、今回はそのための準備といったところかなw
ちゃんと学びたい人は一度本格的にトピックや配信、購読について本やもっと専門的な記事を見てみるといいと思います!
そしてそれも見てからまたここに戻ってくると新しい発見があるかも!?
ということで今回は以上です!お疲れ様でした!!
自分なりに色んな例えを使って説明したつもりですが、かえって分かりにくくなってるか心配です
何かコメントなんかいただけると今後の参考になりますね〜
文字ばっかりでごめんなさいw
それではまた次回!!