๐ROS2 topic/service/action
Topic์ ๋ฐํ/๊ตฌ๋ (๋น๋๊ธฐ์ ์คํธ๋ฆฌ๋ฐ)์ ์ ํฉํ๊ณ , ์ํยท์ผ์ยท์ง์์ ๋ช ๋ น์ ์ฃผ๋ก ์ฌ์ฉ
Service๋ ์์ฒญ-์๋ต(๋จ๋ฐ์ฑ RPC)์ ์ ํฉ
Action์ ์ฅ์๊ฐ ์คํ๋๋ ์์ (๋ชฉํ/ํผ๋๋ฐฑ/๊ฒฐ๊ณผ/์ทจ์)์ด ํ์ํ ๋ ์ฐ๋ ์์ ์ถ์์ผ๋ก, ๋ด๋ถ์ ์ผ๋ก๋ ํ ํฝ+์๋น์ค ํจํด์ ์ฌ์ฉ
ํต์ฌ ๋น๊ต (ํ๋์)
ํญ๋ชฉ | Topic | Service | Action |
---|---|---|---|
ํต์ ๋ฐฉ์ | publish/subscribe (๋น๋๊ธฐ, ์คํธ๋ฆฌ๋ฐ) | request/response (RPC) | goal/feedback/result (์ํful, ์ทจ์ ๊ฐ๋ฅ) |
์ฌ์ฉ์ฌ๋ก | ์ผ์ ๋ฐ์ดํฐ, ์ํ ๋ธ๋ก๋์บ์คํธ, ์ง์ ๋ช ๋ น (์: cmd_vel) | ํ๋ผ๋ฏธํฐ ์กฐํ, ๋จ๋ฐ ๋ช ๋ น(์: ์ด๊ธฐํ), ๊ฐ๋จํ ์ฟผ๋ฆฌ | ๋ด๋น๊ฒ์ด์ ๋ชฉํ, ๊ทธ๋ฆฝ ๋์(์ฅ์๊ฐ), ์ด๋ ๊ณํ ์คํ |
ํผ๋๋ฐฑ | ์์(๋ณ๋ ํ ํฝ์ผ๋ก ๊ตฌํ ๊ฐ๋ฅ) | ์๋ต๋ง | ์ฃผ๊ธฐ์ ํผ๋๋ฐฑ ์ ๊ณต ๊ฐ๋ฅ |
์ทจ์/์ค๋จ | ๋ณ๋ ๋ฉ์ปค๋์ฆ ํ์ | ์์(์์ฒญ ๋จ์๋ผ ์ค๋จ ๊ฐ๋ ์์) | ํ์ค ์ทจ์/์ค๋จ ์ ๊ณต |
๋ค์ค๊ตฌ๋ /๋ค์ค๋ฐํ | ์์ฐ์ค๋ฝ๊ฒ ์ง์(1:N, N:1) | ํด๋ผ์ด์ธํธ-์๋ฒ(1:1) | ํด๋ผ์ด์ธํธ-์๋ฒ(์ฌ๋ฌ ํด๋ผ์ด์ธํธ ๊ฐ๋ฅ) |
QoS ์ ์ด | ์์ธ QoS ์ค์ ๊ฐ๋ฅ (reliable, transient_local ๋ฑ) | QoS ์ฌ์ฉ ๊ฐ๋ฅํ๋ ์ผ๋ฐ์ ์ ๋ฎ์ | ๋ด๋ถ์ ์ผ๋ก ํ ํฝ/์๋น์ค ์ฌ์ฉ โ QoS ์ํฅ ๋ฐ์ |
๊ตฌํ ๋ณต์ก๋ | ๋ฎ์ | ๋ฎ์ | ์ฝ๊ฐ ๋์ (action ์ธํฐํ์ด์ค ํ์) |
Guide
์ง์์ ์ธ ์คํธ๋ฆฌ๋ฐ(์ค์๊ฐ ์ผ์, ์ฃผ๊ธฐ์ ์ํ, ๋ก์ฐ๋ ๋ฒจ ์ ์ด) โ Topic. ์: LiDAR, ์นด๋ฉ๋ผ, IMU, ๋ก๋ด์ ํ์ฌ ์กฐ์ธํธ ์ํ,
cmd_vel
๊ฐ์ ์ฃผ๊ธฐ์ velocity ๋ช ๋ น. ์ด์ : ์ ์ง์ฐ, ๋ค์ ๊ตฌ๋ ์/๋ฐํ์ OK, QoS๋ก ๋ด๊ตฌ์ฑ/์ ๋ขฐ์ฑ ์กฐ์ ๊ฐ๋ฅ.๋จ๋ฐ์ฑ ์์ฒญ๊ณผ ์๋ต(์ฆ๊ฐ์ ์ธ ์ฒ๋ฆฌ) โ Service. ์: ๋งต ์ด๊ธฐํ, ๋ก๊ทธ ๋ค์ด๋ก๋, ํ๋ผ๋ฏธํฐ ์กฐํ/์ค์ , ๊ฐ๋จํ ๊ณ์ฐ ์์ฒญ. ์ด์ : ์์ฒญ-์๋ต ํํ๊ฐ ์์ฐ์ค๋ฝ๊ณ ๊ตฌํ์ด ๊ฐ๋จ. ๋๊ธฐ ํธ์ถ์ด ๊ธฐ๋ณธ์ด๋ผ ๋ก์ง ๋จ์ํ ๊ฐ๋ฅ.
๋ชฉํ ๊ธฐ๋ฐ์ ์ฅ์๊ฐ ์์ (์ค๊ฐ ํผ๋๋ฐฑ ํ์, ์ทจ์ ๊ฐ๋ฅ) โ Action. ์: ์ด๋ ๋ก๋ด์ ๋ชฉํ ์ง์ , ํ์ ๋ณต์กํ ํฌ์ฆ ํธ๋์ ํ ๋ฆฌ, ๊ทธ๋ฆฝ/์กฐ์ ์ํ์ค. ์ด์ : ๋ชฉํ ์ ์ก โ ์ฃผ๊ธฐ์ ํผ๋๋ฐฑ(์งํ๋ฅ ) โ ๊ฒฐ๊ณผ/์ํ/์ทจ์ ํ๋ฆ์ ํ์คํํจ.
์ฅ๋จ์
Topic ์ฅ๋จ์
- ์ฅ์
- ๋จ์ํ๊ณ ๊ฒฝ๋. ๋ฎ์ ์ค๋ฒํค๋.
- ๋ค์ค ์์ ์/๋ฐํ์์ ์ ํฉ.
- QoS๋ก ์ ์ก ๋ณด์ฅ/์ผ์์ ๊ตฌ๋ ์ ๋ณต๊ตฌ(transient_local) ๋ฑ ์ ์ด ๊ฐ๋ฅ.
- ๋จ์
- ์์ฒญ-์๋ต, ํผ๋๋ฐฑ, ์ทจ์ ๊ฐ์ ํจํด์ ์ง์ ๊ตฌํํด์ผ ํจ(๋ณต์กํด์ง ์ ์์).
- ์ํ ์ถ์ (logic ์ํ ๊ธฐ๊ณ)์ด ํ์ํ๋ฉด ํ ํฝ๋ง์ผ๋ก๋ ๊ด๋ฆฌ๊ฐ ๋ฒ๊ฑฐ๋ก์.
- Understanding topics
Service ์ฅ๋จ์
- ์ฅ์
- ๋๊ธฐ์ (๋๋ ๋น๋๊ธฐ Future)์ผ๋ก ๊ฐ๋จํ RPC ํจํด ๊ตฌํ ์ฌ์.
- ํธ์ถ๊ณผ ์๋ต์ด ๋ช ํํด ์ค๋ฅ ์ฒ๋ฆฌ/ํ์์์ ๊ด๋ฆฌ๊ฐ ํธํจ.
- ๋จ์
- ๊ธด ์๊ฐ ์์ ์๋ ๋ถ์ ํฉ(๋ธ๋กํน ์ํ, ํด๋ผ์ด์ธํธ ๊ตฌํ ๋ณต์ก).
- ํผ๋๋ฐฑ ๋๋ ์ค๊ฐ ์ํ ์ ์ก ํ์คํ ์์.
- Understanding servies
Action ์ฅ๋จ์
- ์ฅ์
- ์ฅ์๊ฐ ์์ ์ ์ ํฉ: ๋ชฉํ, ์ฃผ๊ธฐ์ ํผ๋๋ฐฑ, ์ต์ข ๊ฒฐ๊ณผ, ์ทจ์๋ฅผ ํ์คํ.
- ํด๋ผ์ด์ธํธ๊ฐ ์ํ(accepted, executing, canceled, succeeded ๋ฑ)๋ฅผ ๊ด์ฐฐ ๊ฐ๋ฅ.
- ๋ด์ฅ๋ ์ทจ์ ๋ฉ์ปค๋์ฆ๊ณผ ๊ฒฐ๊ณผ ์ฝ๋๋ก ์์ ์ ์ธ ์ ์ด ํ๋ฆ ์ ๊ณต.
- ๋จ์
- ํ ํฝ/์๋น์ค๋ณด๋ค ๊ตฌํ ๋ณต์ก๋ โ (์ก์ ์ ์ ํ์ผ, ์๋ฒ/ํด๋ผ์ด์ธํธ ๋ณด์ผ๋ฌํ๋ ์ดํธ).
- ์ค๋ฒํค๋๊ฐ ์์ด์ ๋จ์/์ด์ ์ง์ฐ ๋ฉ์์ง์๋ ๋ถํ์ํ ์ ์์.
- QoS์ ์ฃผ์: ์ก์ ๋ด๋ถ ํต์ ์ QoS ์ค์ ํ์ํ๋ฉด ๋ณต์กํด์ง.
- Understanding actions
๊ธฐ์ ์ ๊ณ ๋ ค์ฌํญ (์ฑ๋ฅยท์ ๋ขฐ์ฑยทQoS ๋ฑ)
- ์ง์ฐ(latency): ํ ํฝ์ ์ค๊ณ์ ๋ฐ๋ผ ๋งค์ฐ ๋ฎ์ ์ง์ฐ์ ์ค ์ ์์. ์๋น์ค/์ก์ ์ RPC ํ๋ฆ/์ํ ๊ด๋ฆฌ ๋๋ฌธ์ ํ ํฝ๋ณด๋ค ์ฝ๊ฐ์ ์ค๋ฒํค๋ ์กด์ฌ.
- QoS: ROS2์์๋ ํ ํฝยท์๋น์คยท์ก์
๋ชจ๋ QoS๋ฅผ ์ค์ ๊ฐ๋ฅ(ํนํ ํ ํฝ). ์ผ์ ๊ฐ์ ์ค์ํ ๋ฐ์ดํฐ๋
reliable
๋๋transient_local
๊ณ ๋ ค. - ์ค์ผ์ผ๋ง: ๋ค์์ ๊ตฌ๋ ์๊ฐ ํ์ํ๋ฉด ํ ํฝ์ด ์์ฐ์ค๋ฝ๋ค. ์๋น์ค๋ 1:1 ํจํด์ด๊ธฐ ๋๋ฌธ์ ๋์ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ๊ณ ๋ คํด์ผ ํจ(์๋ฒ์์ ์ค๋ ๋/ํ ์ฒ๋ฆฌ).
- ์๋ฌ ์ฒ๋ฆฌ: ์ก์ ์ ๊ฒฐ๊ณผ ์ํ๋ก ์คํจ/์ทจ์/ํ์์์์ ํ์คํํด์ ๋ณด๋ผ ์ ์์ด ์๋ฌ ์ฒ๋ฆฌ ๊ตฌ์กฐํ์ ์ ๋ฆฌ.
์ค๋ฌด ๋์์ธ ํจํด & ๊ถ์ฅ
- ์ผ์ โ ํ ํฝ
- ๋ก์ฐ๋ ๋ฒจ ์ ์ด ๋ช
๋ น(์ฃผ๊ธฐ์ ) โ ํ ํฝ (
cmd_vel
,joint_commands
๋ฑ) - ๋จ๋ฐ์ฑ ๋ช ๋ น(์ค์ , ์ง์) โ ์๋น์ค
- ๋ชฉํ๊ธฐ๋ฐ ์ฅ์๊ฐ ์์ โ ์ก์
- ํผํฉ ์ฌ์ฉ ๊ถ์ฅ: ์) ๋ก์ปฌ ์ปจํธ๋กค๋ฌ๋ ํ ํฝ์ผ๋ก ์ฃผ๊ธฐ์ ์ ์ด, ์์ ์ ์ด๊ธฐ๋ ์ก์ ์ผ๋ก ๋ชฉํ ์ ์ก(์งํ ํผ๋๋ฐฑ ์์ ), ํ์์ ์๋น์ค๋ก ์ค์ /์ฟผ๋ฆฌ.
- ์ํ ์ ํ: ์์คํ
์ํ๋ ํ ํฝ์ผ๋ก ๋ธ๋ก๋์บ์คํธ (์:
/robot/state
) โ ์ฌ๋ฌ ๋ชจ๋์ด ๊ตฌ๋ .
Example
- Topic: ํผ๋ธ๋ฆฌ์
geometry_msgs/Twist
๋ก 10Hz๋ก ์๋ ๋ฐํ โ ๋ก์ปฌ ์ปจํธ๋กค๋ฌ๊ฐ ๊ตฌ๋ ํด ๋ชจํฐ ์ ์ด. - Service:
/reset_odometry
ํธ์ถ โ ์๋ฒ๊ฐ ์ฆ์ odom reset ํ ์ฑ๊ณต ์๋ต ๋ฐํ. - Action:
/navigate_to
goal(๋ชฉํ ์ขํ) ์ ์ก โ ์ฃผ๊ธฐ์ ํผ๋๋ฐฑ(๊ฑฐ๋ฆฌ/์งํ๋ฅ ) ์์ โ ๋์ค์ ์ทจ์ ๊ฐ๋ฅ โ ์๋ฃ ์ result(์ฑ๊ณต/์คํจ ์ฝ๋).
์์คํ ๊ตฌ์ฑ์ ์๊ฐํด๋ณผ ์ง๋ฌธ๋ค
- ์์ ์ด ์ง์์ /์คํธ๋ฆฌ๋ฐ์ธ๊ฐ? โ Topic
- ์์ ์ด ๋จ๋ฐ์ฑ ์์ฒญ-์๋ต์ธ๊ฐ? โ Service
- ์์ ์ด ๋ชฉํ ๊ธฐ๋ฐ/์ฅ์๊ฐ/ํผ๋๋ฐฑยท์ทจ์ ํ์์ธ๊ฐ? โ Action
๋๋ถ๋ถ ์์คํ ์ ํ ํฝ + ์ก์ + ์๋น์ค๋ฅผ ํผํฉํด์ ์๋๋ค. ํ ํฝ์ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ(์ผ์/์ํ), ์๋น์ค๋ ๊ตฌ์ฑยท์ค์ ยท์ฟผ๋ฆฌ, ์ก์ ์ ๋ณต์กํ ๋ชฉํ ์คํ ํ๋ฆ์ ๋งก๊ธฐ๋ฉด ์ํคํ ์ฒ๊ฐ ๊น๋ํด์ง๋๋ค.
- Topic (ํ ํฝ) โ ๊ฒ์ํ / ๋ฐฉ์ก ๐๏ธ
- ๋๊ตฐ๊ฐ๊ฐ ๋ด์ฉ์ ๊ณ์ ์จ ๋ถ์ด๋ ๊ฒ์ํ(๋๋ ๋ผ๋์ค ๋ฐฉ์ก)์ด์์.
- ์ด๋ป๊ฒ ์ฐ๋์?: ํ ์ฌ๋์ด ๊ฒ์ํ์ ๊ธ(๋ฉ์์ง)์ ๋ถ์ด๋ฉด, ์ฌ๋ฌ ์ฌ๋์ด ์์ ๊ทธ ๊ธ์ ์ฝ์ ์ ์์ด์. ๊ธ์ ๋ถ์ด๋ ์ฌ๋์ ๋๊ฐ ์ฝ๋์ง ์ ๊ฒฝ์ฐ์ง ์์์.
- ์ธ์ ์ฐ๋ฉด ์ข์๊น?: ์นด๋ฉ๋ผ๊ฐ ๋งค๋ฒ ์ฌ์ง์ ๋ณด๋ด๊ฑฐ๋(์: ๋งค์ด ํ ์ฅ), ์ผ์๊ฐ ๊ณ์ ๊ฐ(์๋, ์จ๋)์ ๋ณด๋ด์ผ ํ ๋.
- ์์
- ๋ก๋ด ์นด๋ฉ๋ผ๊ฐ ๊ณ์ ์ฌ์ง์ ์ฌ๋ฆฌ๋ ๊ณณ:
/camera/image
- ๋ฐํด ์๋๋ฅผ ๊ณ์ ์๋ ค์ฃผ๋ ๊ณณ:
/cmd_vel
- ๋ก๋ด ์นด๋ฉ๋ผ๊ฐ ๊ณ์ ์ฌ์ง์ ์ฌ๋ฆฌ๋ ๊ณณ:
- Service (์๋น์ค) โ ์ ํ๋ก ๋ฌผ์ด๋ณด๊ธฐ โ๏ธ
- ์ ํ๋ก ์ง๋ฌธํ๊ณ ๋ฐ๋ก ๋ต์ ๋ฐ๋ ๊ฒ๊ณผ ๊ฐ์์.
- ์ด๋ป๊ฒ ์ฐ๋์?: ๋ด๊ฐ โ์ฐํ ์์ด?โ๋ผ๊ณ ๋ฌผ์ด๋ณด๋ฉด, ์๋๊ฐ โ์, ์ฌ๊ธฐ ์์ดโ๋ผ๊ณ ๋ฐ๋ก ๋๋ตํด์. ์์ฒญ(request) โ ์๋ต(response) ํ ๋ฒ์ ๋๋์.
- ์ธ์ ์ฐ๋ฉด ์ข์๊น?: ์ฆ์ ๋ต์ ๋ฐ์์ผ ํ ๋. ์: โ์ง๊ธ ์์น ์๋ ค์คโ, โ๋งต ๋ฆฌ์ ํด์ค๋?โ
- ์์
/reset_odometry
๋ผ๋ ์๋น์ค์ ์์ฒญํ๋ฉด โ๋ฆฌ์ ์๋ฃโ๋ผ๊ณ ๋ฐ๋ก ์๋ต.
- Action (์ก์
) โ ์ฌ๋ถ๋ฆ ์ํค๊ธฐ + ์ค๊ฐ ์์ ๋ฐ๊ธฐ ๐งโโ๏ธ๐ฃ
- ์น๊ตฌ์๊ฒ ๊ธด ์ฌ๋ถ๋ฆ์ ์ํค๋ ๊ฒ๊ณผ ๋น์ทํด์. โ๋ถ์์์ ์ฃผ์ค ๊ฐ์ ธ์โ๋ผ๊ณ ์ํค๋ฉด, ์น๊ตฌ๋ ๊ฐ๋ค๊ฐ ์ค๊ฐ์ ์ ํ๋ก โ์ง๊ธ ๋ถ์์ ์์ด์โ, โ๊ฑฐ์ ๋ค ์์ด์โ ๊ฐ์ ์์์ ์๋ ค์ค ์ ์์ด์. ๊ทธ๋ฆฌ๊ณ ๋๋๋ฉด โ๋๋ฌ์ด์โ๋ผ๊ณ ๋งํด์. ํ์ํ๋ฉด ์ฌ๋ถ๋ฆ์ ๊ทธ๋ง๋๋ผ๊ณ (์ทจ์) ํ ์๋ ์์ด์.
- ์ด๋ป๊ฒ ์ฐ๋์?: ๋ชฉํ(goal)๋ฅผ ์ฃผ๋ฉด ์๋ฒ๊ฐ ๊ทธ๊ฑธ ์ํํ๋ฉด์ ์ค๊ฐ ํผ๋๋ฐฑ(feedback) ์ ์๋ ค์ฃผ๊ณ , ์๋ฃ๋๋ฉด ๊ฒฐ๊ณผ(result) ๋ฅผ ๋ณด๋ด์.
- ์ธ์ ์ฐ๋ฉด ์ข์๊น?: ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์ผ์ด๋ ์ค๊ฐ ์งํ ์ํฉ์ ์๊ณ ์ถ์ ๋. ์: โ์ง๊ธ ์ด ์์น๊น์ง ์ด๋ํดโ, โ๊ทธ ๋ฌผ๊ฑด์ ์ง์ด ๋ค์ดโ
- ์์
/arm/move_to_pose
์ก์ : ๋ชฉํ ์์น๋ก ๊ฐ๋ ๋์ โ์ง๊ธ ์ฌ๊ธฐ๊น์ง ์์ด์(ํผ๋๋ฐฑ)โ, ๋๋๋ฉด โ์ฑ๊ณต/์คํจ(๊ฒฐ๊ณผ)โ.
๋ฐฉ์ | ๋น์ | ์ธ์ ์ฐ๋ |
---|---|---|
Topic | ๊ฒ์ํ/๋ฐฉ์ก | ๊ณ์ ํ๋ฌ์ค๋ ๋ฐ์ดํฐ(์นด๋ฉ๋ผ, ์ผ์) |
Service | ์ ํ | ํ ๋ฒ ๋ฌผ์ด๋ณด๊ณ ๋ฐ๋ก ๋ต๋ฐ์ ๋ |
Action | ๊ธด ์ฌ๋ถ๋ฆ + ์ค๊ฐ๋ณด๊ณ | ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ , ์งํ์ํฉ/์ทจ์ ํ์ํ ๋ |
- ์นด๋ฉ๋ผ๊ฐ ๋งค์ด ์ฌ์ง์ ์ฌ๋ ค์ โ Topic (
/camera/image
) - ๋ก๋ด์๊ฒ โ๋งต ๋ค์ ์ด๊ธฐํํดโ๋ผ๊ณ ๋ฐ๋ก ์์ฒญ โ Service (
/reset_map
) - ๋ก๋ด์๊ฒ โ์ ์์ ๊ฐ์ ธ์โ๋ผ๊ณ ์ํค๋ฉด โ Action (
/pick_box
)- ๋ก๋ด: โ์ถ๋ฐํ์ด์(ํผ๋๋ฐฑ)โ, โ์ง์ด ๋ค์์ด์(ํผ๋๋ฐฑ)โ, โ์๋ฃ(๊ฒฐ๊ณผ)โ
ํ ์ค ์์ฝ
QoS๋ ๋ฐํ์(publisher)์ ๊ตฌ๋ ์(subscriber)๊ฐ โ์ด๋ป๊ฒโ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์์ง ์ฝ์ํ๋ ์ค์ ์ด์์. (์ ๋ขฐ์ฑ, ๋ณด๊ด, ํ ํฌ๊ธฐ, ๋ง๋ฃ์๊ฐ ๋ฑ) ์ด ์ค์ ์ผ๋ก ๋คํธ์ํฌ ์ํ ยท ์ง์ฐ ยท ๋์ญํญ ยท late-joiner(๋์ค์ ๊ตฌ๋ ์ ์์ํ ๋ ธ๋) ์ฒ๋ฆฌ๋ฅผ ์กฐ์ ํ ์ ์์ด์.
- ํ ํฝ์ ํธ์ง๋ก ๋ณด๋ฉด, QoS๋ โํธ์ง๋ฅผ ์ด๋ป๊ฒ ๋ณด๋ผ๊น/๋ณด์กดํ ๊นโ์ ๋ํ ์ฝ์์ด์์.
reliable
= ๋ฑ๊ธฐ์ฐํธ: ๋ฐ๋์ ๋ฐฐ๋ฌํ๋ ค ์๋(์ฌ์ ์ก).best_effort
= ์ฝ์/ํต์์ฐํธ: ํ ๋ฒ๋ง ๋์ง๊ณ ๋(๋น ๋ฅด์ง๋ง ๋ถ์ค๋ ์ ์์).transient_local
= ์ฐ์ฒดํต์ ๋ณด๊ด: ๋์ค์ ์๋ ์ฐ์ฒดํต์์ ํธ์ง๋ฅผ ์ฐพ์๋ณผ ์ ์์(๋ผ์นญ๊ณผ ์ ์ฌ).
์ฃผ์ QoS ์ต์
- Reliability(์ ๋ขฐ์ฑ)
RELIABLE
: ๋ฉ์์ง ์์ค์ ์ค์ด๋ ค ์ฌ์ ์กํจ(์ค์ํ ๋ช ๋ น/๊ฒฐ๊ณผ์ ์ฌ์ฉ).BEST_EFFORT
: ์ฌ์ ์ก ์ ํจ(์ผ์ ์คํธ๋ฆฌ๋ฐ ๊ฐ์ด ๋น ๋ฅธ ๊ฐฑ์ ์ด ์ค์ํ๊ณ ์ผ๋ถ ์์ค ํ์ฉ๋ ๋).
- Durability(๋ด๊ตฌ์ฑ)
VOLATILE
: ๊ตฌ๋ ์๊ฐ ์์ผ๋ฉด ๋ฉ์์ง ๋ฒ๋ ค์ง(๊ธฐ๋ณธ).TRANSIENT_LOCAL
: ์ต๊ทผ ๋ฉ์์ง๋ฅผ ๋ณด๊ดํด์ ์๋ก ๊ตฌ๋ ํด๋ ๋ง์ง๋ง ๋ฉ์์ง ๋ฐ์ ์ ์์ (ROS1์ latching๊ณผ ์ ์ฌ).
- History & Depth(ํ์คํ ๋ฆฌ/ํ ํฌ๊ธฐ)
KEEP_LAST
+depth = N
: ์ต์ N๊ฐ๋ง ๋ณด๊ด.KEEP_ALL
: ๊ฐ๋ฅํ ๋ชจ๋ ๋ฉ์์ง๋ฅผ ๋ณด๊ด(๋ฉ๋ชจ๋ฆฌ/๋ฆฌ์์ค ์ฃผ์).
- Deadline
- ๋ฐํ์๊ฐ ์ ํ ์ฃผ๊ธฐ(์: 0.1s) ์์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด์ผ ํ๋์ง ์ฝ์. ๊ธฐ๊ฐ ๋๊ธฐ๋ฉด ์๋ฆผ/๊ฒฝ๊ณ ๊ฐ๋ฅ.
- Liveliness(์์กด์ฑ ํ์ธ)
- ๋ฐํ์๊ฐ ์ด์์๋์ง ํ์ธํ๋ ์ค์ . (์๋/์๋ ๋ฐฉ์ ๋ฑ)
- Lifespan(์๋ช
)
- ๋ฉ์์ง๊ฐ โ์ ํจํ ์๊ฐโ์ ๊ฐ์ง โ ์๊ฐ์ด ์ง๋๋ฉด ํ๊ธฐ. (์: ์ด๋ฒคํธ์ฑ ์๋ฆผ)
์ค๋ฌด ์์ โ ์ด๋ค ํ ํฝ์ ์ด๋ค ์ค์ ์ ์ธ๊น
(vision, arm, hand ๊ธฐ์ค)
- Camera ์ด๋ฏธ์ง (
/camera/image_raw
)- ๊ถ์ฅ:
BEST_EFFORT
,KEEP_LAST
depth 5 - ์ด์ : ์ด๋ฏธ์ง๋ ๋งค์ฐ ์์ฃผ ์ค๊ณ , ์ค๋๋ ์ด๋ฏธ์ง๋ ์ธ๋ชจ๊ฐ ์์ผ๋ฉฐ ์ฝ๊ฐ์ ํ๋ ์ ์์ค์ ๊ด์ฐฎ์. ๋์ญํญ ์ ์ฝ.
- ๊ถ์ฅ:
- Detection ๊ฒฐ๊ณผ (
/vision/detections
)- ๊ถ์ฅ:
RELIABLE
,KEEP_LAST
depth 5, ๋๋TRANSIENT_LOCAL
(late-joiner์๊ฒ ์ต์ ๊ฒฐ๊ณผ ์ ๊ณต) - ์ด์ : ๊ฒ์ถ ๊ฒฐ๊ณผ๋ ๋์น๋ฉด ์๋๋ ๊ฒฝ์ฐ๊ฐ ์์ด ์ ๋ขฐ์ฑ ํ์. ๋ค๋ง ๋น๋๋ ๋ฎ์.
- ๊ถ์ฅ:
- Arm/Hand ๋ช
๋ น (
/arm/move_to_pose
์ก์ ๋ด๋ถ ํ ํฝ ๋๋/allegro_hand_position_controller_r/commands
)- ๊ถ์ฅ:
RELIABLE
,KEEP_LAST
depth 1~10 - ์ด์ : ๋ช ๋ น ์์ค์ ์ํํ๋ฏ๋ก ์ฌ์ ์ก ๋ณด์ฅ ํ์.
- ๊ถ์ฅ:
- Joint state (
/joint_states
)- ๊ถ์ฅ:
RELIABLE
,KEEP_LAST
depth 10 - ์ด์ : ์ํ ์ ๋ณด๋ฅผ ์ ํํ ๋ฐ์์ผ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์.
- ๊ถ์ฅ:
- ์ง๋จ/๋ก๊ทธ ํ ํฝ
- ๊ถ์ฅ:
BEST_EFFORT
๋๋RELIABLE
(use-case์ ๋ฐ๋ผ)
- ๊ถ์ฅ:
QoS๊ฐ ์ค์ ๋ก ๋ฐ๊ฟ๋๋ ๊ฒ (๊ฒฐ๊ณผ)
BEST_EFFORT
โ ๋ ๋ฎ์ ์ง์ฐ, ํจํท ์์ค ํ์ฉ. ๋คํธ์ํฌ๊ฐ ํผ์กํ ๋ ๋ฉ์์ง ๋น ์ง.RELIABLE
โ ์ฌ์ ์ก์ผ๋ก ์ ๋ขฐ์ฑ โ, ํ์ง๋ง ๋คํธ์ํฌ/์ง์ฐยท์ค๋ฒํค๋ โ.TRANSIENT_LOCAL
โ ์๋ก ๊ตฌ๋ ํด๋ ์ต๊ทผ ๋ฉ์์ง ํ๋ณด ๊ฐ๋ฅ(์: ์ํ/์ค์ ).KEEP_ALL
โ ๋ฉ๋ชจ๋ฆฌยท๋์คํฌ ๋ถ๋ด ์ปค์ง ์ ์์(์ฃผ์).
๊ฐ๋จํ ์ฝ๋ ์ (rclpy)
from rclpy.qos import QoSProfile, QoSReliabilityPolicy, QoSHistoryPolicy
# ์: ์นด๋ฉ๋ผ ํ ํฝ์ฉ QoS
camera_qos = QoSProfile(
reliability=QoSReliabilityPolicy.BEST_EFFORT,
history=QoSHistoryPolicy.KEEP_LAST,
depth=5
)
# ์: ์ค์ํ ๋ช
๋ น ํ ํฝ์ฉ QoS
cmd_qos = QoSProfile(
reliability=QoSReliabilityPolicy.RELIABLE,
history=QoSHistoryPolicy.KEEP_LAST,
depth=10
)
๊ทธ๋ฆฌ๊ณ ํผ๋ธ๋ฆฌ์
/์๋ธ์คํฌ๋ผ์ด๋ฒ ์์ฑ ์ ์ด QoSProfile
์ ๋๊ฒจ์ฃผ๋ฉด ๋ฉ๋๋ค.
์ธ์ QoS๋ฅผ ๋ฐ๊ฟ์ผ ํ ๊น? ์ฒดํฌ๋ฆฌ์คํธ
- ๋คํธ์ํฌ๊ฐ ๋ถ์์ ํ๊ณ ์ค์ํ ๋ฉ์์ง๋ฉด โ
RELIABLE
. - ๋ฉ์์ง๊ฐ ์ค์๊ฐยท์์ฃผ ๊ฐฑ์ ๋๊ณ ์ค๋๋ ๋ฉ์์ง๋ ํ์์๋ค๋ฉด โ
BEST_EFFORT
. - ์ด๋ค ํ ํฝ์ ๋์ค์ ์์ํ๋ ๋
ธ๋๊ฐ ์ต๊ทผ ์ํ๋ฅผ ๊ผญ ๋ฐ์์ผ ํ๋ค๋ฉด โ
TRANSIENT_LOCAL
. - ๋ฉ๋ชจ๋ฆฌ/๋์ญํญ ํ๊ณ๊ฐ ๊ฑฑ์ ๋๋ฉด โ history/depth๋ฅผ ๋ฎ์ถฐ๋ผ.
๊ฐ๋จ ์์ฝ (ํ)
๋ชฉ์ | ๊ถ์ฅ QoS ์ค์ |
---|---|
์นด๋ฉ๋ผ/์ด๋ฏธ์ง ์คํธ๋ฆฌ๋ฐ | BEST_EFFORT, KEEP_LAST, depth=3~10 |
์ผ์/์ํ (์ค์) | RELIABLE, KEEP_LAST, depth=5~20 |
์ ์ด ๋ช ๋ น(์ค์) | RELIABLE, KEEP_LAST, depth=1~10 |
์ด๊ธฐ ์ํ ์ ๋ฌ(๋์ค ๊ฐ์ ์ ํ์) | TRANSIENT_LOCAL |