ルンバのLEDの制御ができたので、ルンバのバッテリー電圧を表示するノードを作ってみました。
具体的には以下の処理を行います。
- ルンバからはバッテリー電圧の情報(battery/voltage)が配信されていますので、これをSubscribeします。
- 受け取ったバッテリー電圧の情報を使って、LEDを表示する指令(set_ascii)をPublishします。
- ルンバではLEDを表示する指令をSubscribeして、LEDを点灯させます。
これを繰り返せばバッテリ電圧がリアルタイムで表示されるはずです。
ROS2のノードを書いてみる
今回はdemura.netさんの以下の記事を参考にしています。
- ROS2演習5-2021:トピック通信しよう!(Python) demura.net
こちらの記事ではPublisherとSubscriberをそれぞれ作成するものですが、PublisherとSubscriberを一つにすれば実現できるだろうとの目論見です。PublisherとSubscriberのソースコードを参考にさせていただき、丁寧なコメントもこのプログラムに合わせてそのままとしました。
完成したソースコードはGitHubに置きました。
ノードを動かしてみる
ルンバのROS2ドライバを動かしておき、今回作成したノード(dispvolt_node)を動かしてみます。
画面に表示されているようにバッテリー電圧は正常に取得できているようです。
ルンバのLEDを確認すると、同じ数字が表示されています。ルンバを動かすと少しずつ数字が減っていくのがわかります。
rqt_graphでも確認してみました。意図した構造になっています。
まとめ
ルンバから配信される情報を受信して、それに応じた結果をルンバに返すという簡単なノードを作ることができました。
今回はシンプルなものですが、もう少し拡張してバッテリー電圧が低下してきたら、CHECK LEDを点灯させたり、play_songでアラート音を出したりといったこともできそうです。