gggggraziegrazie

graizegrazieさんのやったこと、学んだことを記録する雑記帳です

nodelet用に定義したクラスを使ってnodeを立ち上げる

ROSで処理を書く際、ノード間でのデータのやり取りの効率化のため、殆どnodeletとしてクラスを作ることが多いんじゃないかと思います。ただそうすると、そのクラスのメンバ関数をテストをしようとすると他のノードも立ち上がったりして面倒ですよね。じゃあnodeletをnodeとして立ち上げる方法はないのだろうか?と探したところ、下記の記事が参考になりました。

garaemon.github.io

記事曰く、image_procは上記node化の参考になるみたいです。実際にコードを見てみると、

nodelet::Loader manager(false); // Don't bring up the manager ROS API

の部分が重要なようです。loaderのコンストラクタの引数としてfalseが入っています。もしもtrueが入ると、LoaderROSクラスのオブジェクトが生成され、外部からこのloaderオブジェクトに対してnodeletのloadを要求できることなります。そのため、nodeletをnodeとして使いたい(外部のnodeletと繋ぎたくない)場合、loaderクラスのコンストラクタにfalseを入れ、LoaderROSオブジェクトを生成しないようにする必要があります。この後は通常のnodeletオブジェクとのハンドリングと代わりがないようです。

ご参考になりましたら幸いです。