HAPTIX Optitrack Control - modulabs/gazebo-tutorial GitHub Wiki
Overview
์ด ํํ ๋ฆฌ์ผ์ HAPTIX ๊ฐ์ ๋ณด ์๋ฎฌ๋ ์ดํฐ๋ฅผ ํจ๊ป ์ฌ์ฉํ์ฌ Optitrack ๋ชจ์ ์ถ์ ๊ธฐ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ์ฌ ์ค๋ช ํ๋ค. ์ฅ๋น์ ๊ฐ ๋ถ๋ถ์ ๋ํด ๋ฐฐ์ฐ๊ณ ์ถ๊ฑฐ๋ ๊ฐ ์์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๊ธฐ ์ํ ๋ง์ปค ๋ณด์ ๋ฐฉ๋ฒ์ ๋ํ์ฌ ๋ฐฐ์ด๋ค.
What you'll need
๋ชจ๋ ์ํํธ์จ์ด ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ ํ์ ํญ๋ชฉ๋ค์ HAPTIX์ ์ ๊ณต๋๋ค. ์์ ์ ํคํธ๋ฅผ ๋ง๋ค๊ณ ์ถ์ ์ฌ์ฉ์๋ค์๊ฒ ๋งํฌ๋ฅผ ์ ๊ณตํ๋ค.
- ๊ฐ์ ๋ณด ์๋ฎฌ๋ ์ดํฐ๊ฐ ์ค์น๋ ๋ฆฌ๋ ์ค ์ปดํจํฐ (์ค๋ช ์ ์ฌ๊ธฐ์)
- Motive ๋ชจ์ ์ถ์ ๊ธฐ ์ํํธ์จ์ด๊ฐ ์ค์น๋ ์๋์ฐ ์ปดํจํฐ ๋๋ ์๋์ฐ ๊ฐ์๋จธ์ (VM). HAPTIX ํ์ ์์์ ์ด๊ธฐํ๋๋ ์๋์ฐ VM์ด ์ฌ์ ์ค์น๋์ด์๋ค. (Motive ์ํํธ ์จ์ด ์ค์น ๋ฐฉ๋ฒ์ ์ฌ๊ธฐ์)
- Optitrack V120 Trio 3D ์นด๋ฉ๋ผ ๋ฐ ๋๋ด๋ ์์ด์ด, ํ๋ธ ๋ฑ (์ฌ๊ธฐ์์ ๊ตฌ๋งค)
- 1~2 ๋์ด์ ์นด๋ฉ๋ผ ์ผ๊ฐ๋
- ๋ชจ์ ์ถ์ ๋์ ์ธํธ (DIY ์ฌ์ฉ์๋ ์ฌ๊ธฐ์์ ๋ชจ์ ์ถ์ ์ ์ธ์๋ฆฌ๋ฅผ ์ฐพ์ ์ ์๋ค: ๋ฐ์ฌ ๋ง์ปค 9๊ฐ, 9๊ฐ ์งง์ ๋ฒ ์ด์ค ๋ฐ ๊ฐ์ฒด ๋ฒ ์ด์ค 2๊ฐ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.)
Camera setup
Optitrack์ ์ผ๊ฐ๋์ ์ฅ์ฐฉํ๋ค.
Optitrack ํคํธ์๋ ๊ธด USB ์ผ์ด๋ธ๊ณผ ์ ์ ์ผ์ด๋ธ ๋ฐ ์ฌ๋ฌ๊ฐ์ ํฌํธ๊ฐ ์๋ ํ๋ธ๊ฐ ํจ๊ป ์ ๊ณต๋๋ค. ์ ์ ์ผ์ด๋ธ์ ๋ฒฝ๋ฉด๊ณผ ํ๋ธ์ ์ฐ๊ฒฐํ๋ค. ๊ทธ๋ฆฌ๊ณ USB ํค์๋ธ์ ํ๋ธ์ ์ฐ๊ฒฐํ๋ค. ๋์ค์ ์ด ์ผ์ด๋ธ์ ์ฌ์ฉํ์ฌ Motive (๋๋ ๋ค๋ฅธ ์ถ์ ํ๋ก๊ทธ๋จ)์ ์คํํ๋ ๊ธฐ๊ณ์ ์ฐ๊ฒฐํ๋ค. ๋ง์ง๋ง์ผ๋ก ํ๋ธ์์ ๋์ค๋ ์์ด์ด๋ฅผ Optitrack์ ๋ท๋ฉด์ ๊ฝ๋๋ค. ์นด๋ฉ๋ผ ์ค์ ์ ๋ํ ์ถ๊ฐ ๋์์ด ํ์ํ๋ฉด V120 Trio Quick Start Guide๋ฅผ ์ฐธ์กฐํ์ฌ๋ผ.
Optitrack์ ์ปดํจํฐ์ ์ค๋ฅธ์ชฝ 1~2 ๋ฏธํฐ ์ง์ ์ ์ค์นํ๊ณ ์นด๋ฉ๋ผ๋ฅผ ๋ชจ๋ํฐ๋ฉด์์ 90๋ ํ์ ์์ผ ์ฌ์ฉ์๊ฐ ์์์๋ ์ํฌ์คํ ์ด์ /์์๋ฅผ ํฅํ๊ฒ ํ๋ค. ์ปค๋ฉ๋ผ๋ ์ด๊ป ๋๋จธ์์ ์ฌ์ฉ์์ ์ค๋ฅธ์ชฝ์ ๋ณด์์ผ ํ๋ค. Optitrack์ ์๋์ฐ ์ปดํจํฐ์ ์ฐ๊ฒฐํ๋ ์ผ์ด๋ธ์ ์ถฉ๋ถํ ๊ธธ์ด์ผ ํ๊ณ , ์๋ฌด๊ฒ๋ ์กํ๊ฑฐ๋ ์ก์๋น๊ธฐ์ง ์๋๋ก ์ฃผ์ํ์ฌ์ผ ํ๋ค.
Note: ์ผ์ชฝ ํ์ ์๋ฎฌ๋ ์ด์ ํด์ผํ๋ ๊ฒฝ์ฐ, ๋ฌผ๋ฆฌ์ ์ค์ ์ ๋ค์ง์ด์ผ ํ๋ค: ์นด๋ฉ๋ผ๋ฅผ ์ํฌ์คํ ์ด์ ์ผ์ชฝ์ ๋๊ณ ๋ชจ์ ์ถ์ ๋์์ด ์ผ์ชฝ์ ์ฐฉ์ฉ๋์ด ์๋์ง ํ์ธํ๋ค.

