この土日に学んだROSに関して、ROSの概要を絵で頑張ってまとめてみる。
ROSのMasterとNodeとTopicとService
- 全体
- ROSノードとROSMasterがいる。これらはそれぞれ別々のプロセスのプログラム
- ROSノードやROSMasterはどのPCやロボットで実行されていても構わない。
- ROSノードやROSMasterをいくつ立ち上げても構わない。
- ROSMaster
- roscoreを立ち上げると、パラメータサーバとROSMasterとrosoutが起動される。
- ROSMasterは立ち上がっているノードを管理し、お互いの所在を教えてあげること
- ROSMasterはROSNodeのPublisherやSubscriber、Serviceを管理
- ROSの名前空間の解決
- ROSノード
- 腕を動かすノード、位置を移動するノード等役割に応じた単位で分離されたプログラム。一つのノードが死んでも全体が落ちないために分割されている。
- ROSノードはノード間でやりとりする方法にTopicとServiceが用意されている。
- Topicで他のノードにmessageを送るノードをPublisherといい、受け取る側をSubscriberという。もちろん一つのノードがあるメッセージに関してはPublisher、別のメッセージに関してはSubscriberなんてことはざらにある。
- Topicは非同期処理になっているため、Publishしたら元の作業に戻れる。
- Serviceでは同期処理になっているため、ServiceCallしたら結果が帰るまで何もできない。
- Topic
- ノードが情報をやりとりするときの方法の一つ
- やりとりする情報をmessageという
- 一つのノードから複数のPublishもできるし、同時に複数のSubscribeもできる。
- Subscribeはコールバック関数が呼ばれ、Publishはpublish関数を呼ぶだけでよい。非同期に動くため、publish後はすぐに元の作業に戻る
- Service
- ノードが情報をやりとり得るための方法の一つ
- 同期処理を行いたい時に向いている
- 大量のデータを流すときは、serviceで必要なときに必要なだけにした方が良い
- Serviceを使うものをClientと呼ぶ
- あらかじめServiceがROSMasterにadvertiseしておけば、いつでもClientがService Callすることが可能.
- Service Callすると所定の処理が実行され、その間Clientは待機状態
ロボットが実際にあるときのROSの動き
(工事中)