Skip to content

Latest commit

ย 

History

History
530 lines (380 loc) ยท 25.4 KB

README.md

File metadata and controls

530 lines (380 loc) ยท 25.4 KB

๋ชฉ์ฐจ

  1. ์Šคํ„ฐ๋”” ๋ชฉ์  (์˜ค๋ฏผ์‹)
  2. ๊ฐ•ํ™”ํ•™์Šต ๊ธฐ๋ณธ ์ด๋ก  (์ด์—ฐ์ˆ˜)
  3. DRL ์„ค๋ช…
    • DQN (์ตœ์›๊ฐ•)
    • TD3 (์˜ค๋ฏผ์‹)
  4. ํ”„๋กœ์ ํŠธ ์ฃผ์ œ ์„ค๋ช…: Pick and Place (์ตœ์›๊ฐ•)
  5. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
  6. Requirements (์ตœ์›๊ฐ•)
  7. Reference Code Process Architecture (์˜ฅ์œค์ •)
  8. Reference Code ์„ค๋ช… (์ด์—ฐ์ˆ˜)
  9. ์‹œํ–‰์ฐฉ์˜ค
    • Image-to-Action
    • Camera-to-World Coordinate
    • ๊ธฐํƒ€ ๋“ฑ๋“ฑ (์˜ฅ์œค์ •)
  10. ์ตœ์ข… ๊ฒฐ๊ณผ (์˜ค๋ฏผ์‹)

1. ์Šคํ„ฐ๋”” ๋ชฉ์ 

  • ์Šคํ„ฐ๋”” ๊ธฐ๊ฐ„: 2024.03.15 ~ 2024.12.23

  • ๋ณธ ์Šคํ„ฐ๋””๋Š” ์‹ฌ์ธต ์‹ ๊ฒฝ๋ง ๊ฐ•ํ™”ํ•™์Šต(Deep Reinforcement Learning: DRL) ์„ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    ๊ธฐ์ดˆ ์ด๋ก ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์‹ค์ œ ๋กœ๋ด‡์— ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฒฐ๊ณผ์ ์œผ๋กœ, ์‹ค์ œ ๋กœ๋ด‡ ์ ์šฉ์—๋Š” ์‹คํŒจํ•˜์˜€์œผ๋‚˜, DRL์— ๋Œ€ํ•œ ์ด๋ก  ๋ฐ ๋™์ž‘ ๋ฐฉ์‹์„ ๊นŠ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.


2. ๊ฐ•ํ™”ํ•™์Šต ๊ธฐ๋ณธ ์ด๋ก 

๊ฐ•ํ™”ํ•™์Šต(Reinforcement Learning, RL) ์€ ์—์ด์ „ํŠธ(agent) ๊ฐ€ ํ™˜๊ฒฝ(environment) ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ ๋ณด์ƒ์„ ์ตœ๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ ์˜ ์ •์ฑ…(optimal policy) ์„ ํ•™์Šตํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ๋Š” ๋ฐ˜๋ณต์ ์œผ๋กœ ์ƒํƒœ(state) ๋ฅผ ๊ด€์ฐฐํ•˜๊ณ  ํ–‰๋™(action) ์„ ์„ ํƒํ•˜๋ฉฐ ํ™˜๊ฒฝ์—์„œ ๋ฐ˜ํ™˜๋œ ๋ณด์ƒ(reward) ์„ ํ†ตํ•ด ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

2.1 ๊ฐ•ํ™”ํ•™์Šต์˜ ์ฃผ์š” ์š”์†Œ

๊ฐ•ํ™”ํ•™์Šต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ์š”์†Œ๋“ค๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  1. ํ™˜๊ฒฝ (Environment)
  • ์—์ด์ „ํŠธ๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ณต๊ฐ„์ด๋ฉฐ, ํ–‰๋™์˜ ๊ฒฐ๊ณผ๋กœ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋ณด์ƒ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ™˜๊ฒฝ์€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ณต๊ฐ„, ๊ฒŒ์ž„ ํ™˜๊ฒฝ, ์‹ค์ œ ์„ธ๊ณ„ ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ: ๋กœ๋ด‡ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ, ์ฒด์Šค ๊ฒŒ์ž„ ๋ณด๋“œ
  1. ์ƒํƒœ (State)
  • ํ˜„์žฌ ํ™˜๊ฒฝ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •๋ณด์˜ ์ง‘ํ•ฉ
  • ์ƒํƒœ๋Š” ์—์ด์ „ํŠธ์˜ ํ–‰๋™์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ: ๋กœ๋ด‡ ํŒ”์˜ ํ˜„์žฌ ๊ฐ๋„์™€ ์œ„์น˜, ๊ฒŒ์ž„ ๋‚ด ์บ๋ฆญํ„ฐ์˜ ์ขŒํ‘œ
  1. ํ–‰๋™ (Action)
  • ์—์ด์ „ํŠธ๊ฐ€ ํŠน์ • ์ƒํƒœ์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘
  • ํ–‰๋™์€ ์ด์‚ฐ์ (discrete)์ผ ์ˆ˜๋„ ์žˆ๊ณ  ์—ฐ์†์ (continuous)์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ: ๋กœ๋ด‡ ํŒ”์„ ํŠน์ • ์ถ•์œผ๋กœ ํšŒ์ „์‹œํ‚ค๊ธฐ, ๊ฒŒ์ž„์—์„œ ์ด๋™ ๋ฐฉํ–ฅ ์„ ํƒ
  1. ๋ณด์ƒ (Reward)
  • ์—์ด์ „ํŠธ๊ฐ€ ํŠน์ • ํ–‰๋™์„ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋กœ ํ™˜๊ฒฝ์—์„œ ๋ฐ˜ํ™˜๋ฐ›๋Š” ๊ฐ’
  • ๋ณด์ƒ์€ ํ–‰๋™์ด ๋ชฉํ‘œ ๋‹ฌ์„ฑ์— ์–ผ๋งˆ๋‚˜ ๊ธฐ์—ฌํ–ˆ๋Š”์ง€ ํ”ผ๋“œ๋ฐฑ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ: ๋กœ๋ด‡์ด ๋ชฉํ‘œ ๋ฌผ์ฒด๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ง‘์œผ๋ฉด +1, ์‹คํŒจํ•˜๋ฉด -1
  1. ์ •์ฑ… (Policy)
  • ์—์ด์ „ํŠธ๊ฐ€ ์ฃผ์–ด์ง„ ์ƒํƒœ์—์„œ ์–ด๋–ค ํ–‰๋™์„ ์„ ํƒํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ทœ์น™ ๋˜๋Š” ํ•จ์ˆ˜
  • ์ •์ฑ…์€ ํ™•๋ฅ ์ ์œผ๋กœ ํ–‰๋™์„ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ๊ณ , ํ•ญ์ƒ ํŠน์ • ํ–‰๋™์„ ์„ ํƒํ•˜๋„๋ก ์„ค๊ณ„๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ•ํ™”ํ•™์Šต์˜ ๋ชฉํ‘œ๋Š” ์ตœ์ ์˜ ์ •์ฑ…์„ ํ•™์Šตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  1. ๊ฐ€์น˜ ํ•จ์ˆ˜ (Value Function)
  • ํŠน์ • ์ƒํƒœ์—์„œ ์—์ด์ „ํŠธ๊ฐ€ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์žฅ๊ธฐ์ ์ธ ๋ณด์ƒ์˜ ๊ธฐ๋Œ€๊ฐ’์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ๊ฐ€์น˜ ํ•จ์ˆ˜๋Š” ์ƒํƒœ ์ž์ฒด์˜ ๊ฐ€์น˜๋ฅผ ํ‰๊ฐ€ํ•˜๊ฑฐ๋‚˜, ์ƒํƒœ์™€ ํ–‰๋™ ์Œ์˜ ๊ฐ€์น˜๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

