Unity/AI인공지능

0525_AI 펭귄만들기

minquu 2021. 5. 25. 14:23
반응형

https://www.immersivelimit.com/tutorials/reinforcement-learning-penguins-part-1-unity-ml-agents

 

Reinforcement Learning Penguins (Part 1/4) | Unity ML-Agents — Immersive Limit

Unity Project Setup and Asset Import

www.immersivelimit.com

 

 

----

 

먼저 펭귄 리소스를 다운 받아준다.

 

 

이메일 적으면 다운을 받을 수 있다.

 

---

https://www.youtube.com/watch?v=axF_nHHchFQ 

https://www.youtube.com/watch?v=6xsqTH0qi5w 

 

 

유투브 영상도 있음

 

----

 

시작하기

 

 

새로운 유니티 프로젝트를 (펭귄) 만들어준다.

 

 

패키지 매니저에서 ML Agents 를 인스톨해준다.

 

----

 

Git 허브에 프로젝트를 사용하면 2.0.1 ML-agent인데

 

기본 프로젝트에서는 

1.0.7이다. 그래서 깃허브의 프로젝트를가져와서 해야하는지, 바로 1.0.7에서도 되는지 테스트를 먼저 해본다.

 

 

1.0.7 버전은

Actuators; 가 안들어가기 때문에

 

 

액션 버퍼가 안된다.

 

 ---> 따라서 Git 허브에서 만든 것을 프로젝트로 사용하여서

 

2.0.1 버전을 사용해야한다.

 

기존에 했던 Project를 사용해준다.

 

 

만약 없으면 이걸로 유니티 허브에서 애드 해주면 된다.

 

또는 

 

어셋에

 

ML - Agents만 있어도 된다.

 

 

드래그해도 안된다.

 

 

-------

그래서 기존처럼 쓴 Project에서 만들어야한다.

 

하나 더 테스트

 

 

 

 

새로 만든 프로젝트에 

 

이 두개의 파일은 외부에서 쓰는 것들을 설정 해주는 파일이다.

 

 

 

2.0.1 버전의 패키지스 - 락에 저 부분을 추가 해볼것이다.

 

새로 프로젝트를 만들어주고,

 

 

2.0.0 폴더의 두 개 의 파일을 새로 만든 패키지스 폴더에 붙여넣기를 해준다.

 

----> 에러가 뜬다. 이 방법도 안 될 듯 !

 

 

-----

 

https://github.com/Unity-Technologies/ml-agents/blob/main/docs/Installation.md

 

Unity-Technologies/ml-agents

Unity Machine Learning Agents Toolkit. Contribute to Unity-Technologies/ml-agents development by creating an account on GitHub.

github.com

 

 

 

 

 

패키지 매니저 Add package from disk로 깔면 새로운 프로젝트에서도 될듯 

 

 

 

 

이러면 2.0.0 를 사용할  수 있 다 .

 

----

 

 

 

펭귄 어셋을 넣어주고,

메쉬 -> 모델링 끌어다 넣어주고 - 이름을 카멜식으로 바꾸줘고 - 프리팹으로 만들어준다.

 

PenguinArea 프리팹 제외하고 지워준다.

 

 

 

  • PenguinArea
  • PenguinAgent
  • Fish

스크립터를 만들어준다.

 

--추천 예제 

https://learn.unity.com/course/ml-agents-hummingbirds

 

ML-Agents: Hummingbirds - Unity Learn

Reinforcement Learning is one of the most exciting types of Artificial Intelligence and the Unity ML-Agents project is one of the easiest and most fun ways to get started. The instructor for the course is Adam Kelly, an experienced Unity developer who has

learn.unity.com

 

 

---

스크립터를 만들고 나서

 

예전버전에는

 

펭귄 아카데미가 필요했는데 이제는 필요하지 않는다. (아카데미는 싱글턴이었음)

 

 

 

펭귄 에어리어 만들기

 

펭귄 에어리어는 물고기 펭귄 물 등등이 있다.

 

 

먼제 에어리어 스크립터를 열어서 수정해준다.

 

 

스타트랑 업데이트를 지워준다.

 

'

 

using MLAgents; // 이거 안됨 using Unity.MLAgents; 로 해야함.
using TMPro; //텍스트 메쉬를 사용하기 위해서 사용 // 텍스트를 3d 메쉬로 보여준다.

 

를 달아준다. 

 

 

 

 

 

[ ] 은 툴 팁으로서, 이걸 뚫으면 밖에 퍼블릭으로 뚫리는 곳에 설명이 생긴다.

 

 

---

마우스 올리면 툴 팀 내용이 보인다.

 

 

--

주석할때 /// 세 개를 치면 

