Curieux.JY
  • JungYeon Lee
  • Post
  • Lecture
  • Note

On this page

  • ๐Ÿ” Ping Review
  • ๐Ÿ”” Ring Review
    • ํ•œ ์ค„๋กœ ์‹œ์ž‘ํ•˜๋ฉด
    • ์™œ ์ด‰๊ฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šด๊ฐ€
    • ์„ค๊ณ„ ์ฒ ํ•™: ๋น ๋ฅด๊ณ , ์œ ์—ฐํ•˜๊ณ , ํ˜„์‹ค์ ์ด๊ณ , ๋‹ค๋ฃจ๊ธฐ ์‰ฝ๊ฒŒ
    • ์„ธ ๊ฐˆ๋ž˜ ๊ธธ์—์„œ ์–ด๋–ป๊ฒŒ ์„ ํƒํ–ˆ๋‚˜
      • ์„ ํƒ์ง€ A: Phong ๋ชจ๋ธ๋กœ ๊นŠ์ดโ†’RGB ๋ Œ๋”๋ง
      • ์„ ํƒ์ง€ B: OpenGL๋กœ ๊นŠ์ดโ†’RGB ๋ Œ๋”๋ง
      • ์„ ํƒ์ง€ C: ๋™๊ธฐํ™”๋œ ์žฅ๋ฉด์„ OpenGL๋กœ ๋ Œ๋”๋ง (์ฑ„ํƒ)
    • ์•„ํ‚คํ…์ฒ˜ ์ „์ฒด ๊ทธ๋ฆผ
    • ํž˜์— ๋”ฐ๋ฅธ ์ ค ๋ณ€ํ˜•: ๋‹จ์ˆœํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜๋Š” ๋ชจ๋ธ
    • ์กฐ๋ช…, ๊ทธ๋ฆผ์ž, ๊ทธ๋ฆฌ๊ณ  ์บ˜๋ฆฌ๋ธŒ๋ ˆ์ด์…˜
    • ์†๋„: ํ‘œ ํ•œ ์žฅ์œผ๋กœ ๋ณด๋Š” ์‹ค์ธก์น˜
    • ์‹คํ—˜ 1: 100๋งŒ grasp์œผ๋กœ ์žก๊ธฐ ์•ˆ์ •์„ฑ ๋ฐฐ์šฐ๊ธฐ
      • ์„ค์ •
      • ๋ชจ๋ธ
      • ๊ฒฐ๊ณผ์˜ ์˜๋ฏธ
    • ์‹คํ—˜ 2: ๋‘ ์†๊ฐ€๋ฝ ์‚ฌ์ด์—์„œ ๊ตฌ์Šฌ ๊ตด๋ฆฌ๊ธฐ
      • ์ปจํŠธ๋กค๋Ÿฌ ํ˜•ํƒœ
      • ์ตœ์ ํ™” ๋ฐฉ๋ฒ•
      • ์‹คํ—˜์ด ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ
    • ์‹คํ—˜ 3: Sim2Real ์ž์„ธ ์ถ”์ •
    • ๋น„ํŒ์ ์œผ๋กœ ๋ณด๋ฉด
      • ์„ค๊ณ„์ƒ ์˜๋„๋œ ํ•œ๊ณ„
      • ์‹ค์ œ ์‚ฌ์šฉ์‹œ ๋งˆ์ฃผ์น˜๋Š” ๋””ํ…Œ์ผ
    • ๊ด€๋ จ ์—ฐ๊ตฌ์™€์˜ ์ž๋ฆฌ ๋งค๊น€
    • Allegro Hand ์—ฐ๊ตฌ์ž ์ž…์žฅ์—์„œ ๋ณธ ํ™œ์šฉ ํฌ์ธํŠธ
    • ํ•ต์‹ฌ์„ ํ•œ ์ค„๋กœ ๋‹ค์‹œ

๐Ÿ“ƒTACTO ๋ฆฌ๋ทฐ

tactile
simulation
A Fast, Flexible, and Open-source Simulator for High-Resolution Vision-based Tactile Sensors
Published

