Full House

Baby beluga in the deep blue sea, swim so wild you swim so free!

nodeletとactionlibを理解する

nodeletとは何か?

まず公式の説明を見ます。

The nodelet package is designed to provide a way to run multiple algorithms in the same process with zero copy transort between algorithms.

ROSの通信方式(XML-RPC)でプロセスを実行する時にメモリコピーが発生します。ノードに当たる機能を持ったプログラムをプラグインの形で記述し、実行時複数の機能を1つのプロセス(manager)で実行するでメモリ無し(zero copy transport)で実行可能です。

注意事項:nodelet現在対応しているのはC++のみです。

nodeletを使う

公式のチュートリアルに従ってnodeletを使ってみます。

事前準備

パッケージ内のnodelet_tutorial_mathを使用します。 github.com

ターミナルでnodeletを使う

nodelet manager     - Launch a nodelet manager node
nodelet load pkg/Type manager     -Launch a nodelet of type pkg/Type on manager
nodelet standalone pkg/Type     -Launch a nodelet of type pkg/Type in a standalone node.
nodelet unload name manager    - Unload a nodelet a nodelet by name from manager
  • roscoreを起動する。
roscore
  • nodelet_managerというmanagerノードを新規に作成する。

    A nodelet will be run inside a NodeletManager. A nodelet manager is a C++ program which is setup to listen to ROS services and will be the executable in which the nodelet is dynamically loaded.

rosrun nodelet nodelet manager __name:=nodelet_manager
[ INFO] [1579034300.274877700]: Initializing nodelet with 8 worker threads.

tips: rosrunでノードの名前を設定することができる。

rosrun <packager-name> <executable-name> __name:=node_name
  • 作成したnodelet_managernode_tutorial_math/Plusnodelet1としてロードする。 node_tutorial_math/Plus:pkg/Type
    nodelet1/in->foo

    Th nodelet executable, called here, will cantact the ndoelet_manager and ask it to instantiate an instance of the nodelet_tutorial_math/Plus nodelet. It will pass through the name, nodelet1, and also any remappings if applied to the code inside the nodelet. And parameters apprear in the right namespace too.

rosrun nodelet nodelet load nodelet_tutorial_math/Plus nodelet_manager __name:=nodelet1 nodelet1/in:=foo _value:=1.1

[ INFO] [1579034854.146244500]: Loading nodelet /nodelet1 of type nodelet_tutorial_math/Plus to manager nodelet_manager with the following remappings:
[ INFO] [1579034854.148226300]: /nodelet1/in -> /foo
rostopic list

/foo
/nodelet1/out
/nodelet_manager/bond
rosnode list

/nodelet1
/nodelet_manager
rostopic pub  /doo std_msgs/Float64 5.0 -r 10
rostopic echo /nodelet1/out

data: 6.1
---
data: 6.1
---

rqt_graphで関係図を出力してみる f:id:belugarose:20200115061734p:plain

roslaunchでnodeletを使う

nodeletを書く