ロボええよな?
初めましてmomongaです。
突然ですがみなさんはロボット好きですか?僕は…ものによります。例えば、コードギアスに出てくる“KnightMareFrame”通称「ナイトメア」は全般すごく好きですが、ガンダムのモビルスーツは結構好みに合わないものも多かったり…(異論は認めるが論争は許さん)
と、まあでもロボットって良きですよね。現代はアニメにあるようなかっけーロボットはあまりないかもしれませんが、しょぼいロボットでも自分で思うように動かせたらそれだけであがるモノがあります。
でもロボット動かすのって難しそうに思いませんか?
そんなときにROS2はすごく役に立ってくれます。
ROS2とは
ROSというのは“Robot Operation System”の略称でロボットアプリケーション開発のためのミドルウェアです。ROS2はその第二世代として開発されたものになります。今回はそのROS2がどんな機能を提供してくれるのか、その一部を少し説明していきたいと思います。
ROS2には、「トピック(publish)と(subscribe)」・「サービス(service)」・「クライアント(client)」の3つがあります。(最初のトピックを分けて4つとすることもある)
僕はトピックについてしか分かってないピヨピヨなのでトピックについて説明していきたいと思います。
トピック
「トピック」ってのは要するにROS2が独自の通信方法のことです。
何かメッセージを送る上で、配信者(publisher)・購読者(subscriber)があります。前者がメッセージを送る側で、後者がメッセージを受け取る側と思って良いと思います。僕のイメージですが、サーバー関連の「クライアント」と「サーバー」みたいな関係に近い気がします。
トピックは配信者と購読者でお互いを特定せずに非同期通信を行っているらしい。…はあん?ほうみたいな感じでここに関してはあまりメリット・デメリットとかは理解してないんですが、トピック名ってのを指定することで非同期通信を実現してるんじゃねっていう理解です。
実際に確認
ROS2の環境構築については触れないです。が、実際にどんな感じなのか少し説明していきます。
ターミナル上で
ros2 topic pub /chatter std_msgs/String "{data: Hello world!}"
この/chatterって部分がトピック名の指定という部分です。
これがちゃんと動作すると、
こんな感じで“Hello world!”を送り続けてくれます。
ros2 topic echo /chatter
これで/chatterでのメッセージを表示してくれます。
こんな感じに配信者に呼応してメッセージを表示してくれます。
これをメッセージではなく「ノード」と呼ばれる実行ファイルのレベルで通信するとロボットを動かせたり、動かなかったりします。
終わりに
ROSはいわゆるOSとは違うのですが、ガンダムSEEDでキラ・ヤマトがガンダムのOSいじりながら戦闘するシーンとか激あつすぎなので、そんな感じのことを将来はできるようになりたいです。