Curieux.JY
  • Post
  • Note
  • Jung Yeon Lee

On this page

  • ๊ธฐ๋ณธ ์ค€๋น„
  • 1) ํŠน์ • ํ† ํ”ฝ ํ•œ ๊ฐœ ๋…นํ™”
  • 2) ์—ฌ๋Ÿฌ ํ† ํ”ฝ ๋…นํ™” & ์ถœ๋ ฅ ์ด๋ฆ„ ์ง€์ •
  • 3) ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ํ† ํ”ฝ ๋…นํ™”
  • 4) ์ œ์™ธ(ํ•„ํ„ฐ) โ€” ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ์ œ์™ธํ•˜๊ธฐ
  • 5) ์••์ถ• ์ €์žฅ(์ €์žฅ ํฌ๋งท, ์„ฑ๋Šฅ)
  • 6) ๋…นํ™”ํ•œ bag ์ •๋ณด ๋ณด๊ธฐ / ์žฌ์ƒ
  • 7) ์ž์ฃผ ๊ฒช๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ํŒ
  • 8) ๋น ๋ฅธ ์˜ˆ์ œ ๋ชจ์Œ (๋ณต์‚ฌํ•ด์„œ ์“ฐ๊ธฐ)

๐Ÿ“ROS2 bag ์‚ฌ์šฉ

ros2
bag
2025
Note
Published

October 1, 2025

๊ธฐ๋ณธ ์ค€๋น„

  1. ์ƒˆ ํ„ฐ๋ฏธ๋„๋งˆ๋‹ค ROS 2 ํ™˜๊ฒฝ์„ source ํ•ฉ๋‹ˆ๋‹ค: source /opt/ros/<ROS_DISTRO>/setup.bash
  2. ๊ธฐ๋กํ•  ํ† ํ”ฝ ๋ชฉ๋ก ํ™•์ธ: ros2 topic list (ํ† ํ”ฝ์ด ์‹ค์ œ๋กœ publish ๋˜๋Š”์ง€ ros2 topic echo /ํ† ํ”ฝ๋ช…์œผ๋กœ ํ™•์ธ). (ROS Documentation)

1) ํŠน์ • ํ† ํ”ฝ ํ•œ ๊ฐœ ๋…นํ™”

# ์˜ˆ: /turtle1/cmd_vel ํ† ํ”ฝ ๋…นํ™”
ros2 bag record /turtle1/cmd_vel

๋…นํ™” ์ค‘์ง€: Ctrl+C. ๊ธฐ๋ก๋œ bag์€ ์‹คํ–‰ํ•œ ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— rosbag2_<timestamp> ๊ฐ™์€ ํด๋”๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. (ROS Documentation)

2) ์—ฌ๋Ÿฌ ํ† ํ”ฝ ๋…นํ™” & ์ถœ๋ ฅ ์ด๋ฆ„ ์ง€์ •

# ์—ฌ๋Ÿฌ ํ† ํ”ฝ์„ ๊ณต๋ฐฑ์œผ๋กœ ๋‚˜์—ด. -o๋กœ output ์ด๋ฆ„ ์ง€์ •
ros2 bag record -o myrun /topic1 /topic2 /topic3

์œ„ ๋ช…๋ น์€ myrun์ด๋ผ๋Š” ์ด๋ฆ„์˜ bag(๋””๋ ‰ํ† ๋ฆฌ/ํŒŒ์ผ)์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. (ROS Documentation)

3) ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ํ† ํ”ฝ ๋…นํ™”

# ๋ชจ๋“  ํ† ํ”ฝ ๋…นํ™”
ros2 bag record -a
# ๋˜๋Š” ์ด๋ฆ„ ์ง€์ •
ros2 bag record -a -o all_topics_run

๋งŽ์€ ํ† ํ”ฝ/๋ฐ์ดํ„ฐ๊ฐ€ ์Ÿ์•„์ ธ ๋“ค์–ด์˜ค๋ฏ€๋กœ ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์— ์ฃผ์˜ํ•˜์„ธ์š”. (ROS Documentation)

4) ์ œ์™ธ(ํ•„ํ„ฐ) โ€” ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ์ œ์™ธํ•˜๊ธฐ

๋ชจ๋“  ํ† ํ”ฝ์„ ๋…นํ™”ํ•˜๋ฉด์„œ ์ผ๋ถ€ ํ† ํ”ฝ๋งŒ ์ œ์™ธํ•˜๋ ค๋ฉด ์ •๊ทœํ‘œํ˜„์‹ ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(๋ฒ„์ „๋ณ„ ์ด๋ฆ„์ด ์•ฝ๊ฐ„ ๋‹ค๋ฆ„: --exclude-regex ๋“ฑ). ์˜ˆ:

# ์˜ˆ: /tf.* ํ† ํ”ฝ์€ ์ œ์™ธํ•˜๊ณ  ๋…นํ™”
ros2 bag record -a -x "/tf.*"
# ๋˜๋Š” --exclude-regex ์‚ฌ์šฉ(ROS ๋ฒ„์ „์— ๋”ฐ๋ผ ์ด๋ฆ„/๋™์ž‘์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ์Œ)
ros2 bag record -a --exclude-regex "/tf.*"

