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 Hz | 848x480 @30 | 1280x720 @30 |
|---|---|---|---|
| rgb8/bgr8 (3 B/px) | 27.6 MB/s (221 Mbps) | 36.6 MB/s | 82.9 MB/s |
| Z16 depth (2 B/px) | 18.4 MB/s | 24.4 MB/s | 55.3 MB/s |
| JPEG compressed (q70、目安) | 1〜3 MB/s | 1.5〜4 MB/s | 3〜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 を上げるときはここを先に見る。
最終更新: