오늘은 autonomous agent가 target에게 다가가기 위해 몸을 트는 것을 계획하고 실행하는 과정을 단계별로 사고실험해 보도록 하겠습니다~^^*
아래 동영상 강의를 복습삼아 처음부터 다시 보셔도 좋을 것 같아요~^^*
오늘은 구체적인 코드 작업을 바로 하지는 않을 것이라서요~~^^*
9:23까지 시청자 모드로 편안히 편안히~^^* 보시면 될 것 같아요~^^*
내일 이 동영상 강의 내용을 한 번 더 보면서 본격코드 작업을 해 볼게요~^^*
어제 우리는 몸을 얼마나 틀 것인가를 계산하는 공식을 알게 되었는데요~^^*
steering = desired_velocity - current_velocity;
가장 빠르게 target에게 도달할 수 있는 속도 desired_velocity에서 현재 autonomous agent가 움직이는 데 반영되고 있는 속도 current_velocity를 뺀 것이, autonomous agent가 몸을 트는 steering 속도가 된다는 것이었는데요~^^*
이 공식이 어떻게 해서 나오게 되었는지, 한 발짝 한 발짝 짚어보도록 할게요~^^*
예전에, 만유인력을 표현하는 프로그램을 만들었던 것을 기억하시나요~^^*
그때는 끌어당기고자 하는 대상이 되는 물체 object가 끌어당기는 주체가 되는 물체 attractor에게 가장 빨리 끌여당겨지는 속도 velocity를 단순하게 계산했었는데요~^^*
autonomous agent는 자신의 현재 환경을 인지하고 행동계획을 수립하여 실행하는 존재이기 때문에, 현재 자신의 위치에서 가장 빨리 target에게 다가갈 수 있는 desired_velocity를 고려할 뿐만 아니라, 자신이 현재 움직이고 있다는 것을 인지하고 자신의 현재 속도 current_veloctiy 또한 steering 계산에 반영하는 것 같아요~^^*
달리는 말 위에서 궁수가 저 먼 곳에 있는 과녁을 향해 활을 쏠 각도와 힘을 계산해 내는 두뇌활동을 autonomous agent가 해내고 있는 것 같기도 해요~~^^*
땅 위에 서서 활을 쏠 때보다는 고려해야 할 사안이 하나 더 늘어나는 것이겠지요?
“나는 지금 움직이고 있다!”를 계산에 반영하는 과정 같아요~^^*


네, 이렇게 해서 어느 방향으로 얼마만큼의 힘을 들여 어느 정도 속력의 활을 쏠 것인가 결정되는 것 같네요!^^*
근데요~~^^*
활의 성능에 따라, 화살의 종류에 따라, 궁수의 손과 어깨와 팔의 힘에 따라 최대한 발휘할 수 있는 힘의 크기와 활의 속력은 달라질 수 있을 것 같아요.
그러면, autonomous agent 가 가진 max_speed와 max_force도 고려해서 코드를 짜야 할 것 같아요~^^*
그래서~, autonomous agent class의 구성요소를 아래와 같이 정의하면 어떨까요~^^*
autonomous agent가 target을 향해 움직이니까, 이름을 운송수단 Vehicle이라고 해 볼게요~^^*
구성요소들의 구체적 수치값은 상황에 따라 적절하게 바꾸어 보도록 할게요~^^*
Class Vehicle {
constuctor(x, y) {
this.pos = createVector(x,y);
this.vec = createVector(0,0);
this.acc = createVector(0,0);
this.maxSpeed = 4;
this.maxForce = 1;
this.r = 16;
}
}
Wow! 이제, 우리는 steering를 계산하는 과정 이해와 autonomous agent 클래스 구성요소 정리를 마무리한 것 같아요~^^*
우리도 계속 움직이고 환경도 변화하는 가운데 무언가를 향해 나아가기로 결심하고 활을 쏘아 올릴 때, 고려해야 할 수많은 사항들과 정의해야 할 수많은 변수들….이 어려운 계획을 수립하고 실행하는 우리의 autonomous agent Class Vehicle! 화이팅!
내일은 본격적으로 코드 작업을 해 볼까요~^^* Are you ready~~? Say, yes~~!
오늘도 저와 함께 코딩 공부해 주셔서 감사합니다~^^*
우리 내일 또 만나서 코딩 공부 함께 해요~^^*
꿈은 이루어 집니다~~^^*
댓글 남기기