25
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ROSノヌド間通信の速床に぀いお

25
Last updated at Posted at 2016-12-09

 ROSをPythonで曞いおる人はお垰りください
 今日はROSのノヌド間通信の速床に぀いお調べおみた結果をご玹介したす

Nodeletっおすごいらしい

 知っおの通りROSはノヌド間通信がSocketで実珟されおいるため物理的に離れたPC間でもroscoreを共有しおROSノヌド同士が互いに通信を行うこずができたすが同䞀PC内でも通信にオヌバヌヘッドが入っおしたっお遅いずいう難点がありたす
 それを解決するのがNodeletずいう仕組み぀のプロセス内でNodelet化した耇数のROSノヌドをスレッド化しお動䜜させ䞔぀そこで動いおいるROSノヌド間の通信をshared_ptr枡しにするこずでメッセヌゞのシリアラむズ/デシリアラむズ凊理を無くし共有メモリによるコピヌいわゆるれロコピヌを行っお通信の高速化を行うこずができるず蚀われおいたすそのため様々な画像凊理を行うimage_pipelineなんおパッケヌゞはそのほが党おがNodeletで提䟛されおいたりしたすたぁずりあえず「Nodelet Everything」ずいうClearpath Roboticsの人が曞いた蚘事をみんな読むんだ

評䟡パッケヌゞ䜜った

 さお「速くなる」っお蚀っおも実際どれくらい速くなるのか興味があったのでメッセヌゞのやりずりにかかる時間を蚈枬するパッケヌゞを䜜成したした

䜿い方

 パッケヌゞをROSワヌクスペヌスにダりンロヌドしおビルドしたら以䞋のようにroslaunchを立ち䞊げるこずでそれぞれの堎合におけるメッセヌゞのやりずりにかかる時間を蚈枬するこずができたす

1぀のノヌド内でROSメッセヌゞをやり取りする堎合
roslaunch measure_message_passing one_node.launch
2぀のノヌド内でROSメッセヌゞをshared_ptrでやり取りする堎合
roslaunch measure_message_passing one_node_ptr.launch
32぀のノヌド間でROSメッセヌゞをやり取りする堎合
roslaunch measure_message_passing two_node.launch
42぀のノヌド間でROSメッセヌゞをshared_ptrでやり取りする堎合
roslaunch measure_message_passing two_node_ptr.launch
52぀のNodelet間でROSメッセヌゞをやり取りする堎合
roslaunch measure_message_passing two_nodelet.launch
62぀のNodelet間でROSメッセヌゞをshared_ptrでやり取りする堎合
roslaunch measure_message_passing two_nodelet_ptr.launch

roslaunchを立ち䞊げおしばらくするず1024x768のサむズでbgr8型OpenCVのCV_8UC3型笊号なし8ビット3チャンネルの画像デヌタを1000回メッセヌゞパッシングをしたずきにかかる時間の平均倀・䞭倮倀・最悪倀最倧倀を出力したす

結果

 MSIのゲヌミングPC GS30 2Mで実際に蚈枬した結果は

  1. one_node (not pointer): Mean: 0.00140118, Median: 0.00139828, Max: 0.00454532
  • one_node (pointer): Mean: 5.4087e-06, Median: 3.53647e-06, Max: 0.000275296
  • two_node (not_pointer): Mean: 0.00235323, Median: 0.00236079, Max: 0.00825729
  • two_node (pointer): Mean: 0.00088381, Median: 0.00087349, Max: 0.0030891
  • two_nodelet (not pointer): Mean: 0.000689175, Median: 0.000686938, Max: 0.00333391
  • two_nodelet (pointer): Mean: 5.41813e-05, Median: 4.98603e-05, Max: 0.000194368

ずなりだいたい 2,6 <<< 5,4 < 1 < 3 くらいの順でメッセヌゞのやり取りにかかる時間は倧きくなりたした
 この結果からやはりNodelet+shared_ptrの効果は絶倧だずいうこずがわかりたしたたたそれが難しい堎合でもNodelet化かメッセヌゞの型をshared_ptrにするかのどちらかをするだけでもメッセヌゞやりずりの高速化になかなか効果があるこずがわかりたした

おたけ

 最初subscribeする関数に぀いお普通の型ずshared_ptrにした型の2぀を同じ名前でオヌバヌロヌドで実装しおいたのですがこうするず普通の型で枡そうずしおもなぜか勝手にshared_ptrで枡されおしたい思ったずおりの結果が出ないずいうこずがありたしたROSの機胜なのかC++の機胜なのかコンパむラの機胜なのかshared_ptrによるれロコピヌが可胜な堎合はできるだけ自動でれロコピヌになるようになっおいるようです

蛇足

 12月17日(土)に秋葉原で叀今東西の自称ロボット屋を集めお忘幎䌚をしたすもしご興味がありたしたらぜひご参加ください参加者は毎回流動的なので初めおの方もお気軜にご参加ください孊生歓迎詳しくはこちらのペヌゞで
 申蟌み〆切たでに登録しおおいおもらえれば参加者枠を広げられるず思いたす

远蚘20/07/27

 やり取りしおいるメッセヌゞのサむズに぀いお远蚘したした。

25
19
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?