서머리가 뜬다. 

서머리를 쓰면 다른 사람들한테 변수를 알려줄 수있다.

 

 

리셋 에어리어 메서드 만들어준다.

 

 

특정 물고기를 없애는 메서드과 남아있는 물고기 

 

 

 

RemoveSpecificFish 는 엄마가 먹은 걸 없애주는 메서드

 

 

 

랜덤 포지션을 선택해주는 기능

 

 

--

모든 물고기를 지우는 메서드

 

 

 

펭귄을 위치시키는것, 아까 우리가 만든 랜덤포지션에서 360도로 만들어주는 것

팽귄이 생성될때 ChooseRandomPosition에 값을 넣어서 렌덤하게 나오게하는것

 

애기 펭귄 위치도 대체 하게 해준다.

 

---

 

물고기 만들기

 

4(숫자) , 5 (스피드) 였음. 위에서 넣어준 값 

 

 

 

--

 

스타트 에서 리셋 에어리어 하겠음

 

업데이트는 리워드 텍스트를 

 

-- 즉 에어리어에서 피쉬 만들고, 펭귄들 위치 정해주고, 이런걸 해준다.

 

---

펭귄 에이전트 .cs로 가기

 

 

 

 

 

스피드, 도는 속도, 하트 프리팹(애기한테 줄때) , 먹은걸 주는 프리팹 (애기한테 줄때)

 

 

 

리지드 바디, 

new private 는 변수 재정의, 부모의 리지드 아님 내 리지드를 쓴다는 것

 

isFull은 물고기가 다 찼는지

 

초기화 단계

 

 

 

액션 버퍼 부분

 

 

float forwardAmount = actionBuffers.DiscreteActions[0]; // 딱딱 떨어지는 Discrete // 컨티뉴어티 - 이어지는 값

 

Discrete  상태로 0은 찾아야하는 1은 다 찬 상태

 

이건 어느쪽으로 돌지 정하는 것

 

 

 

 

 

 

 

액션 부분과 리워드 부분을 잘 찾아봐야한다.

 

 

지금은 액션의 0 과 1 의 따라서 상태를 나누고,

 

리워드는  5,000 스텝 마다 감점을 주고있다. 

 

여기서 하는 건, 이동하고, 회전하고, 보상하고 (- 보상)

 

 

--

 

 

 

 

 

휴리스틱은 사람이 직접 움직이기위해서

테스트 할때나 사람 모방 훈련할때

 

 

키보드를 통해서 강제적으로 넣고있음

 

 

 

에피소드가 시작 될때, 초기화를 시켜준다.

 

 

 

--

옵저베이션 관찰 단계

 

 

 

 

 

이 값을  관측을 하겠다는 것, 파이썬 API로 보내 겟다는 것, (나중에 이걸 비헤이어에 넣어줘야하는 값이다.

이걸 꼭 맞춰서 잘 넣어야한다.)

 

사이클 참고하기

 

콜리젼, 태그로 찾는 것이다. // 콜라이더가 붙어 있어서, 부딪치면 찾게 한다.

 

피쉬봐 베이비를 충돌 체크를 하겠다.

피쉬에 닿으면 EatFish 넣고,

베이비에 닿으면 Regurgitate 물고기를 토해낸다.

 

 

 

 

피쉬를 먹는 메서드

 

 

 

 

피쉬를 토내해는 

 

-----

 

물고기.cs

 

 

속도, 랜덤속도, 등등

 

스윔 메서드

 

 

 

----

여기까지

https://www.immersivelimit.com/tutorials/reinforcement-learning-penguins-part-2-unity-ml-agents

 

 

 

Reinforcement Learning Penguins (Part 2/4) | Unity ML-Agents — Immersive Limit

 

www.immersivelimit.com

 

----

 

 

 

애기 프리팹 만들기

 

 

 

 

물고기 프리팹

 

엄마펭귄

 

 

------

 

 

 

스크립터 붙여주면, 이렇게되는데

 

스페이스 사이즈는 옵져버에서 계산한 값을

 

액션은 설정해준 액션[0] , 그거 넣어주는 거 0 1 2 잡아준거.

 

 

스텝은 5000 

 

 

○ 레이를 쏜다

 

 

 

레이를 쏠수있다. Detece 태그를 설정

 

 

잊미말고 Decision 리퀘스트 달아주기

 

 

 

 

 

세 개 프리팹안에서 잡아서 메쉬 랜더러 지우고, 메쉬 콜라이더 붙여주기

 

 

 

이후 쭉 따라하고,

 

 

config에 yaml 파일 만들어서,  cmd 에서 명령어 입력해주시기 

 

 

 

 

---

 

 

 

 

반응형