March 25, 2026

  • Paper Link

  • Code Link

  • Shaoxiong Wang, Mike Lambeta, Po-Wei Chou, Roberto Calandra

  • IEEE Robotics and Automation Letters (RA-L), 2022

  1. ๐Ÿ’ก TACTO๋Š” ๊ธฐ์กด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋“ค์ด ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ค์› ๋˜ ๊ณ ํ•ด์ƒ๋„ vision-based tactile sensors์˜ ์‚ฌ์‹ค์ ์ธ ์ด‰๊ฐ ์‹ ํ˜ธ๋ฅผ ์ดˆ๋‹น ์ˆ˜๋ฐฑ ํ”„๋ ˆ์ž„์œผ๋กœ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋Š” ๋น ๋ฅด๊ณ  ์œ ์—ฐํ•œ ์˜คํ”ˆ์†Œ์Šค ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.
  2. โš™๏ธ ์ด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋Š” PyBullet ๊ฐ™์€ ๋ฌผ๋ฆฌ ์—”์ง„๊ณผ Pyrender ๊ฐ™์€ ๋ Œ๋”๋ง ์—”์ง„์„ ์—ฐ๊ฒฐํ•˜๋ฉฐ, ๋ฌผ์ฒด ๋ฉ”์‰ฌ๋ฅผ ๋ฏธ๋ฆฌ ๋กœ๋“œํ•˜๊ณ  ํฌ์ฆˆ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” OpenGL ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ๋†’์€ ์œ ์—ฐ์„ฑ๊ณผ ๊ณ ์† ๋ Œ๋”๋ง์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  3. ๐ŸŽฏ ์ €์ž๋“ค์€ 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 ๋ Œ๋”๋งโ€ ๋ฐฉ์‹์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

  1. ํ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ RGB ๋ Œ๋”๋ง (๊ฐ„๋‹จํ•˜์ง€๋งŒ ๋œ ๊ฐ•๋ ฅ): PyBullet์˜ ๋‚ด์žฅ ์นด๋ฉ”๋ผ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊นŠ์ด ๋งต์—์„œ RGB ์ด๋ฏธ์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ์˜ ๋ฐ˜์‚ฌ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์ง€๋งŒ, ๋น›์ด ์ ค ํ‘œ๋ฉด์—์„œ ์นด๋ฉ”๋ผ๋กœ ํ•œ ๋ฒˆ๋งŒ ๋ฐ˜์‚ฌ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฏ€๋กœ, ๋ฐ˜์‚ฌ, ๊ตด์ ˆ, ๊ทธ๋ฆผ์ž์™€ ๊ฐ™์€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์— ์ ํ•ฉํ•˜์ง€ ์•Š์œผ๋ฉฐ GPU ๊ฐ€์†ํ™”๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  2. ๊นŠ์ด์—์„œ OpenGL์„ ์‚ฌ์šฉํ•œ RGB ๋ Œ๋”๋ง (๊ฐ•๋ ฅํ•˜์ง€๋งŒ ๋А๋ฆผ): OpenGL์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ๊นŠ์ด ๋งต์œผ๋กœ๋ถ€ํ„ฐ RGB ์ด๋ฏธ์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋ฏธ๋Ÿฌ, ํˆฌ๋ช… ๊ฐ์ฒด, ๊ทธ๋ฆผ์ž, GPU ๊ฐ€์† ๋“ฑ์„ ์ง€์›ํ•˜์ง€๋งŒ, ๊นŠ์ด ๋งต์—์„œ ์ƒ์„ฑ๋œ ๋ฉ”์‹œ๋ฅผ OpenGL๋กœ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋กœ๋“œํ•˜๋Š” I/O ๋ณ‘๋ชฉ ํ˜„์ƒ์œผ๋กœ ์ธํ•ด ์†๋„๊ฐ€ ์ดˆ๋‹น 20ํ”„๋ ˆ์ž„์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.
  3. ๋™๊ธฐํ™”๋œ ์žฅ๋ฉด์—์„œ 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 ๋ช‡ ๊ฐœ๊ฐ€ ๋ฐ•ํ˜€ ์žˆ๊ณ , ๋น›์€ ์ ค ์•ˆ์—์„œ ๊ตด์ ˆยท๋ฐ˜์‚ฌ๋œ๋‹ค. ์–ด๋–ค ๋ฌผ์ฒด๊ฐ€ ์ ค์„ ๋ˆ„๋ฅด๋ฉด ์ ค ํ‘œ๋ฉด์ด ๋ณ€ํ˜•๋˜๊ณ , ๊ทธ ๋ณ€ํ˜•์ด ์นด๋ฉ”๋ผ์— ์ผ์ข…์˜ โ€œ์ง€๋ฌธ ์ด๋ฏธ์ง€โ€๋กœ ์ฐํžŒ๋‹ค.

