ROS(Robot Operating System)を初心者がやってみた!#4<トピック通信!亀を操作するぜ編>

はい、どーも!まっちゃんです!!

前回までのあらすじ

ノードに関するコマンド一覧を確認して、「配信」「購読」「トピック」について学んだ!

ノード同士はトピックに情報を配信し、そこでトピックに配信された情報を別のノードが購読することでやり取りをしているってことでしたよね!

段々話がややこしくなってきます!

ボクもたまにこの記事を書いていて、「あれ?これってどゆこと??」という内容も出てくる...

それでもやっぱりROSって色んなものが設計できるらしいからできたときの喜びとかハンパなさそーですよね!

もちろん、大学とか企業で「なんでこんなんやらなかんの〜」って人もいると思いますが、そのような人たちのモチベーションというかなにか励みになってくれたら嬉しいです!

さあ、今回もボクと一緒に学んでいきましょう!!

ぜひ最後まで楽しんでいってくださいね♪


<トピックの確認>

マスターの起動、亀の召喚

ここまで色々やってきましたが、実際に動かしたものはこの2つだけです

(あとはコマンドの確認とか概念の説明でしたからね〜)

全部続きでお送りしているので、もし一度シャットダウンなりターミナルを閉じたりして画面を消してしまった場合は前回までの記事を見て前回の記事の最後の状態まで持ってきてくださいね!


さてさて、亀を召喚して感動した記憶はあると思いますが、ゲームとかやってて出しただけで満足しますか??

いやいや!せっかく呼んだんだから、そいつと一緒に敵を倒したりそいつに乗ってどこかに出かけたりしたくなりますよね!?

そう!召喚した亀ちゃんを思い通りに操作したい!

そう思いませんか??

今回はそれをやります!!

なんだか楽しくなってきましたね!!

復習としてコマンド「rosrun」は覚えていますか?

そう!ノードを立ち上げる時に使ったコマンドです!!

今回もそのコマンドを使っていきますよ!!

さあ!早速以下のコマンドを入力!!

$ rosrun turtlesim turtle_teleop_key

ここもまた復習です!

このコマンド中の「turtlesim」は何の名前だったでしょう??

そう!パッケージ名です!!

そして「turtlesim_teleop_key」は何の名前だったでしょうか??

きました!ノード名です!!

ノードはたくさんあるのでパッケージで整理整頓しているんでしたよね!


さあ、実行するとまた英語が出てきました!

ふむふむ、「Use arrow keys to move the turtle. 'q' to quit.」って書いてありますね〜

英語は得意ではありませんが、とりあえず亀を動かすためのキーを使うことを許可って感じのことが書いてあるよーな気がします

よく分からんですが、キーボードを操作してみましょうか

すると...!?????!

画像1

亀が動いた?!!!

そう!これは召喚した亀をキーボードで操作するノードだったんです!!

すげーー!!なんかこれで絵が描けそー!!

★注意!「turtlesim_teleop_key」をアクティブにした状態じゃないと動かないんで注意です!!亀を動かしたい一心で亀がいる画面を選択している状態だと亀は動きません!

そう、この魔法(ノード)は召喚した亀を操る魔法(ノード)なんです!

NARUTOに出てくるサスケの右目の能力と左目の能力と似てますね〜!(天照とカグツチ)

前回、ノード同士がトピックを仲介して情報のやり取りをしているということを学びました!

これはまさにそーゆーことです!

しかしその前回から何度も出ているトピックは我々の目に見えない。

見えない力ってちょっと気になりません?笑

ボクらが使った2つの魔法はトピックという目に見えないものが関係しているみたいなんです

このトピックって一体何なんだ...

そこで使うのがこのコマンド!

$ rostopic


新しいターミナルを立ち上げて実行してみるこんな文字がずらりと出てきます!

