flowchart LR
A[User Code] --> B[Physics Engine<br/>PyBullet]
A --> C[TACTO<br/>Bridge Layer]
B -->|object/link poses<br/>contact forces| C
C -->|deformed gel + objects<br/>synchronized scene| D[Pyrender / OpenGL<br/>GPU rendering]
D -->|RGB + Depth| C
C -->|tactile imprint| A
E[Sensor Config<br/>camera, lights,<br/>gel mesh, deformation] --> C
๐TACTO ๋ฆฌ๋ทฐ
Shaoxiong Wang, Mike Lambeta, Po-Wei Chou, Roberto Calandra
IEEE Robotics and Automation Letters (RA-L), 2022
- ๐ก TACTO๋ ๊ธฐ์กด ์๋ฎฌ๋ ์ดํฐ๋ค์ด ๊ตฌํํ๊ธฐ ์ด๋ ค์ ๋ ๊ณ ํด์๋ vision-based tactile sensors์ ์ฌ์ค์ ์ธ ์ด๊ฐ ์ ํธ๋ฅผ ์ด๋น ์๋ฐฑ ํ๋ ์์ผ๋ก ๋ ๋๋งํ ์ ์๋ ๋น ๋ฅด๊ณ ์ ์ฐํ ์คํ์์ค ์๋ฎฌ๋ ์ดํฐ์ ๋๋ค.
- โ๏ธ ์ด ์๋ฎฌ๋ ์ดํฐ๋ PyBullet ๊ฐ์ ๋ฌผ๋ฆฌ ์์ง๊ณผ Pyrender ๊ฐ์ ๋ ๋๋ง ์์ง์ ์ฐ๊ฒฐํ๋ฉฐ, ๋ฌผ์ฒด ๋ฉ์ฌ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ๊ณ ํฌ์ฆ๋ฅผ ๋๊ธฐํํ๋ OpenGL ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ฅผ ํตํด ๋์ ์ ์ฐ์ฑ๊ณผ ๊ณ ์ ๋ ๋๋ง์ ์ ๊ณตํฉ๋๋ค.
- ๐ฏ ์ ์๋ค์ TACTO๋ฅผ ์ฌ์ฉํ์ฌ 100๋ง ๊ฑด์ ๊ทธ๋ฉ ๋ฐ์ดํฐ๋ก ๊ทธ๋ฉ ์์ ์ฑ์ ํ์ตํ๊ณ , ๋๋ฆฌ์ ์กฐ์ ์ ์ด๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๋ฉฐ, Sim2Real ๊ฒฉ์ฐจ๋ฅผ ์ค์ด๋ ๋ฑ ๋ค์ํ ๋ก๋ด ๋ฐ AI ์ ํ๋ฆฌ์ผ์ด์ ์์์ ์ ์ฌ๋ ฅ์ ์ ์ฆํ์ต๋๋ค.
๐ Ping Review
๐ Ping โ A light tap on the surface. Get the gist in seconds.
TACTO๋ ๊ณ ํด์๋ ์๊ฐ ๊ธฐ๋ฐ ์ด๊ฐ ์ผ์๋ฅผ ์ํ ๋น ๋ฅด๊ณ ์ ์ฐํ๋ฉฐ ์คํ ์์ค ์๋ฎฌ๋ ์ดํฐ์ ๋๋ค. ์ด ์๋ฎฌ๋ ์ดํฐ๋ ๋ก๋ด ๊ณตํ ๋ฐ ์ ์ด ํ์ต ๋ถ์ผ์์ ์๋ก์ด ๋ฐ์ ์ ํ๋กํ ํ์ดํ, ๋๋ฒ๊น ๋ฐ ๋ฒค์น๋งํนํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๊ธฐ์กด์ ๋ฌผ๋ฆฌ ์์ง๋ค์ ์๊ฐ ๊ธฐ๋ฐ ์ด๊ฐ ์ผ์์ ๊ฐ์ ๊ณ ํด์๋ ์ด๊ฐ ์ผ์์ ์ ํํ ์๋ฎฌ๋ ์ด์ ์ ์ด๋ ค์์ ๊ฒช์๋๋ฐ, ์ด๋ ์ ์ด ์ญํ๋ฟ๋ง ์๋๋ผ ์ผ์์ ๊ดํ์ ํน์ฑ ๋ฐ ํด๋น ์กฐ๋ช ์ ๋ชจ๋ธ๋งํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. TACTO๋ ์ด๋ฌํ ๊ฒฉ์ฐจ๋ฅผ ํด์ํ์ฌ ์ด๋น ์๋ฐฑ ํ๋ ์์ผ๋ก ์ฌ์ค์ ์ธ ๊ณ ํด์๋ ํฐ์น ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋งํ ์ ์์ผ๋ฉฐ, DIGIT ๋ฐ OmniTact๋ฅผ ํฌํจํ ๋ค์ํ ์๊ฐ ๊ธฐ๋ฐ ์ด๊ฐ ์ผ์๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๋๋ก ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์ด ๋ ผ๋ฌธ์ TACTO์ ๊ตฌํ์ ์ด๋ ์์น๋ค๊ณผ ๊ทธ ์์น๋ค์ด ์ํคํ ์ฒ์ ์ด๋ป๊ฒ ๋ฐ์๋์๋์ง ์์ธํ ์ค๋ช ํฉ๋๋ค. TACTO๋ ๋์ ์ฒ๋ฆฌ๋, ์ ์ฐ์ฑ, ํ์ค์ฑ, ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ ํธ์์ฑ์ ๋ชฉํ๋ก ์ค๊ณ๋์์ต๋๋ค.
ํต์ฌ ๋ฐฉ๋ฒ๋ก :
TACTO๋ ์ ์ด ์์ญ์ ๊ตญ๋ถ ๊ธฐํํ(Depth) ๋ฐ ํด๋น ๋ ๋๋ง(RGB)์ ๊ณ์ฐํ๊ธฐ ์ํด PyBullet๊ณผ ๊ฐ์ ๋ฌผ๋ฆฌ ์๋ฎฌ๋ ์ดํฐ์ Pyrender(OpenGL ๊ธฐ๋ฐ)์ ๊ฐ์ ๋ฐฑ์๋ ๋ ๋๋ง ์์ง์ ์ฐ๊ฒฐํฉ๋๋ค. ๊ธฐ์กด ์ ๊ทผ ๋ฐฉ์์ ํ๊ณ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด โ๋๊ธฐํ๋ ์ฅ๋ฉด์์ OpenGL์ ์ฌ์ฉํ RGB ๋ ๋๋งโ ๋ฐฉ์์ ์ ์ํฉ๋๋ค.
- ํ ๋ชจ๋ธ์ ์ฌ์ฉํ RGB ๋ ๋๋ง (๊ฐ๋จํ์ง๋ง ๋ ๊ฐ๋ ฅ): PyBullet์ ๋ด์ฅ ์นด๋ฉ๋ผ๊ฐ ์ ๊ณตํ๋ ๊น์ด ๋งต์์ RGB ์ด๋ฏธ์ง๋ฅผ ๋ ๋๋งํ๋ ๋ฐฉ์์ ๋๋ค. ํ์ ๋ฐ์ฌ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง, ๋น์ด ์ ค ํ๋ฉด์์ ์นด๋ฉ๋ผ๋ก ํ ๋ฒ๋ง ๋ฐ์ฌ๋๋ค๊ณ ๊ฐ์ ํ๋ฏ๋ก, ๋ฐ์ฌ, ๊ตด์ , ๊ทธ๋ฆผ์์ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ํฉํ์ง ์์ผ๋ฉฐ GPU ๊ฐ์ํ๊ฐ ์ด๋ ต์ต๋๋ค.
- ๊น์ด์์ OpenGL์ ์ฌ์ฉํ RGB ๋ ๋๋ง (๊ฐ๋ ฅํ์ง๋ง ๋๋ฆผ): OpenGL์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๊น์ด ๋งต์ผ๋ก๋ถํฐ RGB ์ด๋ฏธ์ง๋ฅผ ๋ ๋๋งํ๋ ๋ฐฉ์์ ๋๋ค. ๋ฏธ๋ฌ, ํฌ๋ช ๊ฐ์ฒด, ๊ทธ๋ฆผ์, GPU ๊ฐ์ ๋ฑ์ ์ง์ํ์ง๋ง, ๊น์ด ๋งต์์ ์์ฑ๋ ๋ฉ์๋ฅผ OpenGL๋ก ๋ฐ๋ณต์ ์ผ๋ก ๋ก๋ํ๋ I/O ๋ณ๋ชฉ ํ์์ผ๋ก ์ธํด ์๋๊ฐ ์ด๋น 20ํ๋ ์์ผ๋ก ์ ํ๋ฉ๋๋ค.
- ๋๊ธฐํ๋ ์ฅ๋ฉด์์ OpenGL์ ์ฌ์ฉํ RGB ๋ ๋๋ง (์ ์๋ ๋ฐฉ์ - ๊ฐ๋ ฅํ๊ณ ๋น ๋ฆ): TACTO์ ํต์ฌ ์ํคํ
์ฒ์
๋๋ค. I/O ๋ณ๋ชฉ ํ์์ ํผํ๊ธฐ ์ํด, TACTO๋ ์ ค ํ๋ฉด๊ณผ ๊ฐ์ฒด ๋ฉ์๋ฅผ OpenGL ์ฅ๋ฉด์ ๋ฏธ๋ฆฌ ๋ก๋ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฌผ๋ฆฌ ์๋ฎฌ๋ ์ดํฐ(์: PyBullet)์์ ๊ฐ์ฒด์ ์ผ์์ ํฌ์ฆ(x, y, z, \text{roll}, \text{pitch}, \text{yaw} ๋๋ ์ฌ์์ x, y, z, q_x, q_y, q_z, q_w)๋ฅผ ๊ฐ์ ธ์ ๋ ๋๋ง ์์ง์์ ํด๋น ํฌ์ฆ๋ฅผ ๋๊ธฐํํ๊ณ , ์ฌ๋ ๋๋งํฉ๋๋ค. ๋ฉ์๋ฅผ ๋ก๋ํ๋ ๊ฒ์ ๋๋ฆฌ์ง๋ง, ํฌ์ฆ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋งค์ฐ ๋น ๋ฅด๋ฏ๋ก, ์ด ๋ฐฉ์์ ํตํด ์ด๋น ์ต๋ 200ํ๋ ์์ ๋์ ์๋๋ฅผ ๋ฌ์ฑํฉ๋๋ค.
- ์ด๊ธฐํ (Initialize): TACTO๋ ์ผ์ ๊ตฌ์ฑ(์นด๋ฉ๋ผ, ์กฐ๋ช , ์ ค ๋ฉ์)์ ๋ก๋ํ๊ณ ๋ ๋๋ง ์์ง์ ์ค์ ํฉ๋๋ค.
- ์ฅ๋ฉด ์์ฑ (Create Scene): PyBullet์ด ๊ฐ์ฒด URDF๋ฅผ ์ฅ๋ฉด์ ๋ก๋ํ๋ฉด, TACTO๋ URDF๋ฅผ ํ์ฑํ์ฌ ๋ถ์๋ ๋ฉ์๋ฅผ ๋ ๋๋ง ์์ง์ ์ถ๊ฐํฉ๋๋ค.
- ์๋ฎฌ๋ ์ด์ ์คํ (Step Simulation): PyBullet์ด ๋ฌผ๋ฆฌ ์๋ฎฌ๋ ์ด์ (์ ์ด ํ, ๊ฐ์ฒด ํฌ์ฆ ๋ฑ)์ ๊ณ์ฐํ ํ, TACTO๋ PyBullet์์ ๊ฐ ๋งํฌ์ ํฌ์ฆ๋ฅผ ๊ฐ์ ธ์ ๋ ๋๋ง ์์ง์ ๊ฐ์ฒด ๋ฐ ์ผ์ ํฌ์ฆ๋ฅผ ๋๊ธฐํํ๊ณ , ๋ ๋๋ง๋ ์ด๊ฐ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
์ฃผ์ ํน์ง:
- ๋น ๋ฅธ ์๋: 12K ๋ฉด์ ๊ฐ์ง ๊ฐ์ฒด ๋ฉ์์ ์ํธ์์ฉ ์, 160x120 ํด์๋์์ GPU๋ก ๋จ์ผ DIGIT ์ผ์๋ฅผ ์ด๋น 200ํ๋ ์์ผ๋ก ๋ ๋๋ง ๊ฐ๋ฅํฉ๋๋ค. ์ ์ดํ๋ ๊ฐ์ฒด์ ์์ ๋ฐ๋ผ ๋ ๋๋ง ์๋๊ฐ ์ํฅ์ ๋ฐ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค.
- ์ ์ฐ์ฑ: ๊ตฌ์ฑ ํ์ผ ๋ณ๊ฒฝ๋ง์ผ๋ก DIGIT ๋ฐ OmniTact์ ๊ฐ์ ๋ค์ํ ์ผ์ ๋์์ธ์ ์ง์ํฉ๋๋ค.
- ํ ์์กด์ ๋ณํ: ๋ฌผ๋ฆฌ ์์ง์์ ์ธก์ ๋ ์ ์ด ํ์ ์ ค ๋ฉ์์ ๋ณํ ๊น์ด์ ๋งคํํ๋ ํจ์๋ฅผ ์ ์ฉํ์ฌ ์ ค์ ๋์ ๋ฒ์ ๋ณํ์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค. ํ์ฌ๋ ์ ํ ํ์ฑ์ ๊ทผ์ฌํ๋ ์กฐ๊ฐ๋ณ ์ ํ ๋งคํ์ ์ฌ์ฉํฉ๋๋ค.
- ๊น์ด๋ก๋ถํฐ ๋ ๋๋ง: ๊น์ด ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ฐ ์ด๋ฏธ์ง๋ฅผ ๋ ๋๋งํ๋ ์ต์ ๋ ์ ๊ณตํ์ฌ, ๋ ํ์ค์ ์ธ ์ด๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ํด ๊น์ด ์ด๋ฏธ์ง๋ฅผ ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
- ์ค์ ์ผ์๋ก๋ถํฐ์ ๋ณด์ : ์ค์ ์ผ์์์ ์์ง๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฎฌ๋ ์ดํฐ ๋ ๋๋ง์ ๋ฏธ์ธ ์กฐ์ ํ ์ ์๋ ์ ์ฐจ๋ฅผ ์ง์ํ์ฌ, ์ค์ ์ธก์ ๊ณผ ์ ์ฌํ ์กฐ๋ช ๋ถํฌ ๋ฐ ๊ทธ๋ฆผ์๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
- ๋ค์ํ ๋ฌผ๋ฆฌ ์์ง๊ณผ์ ํธํ์ฑ: PyBullet์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ์ง๋ง, ๊ฐ์ฒด/๋งํฌ ํฌ์ฆ ๋ฐ ์ ์ด ํ์ ๋๊ธฐํํ๊ฑฐ๋ ๊น์ด ์ ๋ณด๋ง์ผ๋ก ๋ ๋๋งํ๋ ๋ฐฉ์์ ํตํด ๋ค๋ฅธ ๋ฌผ๋ฆฌ ์์ง๊ณผ๋ ์ฐ๋ ๊ฐ๋ฅํฉ๋๋ค.
์๋ฎฌ๋ ์ด์ ์คํ:
- ํ์ ์์ ์ฑ ํ์ต: TACTO๋ฅผ ์ฌ์ฉํ์ฌ 100๋ง ๊ฐ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ , ์๊ฐ ๋ฐ ์ด๊ฐ ์ ํธ๋ก๋ถํฐ ํ์ ์์ ์ฑ์ ์์ธกํ๋ ๋ถ๋ฅ๊ธฐ๋ฅผ ํ์ตํ์ต๋๋ค. ๊ฒฐ๊ณผ๋ ์ด๊ฐ์ด ์๊ฐ๋ณด๋ค ์ ์ ๋ฐ์ดํฐ๋ก๋ ๋น ๋ฅด๊ฒ ํ์ต๋๋ฉฐ, ๋ ๊ฐ์ ์ด๊ฐ ์ผ์๊ฐ ๋จ์ผ ์ผ์๋ณด๋ค ์ฐ์ํจ์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ์๋ฎฌ๋ ์ด์ ๋๋ถ์ ์ค์ ํ๊ฒฝ์์๋ ๋ถ๊ฐ๋ฅํ๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ (์ด์ ์ต๋ ๋ฐ์ดํฐ์ ๋ณด๋ค ๋ ์๋ฆฟ์ ์ด์ ๋ง์)์ผ๋ก ์คํ์ด ๊ฐ๋ฅํ์ต๋๋ค.
- ์ธํธ๋ ๊ตฌ์ฌ ์กฐ์ ํ์ต: TACTO์ PyBullet์ ์์ ์ฑ์ ๊ฒ์ฆํ๊ธฐ ์ํด ์ด๊ฐ ์ผ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฌ์ ์ ์์์ ์กฐ์ํ๋ ์์ ์ ์๋ฎฌ๋ ์ด์ ํ์ต๋๋ค. ๋ฒ ์ด์์ ์ต์ ํ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฌ์ ์ํ๋ ์์น๋ก ๊ตด๋ฆฌ๋ ์ปจํธ๋กค๋ฌ์ ํ๋ผ๋ฏธํฐ K๋ฅผ ํ์ตํ์ต๋๋ค. ์ด ์คํ์ ์๋ฎฌ๋ ์ด์ ์ด ๋น ๋ฅด๊ณ ์์ ์ ์ผ๋ก ์๋ํ๋ฉฐ, ์ค์ ๋ก๋ด์์ ์ป์ ๊ฒฐ๊ณผ์ ์ ์ฌํ ์ฑ๋ฅ์ ๋ฌ์ฑํ ์ ์์์ ์ ์ฆํ์ต๋๋ค.
Sim2Real ์คํ:
- ์ํต์ ํฌ์ฆ ์ถ์ (์ ์ด ์ค์ฌ ๋ฐ ๊ฐ๋) ์์ ์ ๋ํ Sim2Real ๊ฐ๋ฅ์ฑ์ ์ ์ฆํ์ต๋๋ค. ์๋ฎฌ๋ ์ด์ ๋ฐ์ดํฐ์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์กฐํฉํ์ฌ ๋ชจ๋ธ์ ํ๋ จํ๊ณ ํ๊ฐํ์ต๋๋ค.
- ๊ฒฐ๊ณผ: Sim2Real ๊ฐ๊ทน์ด ์กด์ฌํ๋ฉฐ, ์ปฌ๋ฌ ์งํฐ๋ง๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ์ฆ๊ฐ(data augmentation)์ด ์ด ๊ฐ๊ทน์ ์ค์ด๋ ๋ฐ ๋งค์ฐ ํจ๊ณผ์ ์์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ๋ํ, ์๋ฎฌ๋ ์ด์ ๋ฐ์ดํฐ์ ์๋์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ํผํฉํ์ฌ ํ์ตํ ๋, ๋์ผํ ์์ ์ค์ ๋ฐ์ดํฐ๋ง์ผ๋ก ํ์ตํ ๊ฒฝ์ฐ๋ณด๋ค ๋์ ์ฑ๋ฅ์ ๋ฌ์ฑํ์ฌ ๋ฐ์ดํฐ ํจ์จ์ฑ ์ฆ๊ฐ์ ์ ์ฌ๋ ฅ์ ์์ฌํ์ต๋๋ค.
๊ฒฐ๋ก :
TACTO๋ ์๊ฐ ๊ธฐ๋ฐ ์ด๊ฐ ์ผ์๋ฅผ ์ํ ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ ๋น ๋ฅด๋ฉฐ ์ ์ฐํ ์๋ฎฌ๋ ์ดํฐ์ ๋๋ค. ์ด ์๋ฎฌ๋ ์ดํฐ๋ ์ง๊ฐ, ์ ์ด ๋ฐ Sim2Real ์์ฉ ๋ถ์ผ์์ ๊ทธ ์ ์ฉ์ฑ์ด ์ ์ฆ๋์์ต๋๋ค. TACTO๋ ์ด๊ฐ ์ผ์ฑ ์ปค๋ฎค๋ํฐ๋ฅผ ์ก์ฑํ๊ณ ๋ก๋ด ๊ณตํ ๋ฐ ๊ธฐ๊ณ ํ์ต ์ฐ๊ตฌ์๋ค์ด ์๋ฎฌ๋ ์ด์ ์์ ํฐ์น๋ฅผ ํ์ฉํ ์ ์๋๋ก ์คํ ์์ค๋ก ์ ๊ณต๋ฉ๋๋ค. ํฅํ ์์ ์๋ ์๋ผ์คํ ๋จธ์ ๋ณํ์ ํตํ ํ์ ํจ๊ณผ ๋ชจ๋ธ๋ง ๊ฐ์ ๊ณผ ๋์ฑ ํ์ค์ ์ธ ๋ฐ์ดํฐ ์์ฑ์ด ํฌํจ๋ ๊ฒ์ ๋๋ค.
๐ Ring Review
๐ Ring โ An idea that echoes. Grasp the core and its value.
ํ ์ค๋ก ์์ํ๋ฉด
์ด๊ฐ ์ผ์๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๋ ๋ฐ์์ ๊ฐ์ฅ ์ด๋ ค์ด ๋ถ๋ถ์ ๋ฌผ๋ฆฌ๊ฐ ์๋๋ผ ๊ดํ์ด๋ค. TACTO๋ ์ด ๊ด์ฐฐ์ ์ ํํ ์ง๊ณ , ๋ฌผ๋ฆฌ ์์ง์ PyBullet์ ๋งก๊ธฐ๊ณ ์์ ์ โ์ ๋๊ธฐํ๋ ์ฅ๋ฉด์ OpenGL๋ก ๋น ๋ฅด๊ฒ ๋ ๋๋งํ๋ ์ผโ์ ์ง์คํ๋ค. ๊ทธ ๊ฒฐ๊ณผ GPU์์ ์ด๋น ์๋ฐฑ ํ๋ ์์ผ๋ก DIGIT, OmniTact ๊ฐ์ vision-based tactile sensor์ ์ถ๋ ฅ์ ๋ง๋ค์ด๋ด๋, ๋จ์ํ์ง๋ง ์๋ฆฌํ ๋๊ตฌ๊ฐ ๋์๋ค.
์ด ๊ธ์์๋ TACTO๊ฐ ์ ์ด๋ฐ ์ค๊ณ๋ฅผ ํํ๋์ง, ์ด๋ค ํธ๋ ์ด๋์คํ๋ฅผ ๋ฐ์๋ค์๋์ง, ๊ทธ๋ฆฌ๊ณ Allegro Hand ๊ฐ์ ๋ค์๊ฐ๋ฝ ํ๋ซํผ์ด๋ sim-to-real ์ฐ๊ตฌ์์๊ฒ ์ค์ ๋ก ์ด๋ค ์๋ฏธ๊ฐ ์๋์ง๋ฅผ ํ ํธํก์ผ๋ก ์ ๋ฆฌํ๋ค.
์ ์ด๊ฐ ์๋ฎฌ๋ ์ด์ ์ด ๊ทธ๋ ๊ฒ ์ด๋ ค์ด๊ฐ
๋จผ์ vision-based tactile sensor๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ๋ ์ฌ๋ ค๋ณด์. DIGIT๋ GelSight ๊ณ์ด ์ผ์๋ ์์ ์นด๋ฉ๋ผ๊ฐ ๋ถ๋๋ฌ์ด ์ค๋ฆฌ์ฝ ์ ค์ ์๋์ชฝ์ ๋ค์ฌ๋ค๋ณด๋ ๊ตฌ์กฐ๋ค. ์ ค ์๋ฉด์๋ ์์ LED ๋ช ๊ฐ๊ฐ ๋ฐํ ์๊ณ , ๋น์ ์ ค ์์์ ๊ตด์ ยท๋ฐ์ฌ๋๋ค. ์ด๋ค ๋ฌผ์ฒด๊ฐ ์ ค์ ๋๋ฅด๋ฉด ์ ค ํ๋ฉด์ด ๋ณํ๋๊ณ , ๊ทธ ๋ณํ์ด ์นด๋ฉ๋ผ์ ์ผ์ข ์ โ์ง๋ฌธ ์ด๋ฏธ์งโ๋ก ์ฐํ๋ค.
์ด๊ฑธ ์๋ฎฌ๋ ์ด์ ํ๋ ค๋ฉด ์ธ ๊ฐ์ง๋ฅผ ๋์์ ํด์ผ ํ๋ค.
- ์ ์ด ๋์ญํ (์ผ๋ง๋ ๊น์ด ๋๋ฆฌ๊ณ , ์ผ๋ง๋ ๋ฏธ๋๋ฌ์ง๋์ง (๋ง์ฐฐ))
- ์ ค์ ๋ณํ (ํ์ฑ ์ฌ๋ฃ๊ฐ ๋ฌผ์ฒด ํ์์ ๋ง์ถฐ ์ด๋ป๊ฒ ๋ณํ๋๋์ง)
- ๊ดํ (LED ๋น์ด ์ ค ๋ด๋ถ๋ฅผ ํต๊ณผํด์ ์ด๋ค ์ยท๋ฐ๊ธฐยท๊ทธ๋ฆผ์ ํจํด์ ๋ง๋๋์ง)
๊ธฐ์กด ์ด๊ฐ ์๋ฎฌ๋ ์ดํฐ๋ค์ด ์ ์ ํ๋ฆฐ ์ด์ ๋ ์ด ์ ์ ํ๊บผ๋ฒ์ ์ ํํ ํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์ ์๊ฐํด๋ณด๋ฉด, ๋จธ์ ๋ฌ๋ ์ ์ฑ ํ์ต ์ ์ฅ์์๋ ๊ดํ์ ์ถ๋ ฅ (RGB ์ด๋ฏธ์ง)์ด ๊ฐ์ฅ ์ค์ํ๋ค. ์ ์ฑ ์ ๊ฒฐ๊ตญ ์ด๋ฏธ์ง๋ฅผ ๋ณด๊ณ ํ๋์ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ ์ด ๋์ญํ์ ๋ฌผ๋ฆฌ ์์ง์ด ์ ๋นํ ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋๊ณ , ์ ค ๋ณํ์ โ์ผ์๊ฐ ๋ณธ ๊น์ด ๋งตโ์ผ๋ก ํ์ํ ์ ์๋ค.
TACTO๋ ์ด ํธ๋ ์ด๋์คํ๋ฅผ ์ ์งํ๊ฒ ๋ฐ์๋ค์ด๋ ๋ฐ์์ ์ถ๋ฐํ๋ค. ์ ์ด ๋์ญํ์ ์ ํ๋๋ PyBullet์ ๊ฐ์ฒด ๋ชจ๋ธ์ ์์ํ๊ณ , ์์ ์ โ๊ทธ๋ด๋ฏํ ์ด๋ฏธ์ง๋ฅผ ๋น ๋ฅด๊ฒ ๋ง๋๋โ ๋ฐ ๋ชจ๋ ์์์ ์๋๋ค.
์ค๊ณ ์ฒ ํ: ๋น ๋ฅด๊ณ , ์ ์ฐํ๊ณ , ํ์ค์ ์ด๊ณ , ๋ค๋ฃจ๊ธฐ ์ฝ๊ฒ
๋ ผ๋ฌธ์ด ์ง์ ๋ช ์ํ ๋ค ๊ฐ์ง desiderata๋ ๊ทธ๋๋ก ๊ฐ์ ธ๊ฐ ๊ฐ์น๊ฐ ์๋ค.
- High-throughput (์๋): ๊ฐํํ์ต์ด๋ ๋ฒ ์ด์ง์ ์ต์ ํ์ฒ๋ผ ์์ญ๋ง~์๋ฐฑ๋ง ์คํ ์ด ํ์ํ ํ์ต์ ์ฐ๋ ค๋ฉด ์๋ฐฑ Hz๋ ๋์์ผ ํ๋ค.
- Flexible (์ ์ฐ์ฑ): DIGIT์ ํํํ ์ ค ํ๋์ ์นด๋ฉ๋ผ ํ๋์ง๋ง, OmniTact๋ ๋ฅ๊ทผ ํ๋ฉด์ ์นด๋ฉ๋ผ 5๊ฐ์ ๊ด์ 11๊ฐ๊ฐ ๋ฐํ ์๋ค. ๋ฏธ๋์ ๋์ฌ ๊ฑฐ์ธ/ํฌ๋ช ์ผ์ด์ค/light-piping ์ค๊ณ๋ ๋ฐ์๋ผ ์ ์์ด์ผ ํ๋ค.
- Realistic (ํ์ค์ฑ): ๋จ์ํ ๊น์ด ๋งต ๋น์ทํ ๊ฒ ์๋๋ผ, ๋น๊ท ์ผ ์กฐ๋ช , ๊ทธ๋ฆผ์, ์ ์ด ๊ฒฝ๊ณ์ ๋ํ ์ผ๊น์ง ์ด์์ผ ํ๋ค.
- Easy to Use (์ฌ์ฉ์ฑ): ์ค์นํ๊ณ ๋์ฐ๋ ๋ฐ ๋ฉฐ์น ์ฉ ๊ฑธ๋ฆฌ๋ฉด ์๋ฌด๋ ์ ์ด๋ค.
์ด ๋ค ๊ฐ์ง๋ฅผ ๋์์ ๋ง์กฑ์ํค๋ ๋ฐฉ๋ฒ์ ํ ์ค๋ก ์์ฝํ๋ฉด โ์ด๋ฏธ ์ ๋ง๋ค์ด์ง ์ปดํจํฐ ๊ทธ๋ํฝ์ค ๋๊ตฌ๋ฅผ ์ต๋ํ ๋น๋ ค ์ฐ์โ๋ค. Phong ๋ชจ๋ธ์ ์ง์ ์ฝ๋ฉํ๋ ๋์ , OpenGL๊ณผ Pyrender๊ฐ ์ด๋ฏธ GPU์์ ์ต์ ํํด๋์ ray-tracing ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ํ์ฉํ๋ค.
์ธ ๊ฐ๋ ๊ธธ์์ ์ด๋ป๊ฒ ์ ํํ๋
์ด ๋ถ๋ถ์ด TACTO ๋ ผ๋ฌธ์์ ๊ฐ์ฅ ์์คํ ์ค๊ณ์๋ค์ด ๋๋ชฉ์ด๋ค. ์ ์๋ค์ ํ๋ณด ์ํคํ ์ฒ ์ธ ๊ฐ์ง๋ฅผ ๋ช ์์ ์ผ๋ก ๋น๊ตํ๋ค.
์ ํ์ง A: Phong ๋ชจ๋ธ๋ก ๊น์ดโRGB ๋ ๋๋ง
PyBullet์ ๋ด์ฅ ์นด๋ฉ๋ผ๋ก ๊น์ด ๋งต์ ์ป๊ณ , ๊ทธ ์์ Phong ๋ฐ์ฌ ๋ชจ๋ธ์ ์ง์ ์ ์ฉํด RGB๋ฅผ ์น ํ๋ ๋ฐฉ์์ด๋ค. ๊ตฌํ์ด ๊ฐ๋จํ๊ณ ๊ฒฐ๊ณผ๋ ๊ทธ๋ด๋ฏํ์ง๋ง, ๋น์ด ํ ๋ฒ๋ง ํ๊ธด๋ค๋ ๊ฐ์ ์ด๋ผ ๊ฑฐ์ธยทํฌ๋ช ์ฌ์งยท๊ทธ๋ฆผ์ ๊ฐ์ ๊ณ ๊ธ ํจ๊ณผ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ด๋ ต๋ค. GPU ๊ฐ์๊น์ง ์ง์ ๋ง๋ค๋ ค๋ฉด ์์ง๋์ด๋ง ๋น์ฉ์ด ๋น ๋ฅด๊ฒ ๋ถ์ด๋๋ค.
์ ํ์ง B: OpenGL๋ก ๊น์ดโRGB ๋ ๋๋ง
๊น์ด ๋งต์์ ๋ฉ์ฌ๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ๋ฉ์ฌ๋ฅผ OpenGL์ ๋๊ฒจ์ ํ๋ถํ ๊ดํ ํจ๊ณผ๊น์ง ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค. ๋ ๋๋ง ์์ฒด๋ ๋น ๋ฅด์ง๋ง, ๋งค ์คํ ๋ง๋ค ์ ๋ฉ์ฌ๋ฅผ OpenGL์ ๋ก๋ํ๋ I/O๊ฐ ๋ณ๋ชฉ์ด ๋๋ค. ๋ ผ๋ฌธ์ ์ฌ์ ์คํ์์ GPU๋ฅผ ์จ๋ 20 FPS์ ๋ฌถ์๋ค๊ณ ๋์จ๋ค.
์ ํ์ง C: ๋๊ธฐํ๋ ์ฅ๋ฉด์ OpenGL๋ก ๋ ๋๋ง (์ฑํ)
์ฌ๊ธฐ์ ์๋ฆฌํ ๋ฐ์์ด ๋์จ๋ค. ๋ฉ์ฌ๋ฅผ ๋งค๋ฒ ์๋ก ๋ง๋ค๊ณ ๋ก๋ํ์ง ๋ง๊ณ , ์ฒ์์ ํ ๋ฒ๋ง ๋ก๋ํ๊ณ ๊ทธ ๋ค์๋ถํฐ๋ ์์ธ๋ง ๊ฐฑ์ ํ์. ์ ค ํ๋ฉด ๋ฉ์ฌ์ ๋ฌผ์ฒด ๋ฉ์ฌ๋ OpenGL ์ฅ๋ฉด์ ๋ฏธ๋ฆฌ ์ฌ๋ ค๋๊ณ , ๋งค ์คํ PyBullet์์ ์์ธ (pose)๋ง ๋ฐ์์์ ์ ๋ฐ์ดํธํ๋ค.
์ ์ด์ด ์ผ์ด๋๋ ์๊ฐ์๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊น? ๊ทธ๋ฅ ๋ ๋ฉ์ฌ๊ฐ ์๋ก ํ๊ณ ๋ค๋๋ก ๋๋ค. OpenGL์ depth buffer๋ก ๊ฐ๊น์ด ํ๋ฉด์ ์๋์ผ๋ก ๊ณจ๋ผ๋ด๊ธฐ ๋๋ฌธ์, ์นด๋ฉ๋ผ ์์ ์์ ๋ณด๋ฉด ๋ฌผ์ฒด๊ฐ ์ ค์ ๋๋ฅธ ๊ฒ์ฒ๋ผ ๊น์ด๊ฐ ๋ง๋ค์ด์ง๊ณ , ๊ทธ ์์ ๋นยท์ฌ์งยท๊ทธ๋ฆผ์๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์นํ๋ค.
์ด ํธ๋ฆญ์ ๋ณธ์ง์ โ์ด๋ฏธ GPU๊ฐ ์ํ๋ ์ผ์ GPU์๊ฒ ๋งก๊ธฐ๊ณ , ์ฐ๋ฆฌ๋ ์์ธ ๋๊ธฐํ๋ง ํ๋คโ๋ ๊ฒ์ด๋ค. ๋น์ ํ์๋ฉด ์ธํ๊ทน์์ ์ธํ์ ์์น๋ ๋ฌด๋ ๋ค์์ ์ค๋ก ๋น๊ฒจ ์ฎ๊ธฐ๊ณ , ์กฐ๋ช ๊ณผ ๋ฌด๋ ํ๊ฒฝ์ ๋ฏธ๋ฆฌ ์ธํ ํด๋ ๊ทธ๋๋ก ๋๋ ๊ฒ๊ณผ ๊ฐ๋ค.
๋๊ฐ๋ ๋ฌด์์ธ๊ฐ. ๋ ๋ฉ์ฌ๊ฐ ๊ทธ๋ฅ ๊ฒน์น๋ฏ๋ก ์ ์ด ๊ฒฝ๊ณ์์ ์ ค์ด ๋ถ๋๋ฝ๊ฒ ํ๋ ์์ฐ์ค๋ฌ์ด ๋ณํ์ ์ ์กํ๋ค. ๋ ์นด๋ก์ด ๋ชจ์๋ฆฌ์์ ์ด๊ฒ ๋๋๋ฌ์ง๋ค. ๋ ผ๋ฌธ์ ์ด ํ๊ณ๋ฅผ ์ ์งํ๊ฒ ์ธ์ ํ๋ฉด์, ๋ฌผ์ฒด ๋ฉ์ฌ๋ฅผ ์ฌ์ ์ ์ด์ง ์ค๋ฌด๋ฉํ๊ฑฐ๋ ํ์ต ํ์ generative model๋ก ๋ณด์ ํ๋ฉด ๋๋ค๊ณ ์ ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๊ฐ์ง ๋, โ์ ์ด ๊ฒฝ๊ณ์ ๋ฏธ์ธ ๋ํ ์ผ๋ณด๋ค ์ ์ด ์์นยท๋ง์คํฌยท์์ธยท๋ฒ์ ๋ ฅ ๊ฐ์ ์ ๋ณด๊ฐ ํ์ต์ ๋ ์ค์ํ๋ ์ด ์ ๋ ์ ์ถฉ์ ๋ฐ์๋ค์ผ ๋งํ๋คโ๊ณ ๋งํ๋ค. ์ด๊ฑด ๊ฒฝํ์ ์ผ๋ก ๋ณด๋ฉด ํฉ๋นํ ํ๋จ์ด๋ค.
์ํคํ ์ฒ ์ ์ฒด ๊ทธ๋ฆผ
TACTO๋ ๋ณธ์ง์ ์ผ๋ก ๋ฌผ๋ฆฌ ์์ง๊ณผ ๋ ๋๋ง ์์ง ์ฌ์ด์ ๋ค๋ฆฌ ์ญํ ์ด๋ค. ์ค์ ํ์ผ ํ๋๋ง ๋ฐ๊พธ๋ฉด DIGIT์์ OmniTact๋ก, ๋๋ ์๋ก ์ค๊ณํ ์ผ์๋ก ๊ฐ์๋ผ์ธ ์ ์๋ค.
๋ฐํ์์ 3๋จ๊ณ๋ก ํ๋ฌ๊ฐ๋ค.
sequenceDiagram
participant U as User
participant T as TACTO
participant P as PyBullet
participant R as Pyrender
Note over T,R: Phase 1 - Initialize
U->>T: load sensor config
T->>R: setup camera, lights, gel mesh
Note over T,R: Phase 2 - Create scene
U->>P: load object URDF
T->>P: parse URDF (urdfpy)
T->>R: add object meshes
Note over T,R: Phase 3 - Step simulation (loop)
P->>P: physics step
T->>P: get link poses, contact forces
T->>R: sync poses, apply gel deformation
R->>T: rendered RGB + Depth
T->>U: tactile imprint
์ด ๋จ์ํ ์ํฌํ๋ก์ ์ฅ์ ์ ์ด๋ค ๋ฌผ๋ฆฌ ์์ง๊ณผ๋ ๊ฒฐํฉํ ์ ์๋ค๋ ์ ์ด๋ค. ์์ธ๋ฅผ ์กฐํํ๊ณ ์ ์ด๋ ฅ์ ๊ฐ์ ธ์ค๋ ํจ์๋ง ์์ผ๋ฉด Isaac Lab, MuJoCo, ์ด๋๋ ๋ถ์ผ ์ ์๋ค. ์์ธ ๋๊ธฐํ๊ฐ ๊น๋ค๋ก์ด ๊ฒฝ์ฐ์๋ ๊น์ด ์ด๋ฏธ์ง๋ง ๋ฐ์์ ๋ฉ์ฌ๋ฅผ ๋ง๋๋ (์ ํ์ง B) ์ฐํ๋ก๋ ์ด๋ ค ์๋ค.
ํ์ ๋ฐ๋ฅธ ์ ค ๋ณํ: ๋จ์ํ์ง๋ง ์๋ํ๋ ๋ชจ๋ธ
TACTO๋ ์ ค์ ๋ณํ์ ์ ํ์์๋ฒ์ผ๋ก ํ์ง ์๋๋ค. ๋์ PyBullet์ด ์๋ ค์ฃผ๋ ๋ฒ์ ๋ ฅ F_n์ ๋ณํ ๊น์ด d์ ๋งคํํ๋ piece-wise linear ํจ์๋ฅผ ์ด๋ค. ์ง๊ด์ ์ผ๋ก ์ ์ผ๋ฉด ์ด๋ ๋ค.
d(F_n) = \begin{cases} 0, & F_n < F_{\text{low}} \\ k \cdot (F_n - F_{\text{low}}), & F_{\text{low}} \le F_n \le F_{\text{high}} \\ d_{\text{max}}, & F_n > F_{\text{high}} \end{cases}
- F_{\text{low}}: ์ด๋ณด๋ค ์์ ํ์ ์ผ์๊ฐ ๋ชป ๋๋๋ค (์ค์ ์ผ์์ ๋ ธ์ด์ฆ ํ๋ก์ด)
- F_{\text{high}}: ์ด๋ณด๋ค ํฐ ํ์ ์ ค์ด ํฌํ๋์ด ๋ ์ด์ ๊น์ด๊ฐ ๊น์ด์ง์ง ์๋๋ค
- ๊ทธ ์ฌ์ด๋ ์ ํ (์ค์ ์ค๋ฆฌ์ฝ์ ์ ํ ํ์ฑ ์์ญ ๊ทผ์ฌ)
์ ์ด๋ ๊ฒ ๋จ์ํ ๊น. ์ค์ DIGIT ์ ค์ ์ธก์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ฉด ์ ๋นํ ํ ๋ฒ์์์๋ ์ ํ์ฑ์ด ๊ฝค ์ ๋ง๊ณ , ์ ๋์ ํด๋ฆฌํํด์ฃผ๋ฉด ์ค์ ๋์ ๋ฒ์๋ฅผ ์ถฉ๋ถํ ํ๋ด ๋ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ฌ์ฉ์๊ฐ ๋น์ ํ ํจ์๋ฅผ ์ง์ ๋ผ์ ๋ฃ์ ์ ์๋๋ก ์ค๊ณ๋์ด ์๋ค๋ ์ ๋ ์ค์ํ๋ค. ๋ ์ ๊ตํ hyperelastic ๋ชจ๋ธ์ ์ฐ๊ณ ์ถ๋ค๋ฉด ๊ทธ ์๋ฆฌ์ ํจ์๋ฅผ ๊ฐ์๋ผ์ฐ๋ฉด ๋๋ค.
์ด ๋จ์ํ๋ ๊ฐ์ฒด ๊ฐ์ ์์ ์นํ ์๋ค. ์ฆ, โ๋ฌผ์ฒด๋ ๋จ๋จํ๊ณ , ์ ค๋ง ๋ถ๋๋ฝ๋คโ๋ ๊ฐ์ ์ด๋ค. ์ผ์ ์ฌ๋ฌผ (๋ณ๋๊ป, ํ๋ธ, ๊ณต๊ตฌ) ๋๋ถ๋ถ์ ๋ํด์๋ ํฉ๋นํ๋ค. ๋งค์ฐ ๋ณํ ๊ฐ๋ฅํ ๋ฌผ์ฒด (์ฒ, ๋๋ถ, ๋นต)์๋ ์ ํฉํ์ง ์๋ค.
์กฐ๋ช , ๊ทธ๋ฆผ์, ๊ทธ๋ฆฌ๊ณ ์บ๋ฆฌ๋ธ๋ ์ด์
์ฌ๊ธฐ์๋ถํฐ๊ฐ TACTO๊ฐ ๋จ์ํ toy ์๋ฎฌ๋ ์ดํฐ๋ฅผ ๋๋ ๋ถ๋ถ์ด๋ค.
๋น๊ท ์ผ ์กฐ๋ช . ์ค์ DIGIT ์ผ์๋ฅผ ์์ ๋ค๊ณ ๋ณด๋ฉด ํ์ชฝ ๋ชจ์๋ฆฌ๋ ๋ฐ๊ณ ๋ฐ๋ํธ์ ์ด๋์ด, ๋ฌํ๊ฒ ํํฌ๋น์ด ๋๋ ์๊ฐ์ด ๋์จ๋ค. LED์์ ๋ฉ์ด์ง์๋ก ๋น์ด ์ฝํด์ง๊ธฐ ๋๋ฌธ์ด๋ค. TACTO๋ OpenGL์ ๊ด์ ๋ชจ๋ธ์ ๊ทธ๋๋ก ์จ์ ์ด๊ฑธ ์์ฐ์ค๋ฝ๊ฒ ์ฌํํ๋ค (๋ ผ๋ฌธ Fig. 7). ๋ณ๋๋ก ์ฝ๋ฉํ ๊ฒ์ด ์๋๋ผ, ๊ด์์ ์์นยท๊ฐ๋ยท์์ ์ค์ ํ์ผ์ ์ ํํ ์ ์ด์ฃผ๊ธฐ๋ง ํ๋ฉด OpenGL์ด ์์์ ๋ ๋๋งํ๋ค.
๊ทธ๋ฆผ์. ์์ ๊ตฌ์ฌ ๊ฐ์ ๋ฌผ์ฒด๊ฐ ์ ค์ ์ด์ง ๋ฟ์ ๋, ์ค์ ์ผ์๋ ์ ์ด์ ์ฃผ๋ณ์ ๋ถ๋๋ฌ์ด ๊ทธ๋ฆผ์๊ฐ ๋จ์ด์ง๋ค. TACTO์์ ๊ทธ๋ฆผ์๋ฅผ ์ผ๋ ๊ฒ์ ์ค์ ํ ๊ธ ํ๋๋ก ๋๋๋ค. GPU์์ ์ฝ 2 ms๊ฐ ์ถ๊ฐ๋ ๋ฟ์ด๋ค (๋ ผ๋ฌธ Fig. 8). Phong ๋ชจ๋ธ๋ก ์ด๊ฑธ ์ง์ ๊ตฌํํ๋ ค๋ฉด ์์ ๋์ด ์์ฒญ๋๋ค๋ ์ ์ ์๊ฐํ๋ฉด, OpenGL์ ๋น๋ ค ์ด ๊ฒ ํฐ ์ด๋์ด๋ค.
์ค์ ์ผ์๋ก๋ถํฐ์ ์บ๋ฆฌ๋ธ๋ ์ด์ . ์๋ฎฌ๋ ์ด์ ์ด ์๋ฌด๋ฆฌ ์ ๊ตํด๋ ์ค์ ์ผ์์ ๋ฏธ์ธํ ํ ์ง, ์นด๋ฉ๋ผ ๋ ธ์ด์ฆ, ๊ด์ ๋ถ๊ท ์ผ๊น์ง ๋ค ์ก์ ์๋ ์๋ค. TACTO๋ ์๋ฆฌํ๊ฒ ์ฐํํ๋ค (๋ ผ๋ฌธ Fig. 6).
- ์๋ฎฌ๋ ์ด์ ์์ โ์ ์ด ์์โ ์ด๋ฏธ์ง I_{\text{sim}}^{\text{empty}}๋ฅผ ๋ง๋ ๋ค.
- ์๋ฎฌ๋ ์ด์ ์์ โ์ ์ด ์์โ ์ด๋ฏธ์ง I_{\text{sim}}^{\text{contact}}๋ฅผ ๋ง๋ ๋ค.
- ํฝ์ ๋ณ ์ฐจ๋ถ \Delta I = I_{\text{sim}}^{\text{contact}} - I_{\text{sim}}^{\text{empty}}๋ฅผ ๊ณ์ฐํ๋ค.
- ์ค์ ์ผ์์์ ๋ฏธ๋ฆฌ ์ฐ์ด๋ ๋น ์ด๋ฏธ์ง I_{\text{real}}^{\text{empty}} ์์ \Delta I๋ฅผ ๋ํ๋ค.
I_{\text{final}} = I_{\text{real}}^{\text{empty}} + \left( I_{\text{sim}}^{\text{contact}} - I_{\text{sim}}^{\text{empty}} \right)
์ด๋ ๊ฒ ํ๋ฉด ๋ณํ ์ ํธ๋ ์๋ฎฌ๋ ์ด์ ์์, ๋ฐฐ๊ฒฝ ํ ์ค์ฒ๋ ์ค์ ์ผ์์์ ๊ฐ์ ธ์ค๋ ํฉ์ฑ ์ด๋ฏธ์ง๊ฐ ๋ง๋ค์ด์ง๋ค. ๊ฐ ๊ฐ๋ณ ์ผ์๋ง๋ค ๋น ์ด๋ฏธ์ง ํ ์ฅ๋ง ์ฐ์ด๋๋ฉด ์ ์ฉ ๊ฐ๋ฅํ๋ค๋ ์ ์ด ํฐ ์ฅ์ ์ด๋ค. ์ถ๊ฐ๋ก ์์ ๊ฐ์ฐ์์ ํํฐ (15ร15 ์ ๋)๋ฅผ RGB์ ์์ฐ๋ฉด ์นด๋ฉ๋ผ ๋ ์ฆยท๊ด์ ๊ฒฐํจ๊น์ง ์์ฐ์ค๋ฝ๊ฒ ํ๋ด๋ธ๋ค (๋ ผ๋ฌธ Fig. 9).
์๋: ํ ํ ์ฅ์ผ๋ก ๋ณด๋ ์ค์ธก์น
TACTO์ ๊ฐ์ฅ ์ธ์์ ์ธ ๋ถ๋ถ์ ์๋๋ค. ๋ ผ๋ฌธ Table I์ ์ธก์ ์น๋ฅผ ํ์ด์ ์ ์ผ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค (GPU: RTX 2080 Super ๊ธฐ์ค, 12K faces ๋ฉ์ฌ).
| ํด์๋ | 1 object (์ ์ด 1๊ฐ) | 100 objects (์ ์ด 1๊ฐ) | 100 objects (์ ์ด 10๊ฐ) |
|---|---|---|---|
| 160ร120 | 220 FPS | 200 FPS | 80 FPS |
| 320ร240 | 140 FPS | 100 FPS | 60 FPS |
| 640ร480 | 90 FPS | 90 FPS | 50 FPS |
์ฌ๊ธฐ์ ๋ ๊ฐ์ง ๋ํ ์ผ์ด ์ค์ํ๋ค.
์ฒซ์งธ, ์ฅ๋ฉด์ ์๋ ๋ฌผ์ฒด ์๊ฐ 100๊ฐ๋ก ๋์ด๋ ์๋๊ฐ ๊ฑฐ์ ๊ทธ๋๋ก๋ค. ์ ์ด ์ค์ธ ๋ฌผ์ฒด ์๋ง ๋ ๋๋ง ์๊ฐ์ ์ํฅ์ ์ค๋ค. cluttered ํ๊ฒฝ (์ฐฝ๊ณ ๋ฐ์ค ๊ฐ์ ๊ณณ)์์๋ ๋ฌด๋ฆฌ ์์ด ์ธ ์ ์๋ค๋ ๋ป์ด๋ค.
๋์งธ, ๋ฉ์ฌ ๋ฉด ์๊ฐ 2K์์ 12K๋ก ๋์ด๋ GPU์์๋ ์๋ ๋ณํ๊ฐ ์๋ค. GPU ๋ณ๋ ฌํ๊ฐ ์ ๋จน๋๋ค๋ ์ ํธ๋ค.
CPU๋ง ์ฐ๋ฉด 40~60 FPS ์ ๋๋ก ๋จ์ด์ง์ง๋ง, ๊ทธ๋๋ ์ค์๊ฐ๋ณด๋ค๋ ๋น ๋ฅด๋ค. Allegro Hand์ DIGIT 4๊ฐ๋ฅผ ๋ฌ๋ฉด GPU์์ 50 FPS ์ ๋๊ฐ ๋์จ๋ค๊ณ ๋ช ์๋์ด ์๋ค (๋ ผ๋ฌธ Sec. III-D). 5์๊ฐ๋ฝ humanoid ์์ ์ผ์ 10~15๊ฐ๋ฅผ ๋ค๋ ์๋๋ฆฌ์ค๋ผ๋ฉด ํด์๋๋ฅผ ์กฐ๊ธ ๋ฎ์ถ๊ฑฐ๋ ๋ฉํฐ GPU๋ฅผ ๊ฒํ ํด์ผ ํ ์ ์๋ค.
์คํ 1: 100๋ง grasp์ผ๋ก ์ก๊ธฐ ์์ ์ฑ ๋ฐฐ์ฐ๊ธฐ
๋ ผ๋ฌธ์ ์ฒซ ์คํ์ vision-based tactile sensor ์๋ฎฌ๋ ์ด์ ์ด ์ ๊ฐ์น๊ฐ ์๋์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฐ์ฅ ์ข์ ์ฌ๋ก๋ค.
์ค์
WSG-50 ํํ ๊ทธ๋ฆฌํผ์ DIGIT ๋ ๊ฐ๋ฅผ ๋ฌ๊ณ , ์ธ๋ถ ์นด๋ฉ๋ผ ํ๋๋ฅผ ์ถ๊ฐํ๋ค. ๊ทธ๋ฆฌํผ์ ์์นยท์์ธยทํ์ ๋ฌด์์๋ก ๋ฐ๊ฟ๊ฐ๋ฉฐ ๋ฐ์ค๋ฅผ ์ก์ ๋ค์ด ์ฌ๋ฆฌ๊ณ , ๋ค์ด ์ฌ๋ฆฐ ๋ค์๋ ๋ฐ์ค๊ฐ ์๊ฐ๋ฝ ์ฌ์ด์ ๋จ์ ์๋์ง๋ก ๋ผ๋ฒจ์ ๋งค๊ธด๋ค (์ฑ๊ณต/์คํจ ์ด์ง ๋ถ๋ฅ).
์ด ๋ฐ์ดํฐ๋ฅผ ํ๋ฃจ ๋์ 5์ค๋ ๋๋ก 100๋ง ๊ฐ๋ฅผ ๋ชจ์๋ค. ์ค์ ๋ก๋ด์ผ๋ก ๊ฐ์ ์ผ์ ํ ์ ํ ์ฐ๊ตฌ์์ ๋ชจ์ ๋ฐ์ดํฐ์ ์ด ์ฝ 6,000 grasp ๊ท๋ชจ์๋ ๊ฒ์ ์๊ฐํ๋ฉด ๋ ์๋ฆฟ์ ๋ฐฐ ๋ ํฐ ๋ฐ์ดํฐ๋ค.
๋ชจ๋ธ
ResNet-18์ ImageNet ์ฌ์ ํ์ต ๊ฐ์ค์น๋ก ์ด๊ธฐํํด์, vision๊ณผ touch๋ฅผ ๊ฐ๊ฐ ๋ณ๋ ๋ฐฑ๋ณธ์ ํต๊ณผ์ํจ ๋ค feature ๋ฒกํฐ๋ฅผ concatํด์ ๋ ์ธต (512, 256 hidden units)์ FC์ ๋ฃ๋๋ค. ์ถ๋ ฅ์ grasp ์ฑ๊ณต ํ๋ฅ .
Input:
vision_img : 160x120 RGB
touch_left : 160x120 RGB
touch_right : 160x120 RGB
Encoder:
f_v = ResNet18(vision_img)
f_l = ResNet18(touch_left)
f_r = ResNet18(touch_right)
Fusion:
z = concat([f_v, f_l, f_r])
h1 = ReLU(Linear(z, 512))
h2 = ReLU(Linear(h1, 256))
y_hat = Sigmoid(Linear(h2, 1))
Loss:
L = BCE(y_hat, grasp_success_label)ํ์ต์ Adam, lr=5 \times 10^{-4}, batch=32, 10 epochs.
๊ฒฐ๊ณผ์ ์๋ฏธ
๋ ผ๋ฌธ Fig. 10 ์ค๋ฅธ์ชฝ์ ํ์ต ๊ณก์ ์ด ๋ชจ๋ ๊ฒ์ ๋งํด์ค๋ค.
์ด๊ฐ๋ง ์จ๋ ์ ์ ๋ฐ์ดํฐ๋ก ๋น ๋ฅด๊ฒ ์ ํ๋๊ฐ ์ฌ๋ผ๊ฐ๋ค. ๋น์ ๋ง ์ฐ๋ฉด ๊ฐ์ ์ ํ๋์ ๋๋ฌํ๋ ค๋ฉด 3~4 ์๋ฆฟ์ ๋ฐฐ ๋ ๋ง์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค. ์ง๊ด์ ์ผ๋ก ๋ณด๋ฉด ๋ฐ์ค์ ๋ฏธ๋๋ฌ์ง ์ฌ๋ถ๋ ์๊ฐ๋ฝ ๋์ ์ ์ด ํจํด์ ์ง๊ฒฐ๋์ง๋ง, ์ธ๋ถ ์นด๋ฉ๋ผ๊ฐ ๋ณด๋ ๊ทธ๋ฆผ์ ๋ฐ์ค์ ์ ์ฒด ๋ชจ์์์ ๊ทธ ์ ํธ๋ฅผ ์ง๋ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ผ์ ๋ ๊ฐ๊ฐ ํ ๊ฐ๋ณด๋ค ํจ์ฌ ๋ซ๋ค. ํ ์๊ฐ๋ฝ์ ์ ๋ฟ๊ณ ์๋๋ฐ ๋ฐ๋ํธ์ด ๋ชจ์๋ฆฌ๋ง ์ด์ง ๊ฑธ์น ๊ฒฝ์ฐ, ๋จ์ผ ์ผ์๋ก๋ ๋ชป ์ก์๋ธ๋ค. ๋ ๋ฉด์ ๋์์ ๋ด์ผ ํ๋ค.
์ ๋ฐ์ดํฐ ์์ญ์์๋ vision + touch๊ฐ ์ต๊ณ . ๋ modality๊ฐ ์๋ก ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๋ป์ด๋ค.
๋๋ฐ์ดํฐ ์์ญ (10๋ง~100๋ง)์์ ์๋กญ๊ฒ ๋ณด์ด๋ ํธ๋ ๋. ๋น์ ์ด ๋ฐ๋ผ์ก์ผ๋ฉฐ ๊ณ์ ์ข์์ง๋ค. ์ค์ ๋ก๋ด์ผ๋ก๋ ๋๋ฌํ ์ ์์๋ ๋ฐ์ดํฐ ์์ญ์ธ๋ฐ, TACTO ๋๋ถ์ ์ฒ์์ผ๋ก ๋ค์ฌ๋ค๋ณธ ์ ์ด๋ค.
์ด ์คํ์ ๊ฒฐ๊ณผ ์์ฒด๋ณด๋ค โ100๋ง grasp์ ํ๋ฃจ ๋ง์ ๋ชจ์ ์ ์๋คโ๋ ์ฌ์ค ์์ฒด๊ฐ ๋ฉ์์ง๋ค. tactile data scarcity๊ฐ ํ์ต ์๊ณ ๋ฆฌ์ฆ ๋ฐ์ ์ ๋ณ๋ชฉ์ด์๋ค๋ฉด, ์๋ฎฌ๋ ์ดํฐ๊ฐ ์ด๊ฑธ ํผ๋ค.
์คํ 2: ๋ ์๊ฐ๋ฝ ์ฌ์ด์์ ๊ตฌ์ฌ ๊ตด๋ฆฌ๊ธฐ
๋ ๋ฒ์งธ ์คํ์ ์ ์ด ์ชฝ์ด๋ค. ์ยท์๋ DIGIT ๋ ๊ฐ ์ฌ์ด์ ๊ตฌ์ฌ์ ๋ผ์ฐ๊ณ , ์์ชฝ ์ผ์์ ์ํ ์์น๋ฅผ ์ ์ดํด์ ๊ตฌ์ฌ์ ์ํ๋ ๋ชฉํ ์์น๋ก ๊ตด๋ฆฐ๋ค.
์ปจํธ๋กค๋ฌ ํํ
์ ํ ํผ๋๋ฐฑ ์ปจํธ๋กค๋ฌ:
\mathbf{u} = \mathbf{K} \, \bar{\mathbf{x}}, \quad \mathbf{u} \in \mathbb{R}^{2}, \; \bar{\mathbf{x}} = \mathbf{x} - \mathbf{x}^{*}, \; \mathbf{K} \in \mathbb{R}^{2 \times 2}
- \mathbf{x}: ํ์ฌ ๊ตฌ์ฌ์ ์ด๊ฐ ์ขํ (tactile image์์ ์ถ์ ํ ์ค์ฌ)
- \mathbf{x}^{*}: ๋ชฉํ ์์น
- \mathbf{K}: ํ์ตํ 4๊ฐ ํ๋ผ๋ฏธํฐ
๋น์ฉ ํจ์๋ ๋์ ๊ฑฐ๋ฆฌ ์ค์ฐจ \sum_{t} \lVert \bar{\mathbf{x}}_t \rVert. 8๋ฐฉํฅ ๋ชฉํ์ ๋ํด ํ๊ท ์ ๋ธ๋ค.
์ต์ ํ ๋ฐฉ๋ฒ
๋ฒ ์ด์ง์ ์ต์ ํ (UCB acquisition)๋ก \mathbf{K}๋ฅผ ์ฐพ๋๋ค. 50 iteration์ด๋ฉด ์ถฉ๋ถํ๋ค.
์คํ์ด ๋ณด์ฌ์ฃผ๋ ๊ฒ
ํ์ต์ด ์งํ๋ ์๋ก ๊ตฌ์ฌ์ ๋ ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ๋ชฉํ๋ก ๊ตด๋ฆฐ๋ค (๋ ผ๋ฌธ Fig. 11). ๋ ์ค์ํ ๊ฒ์ ์์น ์์ฒด๋ค. 50 iteration์ ์ ์ฒด ์คํ ์๊ฐ์ด 8๋ถ, ๊ทธ ์ค ์๋ฎฌ๋ ์ด์ ์์ฒด๋ 2๋ถ, ๋๋จธ์ง 6๋ถ์ acquisition function ์ต์ ํ. 50 iter ร 8๋ฐฉํฅ ร 50 step = 2๋ง ์ฅ์ tactile imprint๋ฅผ 2๋ถ ์์ ๋ค ๋ ๋๋งํ๋ค๋ ๋ป์ด๋ค.
์ด ์ ๋๋ฉด ๊ฐํํ์ต์์ ํ๊ฒฝ ์คํ ์ด ๋ณ๋ชฉ์ด ๋์ง ์๋๋ค. ์ ์ฑ ์ ๋ฐ์ดํธ (gradient computation, replay buffer ๋ฑ)๊ฐ ๋ ๋ฌด๊ฒ๋ค.
์คํ 3: Sim2Real ์์ธ ์ถ์
์ธ ๋ฒ์งธ ์คํ์ ์์ง๋ง ์ค์ํ proof-of-concept๋ค. DIGIT์ผ๋ก ์์ ๋ฌผ์ฒด๋ฅผ ์ก์์ ๋ ๊ทธ ์์ธ๋ฅผ ์ถ์ ํ๋ ํ๊ท ๋ฌธ์ ๋ฅผ ํผ๋ค. ์๋ฎฌ๋ ์ด์ ์์ ํ์ตํ ๋ชจ๋ธ์ ์ค์ ์ผ์์ ๊ทธ๋๋ก (๋๋ ์ฝ๊ฐ์ ์บ๋ฆฌ๋ธ๋ ์ด์ ์ ๊ฑฐ์ณ) ์ ์ฉํ๋ค.
๋ ผ๋ฌธ Table II์ ํต์ฌ ๊ฒฐ๊ณผ๋ฅผ ํ์ด์ฐ๋ฉด ์ด๋ ๋ค.
- Random baseline: position error ์ฝ 11.75 mm, rotation error ์ฝ 46.56ยฐ
- Sim2Sim (ํ์ตยทํ๊ฐ ๋ชจ๋ ์๋ฎฌ๋ ์ด์ ): position ์ฝ 0.41 mm, rotation ์ฝ 3.48ยฐ
- Real2Real (ํ์ตยทํ๊ฐ ๋ชจ๋ ์ค์ , 16 datapoints): position ์ฝ 4.45 mm, rotation ์ฝ 21ยฐ๋
- Sim2Real (์ค์ ์บ๋ฆฌ๋ธ๋ ์ด์ ํ): position 4~5 mm ์์ค๊น์ง ์ขํ
์ฌ๊ธฐ์ ์ธ์ฌ์ดํธ๋ ๋ ๊ฐ์ง๋ค. ์ฒซ์งธ, ์์ํ sim2real์ ์๋์ ํ์ง๋ง ๋ฌด์ ๋ชป ํ gap์ด ์๋ค. ๋น๊ท ์ผ ์กฐ๋ช , ๋ ธ์ด์ฆ, ์บ๋ฆฌ๋ธ๋ ์ด์ ์ฐจ์ด๊ฐ ๋์ ๋๋ค. ๋์งธ, ์์ ๋ณธ background calibration trick๊ณผ ์ฝ๊ฐ์ real data fine-tuning์ ๊ฒฐํฉํ๋ฉด gap์ด ๋น ๋ฅด๊ฒ ์ค์ด๋ ๋ค. ์ฆ TACTO๋ sim2real์ ์๋ฒฝํ ํด๊ฒฐํ๋ ๋๊ตฌ๊ฐ ์๋๋ผ, good initialization์ ๋ง๋๋ ๋๊ตฌ๋ค. ์ ์ฑ ์ ์ฌ์ ํ์ต ๋จ๊ณ์์ ๋ง๋ํ ์๋ฎฌ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ , ๋ง์ง๋ง์ ์๋์ real data๋ก ์ ์ํ๋ ๊ฒ ๊ถ์ฅ ์ํฌํ๋ก๋ค.
๋นํ์ ์ผ๋ก ๋ณด๋ฉด
TACTO์ ํ๊ณ๋ ์ ์๋ค์ด ์์งํ๊ฒ ์ ์ด๋ ๋ถ๋ถ์ด ๋ง๊ณ , ๊ทธ ์ธ์ ์ค์ ๋ก ์จ๋ณธ ์ฌ๋ ์ ์ฅ์์ ๋ง์ฃผ์น๋ ์ง์ ๋ค์ด ์๋ค.
์ค๊ณ์ ์๋๋ ํ๊ณ
์ ์ด ๊ฒฝ๊ณ์ ๋ณํ ๋ชจ๋ธ๋ง์ด ์๋ค. ๋ ๋ฉ์ฌ๊ฐ ๊ทธ๋ฅ ๊ฒน์น๊ธฐ ๋๋ฌธ์, ์ ค์ด ๋ชจ์๋ฆฌ๋ฅผ ๊ฐ์ธ๋ ๋ถ๋๋ฌ์ด ๋ณํ์ด ์กํ์ง ์๋๋ค. ํ๋ธ์ ๊ฐ์ฅ์๋ฆฌ์์ ๊ฐ์ฅ ๋๋๋ฌ์ง๋ค. ๋ ผ๋ฌธ์ ๊ถ์ฅ ์ฐํ๋ก๋ (1) ๋ฌผ์ฒด ๋ฉ์ฌ ์ฌ์ ์ค๋ฌด๋ฉ, (2) ํ์ต ํ GAN/diffusion ๊ธฐ๋ฐ ๋ณด์ ์ธ๋ฐ, ๋ ๋ค ์ถ๊ฐ ์์ ์ด๋ค.
๊ฐ์ฒด ๊ฐ์ . ์ฒ, ์ข ์ด, ๋๋ถ ๊ฐ์ ๋ณํ์ฒด๋ ๋ชป ๋ค๋ฃฌ๋ค. PyBullet์ soft body ๊ธฐ๋ฅ๊ณผ ์กฐํฉํ๋ฉด ์ด๋ ์ ๋ ๊ฐ๋ฅํ๊ฒ ์ง๋ง, ๊ฒ์ฆ๋ ์ฌ์ฉ ์ฌ๋ก๋ ์ ๋ค.
๊ดํ ๋ชจ๋ธ์ ์ถฉ์ค๋. OpenGL์ ํ์ค ray-tracing ๊ธฐ๋ฅ์ ์์กดํ๋ฏ๋ก Mitsuba2 ๊ฐ์ ๊ณ ๊ธ ๋ ๋๋ฌ๋ณด๋ค๋ ๊ดํ์ ์ฌ์ค์ฑ์ด ๋จ์ด์ง๋ค. ๊ตด์ ๋ฅ ์ด ๋ค๋ฅธ ๋งค์ง (์ค๋ฆฌ์ฝ ์ ค๊ณผ ๊ณต๊ธฐ ๊ฒฝ๊ณ)์์์ ๋ถ๋๋ฌ์ด ๋น ๋ถํฌ ๊ฐ์ ํจ๊ณผ๋ ํ๊ณ๊ฐ ์๋ค.
์ค์ ์ฌ์ฉ์ ๋ง์ฃผ์น๋ ๋ํ ์ผ
ํด์๋์ ๋ค์๊ฐ๋ฝ ํ๊ฒฝ์ trade-off. Allegro Hand์ DIGIT 4๊ฐ๋ฅผ ๋ค๋ ์ผ์ด์ค๊ฐ 50 FPS๋ก ๋ณด๊ณ ๋์ด ์์ง๋ง, 5์๊ฐ๋ฝ humanoid์ ๋ ํฐ ์ผ์๋ค์ ๋ค๋ ์๋๋ฆฌ์ค์์๋ ํด์๋๋ฅผ ๋ฎ์ถ๊ฑฐ๋ ๋น๋๊ธฐ ๋ ๋๋ง์ด ํ์ํด์ง๋ค. Isaac Lab ๊ฐ์ GPU-parallel ํ๊ฒฝ์์ envs ์๋ฅผ ๋๋ฆฌ๋ฉด ์ด๋ป๊ฒ ๋๋์ง ๋ณ๋ ๊ฒ์ฆ์ด ํ์ํ๋ค.
ํ-๋ณํ ๋งคํ์ ๋จ์์ฑ. piece-wise linear๋ ์์์ ์ผ๋ก๋ ์ถฉ๋ถํ์ง๋ง, ์ค์ ์ค๋ฆฌ์ฝ์ strain-rate dependence์ hysteresis๊ฐ ์๋ค. ์ ๋ฐ force estimation์ ๋ชฉํ๋ก ํ๋ค๋ฉด ๋ชจ์๋ผ๋ค.
PyBullet์ ์ ์ด ๋ชจ๋ธ ์์ฒด์ ํ๊ณ. TACTO ์์ฒด๋ณด๋ค๋ ๋ฒ ์ด์ค ๋ฌผ๋ฆฌ ์์ง์ ๋ฌธ์ ์ง๋ง, in-hand manipulation์ฒ๋ผ ์ ์ด์ด ํ๋ถํ ์๋๋ฆฌ์ค์์ PyBullet์ ๊ฐ์ฒด ๋ง์ฐฐ ๋ชจ๋ธ์ sim2real gap์ ํฐ ์์ธ์ด๋ค. ์ด ์ ์ Isaac Lab (PhysX 5)์ด๋ MuJoCo MJX ๊ฐ์ GPU ๊ธฐ๋ฐ ์์ง๊ณผ์ ๊ฒฐํฉ์ผ๋ก ์ผ๋ถ ํด์ํ ์ ์๋ค.
Sim2Real์ ์ง์ง ์ด๋ ค์์ ์ ์ฑ ๋จ๊ณ. ์ด๋ฏธ์ง ํ ์ฅ์ sim2real์ background calibration์ผ๋ก ์ขํ ์ ์์ง๋ง, time-series of contact (์: ๋ฏธ๋๋ฌ์ง, ํ์ ) ์ฐจ์์์๋ PyBullet์ friction์ด ์ค์ ์ ์ผ์นํ์ง ์์ผ๋ฉด ์ ์ฑ ์ด ๋ง๊ฐ์ง๋ค. TACTO ๋จ๋ ์ผ๋ก ํ ๋ฌธ์ ๋ ์๋๋ค.
๊ด๋ จ ์ฐ๊ตฌ์์ ์๋ฆฌ ๋งค๊น
TACTO ๋ฑ์ฅ ์์ (2020~2021) ๊ธฐ์ค์ผ๋ก ์ฃผ์ vision-based tactile sensor ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์์น ์ง์ด๋ณด๋ฉด ์ด๋ ๋ค.
| ์๋ฎฌ๋ ์ดํฐ | ๊ดํ ๋ชจ๋ธ | ๋ฌผ๋ฆฌ ์์ง | ์๋ | ๊ฐ์ | ์ฝ์ |
|---|---|---|---|---|---|
| Gazebo + Phong (Gomes et al.) | Phong | Gazebo | ๋ณดํต | ๋จ์, Gazebo ์นํ | ๊ณ ๊ธ ๊ดํ ํจ๊ณผ ์ด๋ ค์, ํ๋ฐํ manipulation ๊ฒ์ฆ ๋ถ์กฑ |
| Mitsuba2-based (Agarwal et al.) | Mitsuba2 ray-tracing | (๋์จํ ๊ฒฐํฉ) | ๋๋ฆผ | ๋งค์ฐ ์ฌ์ค์ | ๋ฌผ๋ฆฌ ์์ง ํตํฉ ๋ฏธํก |
| Unity-based | Unity ๋ ๋๋ฌ | Unity Physics | ์ค๊ฐ | ์๊ฐ์ ๋์์ธ ์์ | ํ์ ์ํฌํ๋ก์ ๊ฑฐ๋ฆฌ |
| FEM-based | ๋ณ๋ | FEM | ๋งค์ฐ ๋๋ฆผ | ๋ณํ ์ ํ | ์ค์๊ฐ ํ์ต ๋ถ๊ฐ |
| TACTO | OpenGL/Pyrender | PyBullet (๊ธฐ๋ณธ) | ๋งค์ฐ ๋น ๋ฆ | ์๋ยท์ ์ฐ์ฑยท์คํ์์ค | ๊ฐ์ฒด ๊ฐ์ , ์ ์ด ๊ฒฝ๊ณ ๋ฏธ์ธ ๋ํ ์ผ ์ฝํจ |
์ดํ ๋ฑ์ฅํ ํ์ ์ฐ๊ตฌ๋ค (Taxim, FOTS, Tacchi ๋ฑ)์ ๊ดํ์ ์ฌ์ค์ฑ์ ๋ ๋์ด์ฌ๋ฆฌ๊ฑฐ๋, GPU-parallel ์๋ฎฌ๋ ์ดํฐ (Isaac Lab, Isaac Gym)์์ ํตํฉ์ ์๋ํ๋ค. TACTO๋ vision-based tactile sensor ์๋ฎฌ๋ ์ด์ ์์ญ์์ โํ์ค baselineโ ์ญํ ์ ํ๊ฒ ๋ ์ ์ด๋ค. ์๋ก์ด ์๋ฎฌ๋ ์ดํฐ๋ฅผ ๋ง๋ค๊ฑฐ๋ ํ๊ฐํ ๋ ๋น๊ต ๋์์ผ๋ก ๊ฑฐ์ ํญ์ ๋ฑ์ฅํ๋ค.
ํฅ๋ฏธ๋ก์ด ๋น๊ต ํฌ์ธํธ ํ๋. TACTO๋ โrigid object + soft gelโ ๊ฐ์ ์์์ ๋น ๋ฅธ ์๋๋ฅผ ์ป์๋ค. ์ดํ ๋ฑ์ฅํ ์ผ๋ถ ์๋ฎฌ๋ ์ดํฐ๋ FEM์ด๋ MPM (Material Point Method)์ ๋์ ํด ์ ํ๋๋ฅผ ๋์ด์ฌ๋ ธ์ง๋ง, ํ์ต์ฉ์ผ๋ก ์ฐ๊ธฐ์ ์ฌ์ ํ ๋๋ฆฌ๋ค. ์ ํ๋์ ์๋์ spectrum ์์์, TACTO๋ ํ์ต ์ชฝ ๊ทน๋จ์ ๊ฐ๊น๋ค.
Allegro Hand ์ฐ๊ตฌ์ ์ ์ฅ์์ ๋ณธ ํ์ฉ ํฌ์ธํธ
dexterous manipulation ์ฐ๊ตฌ๋ฅผ ํ๋ ์ ์ฅ์์ TACTO๋ฅผ ์ด๋ป๊ฒ ํ์ฉํ ์ง ์ ๋ฆฌํ๋ฉด ์ด๋ ๋ค.
๋๊ท๋ชจ ์ฌ์ ํ์ต ๋ฐ์ดํฐ ์์ฑ. HORA, RotateIt, AnyRotate ๊ฐ์ in-hand rotation ์ ์ฑ ์ ํ์ตํ ๋, ์ด๊ฐ์ ์ถ๊ฐ modality๋ก ๋ฃ๋ ablation์ ํ๋ค๊ณ ๊ฐ์ ํ์. ์ค์ DIGIT์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ผ๋ ๊ฑด ๋นํ์ค์ ์ด์ง๋ง TACTO๋ก๋ ๋ฉฐ์น ์์ ์๋ฐฑ๋ง contact frame์ ๋ง๋ค ์ ์๋ค. ResNet/ViT ๊ธฐ๋ฐ tactile encoder๋ฅผ self-supervised๋ก ์ฌ์ ํ์ต์ํฌ ๋ฐ์ดํฐ ์์ค๊ฐ ๋๋ค.
Sim2Real bootstrap. tactile feedback ์ ์ฑ ์ ์ค์ Allegro Hand + DIGIT์ ์ฎ๊ธธ ๋, TACTO์์ ์ฌ์ ํ์ตํ ์ ์ฑ ์ ์์์ ์ผ๋ก ์ผ๊ณ , ์ค์ ๋ฐ์ดํฐ๋ก ์งง๊ฒ fine-tuneํ๋ ์ํฌํ๋ก. background calibration trick์ ํ ์๊ฐ๋ฝ๋น ๋น ์ด๋ฏธ์ง ํ ์ฅ๋ง ์ฐ์ผ๋ฉด ๋๋ ์ด์ ๋น์ฉ์ด ๊ฑฐ์ ์๋ค.
Isaac Lab ์ฐ๊ตฌ์์๊ฒ๋ ํตํฉ ๊ฒ์ฆ์ด ํ์. TACTO๋ PyBullet์ ์นํ์ ์ผ๋ก ์ค๊ณ๋์ด ์์ง๋ง, Isaac Lab์ GPU-parallel envs ํจ๋ฌ๋ค์๊ณผ๋ ์์ฐ์ค๋ฝ๊ฒ ๋ง์ง ์๋๋ค. Isaac Lab์์ ๊น์ด ์ด๋ฏธ์ง๋ฅผ ๋ฝ์ (์ ํ์ง B) TACTO๋ก RGB๋ฅผ ๋ง๋๋ ์ฐํ๋ก๋ ๊ฐ๋ฅํ์ง๋ง I/O๊ฐ ๋ค์ด์์ ์๋๊ฐ ๋จ์ด์ง๋ค. ์ฐจ๋ผ๋ฆฌ Taxim์ด๋ ์๋ก ๋์ค๋ GPU-native tactile renderer๋ฅผ ๊ฒํ ํ๋ ๊ฒ์ด ๋ต์ผ ์ ์๋ค.
์ผ์ ์ค๊ณ ๊ฒํ ๋๊ตฌ๋ก์. ์ฌ๋ด์์ ์๋ก์ด tactile sensor ๋ชจ๋ (์: WIRobotics ์์ฒด ์ผ์)์ ํ๋กํ ํ์ดํํ ๋, ๊ด์ ์์นยท์นด๋ฉ๋ผ ์์ผ๊ฐยท์ ค ๋๊ป ๊ฐ์ ๋ณ์๋ฅผ ์ค์ ํ์ผ์์ ๋ฐ๊ฟ๊ฐ๋ฉฐ ๊ฐ์์ผ๋ก ํ๊ฐํ ์ ์๋ค. ์ค์ ์ ์ ์ ์ design space๋ฅผ ์ขํ๋ ์ฉ๋๋ค.
FBA (Force-based Augmentation) ๊ฐ์ ์ถ๊ฐ ๋ชจ๋. TACTO์ piece-wise linear deformation์ ์์์ ์ผ ๋ฟ์ด๋ค. ATI Mini45 ๊ฐ์ F/T ์ผ์๋ก ์ธก์ ํ ์ค์ hyperelastic ๊ณก์ ์ ์ฌ์ฉ์ ํจ์๋ก ๋ผ์ ๋ฃ์ผ๋ฉด, ์์ฒด ์ค๋ฆฌ์ฝ ์ปดํ์ด๋์ ๋ง๊ฒ fine-tuneํ ์ ์๋ค.
ํต์ฌ์ ํ ์ค๋ก ๋ค์
TACTO์ ์ง์ง ๊ธฐ์ฌ๋ โvision-based tactile sensor ์๋ฎฌ๋ ์ด์ ์ ๊ดํ ๋ฌธ์ ๋คโ๋ผ๋ ๊ด์ ์ ํ์ด๋ค. ๋ฌผ๋ฆฌ ์์ง์ ๋ค์ ๋ง๋๋ ๋์ , ์ปดํจํฐ ๊ทธ๋ํฝ์ค ๋๊ตฌ๋ฅผ ์ ํํ ์์น์์ ํ์ฉํด ๋ ์๋ฆฟ์ ๋ฐฐ ๋น ๋ฅธ ์๋ฎฌ๋ ์ดํฐ๋ฅผ ๋ง๋ค์๋ค. ๊ฐ์ฒด ๊ฐ์ ๊ณผ ๋จ์ํ ๋ณํ ๋ชจ๋ธ์ด๋ผ๋ ๋๊ฐ๋ฅผ ๋ฐ์๋ค์์ง๋ง, ๊ทธ ๋๋ถ์ 100๋ง grasp ๋ฐ์ดํฐ๋ฅผ ํ๋ฃจ์ ๋ชจ์ผ๋ ์ผ์ด ๊ฐ๋ฅํด์ก๋ค.
dexterous manipulation์ฒ๋ผ ํ๋ถํ ์ ์ด์ด ํต์ฌ์ธ ๋ถ์ผ์์, TACTO๋ ์ ํํ ๊ฒฐ๋ง์ด ์๋๋ผ ์ ์ฉํ ์ถ๋ฐ์ ์ด๋ค. ํ์ต์ฉ ์ฌ์ ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค๊ณ , ์ ์ฑ ๊ตฌ์กฐ๋ฅผ ๋น ๋ฅด๊ฒ ๋น๊ตํ๊ณ , ์ผ์ ์ค๊ณ๋ฅผ ๊ฒํ ํ๋ playground๋ก ์ฐ๋ ๊ฒ ๋ง๋ค. ๊ทธ ๋ค์ ์ค์ sim2real gap์ ๋ ์ข์ ๋ฌผ๋ฆฌ ์์ง, ๋๋ฉ์ธ ๋ฌด์์ํ, ์ ์ ์์ ์ค์ ๋ฐ์ดํฐ๋ก ์ฑ์์ผ ํ๋ค. ์ด ๋๊ตฌ๋ฅผ ์์ ์ฅ ์ฑ๋ก ํ์ ์ฐ๊ตฌ๋ฅผ ๋ฐ๋ผ๊ฐ๋ค ๋ณด๋ฉด, vision-based tactile sensor๊ฐ ์ ์ ์ ๋ ์ง์งํ ์ฐ๊ตฌ modality๊ฐ ๋์ด๊ฐ๋์ง ๊ทธ ํ๋ฆ์ด ๋ณด์ธ๋ค.