Motion tracking target setup
Arm and head trackers
HAPTIX teams์ ํ๊ณผ ๋จธ๋ฆฌ์ ์ ์ฐฐ ์ ์๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ๋ชจ์
์ถ์ ํํท์ด ์ ๊ณต๋๋ค.
๋ง์ฝ ํ๊ณผ ๋จธ๋ฆฌ ์ถ์ ๊ธฐ๋ฅผ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ค๋ฉด, monitor tracker placement ํญ๋ชฉ์ ์๋ตํ์ฌ๋ผ.
์์ ์ ๋ชจ์ ์ถ์ ํ๊น์ ๋ง๋ค๋ ค๋ฉด, ๋์ ๋น ์ต์ 3๊ฐ์ ์์ ๋์ ์ถ์ ๊ตฌ๊ฐ ํ์ํ๋ค.
HAPTIX ํ๋ก์ ํธ์์ Optitrack์ ์๋ฎฌ๋ ์ด์ ๋ ๋ก๋ด ํ์ ์์ธ๋ฅผ ์ง์ ์ ์ดํ๋ ์ฌ์ฉ์ ํ์ ํฌ์ฆ๋ฅผ ์ถ์ ํ๋๋ฐ ์ฌ์ฉ๋๋ค. ๋ํ ์ฌ์ฉ์์ ๋ชจ๋ฆฌ ํฌ์ฆ๋ ์๋ฎฌ๋ ์ด์ ์ ๊ด์ธก์ ์ ์ด๋ฅผ ์ํด ์ถ์ ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์ ํ์ ๋ฌถ์ ์ ์๋ ๋ชจ์ ์ถ์ ๋์์ ํ๋ ๋ง๋ค๊ณ , ๋จธ๋ฆฌ์ ์ฐฉ์ฉํ ์ ์๋ ๋ค๋ฅธ ๋ชจ์ ์ถ์ ๋์์ ๋ง๋ค์ด์ผ ํ๋ค.
pinch์์๋ ๋ชจ์
์ถ์ ์์ญ์ ํ์ ๋๋ ๋จ๋จํ ํ๋ผ์คํฑ์ผ๋ก ํ
์ดํ ํ๊ฑฐ๋ ๋ถ์ฌ ์ถ์ ๋ชฉํ๋ฅผ ๋ง๋ค ์ ์๋ค.
์ด ํ๊น์ ์ฒ์ด๋ ๋ฐธํฌ๋ก๋ก ์์ฅ์ ๋ถ์ฐฉํ์ฌ ํ ์ถ์ ๊ธฐ๋ก ๋ง๋ค ์ ์๋ค.
๋จธ๋ฆฌ ์ถ์ ์ฅ์น๋ฅผ ๋ง๋ค๋ ค๋ฉด, ๋์์ ๋จธ๋ฆฌ๋ ์ ๋ถ์ฐฉํ๋ค. ๋๋ Nvidia 3D glasses๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๊ฒฝ์ ์ค๋ฅธ์ชฝ ๋ค๋ฆฌ์ ๋ถ์ฐฉํ๋ค.
Monitor tracker placement
HAPTIX ํ์ ํ๋ฉด์ ์๋ฉดํ
์ดํ๊ฐ ์๋ ๋ฅ๊ทผ ๋ฐ๋ฅ์ ๋ถ์ฐฉ๋ ์ธ๊ฐ์ ๋์ ๊ตฌ์ฒด๋ฅผ ์ ๊ณต๋๋ค.
~[][(https://bitbucket.org/osrf/gazebo_tutorials/raw/default/haptix_optitrack/files/spheres.png)
์ด ๊ตฌ๋ค์ ๊ฐ์ ๋ณด ๋จธ์ ๊ณผ ํจ๊ปํ๋ ๋ชจ๋ํฐ์ ์ฝ๋์ ๋ถ์ฐฉํ๋ค. ํ๋๋ ๋ชจ๋ํฐ์ ์ค๋ฅธ์ชฝ ์๋จ ๋ชจ์๋ฆฌ์, ๋ค๋ฅธ ํ๋๋ ์ผ์ชฝ ์๋จ ๋ชจ์๋ฆฌ์, ๊ทธ๋ฆฌ๊ณ ๋๋จธ์ง ํ๋๋ ์ค๋ฅธ์ชฝ ๋ชจ์๋ฆฌ ์ค๊ฐ์ ๋ถ์ฐฉํ๋ค.

Configuring the Motive Project File
๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ์ถ์ ๋์ ์ ์ ๋ฐ์ ๊ฒฝ์ฐ, Motive ํ๋ก์ ํธ ํ์ผ haptix_osrf.ttp ์ ์๋์ฐ ๋ฐํํ๋ฉด์ ๋ค์ด๋ก๋ ํ๋ค. ๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ๊ต์ ํ๊ธฐ ์ํด ์ฝ๊ฐ์ ์์ ์ ํ๋ค.
Tracking rigid bodies
๋ฆฌ๋
์ค์์ ๊ฐ์ ๋ณด๊ฐ ์ข
๋ฃ๋์๋์ง ํ์ธํ๋ค. ์๋์ฐ ์ปดํจํฐ์์ USB๋ฅผ ํตํด Optitrack๊ฐ ์ฐ๊ฒฐ๋์๋์ง ํ์ธํ๊ณ ๋ฐํํ๋ฉด์์ Motive ์ํํธ์จ์ด๋ฅผ ์คํํ๋ค.
์๋์ ๊ฐ์ ํ์
์ฐฝ์ด ๋ฌ๋ค:
๋ง์ฝ Motive ํ๋ฉด์์ "๋ผ์ด์ผ์ค๋ฅผ ์ฐพ์ ์ ์์"์ด๋ผ๋ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ฌ๋ค๋ฉด, Optitrack๋ฅผ ์ฌ๋ฐ๋ก ์ฐ๊ฒฐํ์ง ์์ ๊ฒ์ด๋ค. ์จ์ Camera Setup์ฅ์ ํ์ธํ๊ณ Optitrack๋ฅผ USB๋ฅผ ์ฌ์ฉํ์ฌ ์ ์๊ณผ ์ปดํจํฐ์ ์ฐ๊ฒฐํ๋์ง ๋ค์ ํ์ธํ๋ค. ๋ง์ฝ ์๋์ฐ ๊ฐ์ ๋จธ์ ์ ์ฌ์ฉํ๋ค๋ฉด, "Natural Point Optitrack" USB ์ฅ์น๊ฐ VM window ์ฐ์ธก ํ๋จ ๊ตฌ์์ ์ผ์ ธ์๋์ง ํ์ธํ๋ค.
์์ ๋ฉ๋ด๋ฅผ ๋ซ๋๋ค.
์๋จ ํด๋ฐ์์ "View" ์๋ "Data Streaming" ๋ฒํผ์ ์ ํํ๊ณ "Broadcast Frame Data" ๋ฅผ ์ ํํ๋ค.
์ด์ "File", "Open"์ ์ ํํ์ฌ ๋ค์ด๋ก๋ํ haptix_osrf.ttp ํ๋ก์ ํธ ํ์ผ์ ์ ํํ๋ค.
** Motive์ ์๋ ค์ง ๋ฒ๊ทธ: ๊ฐ์ ๋จธ์ ์์ Motive์ ์คํํ๋ค๋ฉด, ํ๋ก์ ํธ ํ์ผ์ ์ด๊ธฐ ์ ์ "Broadcast Frame Data"๊ฐ ํ์ฑํ ๋์ด์๋์ง ํ์ธํด์ผ ํ๋ค! ๋ง์ฝ ํ๋ก์ ํธ๋ฅผ ๋ฐ๋ก ์ด์ด๋ฒ๋ฆฌ๋ฉด Motive์ด ์ถฉ๋์ ์ผ์ผํจ๋ค.**
์์ง ๋ณด์ด์ง ์๋ ๊ฒฝ์ฐ, ์๋จ ํด๋ฐ์์ "Views" ์๋ Rigid Body Properties view๋ฅผ ์ฐ๋ค.
์นด๋ฉ๋ผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์์ ์ธ๊ฐ์ ์์ ํฐ์์ ์ด ์ด๋ฏธ์ง์ ํ์๋๋ค. ์ ๋ค์ ์นด๋ฉ๋ผ ํ๋ ์์์ ๋ชจ์
์ถ์ ๊ธฐ ๊ตฌ์ฒด์ ์์น๋ฅผ ๋ํ๋ธ๋ค (Optitrack Trio์๋ 3๊ฐ์ ์นด๋ฉ๋ผ๊ฐ ์๋ค). 3D ๋ณด๊ธฐ์์ ๊ฐ ๊ตฌ์ฒด์ 3D ๊ณต๊ฐ ๋ด ์์น๋ฅผ ํ์ธํ๋ค.
๋ง์ฝ ๋์ ์ถ์ ๊ฐ์ฒด์ ํด๋นํ์ง ์๋ ์ ์ด๋ ํฐ ์์ด ํ์๋๋ฉด ์ ์ธ์ ์ ๊ฐ์ญ์ด ์์ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๊ธ์์ฑ/๋ฐ์์ด๋ ๋ฌผ์ฒด๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ์จ๊ธฐ๊ณ ๊ทผ์ฒ์ ์์ฐ๊ด์ ์ฐจ๋จํ๋ค.
์๊ทผ ๋ทฐ์์ ์ด๋ค ๊ตฌ์ฒด๊ฐ ๋ชจ๋ํฐ ์์ ๋์ธ ๊ตฌ์ฒด๋ฅผ ์๋ฏธํ๋์ง ํ์ธํ๋ค. ๋จธ๋ฆฌ ๋ฐ ํ ์ถ์ ๊ธฐ๋ฅผ ํ๋ฉด ์ธ๋ถ๋ก ๊ฐ์ ธ๊ฐ๋ฉด ์ฝ๊ฒ ํ์ธํ ์ ์๋ค. selection rectangle์ ํด๋ฆญํ๊ณ ๋๋๊ทธํ์ฌ ์ธ๊ฐ์ ๋ง์ปค๋ฅผ ๊ฐ์กฐ์ํจ๋ค.
๊ฐ์ฒด ์์ฑ์์ "Create From Selection" ์ ๋๋ฅธ๋ค. ์ ํํ ์ ๊ณผ ๋ ์ด๋ธ์ ์ฐ๊ฒฐํ๋ ์ผ๊ฐํ์ด 3D ๋ณด๊ธฐ์ ๋ํ๋๋ค.
์๋ก์ด ๊ฐ์ฒด์ "MonitorTracker"๋ผ๊ณ ์ด๋ฆ ๋ถ์ธ๋ค. ๊ฐ์ฒด ์์ฑ์ผ๋ก ๋ค์ด๊ฐ๊ฑฐ๋, ๊ฐ์ฒด ์์์ ์ฐํด๋ฆญํ์ฌ ํ๋ก์ ํธ ํญ์ ํ์์ "Rename Asset"๋ฅผ ์ ํํ์ฌ ํ ์ ์๋ค.
ํ๊ณผ ๋จธ๋ฆฌ ํธ๋ ์ปค๋ฅผ ์์ฑํ์๋ค๋ฉด: ์ด์ ๊ฐ์ฒด์ ๊ตฌ์ฒด๊ฐ ์ ํ ํด์ ๋์๋์ง ํ์ธํ๋ค. ํ ํ๊ฒ์ ๋ค๊ณ ํด๋ฆญํ๊ณ ๋๋๊ทธํ์ฌ ํ ํ๊ฒ์ ๊ตฌ์ฒด๋ฅผ ์ ํํ๋ค. ํ ์ถ์ ๊ธฐ๋ฅผ ์ฐฉ์ฉํ๊ณ ์๋ฐ๋ฅ์ ๋๊ณ ํ์ ๋๋ฐ๋ก ์ก๋๋ค. ๋ง์ปค์ ์์ง์ผ๋ก ๋ถ์ฐฉ ๋ ๊ตฌ๊ฐ ๋๋ฐ๋ก ํฅํ๋๋ก ๋ ๊ฐ์ diagonal prongs๊ฐ ๊ฐ๋ฉ๋ผ๋ฅผ ํฅํ๋๋ก ์ถ์ ๊ธฐ๊ฐ ์ ๋ ฌ๋์ด ์๋์ง ํ์ธํ๋ค. (์ฐธ๊ณ ์ฉ ํ ์์ธ๋ "Starting Gazebo" ํ๋จ ๊ทธ๋ฆผ์ ํ์ธํ๋ค)
ํ์ ์ก๊ณ "Create From Selection"์ ํด๋ฆญํ๋ค. ์ ๊ฐ์ฒด์ "ArmTracker"๋ผ๋ ์ด๋ฆ์ ๋ถ์ธ๋ค.
๋จธ๋ฆฌ ํ์ ์ ๋ํด์๋, ์ํ๋ ๋จธ๋ฆฌ ์ถ์ ๊ธฐ ๊ตฌ์ฒด๋ฅผ ํ์ธํ๊ณ ๊ด๋ จ ๊ตฌ์ฒด๋ฅผ ์ ํํ๋ค. Nvidia 3D ์๊ฒฝ์ ์ฌ์ฉํ๋ค๋ฉด, ๋จธ๋ฆฌ ์ถ์ ๊ธฐ๋ฅผ ์ผ๊ณ ๊ฐ๋ฅํ ๋๋ฐ๋ก ๋ชจ๋ํฐ๋ฅผ ํฅํ๊ฒ ํ๋ค. ํ์ ์ด ์์ฉ ์์น (์: ๊ท ์์ชฝ)์ ์ผ์นํ๋ ์์น์ ๋์ฌ์๋์ง ํ์ธํ๋ค.
๊ฐ๋ฅํ ์ถ์ ๊ธฐ๋ฅผ ์ก๊ณ "Create from Selection"์ ํด๋ฆญํ๋ค. ๊ฐ์ฒด์ ์ด๋ฆ์ "HeadTracker"๋ก ๋ณ๊ฒฝํ๋ค.
์ค์: ๊ฐ์ฒด์ ์ด๋ฆ์ ์ ํํ์ง ํ์ธํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฐ์ ๋ณด๊ฐ ์๋ฎฌ๋ ์ด์ ์์ ๋ชจ์ ์ถ์ ๋์์ ํด๋น ๊ฐ์ฒด์ ์ฐ๊ฒฐํ์ง ์๋๋ค!
Motive์ 3D ๋ทฐ์์ ํ๊ณผ ๋จธ๋ฆฌ ์ถ์ ๊ธฐ๋ฅผ ๋ฐ๋ผ ์ด๋ํ๊ณ ์์น๊ฐ ๋ฐ๋๋ ๊ฒ์ ๋ณผ ์ ์์ด์ผ ํ๋ค.
Check the result
์ด์ ์ค์ ์ ์ํด Motive์ ๊ตฌ์ฑํ์๋ค. ๋ชจ๋ ๋ง์ปค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ถ์ ๋๋์ง ํ์ธํ๊ธฐ์ ์ข์ ํ์ด๋ฐ์ด๋ค. ํ ๋ฐ ๋จธ๋ฆฌ ์ถ์ ๊ธฐ๋ฅผ ๋ค์ scene์ผ๋ก ๊ฐ์ ธ์์ ์นด๋ฉ๋ผ ๋ฐ ์๊ทผ ๋ทฐ์์ ์์ง์ด๋ ๊ฒ์ ํ์ธํ๋ค.
Save the result
์๋จ ํด๋ฐ์์ "ํ์ผ" ์๋ "ํ๋ก์ ํธ ์ ์ฅ"์ ๋๋ฅธ๋ค. ๋ฐํํ๋ฉด์ haptix_osrf.ttp์ด ์ ์ฅ๋์ด ์๋์ง ํ์ธํ๋ค.
์ถ์ ๊ธฐ์์ ๊ฐ๋ณ ๋ง์ปค์ ์์น๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์นด๋ฉ๋ผ ๊ฐ๋๋ฅผ ํฌ๊ฒ ๋ณ๊ฒฝํ์ง ์๋ ํ ๊ตฌ์ฑ์ ๋์ค์ ์์ ํ ํ์๋ ์๋ค.
Starting Gazebo
Optitrack๊ฐ ์ฐ๊ฒฐ๋์๋์ง ํ์ธํ๊ณ ๋ฆฌ๋
์ค ์ปดํจํฐ์์ haptixStart ๋ฐํํ๋ฉด ์์ด์ฝ์ ๋๋ฒ ํด๋ฆญํ์ฌ ๊ฐ์ ๋ณด๋ฅผ ์์ํ๋ค.
ํ ์ถ์ ๊ธฐ ๋ฐ ๋จธ๋ฆฌ ์ถ์ ๊ธฐ๋ฅผ ์ฐฉ์ฉํ๋ค. ์๋ฎฌ๋ ์ด์
์์ ๋ก๋ด ํ๊ณผ ๊ฐ์ด ํ์ ๋ค๊ณ ๋จธ๋ฆฌ๋ฅผ ๋ฐ๋ก ์ธ์ด๋ค. ๋ค๋ฅธ ์์ ์ฌ์ฉํ์ฌ v, b, ๋๋ n์ ๋๋ฌ ์๋ฎฌ๋ ์ด์
์ผ์ ์ค์ง๋ฅผ ํด์ ํ๋ค. ํ์ ํ๋ค๋ฉด ์ ์ดํ ์ ์๋ค.
