์คํฐ๋ ๊ธฐ๊ฐ : 24.03.15 ~ 24.12.23
๋ณธ ์คํฐ๋๋ ์ฌ์ธต ์ ๊ฒฝ๋ง ๊ฐํํ์ต(Deep Reinforcement Learning : DRL) ๊ณต๋ถ๋ฅผ ํตํด ๊ตฌ์ฑํ ์คํฐ๋๋ก, ๊ธฐ์ด๋ถํฐ ์์ํ์ฌ, ์ค์ ๋ก๋ด์ ์ ์ฉํ๋ ๊ฒ์ผ๋ก ๋ชฉํ๋ก ํ์๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก๋ ์ค์ ๋ก๋ด ์ ์ฉ์๋ ์คํจํ์์ง๋ง, DRL์ ๋ํ ์ด๋ก ๋ฐ ๋์ ๋ฐฉ์์ ์ดํดํ ์ ์์๋ค.
๊ฐํํ์ต(Reinforcement Learning, RL) ์ ์์ด์ ํธ(agent) ๊ฐ ํ๊ฒฝ(environment) ๊ณผ ์ํธ์์ฉํ๋ฉฐ ๋ณด์์ ์ต๋ํํ๊ธฐ ์ํ ์ต์ ์ ์ ์ฑ (optimal policy) ์ ํ์ตํ๋ ๊ณผ์ ์ ๋๋ค. ์์ด์ ํธ๋ ๋ฐ๋ณต์ ์ผ๋ก ์ํ(state) ๋ฅผ ๊ด์ฐฐํ๊ณ ํ๋(action) ์ ์ ํํ๋ฉฐ ํ๊ฒฝ์์ ๋ฐํ๋ ๋ณด์(reward) ์ ํตํด ํ์ตํฉ๋๋ค.
๊ฐํํ์ต์ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ์์๋ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์์ด์ ํธ๊ฐ ์ํธ์์ฉํ๋ ๊ณต๊ฐ์ด๋ฉฐ, ํ๋์ ๊ฒฐ๊ณผ๋ก ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ๋ณด์์ ๋ฐํํฉ๋๋ค.
- ํ๊ฒฝ์ ์๋ฎฌ๋ ์ด์ ๊ณต๊ฐ, ๊ฒ์ ํ๊ฒฝ, ์ค์ ์ธ๊ณ ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ต๋๋ค.
- ์: ๋ก๋ด ์๋ฎฌ๋ ์ด์ ํ๊ฒฝ, ์ฒด์ค ๊ฒ์ ๋ณด๋
- ํ์ฌ ํ๊ฒฝ์ ์ํ๋ฅผ ๋ํ๋ด๋ ์ ๋ณด์ ์งํฉ
- ์ํ๋ ์์ด์ ํธ์ ํ๋์ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์: ๋ก๋ด ํ์ ํ์ฌ ๊ฐ๋์ ์์น, ๊ฒ์ ๋ด ์บ๋ฆญํฐ์ ์ขํ
- ์์ด์ ํธ๊ฐ ํน์ ์ํ์์ ์ํํ ์ ์๋ ๋์
- ํ๋์ ์ด์ฐ์ (discrete)์ผ ์๋ ์๊ณ ์ฐ์์ (continuous)์ผ ์๋ ์์ต๋๋ค.
- ์: ๋ก๋ด ํ์ ํน์ ์ถ์ผ๋ก ํ์ ์ํค๊ธฐ, ๊ฒ์์์ ์ด๋ ๋ฐฉํฅ ์ ํ
- ์์ด์ ํธ๊ฐ ํน์ ํ๋์ ์ํํ ๊ฒฐ๊ณผ๋ก ํ๊ฒฝ์์ ๋ฐํ๋ฐ๋ ๊ฐ
- ๋ณด์์ ํ๋์ด ๋ชฉํ ๋ฌ์ฑ์ ์ผ๋ง๋ ๊ธฐ์ฌํ๋์ง ํผ๋๋ฐฑ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค.
- ์: ๋ก๋ด์ด ๋ชฉํ ๋ฌผ์ฒด๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ง์ผ๋ฉด +1, ์คํจํ๋ฉด -1
- ์์ด์ ํธ๊ฐ ์ฃผ์ด์ง ์ํ์์ ์ด๋ค ํ๋์ ์ ํํ ์ง ๊ฒฐ์ ํ๋ ๊ท์น ๋๋ ํจ์
- ์ ์ฑ ์ ํ๋ฅ ์ ์ผ๋ก ํ๋์ ์ ํํ ์๋ ์๊ณ , ํญ์ ํน์ ํ๋์ ์ ํํ๋๋ก ์ค๊ณ๋ ์๋ ์์ต๋๋ค.
- ๊ฐํํ์ต์ ๋ชฉํ๋ ์ต์ ์ ์ ์ฑ ์ ํ์ตํ๋ ๊ฒ์ ๋๋ค.
- ํน์ ์ํ์์ ์์ด์ ํธ๊ฐ ๋ฐ์ ์ ์๋ ์ฅ๊ธฐ์ ์ธ ๋ณด์์ ๊ธฐ๋๊ฐ์ ๋ํ๋ ๋๋ค.
- ๊ฐ์น ํจ์๋ ์ํ ์์ฒด์ ๊ฐ์น๋ฅผ ํ๊ฐํ๊ฑฐ๋, ์ํ์ ํ๋ ์์ ๊ฐ์น๋ฅผ ํ๊ฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๊ฐํํ์ต์ ํ์ต ๋ฐฉ์์ ๋ฐ๋ผ ๊ฐ์น ๊ธฐ๋ฐ ํ์ต(Value-Based Learning), ์ ์ฑ ๊ธฐ๋ฐ ํ์ต(Policy-Based Learning), ๊ทธ๋ฆฌ๊ณ ์ด ๋ ๊ฐ์ง๋ฅผ ๊ฒฐํฉํ ํ์ด๋ธ๋ฆฌ๋ ํ์ต(Hybrid Learning) ์ผ๋ก ๋๋ฉ๋๋ค.
๊ฐ์น ๊ธฐ๋ฐ ํ์ต์ ์ํ-ํ๋ ์์ ๊ฐ์น๋ฅผ ๋ํ๋ด๋ ํจ์(Q-๊ฐ) ๋ฅผ ํ์ตํ์ฌ ์ต์ ์ ํ๋์ ์ ํํฉ๋๋ค.
์ด ๋ฐฉ์์์๋ ์ ์ฑ
์ด ์ ์๋๋ฉฐ ์์ด์ ํธ๋ Q-๊ฐ์ด ๊ฐ์ฅ ๋์ ํ๋์ ์ ํํฉ๋๋ค.
-
ํน์ง:
- ์ํ-ํ๋ ์์ ๊ฐ์น๋ฅผ ์์ธกํ๋ Q-ํจ์ ํ์ต
- Q-๊ฐ์ ์ต๋ํํ๋ ํ๋์ ์ ํ
-
๋ํ ์๊ณ ๋ฆฌ์ฆ:
- Q-๋ฌ๋: ์ํ์ ํ๋์ Q-๊ฐ์ ํ ์ด๋ธ ํํ๋ก ์ ๋ฐ์ดํธ
- DQN (Deep Q-Network): Q-๋ฌ๋์ ์ฌ์ธต ์ ๊ฒฝ๋ง์ผ๋ก ํ์ฅํ์ฌ ๊ณ ์ฐจ์ ์ํ ๊ณต๊ฐ์ ์ ์ฉ ๊ฐ๋ฅ
-
์ฅ์ :
- ์ด์ฐ์ ์ธ ํ๋ ๊ณต๊ฐ์ ์ ํฉ
- ์ ์ฑ ์ ๋ช ์์ ์ผ๋ก ์ ์ฅํ ํ์๊ฐ ์์
-
๋จ์ :
- ์ฐ์์ ์ธ ํ๋ ๊ณต๊ฐ์์๋ ์ ์ฉ์ด ์ด๋ ค์
์ ์ฑ
๊ธฐ๋ฐ ํ์ต์ ์ต์ ์ ์ ์ฑ
์ ์ง์ ํ์ตํ์ฌ ์์ด์ ํธ๊ฐ ํ๋์ ์ ํํ ์ ์๋๋ก ํฉ๋๋ค.
ํนํ, ์ฐ์์ ์ธ ํ๋ ๊ณต๊ฐ์์ ์ ๋ฆฌํฉ๋๋ค.
-
ํน์ง:
- ์ํ์ ๋ฐ๋ผ ํ๋์ ์ ํํ๋ ์ ์ฑ ํจ์(Policy Function)๋ฅผ ์ง์ ํ์ต
- ํ๋ฅ ์ ์ ์ฑ (ํ๋ฅ ๋ถํฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ์ ํ) ๋๋ ๊ฒฐ์ ์ ์ ์ฑ (ํญ์ ํน์ ํ๋ ์ ํ)์ด ๊ฐ๋ฅ
-
๋ํ ์๊ณ ๋ฆฌ์ฆ:
- REINFORCE: ์ ์ฑ ๊ฒฝ์ฌ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ณด์์ ์ต๋ํํ๋๋ก ์ ์ฑ ์ ํ์ต
- DDPG (Deep Deterministic Policy Gradient): ์ฐ์์ ์ธ ํ๋ ๊ณต๊ฐ์์ ์๋ํ๋ ๊ฒฐ์ ์ ์ ์ฑ ํ์ต ์๊ณ ๋ฆฌ์ฆ
-
์ฅ์ :
- ์ฐ์์ ์ธ ํ๋ ๊ณต๊ฐ์ ์ ํฉ
- ํ์(exploration)๊ณผ ํ์ฉ(exploitation)์ ์ ์ ํ๊ฒ ์ฌ์ฉ
-
๋จ์ :
- ๋ณด์์ด ํฌ๋ฐํ๊ฑฐ๋ ๋ณ๋์ฑ์ด ํด ๋ ํ์ต์ด ๋ถ์์
ํ์ด๋ธ๋ฆฌ๋ ํ์ต์ ๊ฐ์น ๊ธฐ๋ฐ ํ์ต๊ณผ ์ ์ฑ
๊ธฐ๋ฐ ํ์ต์ ์ฅ์ ์ ๊ฒฐํฉํ์ฌ ๋ ๋ฐฉ๋ฒ์ ๋จ์ ์ ๋ณด์ํฉ๋๋ค.
์ฃผ๋ก ๊ฐ์น ํจ์์ ์ ์ฑ
์ ๋์์ ํ์ตํ์ฌ ๋ณด๋ค ํจ์จ์ ์ธ ํ์ต์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
-
ํน์ง:
- ์ ์ฑ ๊ณผ ๊ฐ์น ํจ์๊ฐ ์๋ก๋ฅผ ๋ณด์ํ๋ฉฐ ํ์ต
- ๊ฐ์น ๊ธฐ๋ฐ ๋ฐฉ๋ฒ์ ์ ์ฑ ํ์ต์ ์ํ ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ๊ณต
-
๋ํ ์๊ณ ๋ฆฌ์ฆ:
- A3C (Asynchronous Advantage Actor-Critic): ๋ฉํฐ์ค๋ ๋๋ฅผ ํ์ฉํด ํจ์จ์ ์ธ ์ ์ฑ ๋ฐ ๊ฐ์น ํ์ต
- TD3 (Twin Delayed Deep Deterministic Policy Gradient): DDPG์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ์ฐ์ ํ๋ ๊ณต๊ฐ์์ ์ ์ฑ ํ์ต์ ์์ ์ฑ์ ํฅ์
-
์ฅ์ :
- ๋ณต์กํ ํ๊ฒฝ์์ ๋ ์์ ์ ์ด๊ณ ํจ๊ณผ์
- ๊ฐ์น ํจ์์ ํผ๋๋ฐฑ์ผ๋ก ์ ์ฑ ์ ํ์ต ์๋๋ฅผ ๊ฐ์
-
๋จ์ :
- ๊ตฌํ์ด ๋น๊ต์ ๋ณต์ก
- ํ์ต ๊ณผ์ ์์ ๋์ ๊ณ์ฐ ์์ ์๊ตฌ
๊ฐํํ์ต์ ์์ด์ ํธ๊ฐ ํ๊ฒฝ๊ณผ ์ํธ์์ฉํ๋ฉฐ ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํ๋ ๊ณผ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค:
- ํ๊ฒฝ์ ์ด๊ธฐ ์ํ๋ก ์ค์ ํ๊ณ , ์์ด์ ํธ๋ ์ฒซ ๋ฒ์งธ ์ํ๋ฅผ ๊ด์ฐฐํฉ๋๋ค.
- ์์ด์ ํธ๋ ํ์ฌ ์ํ์์ ์ ์ฑ ์ ๋ฐ๋ผ ํ๋์ ์ ํํฉ๋๋ค.
- ํ์(Exploration)๊ณผ ํ์ฉ(Exploitation)์ ๊ท ํ์ ์ ์งํฉ๋๋ค.
- ์์ด์ ํธ์ ํ๋์ ๋ฐ๋ผ ํ๊ฒฝ์ ์๋ก์ด ์ํ์ ๋ณด์์ ๋ฐํํฉ๋๋ค.
- ์์ด์ ํธ๋ ๊ฒฝํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ฑ ๊ณผ ๊ฐ์น ํจ์๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
- ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ฑฐ๋ ์ข ๋ฃ ์กฐ๊ฑด์ ๋ง์กฑํ ๋๊น์ง ์ ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
DQN (Deep Q-Network) ์ด๋ก ๋ฐ ๊ตฌ์กฐ ์ค๋ช DQN(Deep Q-Network)์ **๊ฐํ ํ์ต(Reinforcement Learning)**์์ Q-๋ฌ๋์ ๋ฅ๋ฌ๋์ผ๋ก ํ์ฅํ ๋ฐฉ๋ฒ์ ๋๋ค.
Q-๋ฌ๋์ ์ํ-ํ๋(State-Action) ์์ ์ ์ฅํ๋ Q-ํ ์ด๋ธ์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋:
- ์ํ ๊ณต๊ฐ์ด ํฌ๊ฑฐ๋ ์ฐ์์ ์ด๋ฉด Q-ํ ์ด๋ธ์ ๋ง๋ค๊ฑฐ๋ ๊ฐฑ์ ํ๋ ๋ฐ ๋ฉ๋ชจ๋ฆฌ์ ๊ณ์ฐ ๋น์ฉ์ด ๋๋ฌด ํผ.
- ์๋ฅผ ๋ค์ด, ์ด๋ฏธ์ง ๊ธฐ๋ฐ ๊ฒ์ ๊ฐ์ ๊ฒฝ์ฐ ์๋ฐฑ๋ง ๊ฐ์ ์ํ๊ฐ ์กด์ฌ.
DQN์ ๋ฅ๋ฌ๋์ ํ์ฉํด Q-๋ฌ๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ:
- Q-ํจ์๋ฅผ ๋ฅ๋ฌ๋ ๋ชจ๋ธ(์ฃผ๋ก ์ ๊ฒฝ๋ง)๋ก ๊ทผ์ฌ:
- ์ํ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ํ๋๋ณ Q ๊ฐ์ ์ถ๋ ฅ.
- ์:
Q(s, a)
๋์NN(s) -> [Q(s, a1), Q(s, a2), ..., Q(s, an)]
.
DQN์ ๋ค์ ์ฃผ์ ๊ธฐ์ ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
- ํ์ต ์ ์ํ์ ์๊ด๊ด๊ณ ์ ๊ฑฐ์ ๋ฐ์ดํฐ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉ.
- ์์ด์ ํธ๊ฐ ๊ฒฝํํ
(์ํ, ํ๋, ๋ณด์, ๋ค์ ์ํ)
๋ฅผ ์ ์ฅ. - ๋ฌด์์๋ก ์ํ๋งํด ๋คํธ์ํฌ๋ฅผ ํ์ต์์ผ ๋ฐ์ดํฐ ์ค๋ณต ์ฌ์ฉ ๋ฐ ํธํฅ ์ ๊ฑฐ.
- Q ๊ฐ์ ํ์ตํ ๋ ๋ฐ์ํ๋ ๋ถ์์ ์ฑ์ ์ค์ด๊ธฐ ์ํด ๋์ .
Q(s, a)
์ ํ๊ฒ๊ฐ(r + ฮณ * max_a' Q(s', a')
)์ ์์ ์ ์ผ๋ก ๊ณ์ฐํ๊ธฐ ์ํด ๋ณ๋์ ํ๊ฒ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉ:- ํ๊ฒ ๋คํธ์ํฌ๋ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ฌ ๋คํธ์ํฌ์ ๊ฐ์ค์น๋ก ์ ๋ฐ์ดํธ.
- ์ด๋ฅผ ํตํด ํ์ต ๋์ค ๋ฐ์ํ๋ ์ง๋(oscillation)์ ์ค์.
- ํํ(Exploration): ์๋ก์ด ํ๋์ ์๋ํด ํ๊ฒฝ์ ํ์.
- ํ์ฉ(Exploitation): ํ์ฌ ์๊ณ ์๋ ์ต์ ์ ํ๋์ ์คํ.
- DQN์ ฮต-greedy ์ ์ฑ
์ ์ฌ์ฉ:
- ํ๋ฅ ฮต๋ก ๋๋ค ํ๋(ํํ), 1-ฮต๋ก ์ต์ ํ๋(ํ์ฉ).
- ํ์ต์ด ์งํ๋ ์๋ก ฮต ๊ฐ์ ์ค์ฌ ์ ์ ๋ ํ์ฉ์ ์ฐ์ ์.
- ๋ฒจ๋ง ๋ฐฉ์ ์์ ๊ธฐ๋ฐ์ผ๋ก ์์ค์ ์ ์:
Q(s, a; ฮธ)
: ํ์ฌ ๋คํธ์ํฌ์์ ์์ธกํ Q ๊ฐ.r + ฮณ * max_a' Q(s', a'; ฮธ^-)
: ํ๊ฒ ๋คํธ์ํฌ์์ ๊ณ์ฐํ ์ค์ Q ๊ฐ.- ์ด ์ฐจ์ด๋ฅผ ์ต์ํํ๋๋ก ๋คํธ์ํฌ๋ฅผ ํ์ต.
- ํ๊ฒฝ ์ด๊ธฐํ:
- ์ด๊ธฐ ์ํ S0 ๋ฅผ ์ค์ .
- ํ๋ ์ ํ:
- ฮต-greedy ์ ์ฑ ์ ๋ฐ๋ผ ํ๋ (A_t)๋ฅผ ์ ํ.
- ํ๋์ ๋ฌด์์(ํํ)๋ก ์ ํํ๊ฑฐ๋ ํ์ฌ Q ๊ฐ ๊ธฐ๋ฐ์ผ๋ก ์ ํ(ํ์ฉ).
- ํ๊ฒฝ ์ํธ์์ฉ:
- ํ๋ (At)๋ฅผ ์คํํ๊ณ , ๋ณด์(Rt) ๋ฐ ๋ค์ ์ํ (St+1)๋ฅผ ์์ง.
- ๋ฆฌํ๋ ์ด ๋ฒํผ ์ ์ฅ:
- (St, At, Rt, St+1)๋ฅผ ๋ฆฌํ๋ ์ด ๋ฒํผ์ ์ ์ฅ.
- Q-๋คํธ์ํฌ ํ์ต:
- ๋ฆฌํ๋ ์ด ๋ฒํผ์์ ์ํ์ ์ถ์ถํด ๋ฒจ๋ง ๋ฐฉ์ ์ ๊ธฐ๋ฐ ์์ค์ ์ต์ํํ๋๋ก ๋คํธ์ํฌ ํ์ต
- ํ๊ฒ ๋คํธ์ํฌ ์
๋ฐ์ดํธ:
- ์ฃผ๊ธฐ์ ์ผ๋ก ํ๊ฒ ๋คํธ์ํฌ ์ ๋ฐ์ดํธ.
- ๋ฐ๋ณต:
- ๋ชฉํ ๋ณด์์ด ์ถฉ๋ถํ ๋์์ง ๋๊น์ง ์ ๊ณผ์ ์ ๋ฐ๋ณต..
๋ก๋ด ํ Pick and Place ๊ตฌํ์ ์ํด TD3 (Twin Delayed Deep Deterministic Policy Gradient) ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ค๊ณ ํ์์ผ๋, ์ต์ข ์ ์ผ๋ก๋ ์คํจํ์๋ค.
ํ์ง๋ง ๊ณต๋ถํ ๋ด์ฉ์ ๊ธฐ๋กํ๊ธฐ ์ํด ์ด๋ก ์ค๋ช ์ ์ถ๊ฐํ์์ผ๋ฉฐ, ์ฐธ๊ณ ํ ๋ ผ๋ฌธ์ ๋ํ ๋ฆฌ๋ทฐ๋ "ppt" ํด๋์ ์ ๋ฆฌ๋์ด ์๋ค.
TD3๋ ๊ฐํํ์ต ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ก, **DDPG (Deep Deterministic Policy Gradient)**์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฃผ๋ก ์ฐ์์ ์ธ ์ก์ ๊ณต๊ฐ์์ ์๋ํ๋ฉฐ, ์ ์ฑ ์ ์์ ์ฑ๊ณผ ํ์ต ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๋ฐ ์ค์ ์ ๋๋ค.
TD3๋ ๋ ๊ฐ์ ์ฃผ์ ๋คํธ์ํฌ์ธ Actor Network์ Critic Network๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ด๋ฅผ ํตํด ์ ์ฑ (Actor)๊ณผ ๊ฐ์น ํจ์(Critic)๋ฅผ ํ์ตํ๋ค.(๊ทธ๋ฆผ ์ถ๊ฐ)
A. Replay Buffer ๊ฒฝํ (s, a, r, s')์ ์ ์ฅํ๋ค. ๊ฒฝํ(experience)์ agent๊ฐ environment์ ์ํธ์์ฉํ ์ ๋ณด๋ฅผ ์๋ฏธํ๋ฉฐ, DRL(Deep Reinforcement Learning)์ ๊ฒฝํ์ training data๋ก ํ์ฉํ๋ค.
๋ชฉ์ : ๋ฐ์ดํฐ์ ์๊ด๊ด๊ณ๋ฅผ ์ค์ด๊ณ ํ์ต์ ์์ ํํ๊ธฐ ์ํด ์์ด์ ํธ๊ฐ ํ๊ฒฝ์์ ์์งํ ๊ฒฝํ์ replay buffer์์ ๋ฌด์์๋ก ์ํ๋งํ๋ค.
B. Critic Network ๊ธฐ๋ฅ: ์ํ-์ก์ ์ (s, a)์ ๋ํ Q-๊ฐ์ ์ถ์ ํ๋ค.
๊ตฌ์ฑ: ๋ ๊ฐ์ ๋ ๋ฆฝ์ ์ธ Q-ํจ์ critic1, critic2์ ์ด๋ค์ ํ๊ฒ ๋คํธ์ํฌ target1, target2๋ก ๊ตฌ์ฑ๋๋ค.
TD Error Update (Temporal Difference Error): ๋ Q-๋คํธ์ํฌ๋ TD ์๋ฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฐ์ดํธ๋๋ค.
Target Q ๊ฐ ๋น๊ต: ๋ Critic ๋คํธ์ํฌ์์ Q ๊ฐ์ ์์ธกํ ํ, ๋ ์์ Q ๊ฐ์ ์ ํํ์ฌ overestimation bias๋ฅผ ์ค์ธ๋ค.
Critic Network ํ์ต ๋จ๊ณ:
-
critic1๊ณผ critic2๋ ๊ฐ๊ฐ์ Q-๊ฐ์ ์์ธกํ๋ค.
-
ํ๊ฒ ๋คํธ์ํฌ(target1, target2)๋ ๋ชฉํ Q-๊ฐ์ ๊ณ์ฐํ๋ค. ๋ Q-๊ฐ ์ค ๋ ์์ ๊ฐ์ ์ ํํ์ฌ ํ์ตํ๋ค.
C. Actor Network
๊ธฐ๋ฅ: ์ฃผ์ด์ง ์ํ s์ ๋ํด ์ต์ ์ ํ๋ a๋ฅผ ์์ฑํ๋ค.
๊ตฌ์ฑ: actor์ target ๋ ๋คํธ์ํฌ๋ก ๊ตฌ์ฑ๋๋ค.
DPG Update (Deterministic Policy Gradient): Actor Network๋ Critic Network์์ ์ ๋ฌ๋ฐ์ Q-๊ฐ์ ์ต๋ํํ๋๋ก ์ ๋ฐ์ดํธ๋๋ค.
Actor Network ํ์ต ๋จ๊ณ:
-
Actor Network๋ ์ฃผ์ด์ง ์ํ s์ ๋ํด ํ๋ ฮผ(s)๋ฅผ ์์ฑํ๋ค.
-
ํ๋์ ๋ ธ์ด์ฆ N๋ฅผ ์ถ๊ฐํ์ฌ ํ์์ ์ํํ๋ค.
-
Critic Network๋ก๋ถํฐ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์ฑ ์ ์ ๋ฐ์ดํธํ๋ค.
D. Environment
Actor Network์์ ์์ฑ๋ ํ๋ a๋ ํ๊ฒฝ์ ์ ๋ฌ๋๊ณ , ํ๊ฒฝ์ ํด๋น ํ๋์ ๋ฐ์๋ค์ฌ ๋ค์ ์ํ s'์ ๋ณด์ r์ ๋ฐํํ๋ค.
๋ฐํ๋ (s, a, r, s') ์ ๋ณด experience๋ Replay Buffer์ ์ ์ฅ๋๋ค.
Double Q-Learning
๋ Critic Network๋ฅผ ์ฌ์ฉํ์ฌ Q-๊ฐ์ ๊ณผ๋ํ๊ฐ๋ฅผ ๋ฐฉ์งํ๋ค. Target Policy Smoothing
Actor Network์ ๋ ธ์ด์ฆ๋ฅผ ์ถ๊ฐํ์ฌ ๊ธ๊ฒฉํ ์ ์ฑ ๋ณํ์ ๊ณผ์ ํฉ์ ๋ฐฉ์งํ๋ค. Delayed Policy Update
Critic Network๊ฐ ๋งค ์ ๋ฐ์ดํธ๋ง๋ค ํ์ต๋๋ ๋ฐ๋ฉด, Actor Network๋ ์ผ์ ์ฃผ๊ธฐ๋ง๋ค ์ ๋ฐ์ดํธ๋๋ค. ์ด๋ก ์ธํด Critic Network๊ฐ ๋ ์์ ์ ์ธ Q-๊ฐ์ ์์ธกํ ์ ์๋ค.
- ์ด๊ธฐํ ๋จ๊ณ
1-1) Actor์ Critic ๋คํธ์ํฌ ์ด๊ธฐํ
1-2) Replay Buffer ์ด๊ธฐํ
- ๊ฒฝํ ์์ง
2-1) Actor ๋คํธ์ํฌ๋ฅผ ํตํด ํ๋ a_t ์ ํ
2-2) ํ๊ฒฝ์ ํ๋ ์ ๋ฌ ๋ฐ ๋ณด์๊ณผ ๋ค์ ์ํ (r_t, s_{t+1}) ๋ฐํ
2-3) ๊ฒฝํ (s_t, a_t, r_t, s_{t+1})์ Replay Buffer์ ์ ์ฅ
- ์ํ๋ง ๋ฐ ํ์ต
3-1) Replay Buffer์์ ๋ฌด์์๋ก ๊ฒฝํ ์ํ๋ง
3-2) Critic ๋คํธ์ํฌ ์ ๋ฐ์ดํธ (TD ์๋ฌ ๊ธฐ๋ฐ)
3-3) Actor ๋คํธ์ํฌ๋ Critic ๋คํธ์ํฌ ์ ๋ฐ์ดํธ ์ฃผ๊ธฐ๋ง๋ค ํ์ต
- ํ๊ฒ ๋คํธ์ํฌ ์ ๋ฐ์ดํธ
4-1) Critic ํ๊ฒ๊ณผ Actor ํ๊ฒ ๋คํธ์ํฌ๋ ์ง์ฐ๋ ์ํํธ ์ ๋ฐ์ดํธ ์ํ
- ๋ฐ๋ณต
5-1) ์ ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ์ ์ฑ ๊ณผ Q-ํจ์๋ฅผ ์ต์ ํ
- ์ฝ๋ ์คํ ์ load_model() ํจ์๊ฐ ํธ์ถ๋์ด, ์ฌ์ ํ์ต๋ YOLO ๊ฐ์ฒด ํ์ง ๋ชจ๋ธ์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋.
- ๋ก๋ด์ ์ด๊ธฐ ์ํ๋ reset_robot()์ ํตํด ๊ด์ ๊ณผ ๊ทธ๋ฆฌํผ๋ฅผ ์ด๊ธฐ ์์น๋ก ์ค์ ํ๋ฉฐ, ์๋ฎฌ๋ ์ด์ ํ๊ฒฝ๋ ์ด๊ธฐํ.
- ์นด๋ฉ๋ผ ์ด๋ฏธ์ง ๋๋ ์ฃผ์ด์ง ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ detect() ํจ์๋ก ์ฒ๋ฆฌ.
- YOLO ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ์์์ ๊ฐ์ฒด์ ์์น์ ํด๋์ค ์ ๋ณด๋ฅผ ํ์งํ๋ฉฐ, ๋ฐ์ด๋ฉ ๋ฐ์ค์ ํ์ง๋ ํด๋์ค ๋ฆฌ์คํธ๋ฅผ ๋ฐํ
- ํ์ง๋ ๊ฐ์ฒด์ ๋ฐ์ด๋ฉ ๋ฐ์ค ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก calculate_centroid() ํจ์๊ฐ ํธ์ถ.
- ๊ฐ์ฒด์ ์ค์ฌ ์ขํ(์ด๋ฏธ์ง ์์ ํฝ์ ์์น)๋ฅผ ๊ณ์ฐํ์ฌ, ์ดํ ๋ก๋ด์ด ํด๋น ์์น๋ฅผ ๋ชฉํ๋ก ์ผ์ ์ ์๋๋ก ํจ.
- move_robot() ํจ์๋ ๋ก๋ด์ ๊ด์ ๊ฐ๋๋ฅผ ์กฐ์ ํ์ฌ, ๋ก๋ด์ ๋๋จ(End Effector)์ด ๊ฐ์ฒด์ ์์น๋ก ์ด๋.
- ๋ด๋ถ์ ์ผ๋ก calculateIK()๋ฅผ ํตํด ๋ชฉํ ์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ญ์ด๋ํ(Inverse Kinematics)์ ๊ณ์ฐํ๊ณ , ๊ด์ ์ ์ด ๋ช ๋ น์ ์คํ.
- ๋ก๋ด์ด ๊ฐ์ฒด ๊ทผ์ฒ์ ๋์ฐฉํ๋ฉด closeGripper()๋ฅผ ํธ์ถํ์ฌ, ๋ฌผ์ฒด๋ฅผ ์ง์ ์ ์๋๋ก ๊ทธ๋ฆฌํผ๋ฅผ ๋ซ์.
- ๊ฐ์ฒด๋ฅผ ์ด๋ํ ๋ค, openGripper()๋ก ๊ทธ๋ฆฌํผ๋ฅผ ์ด์ด ๊ฐ์ฒด๋ฅผ ๋์.
- ์๋ฎฌ๋ ์ด์ ํ๊ฒฝ ๋ด ๊ฐ์ฒด๋ create_parallelepiped(), create_l_object(), create_z_object()์ ๊ฐ์ ํจ์๋ก ์์ฑ.
- ๋ค์ํ ํํ์ ๊ฐ์ฒด๋ฅผ ํน์ ์์น์ ๋ฐฐ์นํ๋ฉฐ, ์ด๊ธฐ ์ํ๋ฅผ ์ค์ .
- ๋ก๋ด์ ์์ง์๊ณผ ํ๊ฒฝ์ ๋์์ p.stepSimulation()์ ํตํด ์ง์์ ์ผ๋ก ๊ฐฑ์ ๋๋ฉฐ, ๋ชจ๋ ์ํ ๋ณํ๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ณ์ฐ.
- simulate_movement()๋ ๋ชฉํ ์์น๊น์ง ๋ก๋ด์ด ํจ์จ์ ์ผ๋ก ์ด๋ํ๋๋ก ๋ฐ๋ณต์ ์ธ ๊ณ์ฐ๊ณผ ์๋ฎฌ๋ ์ด์ ๋จ๊ณ๋ฅผ ์ฒ๋ฆฌ
- ๋ชจ๋ ์์ ์ด ์๋ฃ๋ ํ, ๋ก๋ด๊ณผ ๊ฐ์ฒด์ ์ํ๋ ์ด๊ธฐํ๋๊ฑฐ๋ ๋ค์ ์์ ํ๋ฆ์ ์ํด ์๋ก์ด ๋ช ๋ น์ ๋๊ธฐ.
-
Pick-and-Place ์์ :
- ๋ก๋ด์ด ํ๊ฒฝ์์ ๋ฌผ์ฒด๋ฅผ ํ์งํ๊ณ ์ ํํ ์์น๋ก ์ด๋ํ์ฌ ์ง์ด ์ฌ๋ฆฝ๋๋ค.
- ๋ฌผ์ฒด๋ฅผ ๋ชฉํ ์์น์ ๋ฐฐ์นํ์ฌ ์์ ์ ์๋ฃํฉ๋๋ค.
-
๊ฐํ ํ์ต ์ ์ฉ:
- ๊ฐํ ํ์ต ์๊ณ ๋ฆฌ์ฆ(DQN)์ ํตํด ๋ก๋ด์ ํ๋์ ํ์ตํฉ๋๋ค.
- ๋ก๋ด์ ์๋ฎฌ๋ ์ด์ ๋ ํ๊ฒฝ(PyBullet)์์ ๋ค์ํ ๋ฌผ์ฒด์ ์ํธ์์ฉํ๋ฉฐ ํ์ต.
-
์๋ฎฌ๋ ์ด์ ํ๊ฒฝ:
- PyBullet์ ์ฌ์ฉํ์ฌ ํ์ค์ ์ธ ๋ฌผ๋ฆฌ ํ๊ฒฝ์ ๋ชจ๋ธ๋งํฉ๋๋ค.
- ๋ฌผ์ฒด์ ๋ค์ํ ํํ(L์ํ, Z์ํ ๋ฑ)์ ์์น๋ฅผ ์ค์ ํด ๋ก๋ด์ด ๋ค์ํ ์์ ์ ์ํํ๋๋ก ํฉ๋๋ค.
AmbienteRobot.py
ํ์ผ์์ ์ ์๋RobotEnv
ํด๋์ค๋ ๋ก๋ด์ ํ๋, ๊ด์ฐฐ, ๋ณด์ ๋ฑ์ ์ค์ ํฉ๋๋ค.- ๊ด์ฐฐ ๊ณต๊ฐ:
- ์นด๋ฉ๋ผ ์ด๋ฏธ์ง(37x37 ํฌ๊ธฐ์ ๋ฐ์ด๋๋ฆฌ ์ด๋ฏธ์ง)๋ฅผ ํตํด ๋ฌผ์ฒด์ ์์น์ ์ํ๋ฅผ ํ์ธ.
- ํ๋ ๊ณต๊ฐ:
- ๋ก๋ด์ ์์น ์กฐ์ ๋ฐ ๊ทธ๋ฆฌํผ(์ง๊ฒ) ์ ์ด.
- ๋ณด์ ์ค๊ณ:
- ๋ฌผ์ฒด๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๋ค์ด ์ฌ๋ฆฌ๋ฉด +1์ ๋ณด์.
- ์คํจ ์ -2์ ํ๋ํฐ.
- ๋ฌผ์ฒด์ ๋ชฉํ ์์น ๊ฐ์ ๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ ๋ณด์์ ์ธ๋ถํ ๊ฐ๋ฅ.
- DQN(Deep Q-Network)์ ์ฌ์ฉํ์ฌ ๋ก๋ด์ด ํ๊ฒฝ์์ ์ต์ ์ ํ๋์ ํ์ต.
TrainEnvPandaPP.py
์์ ๋ชจ๋ธ ํ๋ จ ์ค์ :CnnPolicy
: ์ด๋ฏธ์ง๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ๋ CNN ๊ธฐ๋ฐ ์ ์ฑ ๋คํธ์ํฌ.- ํ์ต๋ฅ , ํํ ์ ๋ต(ฮต-greedy), ๋ฐฐ์น ํฌ๊ธฐ ๋ฑ ์ต์ ํ๋ ํ๋ผ๋ฏธํฐ๋ก ์ค์ .
- ํ๋ จ๋ ๋ชจ๋ธ(
dqn_Z_6.zip
)์ ํ ์คํธ ์ ์ฌ์ฉ.
- ๋ค์ํ ํํ(L์ํ, Z์ํ ๋ฑ)์ ๋ฌผ์ฒด๋ฅผ ์๋ฎฌ๋ ์ด์ .
- ๋ฌผ์ฒด์ ์ด๊ธฐ ์์น์ ๋ฐฉํฅ์ ๋ฌด์์๋ก ์ค์ ํ์ฌ ํ๊ฒฝ ๋ค์ํ.
- ์นด๋ฉ๋ผ ์์ ๊ณผ ๋ก๋ด์ ํ๋์ ์กฐ์ ํด ํ์ค์ ์ธ ํ์ต ํ๊ฒฝ ์ ๊ณต.
- ํ๋ จ:
- ๋ณ๋ ฌ ํ๊ฒฝ(
SubprocVecEnv
)์ ์ฌ์ฉํ์ฌ ํ๋ จ ์๋๋ฅผ ๋์. - TensorBoard๋ฅผ ํตํด ํ์ต ๊ณผ์ ์ ์๊ฐํ.
- ๋ณ๋ ฌ ํ๊ฒฝ(
- ํ
์คํธ:
main.py
์์ ํ๋ จ๋ ๋ชจ๋ธ์ ๋ก๋ํ์ฌ ํ ์คํธ ํ๊ฒฝ์์ ์ํ ์ฑ๋ฅ ํ๊ฐ.
-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
conda ํ๊ฒฝ ๊ตฌ์ฑ
conda create -n DRL_study python=3.8
conda ํ๊ฒฝ ํ์ฑํ
conda activate DRL_study
์ค์น ์ฝ๋
pip install -r requirements.txt
ref code
๋ PyBullet ๊ธฐ๋ฐ์ ๋ก๋ด ๊ฐํํ์ต ํ๊ฒฝ์ ๊ตฌ์ถํ์ฌ ์์ด์ ํธ๊ฐ ๋ก๋ด ์กฐ์ ์์
์ ํ์ตํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ฃผ์ ๊ตฌ์ฑ ์์๋ ํ๊ฒฝ ์ด๊ธฐํ, ๋ก๋ด ์ ์ด, ๊ฐ์ฒด ์์ฑ ๋ฐ ๊ด์ฐฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์
๋๋ค. ์๋๋ ์ฝ๋์ ์ฃผ์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ค๋ช
ํฉ๋๋ค.
RobotEnv
ํด๋์ค๋ PyBullet ํ๊ฒฝ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐํํ์ต์ ์ ํฉํ ์๋ฎฌ๋ ์ด์
ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
- ์ญํ
- ๋ก๋ด๊ณผ ๊ฐ์ฒด ๊ฐ์ ์ํธ์์ฉ์ ๊ตฌํ
- ๊ด์ฐฐ๊ฐ๊ณผ ๋ณด์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ์ฌ ๊ฐํํ์ต ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ฌ
- ๋ค์ํ ๋์์ ์ ์ํ์ฌ ์์ด์ ํธ๊ฐ ํ์ต ๊ฐ๋ฅํ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
-
__init__()
- PyBullet ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์ด๊ธฐํํ๋ฉฐ, GUI ๋๋ ๋นGUI ๋ชจ๋๋ก ์คํ๋ฉ๋๋ค.
- ๋ก๋ด(Panda ๋ก๋ด)๊ณผ ๋ค์ํ ๊ฐ์ฒด๋ฅผ ๋ก๋ํ๊ณ ์ด๊ธฐ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค.
- ์นด๋ฉ๋ผ๋ฅผ ๊ตฌ์ฑํ์ฌ ๊ฐ์ฒด ์ค์ฌ์ ๊ด์ฐฐ๊ฐ์ ์์ฑํ๋ฉฐ ํ๋ ๋ฐ ๊ด์ฐฐ ๊ณต๊ฐ์ ์ ์ํฉ๋๋ค.
-
reset()
- ์๋ก์ด ์ํผ์๋๋ฅผ ์์ํ๊ธฐ ์ํด ํ๊ฒฝ์ ์ด๊ธฐํํฉ๋๋ค.
- ๊ฐ์ฒด์ ์ด๊ธฐ ์์น์ ์์ธ๋ฅผ ๋ฌด์์๋ก ์์ฑํ๊ณ ๋ก๋ด์ ๊ด์ ์ํ๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
- ์ด๊ธฐ ๊ด์ฐฐ๊ฐ๊ณผ ์ถ๊ฐ ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค.
-
move_the_robot(target_position, angle)
- ๋ก๋ด์ ๋ชฉํ ์์น๋ก ์ด๋์ํค๊ณ ๋ฌผ์ฒด๋ฅผ ์กฐ์ํ๋ ์ผ๋ จ์ ๋์์ ์ํํฉ๋๋ค.
- ์ด๋ ๊ณผ์
- ๋ก๋ด์ ๋ฌผ์ฒด ์๋จ์ผ๋ก ์ด๋
- ๋ก๋ด์ ๋ฌผ์ฒด ๊ทผ์ฒ๋ก ๋ฎ์ถค
- ๊ทธ๋ฆฌํผ๋ฅผ ๋ซ์ ๋ฌผ์ฒด๋ฅผ ์ง์
- ๋ฌผ์ฒด๋ฅผ ๋ชฉํ ๋์ด๋ก ๋ค์ด ์ฌ๋ฆผ
calculateIK()
๋ฅผ ํตํด ์ญ์ด๋ํ(Inverse Kinematics)์ ๊ณ์ฐํ์ฌ ๊ฐ ๊ด์ ์ ๋ชฉํ ๊ฐ๋๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.- ๊ฐ ๋จ๊ณ์์ PyBullet์ ์๋ฎฌ๋ ์ด์
์คํ
(
p.stepSimulation()
)์ ์คํํ์ฌ ๋ก๋ด ๋์์ ์ ๋ฐ์ดํธํฉ๋๋ค.
-
closeGripper()
/openGripper()
- ๊ทธ๋ฆฌํผ๋ฅผ ๋ซ๊ฑฐ๋ ์ฌ๋ ๋์์ ์ํํฉ๋๋ค.
- ๋ซ๊ธฐ ๋์ ์ค ํน์ ํ ์ด์์ ์ ํญ์ด ๊ฐ์ง๋๋ฉด ๋์์ ์ค๋จํฉ๋๋ค.
- ๊ทธ๋ฆฌํผ๋ ๊ฐ์ฒด๋ฅผ ์์ ์ ์ผ๋ก ์ก๊ฑฐ๋ ๋์ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
-
get_observation()
- PyBullet ์นด๋ฉ๋ผ๋ฅผ ํตํด ํ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ์บก์ฒํ๊ณ , ๊ฐ์ฒด ์ค์ฌ์ ํฝ์ ๋ธ๋ก์ผ๋ก ๋ณํ๋ ๊ด์ฐฐ๊ฐ์ ์์ฑํฉ๋๋ค.
- ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๊ณผ์
- ๊ฐ์ฒด์ ์ค๊ณฝ์ ์ ๊ฒ์ถํ์ฌ ์ด๋ฏธ์ง ์์์ ์์น๋ฅผ ์๋ณ
- ์ค๊ณฝ์ ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ฒด์ ์ค์ฌ ์ขํ๋ฅผ ๊ณ์ฐ
- ๊ด์ฐฐ ์ด๋ฏธ์ง๋ฅผ 37x37 ํฌ๊ธฐ์ ์ด์งํ๋ ํฝ์ ๋ธ๋ก์ผ๋ก ๋ณํ
- ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ก๋ด์ด ๊ด์ฐฐ ๊ฐ๋ฅํ ๊ฐ์ฒด ์ ๋ณด๋ฅผ ๊ฐํํ์ต ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ณตํฉ๋๋ค
-
calculate_reward()
- ๊ฐ์ฒด๊ฐ ๋ชฉํ ๋์ด์ ๋๋ฌํ๋์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณด์์ ๊ณ์ฐํฉ๋๋ค.
- ๋ณด์ ๊ตฌ์กฐ
- ๋ชฉํ ๋์ด์ ๋๋ฌ ์
+1
- ์คํจํ๊ฑฐ๋ ๋ชฉํ ๋์ด์ ๋๋ฌํ์ง ๋ชปํ๋ฉด
-2
- ๋ชฉํ ๋์ด์ ๋๋ฌ ์
- ๋ณด์ ์ค๊ณ๋ ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ ๋ณด์ ๋ฑ์ผ๋ก ํ์ฅ ๊ฐ๋ฅ
-
create_parallelepiped()
/create_l_object()
/create_z_object()
- ๋ค์ํ ํํ์ ๊ฐ์ฒด๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๊ฒฝ์ ์์ฑํฉ๋๋ค.
- ๊ฐ ๊ฐ์ฒด๋ ์ด๊ธฐ ์์น์ ์์ธ๋ฅผ ๋ฌด์์๋ก ์ค์ ํ๋ฉฐ URDF ํ์์ ํตํด PyBullet์ ๋ก๋๋ฉ๋๋ค.
-
generate_new_pose()
- ๊ฐ์ฒด์ ์ด๊ธฐ ์์น์ ์์ธ๋ฅผ ๋ฌด์์๋ก ์์ฑํฉ๋๋ค.
- ๋ค์ํ ํ๊ฒฝ ์ค์ ์ ํตํด ํ์ต ๋ฐ์ดํฐ์ ๋ค์์ฑ์ ๋์ด๊ณ ์์ด์ ํธ์ ์ผ๋ฐํ ์ฑ๋ฅ์ ๊ฐํํฉ๋๋ค.
-
step(action)
- ์ฃผ์ด์ง ํ๋(action)์ ๋ฐ๋ผ ๋ก๋ด์ ๋์์ ์คํํ๊ณ ์๋ก์ด ๊ด์ฐฐ๊ฐ, ๋ณด์, ์ข ๋ฃ ์ฌ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค.
- ํ๋์ 7x7 ํฝ์ ๋ธ๋ก๊ณผ ์ฌ๋ฌ ๊ฐ๋ ์กฐํฉ์ผ๋ก ๊ตฌ์ฑ๋ ์ด์ฐ์ ํ๋ ๊ณต๊ฐ์์ ์ ํ๋ฉ๋๋ค.
- ํ ์ํผ์๋์ ๋จ๊ณ๋ฅผ ์ ์ํ๋ฉฐ ๊ฐํํ์ต ์๊ณ ๋ฆฌ์ฆ์์ ๋ฐ์ดํฐ๋ฅผ ํ์ตํ๋ ํต์ฌ ๋ฉ์๋์ ๋๋ค.
-
simulate_movement()
- ๋ก๋ด์ ๋ชฉํ ์์น๊น์ง์ ์์ง์์ ๋ฐ๋ณต์ ์ผ๋ก ๊ณ์ฐํ๊ณ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค.
- ๊ฐ ์๋ฎฌ๋ ์ด์ ๋จ๊ณ์์ ๋ก๋ด ๊ด์ ์ ์ํ๋ฅผ ํ์ธํ๋ฉฐ ๋ชฉํ์ ๋๋ฌํ๋์ง ํ๋จํฉ๋๋ค.
- ๋ฌผ์ฒด๊ฐ ๋ชฉํ ๋์ด์ ๋๋ฌํ๋ฉด
+1
์ ๋ณด์์ ๋ถ์ฌํฉ๋๋ค. - ์คํจํ๊ฑฐ๋ ์ง์ ๋ ๋์ด์ ๋๋ฌํ์ง ๋ชปํ๋ฉด
-2
์ ํจ๋ํฐ๋ฅผ ๋ถ์ฌํฉ๋๋ค. - ํ์ฌ ๋ณด์ ๊ตฌ์กฐ๋ ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ ๋ณด์, ๊ฐ์ฒด ํ์ ์์ ์ฑ ๋ณด์ ๋ฑ์ผ๋ก ํ์ฅ ๊ฐ๋ฅํฉ๋๋ค.
๋ก๋ด์ด ์นด๋ฉ๋ผ ์์์ ๋ฐํ์ผ๋ก ํ๋ธ๋ฅผ ์ง๊ธฐ ์ํด์๋ ์นด๋ฉ๋ผ์ ํฝ์ ์ขํ๋ฅผ ์๋ ์ขํ๋ก ๋ณํํ๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค. ์นด๋ฉ๋ผ์ ๋ด๋ถ ํ๋ผ๋ฏธํฐ๋ ๊ณต์์ ํตํด ๊ตฌํ์์ผ๋ฉฐ, ํ์ ํ๋ ฌ(R)์ ์๋ ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก y์ถ์ +180ยฐ, z์ถ์ -90ยฐ ํ์ ํ ๊ฒ์ ๋ฐํ์ผ๋ก ๊ณ์ฐํ์์ต๋๋ค. ๋ณํ ๋ฒกํฐ(T)๋ ์ด๊ธฐ์๋ ๋งํฌ ์ํ ๊ฐ์ ๊ฑฐ๋ฆฌ ์ฐจ์ด๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํ์ผ๋, ๊ฒฐ๊ณผ๊ฐ ์ ํํ์ง ์์ ์ง์ ๊ณ์ฐ์ ํตํด ์์ ํ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ๋ธ์ ์์ฑ ์์น๊ฐ ๋ฌ๋ผ์ง ๋๋ง๋ค ๋ณํ ๋ฒกํฐ๊ฐ ๋ฌ๋ผ์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ๋ธ์ ์์ฑ ์์น๋ฅผ ๊ณ ์ ํ๊ณ , ๊ณ ์ ๋ ๋ณํ ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์์ํ๋๋ก ์์ ํ์์ต๋๋ค.
ํ๋ธ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด arm_camera()
์ depth_img
์์ depth ๊ฐ์ ์ถ์ถํ์์ผ๋, ํด๋น ๊ฐ์ด 0~255 ๋ก ์ ๊ทํ๋ ๊ฐ์์ ํ์ธํ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ค์ ๋ far
๊ฐ์ ํ์ฉํ์ฌ depth = depth_value / 255.0 * far
๋ก ๋ณํํ์ฌ ์ค์ depth๊ฐ์ ์ถ์ถํ์๊ณ , ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์์ต๋๋ค.