๐ROS2 bag ์ฌ์ฉ
๊ธฐ๋ณธ ์ค๋น
- ์ ํฐ๋ฏธ๋๋ง๋ค ROS 2 ํ๊ฒฝ์ source ํฉ๋๋ค:
source /opt/ros/<ROS_DISTRO>/setup.bash
- ๊ธฐ๋กํ ํ ํฝ ๋ชฉ๋ก ํ์ธ:
ros2 topic list
(ํ ํฝ์ด ์ค์ ๋ก publish ๋๋์งros2 topic echo /ํ ํฝ๋ช
์ผ๋ก ํ์ธ). (ROS Documentation)
1) ํน์ ํ ํฝ ํ ๊ฐ ๋ นํ
๋
นํ ์ค์ง: 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