์ฐธ๊ณ : ์˜ต์…˜๋ช…๊ณผ ๋™์ž‘(์˜ˆ: -x vs --exclude-regex)์€ ROS 2 ๋ฒ„์ „(๋‹จ์ผ ๋ฐฐํฌํŒ)์—์„œ ๋ฐ”๋€ ์ ์ด ์žˆ์œผ๋‹ˆ, ros2 bag --help๋กœ ๋กœ์ปฌ ์˜ต์…˜์„ ํ™•์ธํ•˜์„ธ์š”. (Jazzy ๋“ฑ ์ตœ์‹  ๋ฆด๋ฆฌ์Šค์—์„œ --exclude โ†’ --exclude-regex๋กœ ๋ณ€๊ฒฝ๋œ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค). (ROS Documentation)

5) ์••์ถ• ์ €์žฅ(์ €์žฅ ํฌ๋งท, ์„ฑ๋Šฅ)

rosbag2๋Š” ๊ธฐ๋ณธ ์ €์žฅ ํฌ๋งท(์˜ˆ: MCAP / sqlite)๊ณผ ์••์ถ• ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ:

# zstd ํŒŒ์ผ ๋‹จ์œ„ ์••์ถ•์œผ๋กœ ๋ชจ๋“  ํ† ํ”ฝ ๋…นํ™”
ros2 bag record -a --compression-mode file --compression-format zstd -o myrun_zstd

MCAP๊ฐ€ ROS 2์˜ ๊ธฐ๋ณธ/๊ถŒ์žฅ ํฌ๋งท์œผ๋กœ ๋„์ž…๋˜์–ด ์™ธ๋ถ€ ํˆด ์—ฐ๋™์„ฑ(์˜ˆ: Foxglove)์—์„œ ์œ ๋ฆฌํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์••์ถ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์œผ๋‚˜ CPU ์‚ฌ์šฉ๋Ÿ‰์ด ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค. (GitHub)

6) ๋…นํ™”ํ•œ bag ์ •๋ณด ๋ณด๊ธฐ / ์žฌ์ƒ

  • ์ •๋ณด ํ™•์ธ: ros2 bag info <bag_name>
  • ์žฌ์ƒ(ํผ๋ธ”๋ฆฌ์‹œ): ros2 bag play <bag_name> ์˜ˆ: ros2 bag play myrun โ€” ํ”Œ๋ ˆ์ดํ•˜๋ฉด ๋…นํ™”ํ•œ ๋ฉ”์‹œ์ง€๋“ค์ด ๋‹ค์‹œ ํผ๋ธ”๋ฆฌ์‹œ๋ฉ๋‹ˆ๋‹ค. (ROS Documentation)

7) ์ž์ฃผ ๊ฒช๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ํŒ

  • ํ† ํ”ฝ์ด ๋…นํ™”๋˜์ง€ ์•Š์„ ๋•Œ: ํ•ด๋‹น ํ† ํ”ฝ์ด ์‹ค์ œ๋กœ publish ์ค‘์ธ์ง€(ros2 topic echo) ํ™•์ธ.
  • QoS ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ: ROS 2๋Š” QoS(์‹ ๋ขฐ์„ฑ ๋“ฑ) ํ˜ธํ™˜์„ฑ ์š”๊ตฌ๊ฐ€ ์žˆ์–ด, ๋…นํ™”(๊ตฌ๋…)๊ฐ€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•˜๋ฉด QoS ์˜ค๋ฒ„๋ผ์ด๋“œ ์˜ต์…˜์ด๋‚˜ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. (ROS Documentation)
  • ๋ฒ„์ „ ์ฐจ์ด: ros2 bag์˜ ์˜ต์…˜๋ช…(-x, --exclude-regex, ์••์ถ• ์˜ต์…˜ ๋“ฑ)์€ ROS 2 ๋ฐฐํฌํŒ(humble, jazzy, rolling ๋“ฑ)์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ์—์„œ ros2 bag --help๋กœ ์‹ค์ œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์„ ํ™•์ธํ•˜์„ธ์š”. (ROS Documentation)
  • ๋””์Šคํฌ ์šฉ๋Ÿ‰: ๊ณ ์ฃผํŒŒ ํ† ํ”ฝ(์˜ˆ: ์นด๋ฉ”๋ผ, ๋ผ์ด๋‹ค)์„ ๋…นํ™”ํ•˜๋ฉด ๊ธˆ๋ฐฉ ๋””์Šคํฌ๋ฅผ ์žก์•„๋จน์Šต๋‹ˆ๋‹ค. ์นด๋ฉ”๋ผ๋Š” ํ•ด์ƒ๋„/์ฃผํŒŒ์ˆ˜๋ฅผ ๋‚ฎ์ถ”๊ฑฐ๋‚˜ ์••์ถ•์„ ์ ๊ทน ์‚ฌ์šฉํ•˜์„ธ์š”. (GitHub)

8) ๋น ๋ฅธ ์˜ˆ์ œ ๋ชจ์Œ (๋ณต์‚ฌํ•ด์„œ ์“ฐ๊ธฐ)

# 1) ํŠน์ • ํ† ํ”ฝ 1๊ฐœ
ros2 bag record /my_robot/joint_states

# 2) ์—ฌ๋Ÿฌ ํ† ํ”ฝ + ์ด๋ฆ„์ง€์ •
ros2 bag record -o exp1 /tf /odom /scan /camera/image_raw

# 3) ๋ชจ๋“  ํ† ํ”ฝ(์ด๋ฆ„ ์ง€์ •) + zstd ์••์ถ•
ros2 bag record -a -o allrun --compression-mode file --compression-format zstd

# 4) ๋ชจ๋“  ํ† ํ”ฝ ๋…นํ™”ํ•˜๋˜ /tf.* ์ œ์™ธ
ros2 bag record -a -x "/tf.*" -o all_except_tf

Copyright 2024, Jung Yeon Lee