์ด๊ฑธ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋ ค๋ฉด ์„ธ ๊ฐ€์ง€๋ฅผ ๋™์‹œ์— ํ•ด์•ผ ํ•œ๋‹ค.

  1. ์ ‘์ด‰ ๋™์—ญํ•™ (์–ผ๋งˆ๋‚˜ ๊นŠ์ด ๋ˆŒ๋ฆฌ๊ณ , ์–ผ๋งˆ๋‚˜ ๋ฏธ๋„๋Ÿฌ์ง€๋Š”์ง€ (๋งˆ์ฐฐ))
  2. ์ ค์˜ ๋ณ€ํ˜• (ํƒ„์„ฑ ์žฌ๋ฃŒ๊ฐ€ ๋ฌผ์ฒด ํ˜•์ƒ์— ๋งž์ถฐ ์–ด๋–ป๊ฒŒ ๋ณ€ํ˜•๋˜๋Š”์ง€)
  3. ๊ด‘ํ•™ (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๋กœ ๋ณด์ •ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ์ œ์•ˆํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•œ ๊ฐ€์ง€ ๋”, โ€œ์ ‘์ด‰ ๊ฒฝ๊ณ„์˜ ๋ฏธ์„ธ ๋””ํ…Œ์ผ๋ณด๋‹ค ์ ‘์ด‰ ์œ„์น˜ยท๋งˆ์Šคํฌยท์ž์„ธยท๋ฒ•์„ ๋ ฅ ๊ฐ™์€ ์ •๋ณด๊ฐ€ ํ•™์Šต์— ๋” ์ค‘์š”ํ•˜๋‹ˆ ์ด ์ •๋„ ์ ˆ์ถฉ์€ ๋ฐ›์•„๋“ค์ผ ๋งŒํ•˜๋‹คโ€๊ณ  ๋งํ•œ๋‹ค. ์ด๊ฑด ๊ฒฝํ—˜์ ์œผ๋กœ ๋ณด๋ฉด ํ•ฉ๋‹นํ•œ ํŒ๋‹จ์ด๋‹ค.

์•„ํ‚คํ…์ฒ˜ ์ „์ฒด ๊ทธ๋ฆผ

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๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๋ฌผ๋ฆฌ ์—”์ง„๊ณผ ๋ Œ๋”๋ง ์—”์ง„ ์‚ฌ์ด์˜ ๋‹ค๋ฆฌ ์—ญํ• ์ด๋‹ค. ์„ค์ • ํŒŒ์ผ ํ•˜๋‚˜๋งŒ ๋ฐ”๊พธ๋ฉด 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).

  1. ์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ โ€œ์ ‘์ด‰ ์—†์Œโ€ ์ด๋ฏธ์ง€ I_{\text{sim}}^{\text{empty}}๋ฅผ ๋งŒ๋“ ๋‹ค.
  2. ์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ โ€œ์ ‘์ด‰ ์žˆ์Œโ€ ์ด๋ฏธ์ง€ I_{\text{sim}}^{\text{contact}}๋ฅผ ๋งŒ๋“ ๋‹ค.
  3. ํ”ฝ์…€๋ณ„ ์ฐจ๋ถ„ \Delta I = I_{\text{sim}}^{\text{contact}} - I_{\text{sim}}^{\text{empty}}๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
  4. ์‹ค์ œ ์„ผ์„œ์—์„œ ๋ฏธ๋ฆฌ ์ฐ์–ด๋‘” ๋นˆ ์ด๋ฏธ์ง€ 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 ์˜ค๋ฅธ์ชฝ์˜ ํ•™์Šต ๊ณก์„ ์ด ๋ชจ๋“  ๊ฒƒ์„ ๋งํ•ด์ค€๋‹ค.

  1. ์ด‰๊ฐ๋งŒ ์จ๋„ ์ ์€ ๋ฐ์ดํ„ฐ๋กœ ๋น ๋ฅด๊ฒŒ ์ •ํ™•๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ„๋‹ค. ๋น„์ „๋งŒ ์“ฐ๋ฉด ๊ฐ™์€ ์ •ํ™•๋„์— ๋„๋‹ฌํ•˜๋ ค๋ฉด 3~4 ์ž๋ฆฟ์ˆ˜ ๋ฐฐ ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ง๊ด€์ ์œผ๋กœ ๋ณด๋ฉด ๋ฐ•์Šค์˜ ๋ฏธ๋„๋Ÿฌ์ง ์—ฌ๋ถ€๋Š” ์†๊ฐ€๋ฝ ๋์˜ ์ ‘์ด‰ ํŒจํ„ด์— ์ง๊ฒฐ๋˜์ง€๋งŒ, ์™ธ๋ถ€ ์นด๋ฉ”๋ผ๊ฐ€ ๋ณด๋Š” ๊ทธ๋ฆผ์€ ๋ฐ•์Šค์˜ ์ „์ฒด ๋ชจ์–‘์—์„œ ๊ทธ ์‹ ํ˜ธ๋ฅผ ์งœ๋‚ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  2. ์„ผ์„œ ๋‘ ๊ฐœ๊ฐ€ ํ•œ ๊ฐœ๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ๋‹ค. ํ•œ ์†๊ฐ€๋ฝ์€ ์ž˜ ๋‹ฟ๊ณ  ์žˆ๋Š”๋ฐ ๋ฐ˜๋Œ€ํŽธ์ด ๋ชจ์„œ๋ฆฌ๋งŒ ์‚ด์ง ๊ฑธ์นœ ๊ฒฝ์šฐ, ๋‹จ์ผ ์„ผ์„œ๋กœ๋Š” ๋ชป ์žก์•„๋‚ธ๋‹ค. ๋‘ ๋ฉด์„ ๋™์‹œ์— ๋ด์•ผ ํ•œ๋‹ค.

  3. ์ €๋ฐ์ดํ„ฐ ์˜์—ญ์—์„œ๋Š” vision + touch๊ฐ€ ์ตœ๊ณ . ๋‘ modality๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

  4. ๋Œ€๋ฐ์ดํ„ฐ ์˜์—ญ (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๊ฐ€ ๋˜์–ด๊ฐ€๋Š”์ง€ ๊ทธ ํ๋ฆ„์ด ๋ณด์ธ๋‹ค.

Copyright 2026, JungYeon Lee