#概要
この章では自動車を例にROSの概念を理解します。
#ROSとは
時間がない人に向けて。
ROSとは、JavaやC#のようなオブジェクト指向をロボットに取り入れたフレームワークである。
です、これを理解できた人は手を動かさなくとも大丈夫かもしれません。
それ以外の人は手を動かしながらROSを理解していきましょう!
#準備
以下のファイルをcatkin_ws/src/
以下に入れて
catkin_make
してくコンパイルしてください。
https://github.com/Keisuke08aw/robot-lecture
![セットアップ.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F304482%2F3022c5e8-26d2-ab1e-b2f9-5753433fce3e.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b0a36411a1c64268947727ea9b1e9659)
コンパイルが通ったら、早速ロボットを立ち上げます。
#ロボットファイルの実行
roslaunch robot-car main.launch
で立ち上げましょう。
コマンドの意味はロボットが立ち上がったあとに解説します。
![セットアップ.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F304482%2F1d54fd9c-e7c2-509b-719a-64a6eb14acb9.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=545f2ea90eefaeae68cbe21dc6e61837)
ここまでうまくいったでしょうか。
うまく行っていない場合、考えられるエラーとして
-
パスが通っていない
一度bashrcを開いて、しっかりとcatkin_wsがパスとして入っているか確認してください。もしくは一度ターミナルを閉じて再度コマンドを実行してみてください。 -
必要なパッケージが入っていない。
エラーの中で必要なパッケージが入っていないと赤字でそのパッケージ名が表記されるので、そのパッケージをインストールしてください。
#ROSの概念
それでは、今回動かしたこの自動車を使ってROSの概念について説明していきたいと思います。
今、ロボットが動いている状態で次のコマンドを打ってください。
rosnode list
すると以下のような表示がされると思います。
これらの一つ一つのファイルらしき物(ノード)が、今回扱うメインのトピックです。
#ROSにおけるノードという概念
ROSはC++とPythonでかけます。以下のように一つ一つのファイルが独立してお互いに情報をやり取りしながら動いています。
さっきのコマンド、roslaunch robot-car main.launch
は具体的には
ノードの立ち上げを以下の図のように行っています。
![セットアップ.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F304482%2F623b29a3-18c6-204b-584d-f8916af7b10c.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7d4d87ee004ccea6857687923b742ae4)
ノードというとわかりずらいですが、要はJavaやC#でいうインスタンスのことです。
roslaunchコマンド
で複数のインスタンスを一気に立ち上げ
立ち上げたインスタンス同士がプロパティのやり取りを行っていると考えられれば、ほとんどROSは理解したといっても過言ではありません。
これがいわばROSにおける原点にして頂点なるものです。
車を動かすときに、今回は大きく4つのファイルを作成する必要がありました。
- コントローラ
- 車
- シミュレーター
- 画面表示
です。上の図から見てわかるように、要はROSというのは
javaやC#のようなオブフェクト指向言語のように
実現したいものを部品単位に分けて、情報をやりとりするように設計されています。
#ROSにおける考え方
今回の場合、車のシミュレーションを作りたかったのでオブジェクト指向っぽく考えると
操作する人、車、シミュレーター、画面表示の4つに分解され、それぞれを独立して実装させました。
ROSではこの、オブジェクト一つ一つのことをノードと呼びます。
また、オブジェクトが他のオブジェクトにメソッドを通してプロパティを渡す時があると思いますが、
ROSではメソッドのことをトピック、プロパティはメッセージと呼ばれます。
なので。roslaunch robot-car main.launch
とは、
4つのノードが独立してトピックを通じ、メッセージのやり取りを行っていた
というのが正しい解釈です。
#その他
おおざっぱにROSを理解するため、ノードの説明はざっくりと行っています。
tfは本来画面表示をするものではありませんが、便宜上そのように書きました。
興味がある人はコードをいじくり回して、色々と遊んでみてください。