2.2 ๊ฐ•ํ™”ํ•™์Šต์˜ ์ฃผ์š” ํ•™์Šต ๋ฐฉ๋ฒ•

๊ฐ•ํ™”ํ•™์Šต์€ ํ•™์Šต ๋ฐฉ์‹์— ๋”ฐ๋ผ ๊ฐ€์น˜ ๊ธฐ๋ฐ˜ ํ•™์Šต(Value-Based Learning), ์ •์ฑ… ๊ธฐ๋ฐ˜ ํ•™์Šต(Policy-Based Learning), ๊ทธ๋ฆฌ๊ณ  ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ๊ฒฐํ•ฉํ•œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํ•™์Šต(Hybrid Learning) ์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

1. ๊ฐ€์น˜ ๊ธฐ๋ฐ˜ ํ•™์Šต (Value-Based Learning)

๊ฐ€์น˜ ๊ธฐ๋ฐ˜ ํ•™์Šต์€ ์ƒํƒœ-ํ–‰๋™ ์Œ์˜ ๊ฐ€์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•จ์ˆ˜(Q-๊ฐ’) ๋ฅผ ํ•™์Šตํ•˜์—ฌ ์ตœ์ ์˜ ํ–‰๋™์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฐฉ์‹์—์„œ๋Š” ์ •์ฑ…์ด ์ •์˜๋˜๋ฉฐ ์—์ด์ „ํŠธ๋Š” Q-๊ฐ’์ด ๊ฐ€์žฅ ๋†’์€ ํ–‰๋™์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  • ํŠน์ง•:

    • ์ƒํƒœ-ํ–‰๋™ ์Œ์˜ ๊ฐ€์น˜๋ฅผ ์˜ˆ์ธกํ•˜๋Š” Q-ํ•จ์ˆ˜ ํ•™์Šต
    • Q-๊ฐ’์„ ์ตœ๋Œ€ํ™”ํ•˜๋Š” ํ–‰๋™์„ ์„ ํƒ
  • ๋Œ€ํ‘œ ์•Œ๊ณ ๋ฆฌ์ฆ˜:

    • Q-๋Ÿฌ๋‹: ์ƒํƒœ์™€ ํ–‰๋™์˜ Q-๊ฐ’์„ ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ์—…๋ฐ์ดํŠธ
    • DQN (Deep Q-Network): Q-๋Ÿฌ๋‹์„ ์‹ฌ์ธต ์‹ ๊ฒฝ๋ง์œผ๋กœ ํ™•์žฅํ•˜์—ฌ ๊ณ ์ฐจ์› ์ƒํƒœ ๊ณต๊ฐ„์— ์ ์šฉ ๊ฐ€๋Šฅ
  • ์žฅ์ :

    • ์ด์‚ฐ์ ์ธ ํ–‰๋™ ๊ณต๊ฐ„์— ์ ํ•ฉ
    • ์ •์ฑ…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†์Œ
  • ๋‹จ์ :

    • ์—ฐ์†์ ์ธ ํ–‰๋™ ๊ณต๊ฐ„์—์„œ๋Š” ์ ์šฉ์ด ์–ด๋ ค์›€

2. ์ •์ฑ… ๊ธฐ๋ฐ˜ ํ•™์Šต (Policy-Based Learning)

์ •์ฑ… ๊ธฐ๋ฐ˜ ํ•™์Šต์€ ์ตœ์ ์˜ ์ •์ฑ…์„ ์ง์ ‘ ํ•™์Šตํ•˜์—ฌ ์—์ด์ „ํŠธ๊ฐ€ ํ–‰๋™์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
ํŠนํžˆ, ์—ฐ์†์ ์ธ ํ–‰๋™ ๊ณต๊ฐ„์—์„œ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ํŠน์ง•:

    • ์ƒํƒœ์— ๋”ฐ๋ผ ํ–‰๋™์„ ์„ ํƒํ•˜๋Š” ์ •์ฑ… ํ•จ์ˆ˜(Policy Function)๋ฅผ ์ง์ ‘ ํ•™์Šต
    • ํ™•๋ฅ ์  ์ •์ฑ…(ํ™•๋ฅ  ๋ถ„ํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ–‰๋™ ์„ ํƒ) ๋˜๋Š” ๊ฒฐ์ •์  ์ •์ฑ…(ํ•ญ์ƒ ํŠน์ • ํ–‰๋™ ์„ ํƒ)์ด ๊ฐ€๋Šฅ
  • ๋Œ€ํ‘œ ์•Œ๊ณ ๋ฆฌ์ฆ˜:

    • REINFORCE: ์ •์ฑ… ๊ฒฝ์‚ฌ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์ƒ์„ ์ตœ๋Œ€ํ™”ํ•˜๋„๋ก ์ •์ฑ…์„ ํ•™์Šต
    • DDPG (Deep Deterministic Policy Gradient): ์—ฐ์†์ ์ธ ํ–‰๋™ ๊ณต๊ฐ„์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒฐ์ •์  ์ •์ฑ… ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์žฅ์ :

    • ์—ฐ์†์ ์ธ ํ–‰๋™ ๊ณต๊ฐ„์— ์ ํ•ฉ
    • ํƒ์ƒ‰(exploration)๊ณผ ํ™œ์šฉ(exploitation)์„ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉ
  • ๋‹จ์ :

    • ๋ณด์ƒ์ด ํฌ๋ฐ•ํ•˜๊ฑฐ๋‚˜ ๋ณ€๋™์„ฑ์ด ํด ๋•Œ ํ•™์Šต์ด ๋ถˆ์•ˆ์ •

3. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํ•™์Šต (Hybrid Learning)

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํ•™์Šต์€ ๊ฐ€์น˜ ๊ธฐ๋ฐ˜ ํ•™์Šต๊ณผ ์ •์ฑ… ๊ธฐ๋ฐ˜ ํ•™์Šต์˜ ์žฅ์ ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋‘ ๋ฐฉ๋ฒ•์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ๋กœ ๊ฐ€์น˜ ํ•จ์ˆ˜์™€ ์ •์ฑ…์„ ๋™์‹œ์— ํ•™์Šตํ•˜์—ฌ ๋ณด๋‹ค ํšจ์œจ์ ์ธ ํ•™์Šต์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

  • ํŠน์ง•:

    • ์ •์ฑ…๊ณผ ๊ฐ€์น˜ ํ•จ์ˆ˜๊ฐ€ ์„œ๋กœ๋ฅผ ๋ณด์™„ํ•˜๋ฉฐ ํ•™์Šต
    • ๊ฐ€์น˜ ๊ธฐ๋ฐ˜ ๋ฐฉ๋ฒ•์€ ์ •์ฑ… ํ•™์Šต์„ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ œ๊ณต
  • ๋Œ€ํ‘œ ์•Œ๊ณ ๋ฆฌ์ฆ˜:

    • A3C (Asynchronous Advantage Actor-Critic): ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•ด ํšจ์œจ์ ์ธ ์ •์ฑ… ๋ฐ ๊ฐ€์น˜ ํ•™์Šต
    • TD3 (Twin Delayed Deep Deterministic Policy Gradient): DDPG์˜ ๊ฐœ์„  ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ์—ฐ์† ํ–‰๋™ ๊ณต๊ฐ„์—์„œ ์ •์ฑ… ํ•™์Šต์˜ ์•ˆ์ •์„ฑ์„ ํ–ฅ์ƒ
  • ์žฅ์ :

    • ๋ณต์žกํ•œ ํ™˜๊ฒฝ์—์„œ ๋” ์•ˆ์ •์ ์ด๊ณ  ํšจ๊ณผ์ 
    • ๊ฐ€์น˜ ํ•จ์ˆ˜์˜ ํ”ผ๋“œ๋ฐฑ์œผ๋กœ ์ •์ฑ…์˜ ํ•™์Šต ์†๋„๋ฅผ ๊ฐœ์„ 
  • ๋‹จ์ :

    • ๊ตฌํ˜„์ด ๋น„๊ต์  ๋ณต์žก
    • ํ•™์Šต ๊ณผ์ •์—์„œ ๋†’์€ ๊ณ„์‚ฐ ์ž์› ์š”๊ตฌ

2.3 ๊ฐ•ํ™”ํ•™์Šต์˜ ํ•™์Šต ๊ณผ์ •

๊ฐ•ํ™”ํ•™์Šต์€ ์—์ด์ „ํŠธ๊ฐ€ ํ™˜๊ฒฝ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค:

  1. ํ™˜๊ฒฝ ์ดˆ๊ธฐํ™”

    • ํ™˜๊ฒฝ์„ ์ดˆ๊ธฐ ์ƒํƒœ๋กœ ์„ค์ •ํ•˜๊ณ , ์—์ด์ „ํŠธ๋Š” ์ฒซ ๋ฒˆ์งธ ์ƒํƒœ๋ฅผ ๊ด€์ฐฐํ•ฉ๋‹ˆ๋‹ค.
  2. ํ–‰๋™ ์„ ํƒ

    • ์—์ด์ „ํŠธ๋Š” ํ˜„์žฌ ์ƒํƒœ์—์„œ ์ •์ฑ…์— ๋”ฐ๋ผ ํ–‰๋™์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ํƒ์ƒ‰(Exploration)๊ณผ ํ™œ์šฉ(Exploitation)์˜ ๊ท ํ˜•์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  3. ํ™˜๊ฒฝ ์ƒํ˜ธ์ž‘์šฉ

    • ์—์ด์ „ํŠธ์˜ ํ–‰๋™์— ๋”ฐ๋ผ ํ™˜๊ฒฝ์€ ์ƒˆ๋กœ์šด ์ƒํƒœ์™€ ๋ณด์ƒ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ •์ฑ… ๋ฐ ๊ฐ€์น˜ ์—…๋ฐ์ดํŠธ

    • ์—์ด์ „ํŠธ๋Š” ๊ฒฝํ—˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •์ฑ…๊ณผ ๊ฐ€์น˜ ํ•จ์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐ˜๋ณต

    • ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ๊นŒ์ง€ ์œ„ ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

3. DRL ์„ค๋ช…

3.1 DQN (Deep Q-Network) ์ด๋ก  ๋ฐ ๊ตฌ์กฐ ์„ค๋ช…

DQN(Deep Q-Network)์€ **๊ฐ•ํ™” ํ•™์Šต(Reinforcement Learning)**์—์„œ Q-๋Ÿฌ๋‹์„ ๋”ฅ๋Ÿฌ๋‹์œผ๋กœ ํ™•์žฅํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

1. Q-๋Ÿฌ๋‹์˜ ํ•œ๊ณ„

Q-๋Ÿฌ๋‹์€ ์ƒํƒœ-ํ–‰๋™(State-Action) ์Œ์„ ์ €์žฅํ•˜๋Š” Q-ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๊ทธ๋Ÿฌ๋‚˜ ์ƒํƒœ ๊ณต๊ฐ„์ด ํฌ๊ฑฐ๋‚˜ ์—ฐ์†์ ์ด๋ฉด Q-ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐ ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ณ„์‚ฐ ๋น„์šฉ์ด ๋„ˆ๋ฌด ํฝ๋‹ˆ๋‹ค.
  • ์˜ˆ: ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„ ๊ฐ™์€ ๊ฒฝ์šฐ ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ์ƒํƒœ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

2. ๋”ฅ๋Ÿฌ๋‹์„ ํ™œ์šฉํ•œ Q ๊ฐ’ ์ถ”์ •

DQN์€ ๋”ฅ๋Ÿฌ๋‹์„ ํ™œ์šฉํ•ด Q-๋Ÿฌ๋‹์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  • Q-ํ•จ์ˆ˜๋ฅผ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ(์ฃผ๋กœ ์‹ ๊ฒฝ๋ง)๋กœ ๊ทผ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
    • ์ƒํƒœ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ํ–‰๋™๋ณ„ Q ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ: Q(s, a) ๋Œ€์‹  NN(s) -> [Q(s, a1), Q(s, a2), ..., Q(s, an)]

3. DQN์˜ ํ•ต์‹ฌ ์š”์†Œ

DQN์€ ๋‹ค์Œ ์ฃผ์š” ๊ธฐ์ˆ ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

(1) ๋ฆฌํ”Œ๋ ˆ์ด ๋ฒ„ํผ(Experience Replay)

  • ํ•™์Šต ์‹œ ์ƒ˜ํ”Œ์˜ ์ƒ๊ด€๊ด€๊ณ„ ์ œ๊ฑฐ์™€ ๋ฐ์ดํ„ฐ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค,
  • ์—์ด์ „ํŠธ๊ฐ€ ๊ฒฝํ—˜ํ•œ (์ƒํƒœ, ํ–‰๋™, ๋ณด์ƒ, ๋‹ค์Œ ์ƒํƒœ)๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌด์ž‘์œ„๋กœ ์ƒ˜ํ”Œ๋งํ•ด ๋„คํŠธ์›Œํฌ๋ฅผ ํ•™์Šต์‹œ์ผœ ๋ฐ์ดํ„ฐ ์ค‘๋ณต ์‚ฌ์šฉ ๋ฐ ํŽธํ–ฅ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

