notes
Ros

ROS 2 画像トピックのコスト (同一 PC / ネットワーク / rosbag)

640x480 の raw 画像 1 本が何 MB/s か、同一 PC 内 publish は何が重いか、foxglove/rosbridge 経由の閲覧と rosbag 記録がなぜ効くか、compressed を使う判断基準

要点: 画像を topic に出すこと自体は同一 PC 内では軽い (購読者 1 つあたり memcpy + シリアライズ、数 % CPU)。重いのは (1) ネットワーク越しの閲覧 (foxglove / rosbridge)、(2) rosbag への raw 記録、(3) 画像を処理するノード自体の CPU。

1 本の量#

形式640x480 @30 Hz848x480 @301280x720 @30
rgb8/bgr8 (3 B/px)27.6 MB/s (221 Mbps)36.6 MB/s82.9 MB/s
Z16 depth (2 B/px)18.4 MB/s24.4 MB/s55.3 MB/s
JPEG compressed (q70、目安)1〜3 MB/s1.5〜4 MB/s3〜8 MB/s

同一 PC 内 (DDS loopback / 共有メモリ)#

  • publish のコスト: シリアライズ 1 回 + 購読者ごとにコピー。27.6 MB/s なら memcpy 換算で 1 コアの 1〜3 %。
  • 購読者が居なければ書き込みは行われない (rmw 層でスキップ)。出しておくだけならほぼ無料。
  • 遅延は 1 hop で 1〜数 ms。

ネットワーク越し (foxglove_bridge / rosbridge → ブラウザ)#

  • raw 640x480@30 = 221 Mbps。WiFi の実効 (50〜150 Mbps) を超えるので WebSocket にバッファが溜まり、数秒遅れる・止まる。
  • image_transport republish raw compressed で <topic>/compressed (JPEG) を作り、閲覧側はそれを購読する。1〜3 MB/s なら WiFi でも 1 フレーム未満の遅延。
  • 有線 1 GbE なら raw 1〜2 本は通るが、PC 上で見る (rqt_image_view) 方が確実。

rosbag#

  • raw 画像 1 本 @30 Hz で 1.6 GB/分、color+depth で 2.8 GB/分。mcap でも圧縮は効きにくい。
  • --exclude-regex で raw 画像を外し、認識結果 (detections 等) だけ録る。画像が要る解析は /compressed を録る。

処理ノード#

  • 画像を処理するノード (YOLO 等) の CPU は転送より桁で大きい。onnxruntime CPU で 640x480 YOLOv11 は 4 スレッドで 3〜4 コア @15〜30 fps。fps を上げるときはここを先に見る。
最終更新:

On this page