ostopic is a command-line tool for printing information about ROS Topics.
Commands:
   rostopic bw display bandwidth used by topic
   rostopic echo   print messages to screen
   rostopic find   find topics by type
   rostopic hz display publishing rate of topic
   rostopic info   print information about active topic
   rostopic list   list active topics
   rostopic pub    publish data to topic
   rostopic type   print topic type
Type rostopic <command> -h for more detailed usage, e.g. 'rostopic echo -h'

ん??よく見るとまた「Commands:」って出てきたなぁ...これどっかで...

あーー!!そーじゃん!!「rosnode」でも同じよーなやつ見たわ!!

(SAOのアドミニストレータが「エンタイアコマンドリスト」使ってたって感じで説明したよね!)

そう!これは現段階で謎の多いトピックについて知ることができるコマンドの一覧なんだ!!

「rosnode」ではノードに関する情報を見るためのコマンドが表示されてたよね?

それのトピックバージョンって感じかな??

とにかくこの「Commands:」の下に書いてある内容をうまく使えば、この謎に包まれたトピックについてちょっとは知ることができるかもしれないな

ということで、上から6行目に書いてある「rostopic list」ってのを実行してみます

$ rostopic list

実行するとこんなものが...

/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

なんじゃこりゃ??

実はこれが現在、配信と購読されているトピックの一覧みたいです

たしかによく見たら前回の「rosnode info」で見たようなものがあるなぁ

ってかこんにトピックとやり取りしてたんだ...

ROSのマスターを起動して、亀を召喚して、亀を操作するノードを実行しただけでこんなにものトピックと通信してんのか〜

魔法1つ発動させるだけでも裏でこんなに色んな種類の魔力をやりとりしてるのかって感じですよね〜


なんかまだピンと来ないからもうちょっと見てみよ!

今度はコマンド一覧の「Commands:」の上から2行目にある「rostopic echo」を使って、さっき出てきたトピックの一つ「/turtle1/cmd_vel」ってトピックについて調べてみようか〜

なんかコマンドリストの説明によると「メッセージをスクリーンに出す」とかなんとか、そんな感じのこと書いてあるね

このコマンドを入力してみよーか!

$ rostopic echo /turtle1/cmd_vel

「rostopic echo」はコマンドリストに書いてあった一番最初に詠唱する謳い文句(SAOで言えばシステムコールみたいな感じか)

そこから続くのが知りたいトピックの名前だね!

コマンドの法則性もちょっと分かってきたかも!?

さあ、このままだと何もないらしいからまた亀を操作してみよう!すると...

(★注意!キーボード操作する時に発動したターミナルをアクティブにして操作しないと何も起こらないから注意!)

こんなものが出てきた!!!!!

画像2

出力された内容は人によって違うみたいなんだけど、linearは並進速度、angularは角加速度を表してるらしい!

細かい話は置いといてさ、実はこれ、トピックがノードから購読してるメッセージの内容みたい!!

キーボード操作する魔法使ったじゃん?それでボクらの操作内容はメッセージとしてトピックに配信された!そこでトピックに送られたメッセージの内容を別の魔法が亀を動かすという形で実際に表現したって認識でいいのかな?

そしてこの「rostopic echo」はボクらの目に見えなかったそのメッセージを実際に見るって魔法だったわけだ!

なるほどな〜トピックの中身はこんなぞう情報がやり取りされてたのか〜

そんで、最初に与えられた課題にはここで出したコマンド一覧に入っていた「rostopic bw」と「rostopic hz」も入ってたからきっとまた使うんだろーな!

よし、これは覚えておこう!!



さあ、どんどん話が複雑になってきましたw

次回はもっとトピックについて深堀りするみたいですw

マジか〜なんか書いてる自分もよく分からなくなってきた気がする〜

ボクも学びながらこの記事を書いています

ここでモチベーションを落とさず、粘り強くやっていきましょ!

トピックなんてこれ以上知りたくねーよ!っと思ってるかもしれませんが、きっと知っとくといいことあるよ〜(たぶんw)


次回も楽しみましょ!

この記事が気に入ったらサポートをしてみませんか?