(2) ํƒ€๊ฒŸ ๋„คํŠธ์›Œํฌ(Target Network):

  • Q ๊ฐ’์„ ํ•™์Šตํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ถˆ์•ˆ์ •์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Q(s, a)์˜ ํƒ€๊ฒŸ๊ฐ’(r + ฮณ * max_a' Q(s', a'))์„ ์•ˆ์ •์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ํƒ€๊ฒŸ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ํƒ€๊ฒŸ ๋„คํŠธ์›Œํฌ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ํ˜„์žฌ ๋„คํŠธ์›Œํฌ์˜ ๊ฐ€์ค‘์น˜๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ํ•™์Šต ๋„์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์ง„๋™(oscillation)์„ ์ค„์ž…๋‹ˆ๋‹ค.

(3) ํƒํ—˜ vs ํ™œ์šฉ(Exploration vs Exploitation):

  • ํƒํ—˜(Exploration): ์ƒˆ๋กœ์šด ํ–‰๋™์„ ์‹œ๋„ํ•ด ํ™˜๊ฒฝ์„ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  • ํ™œ์šฉ(Exploitation): ํ˜„์žฌ ์•Œ๊ณ  ์žˆ๋Š” ์ตœ์ ์˜ ํ–‰๋™์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • DQN์€ ฮต-greedy ์ •์ฑ…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ํ™•๋ฅ  ฮต๋กœ ๋žœ๋ค ํ–‰๋™(ํƒํ—˜), 1-ฮต๋กœ ์ตœ์  ํ–‰๋™(ํ™œ์šฉ)์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ํ•™์Šต์ด ์ง„ํ–‰๋ ์ˆ˜๋ก ฮต ๊ฐ’์„ ์ค„์—ฌ ์ ์  ๋” ํ™œ์šฉ์„ ์šฐ์„ ์‹œํ•ฉ๋‹ˆ๋‹ค.

(4) ์†์‹ค ํ•จ์ˆ˜(Loss Function):

  • ๋ฒจ๋งŒ ๋ฐฉ์ •์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์†์‹ค์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
    • Q(s, a; ฮธ): ํ˜„์žฌ ๋„คํŠธ์›Œํฌ์—์„œ ์˜ˆ์ธกํ•œ Q ๊ฐ’
    • r + ฮณ * max_a' Q(s', a'; ฮธ^-): ํƒ€๊ฒŸ ๋„คํŠธ์›Œํฌ์—์„œ ๊ณ„์‚ฐํ•œ ์‹ค์ œ Q ๊ฐ’
    • ์ด ์ฐจ์ด๋ฅผ ์ตœ์†Œํ™”ํ•˜๋„๋ก ๋„คํŠธ์›Œํฌ๋ฅผ ํ•™์Šต์‹œํ‚ต๋‹ˆ๋‹ค.

4. DQN์˜ ๋™์ž‘ ํ๋ฆ„

  1. ํ™˜๊ฒฝ ์ดˆ๊ธฐํ™”
    • ์ดˆ๊ธฐ ์ƒํƒœ S0 ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ–‰๋™ ์„ ํƒ
    • ฮต-greedy ์ •์ฑ…์— ๋”ฐ๋ผ ํ–‰๋™ (A_t)๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ํ–‰๋™์„ ๋ฌด์ž‘์œ„(ํƒํ—˜)๋กœ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ํ˜„์žฌ Q ๊ฐ’ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ ํƒ(ํ™œ์šฉ)ํ•ฉ๋‹ˆ๋‹ค.
  3. ํ™˜๊ฒฝ ์ƒํ˜ธ์ž‘์šฉ
    • ํ–‰๋™ (At)๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๋ณด์ƒ(Rt) ๋ฐ ๋‹ค์Œ ์ƒํƒœ (St+1)๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฆฌํ”Œ๋ ˆ์ด ๋ฒ„ํผ ์ €์žฅ
    • (St, At, Rt, St+1)๋ฅผ ๋ฆฌํ”Œ๋ ˆ์ด ๋ฒ„ํผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  5. Q-๋„คํŠธ์›Œํฌ ํ•™์Šต
    • ๋ฆฌํ”Œ๋ ˆ์ด ๋ฒ„ํผ์—์„œ ์ƒ˜ํ”Œ์„ ์ถ”์ถœํ•ด ๋ฒจ๋งŒ ๋ฐฉ์ •์‹ ๊ธฐ๋ฐ˜ ์†์‹ค์„ ์ตœ์†Œํ™”ํ•˜๋„๋ก ๋„คํŠธ์›Œํฌ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.
  6. ํƒ€๊ฒŸ ๋„คํŠธ์›Œํฌ ์—…๋ฐ์ดํŠธ
    • ์ฃผ๊ธฐ์ ์œผ๋กœ ํƒ€๊ฒŸ ๋„คํŠธ์›Œํฌ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  7. ๋ฐ˜๋ณต
    • ๋ชฉํ‘œ ๋ณด์ƒ์ด ์ถฉ๋ถ„ํžˆ ๋†’์•„์งˆ ๋•Œ๊นŒ์ง€ ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

3.2 TD3 (Twin Delayed Deep Deterministic Policy Gradient) ์ด๋ก  ๋ฐ ๊ตฌ์กฐ ์„ค๋ช…

๋กœ๋ด‡ ํŒ” Pick and Place ๊ตฌํ˜„์„ ์œ„ํ•ด TD3 (Twin Delayed Deep Deterministic Policy Gradient) ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜์˜€์œผ๋‚˜ ์ตœ์ข…์ ์œผ๋กœ๋Š” ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ก  ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•˜์˜€์œผ๋ฉฐ, ์ฐธ๊ณ ํ•œ ๋…ผ๋ฌธ์— ๋Œ€ํ•œ ๋ฆฌ๋ทฐ๋Š” "ppt" ํด๋”์— ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

TD3๋Š” DDPG (Deep Deterministic Policy Gradient) ์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์ œ์•ˆ๋œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ์—ฐ์†์ ์ธ ์•ก์…˜ ๊ณต๊ฐ„์—์„œ ์ž‘๋™ํ•˜๋ฉฐ, ์ •์ฑ…์˜ ์•ˆ์ •์„ฑ๊ณผ ํ•™์Šต ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. TD3๋Š” ๋‘ ๊ฐœ์˜ ์ฃผ์š” ๋„คํŠธ์›Œํฌ์ธ Actor Network์™€ Critic Network๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ •์ฑ…(Actor)๊ณผ ๊ฐ€์น˜ ํ•จ์ˆ˜(Critic)๋ฅผ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

(๊ทธ๋ฆผ ์ถ”๊ฐ€)

1. ๊ตฌ์กฐ์™€ ๊ตฌ์„ฑ ์š”์†Œ

(1) Replay Buffer

  • ์—ญํ• : ์—์ด์ „ํŠธ๊ฐ€ ํ™˜๊ฒฝ์—์„œ ์ˆ˜์ง‘ํ•œ ๊ฒฝํ—˜ (s, a, r, s')์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชฉ์ : ๋ฐ์ดํ„ฐ์˜ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ์ค„์ด๊ณ  ํ•™์Šต ์•ˆ์ •ํ™”๋ฅผ ์œ„ํ•ด ๋ฌด์ž‘์œ„๋กœ ์ƒ˜ํ”Œ๋งํ•ฉ๋‹ˆ๋‹ค.

(2) Critic Network

  • ์—ญํ• : ์ƒํƒœ-ํ–‰๋™ ์Œ (s, a)์— ๋Œ€ํ•œ Q-๊ฐ’์„ ์ถ”์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ์„ฑ: ๋‘ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ Q-ํ•จ์ˆ˜ critic1, critic2์™€ ์ด๋“ค์˜ ํƒ€๊ฒŸ ๋„คํŠธ์›Œํฌ(target1, target2)๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ํ•ต์‹ฌ:
    1. ๋‘ Q-๊ฐ’ ์ค‘ ๋” ์ž‘์€ ๊ฐ’์„ ์„ ํƒํ•˜์—ฌ ๊ณผ๋Œ€ํ‰๊ฐ€ ๋ฐฉ์ง€(overestimation bias) ํ•ฉ๋‹ˆ๋‹ค.
    2. TD ์—๋Ÿฌ ๊ธฐ๋ฐ˜์œผ๋กœ Critic Network ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

(3) Actor Network

  • ์—ญํ• : ์ฃผ์–ด์ง„ ์ƒํƒœ s์— ๋Œ€ํ•ด ์ตœ์ ์˜ ํ–‰๋™ a๋ฅผ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ์„ฑ: Actor์™€ Target ๋‘ ๋„คํŠธ์›Œํฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ์—…๋ฐ์ดํŠธ: Critic Network๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ Q-๊ฐ’์„ ์ตœ๋Œ€ํ™”ํ•˜๋„๋ก ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

(4) Environment

  • ์—ญํ• : Actor Network์—์„œ ์ƒ์„ฑ๋œ ํ–‰๋™ a๋ฅผ ๋ฐ›์•„๋“ค์—ฌ ์ƒˆ๋กœ์šด ์ƒํƒœ s'์™€ ๋ณด์ƒ r์„ ๋ฐ˜ํ™˜.
  • ๋ฐ˜ํ™˜๋œ ๊ฒฝํ—˜ (s, a, r, s')์€ Replay Buffer์— ์ €์žฅ.

2. TD3์˜ ํ•ต์‹ฌ

  1. Double Q-Learning
  • ๋‘ Critic Network๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Q-๊ฐ’์˜ ๊ณผ๋Œ€ํ‰๊ฐ€๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  1. Target Policy Smoothing
  • Actor Network์— ๋…ธ์ด์ฆˆ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธ‰๊ฒฉํ•œ ์ •์ฑ… ๋ณ€ํ™”๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ๊ณผ์ ํ•ฉ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  1. Delayed Policy Update
  • Critic Network๋Š” ๋งค ์—…๋ฐ์ดํŠธ๋งˆ๋‹ค ํ•™์Šต๋˜์ง€๋งŒ, Actor Network๋Š” ์ผ์ • ์ฃผ๊ธฐ๋งˆ๋‹ค ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์•ˆ์ •์„ฑ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.

3. TD3 ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋™์ž‘ ์ˆœ์„œ

  1. ์ดˆ๊ธฐํ™”

    • Actor์™€ Critic ๋„คํŠธ์›Œํฌ ์ดˆ๊ธฐํ™”.
    • Replay Buffer ์ดˆ๊ธฐํ™”.
  2. ๊ฒฝํ—˜ ์ˆ˜์ง‘

    • Actor ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํ–‰๋™ a_t๋ฅผ ์„ ํƒ.
    • ํ™˜๊ฒฝ์—์„œ ํ–‰๋™์„ ์‹คํ–‰ํ•˜๊ณ  ๋ณด์ƒ r_t์™€ ๋‹ค์Œ ์ƒํƒœ s_{t+1} ๋ฐ˜ํ™˜.
    • ๊ฒฝํ—˜ (s_t, a_t, r_t, s_{t+1})์„ Replay Buffer์— ์ €์žฅ.
  3. ์ƒ˜ํ”Œ๋ง ๋ฐ ํ•™์Šต

    • Replay Buffer์—์„œ ๋ฌด์ž‘์œ„๋กœ ๊ฒฝํ—˜ ์ƒ˜ํ”Œ๋ง.
    • Critic Network๋ฅผ ์—…๋ฐ์ดํŠธ(TD ์—๋Ÿฌ ๊ธฐ๋ฐ˜).
    • Actor Network๋Š” Critic Network ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ๋งˆ๋‹ค ํ•™์Šต.
  4. ํƒ€๊ฒŸ ๋„คํŠธ์›Œํฌ ์—…๋ฐ์ดํŠธ

    • Critic ํƒ€๊ฒŸ๊ณผ Actor ํƒ€๊ฒŸ ๋„คํŠธ์›Œํฌ๋ฅผ ์ง€์—ฐ๋œ ์†Œํ”„ํŠธ ์—…๋ฐ์ดํŠธ ์ˆ˜ํ–‰.
  5. ๋ฐ˜๋ณต

    • ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ •์ฑ…๊ณผ Q-ํ•จ์ˆ˜๋ฅผ ์ตœ์ ํ™”.

4. ํ”„๋กœ์ ํŠธ ์ฃผ์ œ ์„ค๋ช…: Pick and Place

  1. Pick-and-Place ์ž‘์—…

    • ๋กœ๋ด‡์ด ํ™˜๊ฒฝ์—์„œ ๋ฌผ์ฒด๋ฅผ ํƒ์ง€ํ•˜๊ณ  ์ •ํ™•ํ•œ ์œ„์น˜๋กœ ์ด๋™ํ•˜์—ฌ ์ง‘์–ด ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.
    • ๋ฌผ์ฒด๋ฅผ ๋ชฉํ‘œ ์œ„์น˜์— ๋ฐฐ์น˜ํ•˜์—ฌ ์ž‘์—…์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฐ•ํ™” ํ•™์Šต ์ ์šฉ

    • ๊ฐ•ํ™” ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜(DQN)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋ด‡์˜ ํ–‰๋™์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.
    • ๋กœ๋ด‡์€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜๋œ ํ™˜๊ฒฝ(PyBullet)์—์„œ ๋‹ค์–‘ํ•œ ๋ฌผ์ฒด์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.
  3. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ

    • PyBullet์„ ํ™œ์šฉํ•˜์—ฌ ํ˜„์‹ค์ ์ธ ๋ฌผ๋ฆฌ ํ™˜๊ฒฝ์„ ๋ชจ๋ธ๋งํ•ฉ๋‹ˆ๋‹ค.
    • ๋‹ค์–‘ํ•œ ๋ฌผ์ฒด ํ˜•ํƒœ(L์žํ˜•, Z์žํ˜• ๋“ฑ)์™€ ์œ„์น˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋กœ๋ด‡์ด ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

5. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ ๊ตฌ์„ฑ

1. ๋กœ๋ด‡ ํ™˜๊ฒฝ (Environment)

  • AmbienteRobot.py ํŒŒ์ผ:
    • RobotEnv ํด๋ž˜์Šค์—์„œ ๋กœ๋ด‡์˜ ํ–‰๋™, ๊ด€์ฐฐ, ๋ณด์ƒ ๋“ฑ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ด€์ฐฐ ๊ณต๊ฐ„:
    • ์นด๋ฉ”๋ผ ์ด๋ฏธ์ง€(37x37 ํฌ๊ธฐ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ด๋ฏธ์ง€)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌผ์ฒด์˜ ์œ„์น˜์™€ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ํ–‰๋™ ๊ณต๊ฐ„:
    • ๋กœ๋ด‡์˜ ์œ„์น˜ ์กฐ์ • ๋ฐ ๊ทธ๋ฆฌํผ(์ง‘๊ฒŒ) ์กฐ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณด์ƒ ์„ค๊ณ„:
    • ๋ฌผ์ฒด๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๋“ค์–ด ์˜ฌ๋ฆฌ๋ฉด +1 ๋ณด์ƒ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
    • ์‹คํŒจ ์‹œ -2 ํŽ˜๋„ํ‹ฐ๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฌผ์ฒด์™€ ๋ชฉํ‘œ ์œ„์น˜ ๊ฐ„ ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณด์ƒ ์„ธ๋ถ„ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2. ๊ฐ•ํ™” ํ•™์Šต ๋ชจ๋ธ

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜:
    • DQN(Deep Q-Network)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋ด‡์ด ํ™˜๊ฒฝ์—์„œ ์ตœ์ ์˜ ํ–‰๋™์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.
  • ํ›ˆ๋ จ ์„ค์ •:
    • ํŒŒ์ผ: TrainEnvPandaPP.py
    • ์ •์ฑ… ๋„คํŠธ์›Œํฌ: CnnPolicy (์ด๋ฏธ์ง€๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š” CNN ๊ธฐ๋ฐ˜)
    • ํ•™์Šต๋ฅ , ํƒํ—˜ ์ „๋žต(ฮต-greedy), ๋ฐฐ์น˜ ํฌ๊ธฐ ๋“ฑ ์ตœ์ ํ™”๋œ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
  • ๋ชจ๋ธ ํŒŒ์ผ:
    • ํ›ˆ๋ จ๋œ ๋ชจ๋ธ(dqn_Z_6.zip)์€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

3. ๋ฌผ์ฒด์˜ ํ˜•ํƒœ์™€ ํ™˜๊ฒฝ ์„ค์ •

  • ๋‹ค์–‘ํ•œ ๋ฌผ์ฒด ํ˜•ํƒœ:
    • L์žํ˜•, Z์žํ˜• ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๋ฌผ์ฒด๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„์น˜ ๋ฐ ๋ฐฉํ–ฅ ์„ค์ •:
    • ๋ฌผ์ฒด์˜ ์ดˆ๊ธฐ ์œ„์น˜์™€ ๋ฐฉํ–ฅ์„ ๋ฌด์ž‘์œ„๋กœ ์„ค์ •ํ•˜์—ฌ ํ™˜๊ฒฝ์„ ๋‹ค์–‘ํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์นด๋ฉ”๋ผ ์‹œ์  ๋ฐ ํ–‰๋™ ์กฐ์ •:
    • ์นด๋ฉ”๋ผ ์‹œ์ ๊ณผ ๋กœ๋ด‡ ํ–‰๋™์„ ์กฐ์ •ํ•ด ํ˜„์‹ค์ ์ธ ํ•™์Šต ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

4. ํ›ˆ๋ จ๊ณผ ํ…Œ์ŠคํŠธ

  • ํ›ˆ๋ จ:
    • ๋ณ‘๋ ฌ ํ™˜๊ฒฝ(SubprocVecEnv)์„ ์‚ฌ์šฉํ•˜์—ฌ ํ›ˆ๋ จ ์†๋„๋ฅผ ํ–ฅ์ƒํ•ฉ๋‹ˆ๋‹ค.
    • TensorBoard๋กœ ํ•™์Šต ๊ณผ์ •์„ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ:
    • ํŒŒ์ผ: main.py
    • ํ›ˆ๋ จ๋œ ๋ชจ๋ธ์„ ๋กœ๋“œํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์ˆ˜ํ–‰ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

6. Requirements

6.1 ํ•„์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๋ฒ„์ „

  • Python: 3.8
  • PyBullet: 3.2.5
  • OpenCV(cv2): 4.9.0
  • Stable-Baselines3: 2.4.0 (Python 3.8 ์ง€์›์˜ ๋งˆ์ง€๋ง‰ ๋ฒ„์ „)
  • Gymnasium: 0.28.1
  • NumPy: 2.2.0
  • YOLO: V5

6.2 ํ™˜๊ฒฝ ๊ตฌ์„ฑ

  1. conda ํ™˜๊ฒฝ ๊ตฌ์„ฑ
conda create -n DRL_study python=3.8
  1. conda ํ™˜๊ฒฝ ํ™œ์„ฑํ™”
conda activate DRL_study
  1. ํ•„์ˆ˜ ํŒจํ‚ค์ง€ ์„ค์น˜
pip install -r requirements.txt

7. ref code process architecture

Reference Code: GitHub Repository

1. ์ดˆ๊ธฐ ์„ค์ • ๋ฐ ๋ชจ๋ธ ๋กœ๋“œ

  • ์ฝ”๋“œ ์‹คํ–‰ ์‹œ load_model() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์‚ฌ์ „ ํ•™์Šต๋œ YOLO ๊ฐ์ฒด ํƒ์ง€ ๋ชจ๋ธ์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • ๋กœ๋ด‡์˜ ์ดˆ๊ธฐ ์ƒํƒœ๋Š” reset_robot()์„ ํ†ตํ•ด ๊ด€์ ˆ๊ณผ ๊ทธ๋ฆฌํผ๋ฅผ ์ดˆ๊ธฐ ์œ„์น˜๋กœ ์„ค์ •ํ•˜๋ฉฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ๋„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

2. ๊ฐ์ฒด ํƒ์ง€

  • ์นด๋ฉ”๋ผ ์ด๋ฏธ์ง€ ๋˜๋Š” ์ฃผ์–ด์ง„ ์ž…๋ ฅ ์ด๋ฏธ์ง€๋ฅผ detect() ํ•จ์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • YOLO ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ์†์—์„œ ๊ฐ์ฒด์˜ ์œ„์น˜์™€ ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ํƒ์ง€ํ•˜๋ฉฐ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค์™€ ํƒ์ง€๋œ ํด๋ž˜์Šค ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

3. ์ค‘์‹ฌ ์ขŒํ‘œ ๊ณ„์‚ฐ

  • ํƒ์ง€๋œ ๊ฐ์ฒด์˜ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ calculate_centroid() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด์˜ ์ค‘์‹ฌ ์ขŒํ‘œ(์ด๋ฏธ์ง€ ์ƒ์˜ ํ”ฝ์…€ ์œ„์น˜)๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์ดํ›„ ๋กœ๋ด‡์ด ํ•ด๋‹น ์œ„์น˜๋ฅผ ๋ชฉํ‘œ๋กœ ์‚ผ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

4. ๋กœ๋ด‡ ์ด๋™

  • move_robot() ํ•จ์ˆ˜๋Š” ๋กœ๋ด‡์˜ ๊ด€์ ˆ ๊ฐ๋„๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ๋กœ๋ด‡์˜ ๋๋‹จ(End Effector)์ด ๊ฐ์ฒด์˜ ์œ„์น˜๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€์ ์œผ๋กœ calculateIK()๋ฅผ ํ†ตํ•ด ๋ชฉํ‘œ ์œ„์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์—ญ์šด๋™ํ•™(Inverse Kinematics)์„ ๊ณ„์‚ฐํ•˜๊ณ  ๊ด€์ ˆ ์ œ์–ด ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

5. ๊ทธ๋ฆฌํผ ๋™์ž‘

  • ๋กœ๋ด‡์ด ๊ฐ์ฒด ๊ทผ์ฒ˜์— ๋„์ฐฉํ•˜๋ฉด closeGripper()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฌผ์ฒด๋ฅผ ์ง‘์„ ์ˆ˜ ์žˆ๋„๋ก ๊ทธ๋ฆฌํผ๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด๋ฅผ ์ด๋™ํ•œ ๋’ค, openGripper()๋กœ ๊ทธ๋ฆฌํผ๋ฅผ ์—ด์–ด ๊ฐ์ฒด๋ฅผ ๋†“์Šต๋‹ˆ๋‹ค.

6. ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ๋ฐฐ์น˜

  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ ๋‚ด ๊ฐ์ฒด๋Š” create_parallelepiped(), create_l_object(), create_z_object()์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๊ฐ์ฒด๋ฅผ ํŠน์ • ์œ„์น˜์— ๋ฐฐ์น˜ํ•˜๋ฉฐ ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

7. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์—…๋ฐ์ดํŠธ

  • ๋กœ๋ด‡์˜ ์›€์ง์ž„๊ณผ ํ™˜๊ฒฝ์˜ ๋™์ž‘์€ p.stepSimulation()์„ ํ†ตํ•ด ์ง€์†์ ์œผ๋กœ ๊ฐฑ์‹ ๋˜๋ฉฐ ๋ชจ๋“  ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • simulate_movement()๋Š” ๋ชฉํ‘œ ์œ„์น˜๊นŒ์ง€ ๋กœ๋ด‡์ด ํšจ์œจ์ ์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ๋ฐ˜๋ณต์ ์ธ ๊ณ„์‚ฐ๊ณผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋‹จ๊ณ„๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

8. ์ข…๋ฃŒ ๋ฐ ๋ฐ˜๋ณต

  • ๋ชจ๋“  ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„, ๋กœ๋ด‡๊ณผ ๊ฐ์ฒด์˜ ์ƒํƒœ๋Š” ์ดˆ๊ธฐํ™”๋˜๊ฑฐ๋‚˜ ๋‹ค์Œ ์ž‘์—… ํ๋ฆ„์„ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๋ช…๋ น์„ ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค.

8. ref code ์„ค๋ช…

ref code๋Š” PyBullet ๊ธฐ๋ฐ˜์˜ ๋กœ๋ด‡ ๊ฐ•ํ™”ํ•™์Šต ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜์—ฌ ์—์ด์ „ํŠธ๊ฐ€ ๋กœ๋ด‡ ์กฐ์ž‘ ์ž‘์—…์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋Š” ํ™˜๊ฒฝ ์ดˆ๊ธฐํ™”, ๋กœ๋ด‡ ์ œ์–ด, ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ๊ด€์ฐฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์ฝ”๋“œ์˜ ์ฃผ์š” ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

1. RobotEnv ํด๋ž˜์Šค

RobotEnv ํด๋ž˜์Šค๋Š” PyBullet ํ™˜๊ฒฝ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ•ํ™”ํ•™์Šต์— ์ ํ•ฉํ•œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ์—ญํ• 
    • ๋กœ๋ด‡๊ณผ ๊ฐ์ฒด ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ตฌํ˜„
    • ๊ด€์ฐฐ๊ฐ’๊ณผ ๋ณด์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๊ฐ•ํ™”ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์ „๋‹ฌ
    • ๋‹ค์–‘ํ•œ ๋™์ž‘์„ ์ •์˜ํ•˜์—ฌ ์—์ด์ „ํŠธ๊ฐ€ ํ•™์Šต ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

2. ์ฃผ์š” ๋ฉ”์„œ๋“œ ์„ค๋ช…

2.1 ํ™˜๊ฒฝ ์ดˆ๊ธฐํ™”

  • __init__()

    • PyBullet ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ฉฐ, GUI ๋˜๋Š” ๋น„GUI ๋ชจ๋“œ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    • ๋กœ๋ด‡(Panda ๋กœ๋ด‡)๊ณผ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์นด๋ฉ”๋ผ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ๊ฐ์ฒด ์ค‘์‹ฌ์˜ ๊ด€์ฐฐ๊ฐ’์„ ์ƒ์„ฑํ•˜๋ฉฐ ํ–‰๋™ ๋ฐ ๊ด€์ฐฐ ๊ณต๊ฐ„์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • reset()

    • ์ƒˆ๋กœ์šด ์—ํ”ผ์†Œ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ํ™˜๊ฒฝ์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ์ฒด์˜ ์ดˆ๊ธฐ ์œ„์น˜์™€ ์ž์„ธ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ƒ์„ฑํ•˜๊ณ  ๋กœ๋ด‡์˜ ๊ด€์ ˆ ์ƒํƒœ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ์ดˆ๊ธฐ ๊ด€์ฐฐ๊ฐ’๊ณผ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

2.2 ๋กœ๋ด‡ ๋™์ž‘

  • move_the_robot(target_position, angle)

    • ๋กœ๋ด‡์„ ๋ชฉํ‘œ ์œ„์น˜๋กœ ์ด๋™์‹œํ‚ค๊ณ  ๋ฌผ์ฒด๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์ผ๋ จ์˜ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋™ ๊ณผ์ •
      1. ๋กœ๋ด‡์„ ๋ฌผ์ฒด ์ƒ๋‹จ์œผ๋กœ ์ด๋™
      2. ๋กœ๋ด‡์„ ๋ฌผ์ฒด ๊ทผ์ฒ˜๋กœ ๋‚ฎ์ถค
      3. ๊ทธ๋ฆฌํผ๋ฅผ ๋‹ซ์•„ ๋ฌผ์ฒด๋ฅผ ์ง‘์Œ
      4. ๋ฌผ์ฒด๋ฅผ ๋ชฉํ‘œ ๋†’์ด๋กœ ๋“ค์–ด ์˜ฌ๋ฆผ
    • calculateIK()๋ฅผ ํ†ตํ•ด ์—ญ์šด๋™ํ•™(Inverse Kinematics)์„ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฐ ๊ด€์ ˆ์˜ ๋ชฉํ‘œ ๊ฐ๋„๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ ๋‹จ๊ณ„์—์„œ PyBullet์˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์Šคํ…(p.stepSimulation())์„ ์‹คํ–‰ํ•˜์—ฌ ๋กœ๋ด‡ ๋™์ž‘์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • closeGripper() / openGripper()

    • ๊ทธ๋ฆฌํผ๋ฅผ ๋‹ซ๊ฑฐ๋‚˜ ์—ฌ๋Š” ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ๋‹ซ๊ธฐ ๋™์ž‘ ์ค‘ ํŠน์ • ํž˜ ์ด์ƒ์˜ ์ €ํ•ญ์ด ๊ฐ์ง€๋˜๋ฉด ๋™์ž‘์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.
    • ๊ทธ๋ฆฌํผ๋Š” ๊ฐ์ฒด๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์žก๊ฑฐ๋‚˜ ๋†“์„ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2.3 ๊ด€์ฐฐ ๋ฐ ๋ณด์ƒ

  • get_observation()

    • PyBullet ์นด๋ฉ”๋ผ๋ฅผ ํ†ตํ•ด ํ™˜๊ฒฝ ์ด๋ฏธ์ง€๋ฅผ ์บก์ฒ˜ํ•˜๊ณ , ๊ฐ์ฒด ์ค‘์‹ฌ์˜ ํ”ฝ์…€ ๋ธ”๋ก์œผ๋กœ ๋ณ€ํ™˜๋œ ๊ด€์ฐฐ๊ฐ’์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๊ณผ์ •
      1. ๊ฐ์ฒด์˜ ์œค๊ณฝ์„ ์„ ๊ฒ€์ถœํ•˜์—ฌ ์ด๋ฏธ์ง€ ์ƒ์—์„œ ์œ„์น˜๋ฅผ ์‹๋ณ„
      2. ์œค๊ณฝ์„ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ์ฒด์˜ ์ค‘์‹ฌ ์ขŒํ‘œ๋ฅผ ๊ณ„์‚ฐ
      3. ๊ด€์ฐฐ ์ด๋ฏธ์ง€๋ฅผ 37x37 ํฌ๊ธฐ์˜ ์ด์ง„ํ™”๋œ ํ”ฝ์…€ ๋ธ”๋ก์œผ๋กœ ๋ณ€ํ™˜
    • ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋กœ๋ด‡์ด ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด ์ •๋ณด๋ฅผ ๊ฐ•ํ™”ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค
  • calculate_reward()

    • ๊ฐ์ฒด๊ฐ€ ๋ชฉํ‘œ ๋†’์ด์— ๋„๋‹ฌํ–ˆ๋Š”์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณด์ƒ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
    • ๋ณด์ƒ ๊ตฌ์กฐ
      • ๋ชฉํ‘œ ๋†’์ด์— ๋„๋‹ฌ ์‹œ +1
      • ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ๋ชฉํ‘œ ๋†’์ด์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•˜๋ฉด -2
    • ๋ณด์ƒ ์„ค๊ณ„๋Š” ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜ ๋ณด์ƒ ๋“ฑ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅ

2.4 ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ๋ฐฐ์น˜

  • create_parallelepiped() / create_l_object() / create_z_object()

    • ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๊ฐ์ฒด๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ์— ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ ๊ฐ์ฒด๋Š” ์ดˆ๊ธฐ ์œ„์น˜์™€ ์ž์„ธ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์„ค์ •ํ•˜๋ฉฐ URDF ํ˜•์‹์„ ํ†ตํ•ด PyBullet์— ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.
  • generate_new_pose()

    • ๊ฐ์ฒด์˜ ์ดˆ๊ธฐ ์œ„์น˜์™€ ์ž์„ธ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ ์„ค์ •์„ ํ†ตํ•ด ํ•™์Šต ๋ฐ์ดํ„ฐ์˜ ๋‹ค์–‘์„ฑ์„ ๋†’์ด๊ณ  ์—์ด์ „ํŠธ์˜ ์ผ๋ฐ˜ํ™” ์„ฑ๋Šฅ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.

2.5 ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋™์ž‘

  • step(action)

    • ์ฃผ์–ด์ง„ ํ–‰๋™(action)์— ๋”ฐ๋ผ ๋กœ๋ด‡์˜ ๋™์ž‘์„ ์‹คํ–‰ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ด€์ฐฐ๊ฐ’, ๋ณด์ƒ, ์ข…๋ฃŒ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • ํ–‰๋™์€ 7x7 ํ”ฝ์…€ ๋ธ”๋ก๊ณผ ์—ฌ๋Ÿฌ ๊ฐ๋„ ์กฐํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ด์‚ฐ์  ํ–‰๋™ ๊ณต๊ฐ„์—์„œ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.
    • ํ•œ ์—ํ”ผ์†Œ๋“œ์˜ ๋‹จ๊ณ„๋ฅผ ์ •์˜ํ•˜๋ฉฐ ๊ฐ•ํ™”ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šตํ•˜๋Š” ํ•ต์‹ฌ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.
  • simulate_movement()

    • ๋กœ๋ด‡์˜ ๋ชฉํ‘œ ์œ„์น˜๊นŒ์ง€์˜ ์›€์ง์ž„์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๊ณ  ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋‹จ๊ณ„์—์„œ ๋กœ๋ด‡ ๊ด€์ ˆ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ฉฐ ๋ชฉํ‘œ์— ๋„๋‹ฌํ–ˆ๋Š”์ง€ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.

3. ๋ณด์ƒ ์„ค๊ณ„

  • ๋ฌผ์ฒด๊ฐ€ ๋ชฉํ‘œ ๋†’์ด์— ๋„๋‹ฌํ•˜๋ฉด +1์˜ ๋ณด์ƒ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์ง€์ •๋œ ๋†’์ด์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•˜๋ฉด -2์˜ ํŒจ๋„ํ‹ฐ๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ๋ณด์ƒ ๊ตฌ์กฐ๋Š” ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜ ๋ณด์ƒ, ๊ฐ์ฒด ํšŒ์ „ ์•ˆ์ •์„ฑ ๋ณด์ƒ ๋“ฑ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

9. ์‹œํ–‰์ฐฉ์˜ค


1. camera2world coordinate

๋กœ๋ด‡์ด ์นด๋ฉ”๋ผ ์˜์ƒ์„ ๋ฐ”ํƒ•์œผ๋กœ ํ๋ธŒ๋ฅผ ์ง‘๊ธฐ ์œ„ํ•ด์„œ๋Š” ์นด๋ฉ”๋ผ์˜ ํ”ฝ์…€ ์ขŒํ‘œ๋ฅผ ์›”๋“œ ์ขŒํ‘œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์นด๋ฉ”๋ผ์˜ ๋‚ด๋ถ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๊ณต์‹์„ ํ†ตํ•ด ๊ตฌํ•˜์˜€์œผ๋ฉฐ, ํšŒ์ „ ํ–‰๋ ฌ(R)์€ ์›”๋“œ ์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ y์ถ•์„ +180ยฐ, z์ถ•์„ -90ยฐ ํšŒ์ „ํ•œ ๊ฒƒ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณ„์‚ฐํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ณ€ํ™˜ ๋ฒกํ„ฐ(T)๋Š” ์ดˆ๊ธฐ์—๋Š” ๋งํฌ ์ƒํƒœ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ ์ฐจ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ–ˆ์œผ๋‚˜, ๊ฒฐ๊ณผ๊ฐ€ ์ •ํ™•ํ•˜์ง€ ์•Š์•„ ์ง์ ‘ ๊ณ„์‚ฐ์„ ํ†ตํ•ด ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ๋ธŒ์˜ ์ƒ์„ฑ ์œ„์น˜๊ฐ€ ๋‹ฌ๋ผ์งˆ ๋•Œ๋งˆ๋‹ค ๋ณ€ํ™˜ ๋ฒกํ„ฐ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ๋ธŒ์˜ ์ƒ์„ฑ ์œ„์น˜๋ฅผ ๊ณ ์ •ํ•˜๊ณ , ๊ณ ์ •๋œ ๋ณ€ํ™˜ ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋„๋ก ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

2. depth ์ •๊ทœํ™”

ํ๋ธŒ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด arm_camera()์˜ depth_img์—์„œ depth ๊ฐ’์„ ์ถ”์ถœํ•˜์˜€์œผ๋‚˜, ํ•ด๋‹น ๊ฐ’์ด 0~255 ๋กœ ์ •๊ทœํ™”๋œ ๊ฐ’์ž„์„ ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •๋œ far ๊ฐ’์„ ํ™œ์šฉํ•˜์—ฌ depth = depth_value / 255.0 * far๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹ค์ œ depth๊ฐ’์„ ์ถ”์ถœํ•˜์˜€๊ณ , ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.


10. ์ตœ์ข… ๊ฒฐ๊ณผ