로봇 위치들을 동영상으로 보여주기

로봇의 시간에 따른 위치들을 동영상처럼 하나씩 시간차를 두고 보여주는 방법을 공부해 볼까해요.
이를 위해서는 각 위치들을 하나씩 가져오기 위한 for 루프가 필요하답니다.


강의들은 모두 무료입니다. 단, 저작권은 키클 코딩랩 에 있으며, 무단 복제 및 배포를 엄금합니다.
이를 어길 시, 본 사이트의 서버가 미국에 있으므로, 미국법에 의해 처벌될 수도 있습니다.




figure와 subplot 셋업하기

새로운 Python코딩을 하고자 하니, 새로운 Python파일을 만들어 봐야 겠죠? 이미 이전 강의들에서 다루었지만, 복습 차원에서 다시 한번 설명할게요.
먼저, "강의. 그래프 1 - 로봇 경로 만들기"에서 설명했던 것처럼 노틸러스에서 원하는 폴더를 생성하거나 이미 만들어 놓은 폴더로 들어가 보세요.
원하는 폴더 위치로 들어갔나요? 그럼 마우스 오른쪽 버튼으로 팝업메뉴를 열고, "Open in Terminal" 메뉴를 이용해서 터미널을 실행해 보세요.
그리고 아래와 같이 새로운 파일을 gedit 문서편집기를 이용해서 생성해 보지요.

이제 코딩을 해 볼까요?
이번에도 그래프를 만들 거니까, matplotlib를 사용할 거예요. 그러면, "강의. 그래프 1 - 로봇 경로 만들기"에서 했던 것처럼, import를 이용해서 matplotlib의 pyplot 객체를 plt라는 별명을 통해 사용할 것이라고 선언해 보지요.
그리고 아래처럼, 로봇의 (x, y) 좌표 여덟 개를 리스트를 이용해서 정해 보세요.
이 여덟 개의 좌표들을 동영상처럼 각각 한 개씩 그래프에 보여줄 거랍니다.

리스트가 무엇인지는 이미 몇 차례 공부해 봤지요? 기억이 안 난다면, 문법 노트 가서 확인해 보세요.
또 다시, 문법 노트에 가기도 귀찮다면, 또 다시 이번까지만 강의 내에서 설명할테니 복습해 보세요...^^; 단, 이번이 정말 마지막 이예요..

[문법] List

우리는 그래프를 이용해서 동영상처럼 보여주기를 할 거랍니다.
그렇다면, 먼저 figure를 만들어야 하겠죠? figure는 그래프를 담는 창이라고 생각하면 되요.
figure가 무엇인지 직접 확인해 보고 싶다면, 이전 강의에서 figure를 확인하는 내용을 살짝 보고 오세요.
아래와 같이, pyplot객체의 figure() 함수를 이용해서 figure를 생성하고, 리턴값인 figure 객체를 fig라는 이름으로 받아 보지요.
그리고, 줄7에, 이전 강의에서 했던 것처럼 figure에 subplot을 하나 붙이면서 리턴된 axis 객체를 ax변수에 담아보지요.

위 코드에서 주목할 점은 add_subplot에서 argument로 "111"를 전달했다는 것이죠.
이유는 우리는 한 개의 subplot만 사용할 것이니 총 사용할 subplot의 개수가 가로로 1줄, 세로로 1줄이니 "11"이고, 그 중 첫번째 것이니 "111" 인 것이죠.
그리고, 줄8과 줄9에서, 우리가 정한 x, y 좌표의 최대값과 최소값을 고려해서, 보여줄 plot의 범위를 xlim()과 ylim()함수를 이용하여 설정했답니다.

또 한 줄이 줄11에 추가되었지요?
첫 번째 좌표를 marker를 이용해서 먼저 그래프에 그리기 위한 코드랍니다. 이렇게 하는 이유는 생성되는 line 객체를 받아놓기 위함이예요.
우리는 ln라는 변수이름으로 첫 번째 좌표의 line객체를 받았어요.
리턴값을 받으면서 ","를 뒤에 붙이는 것 잊지마세요. 이유는 다소 복잡한 개념 설명이 필요하니 나중에 기회가 되면 다루도록 할게요.




for 루프(loop)와 range 객체

이제, for 루프를 돌리면서 로봇의 좌표를 하나씩 빼낸 후, 그 값을 앞서 받아둔 ln객체에 대입함으로써 동영상처럼 보이게 할 겁니다.

먼저, Python에서 for 루프를 다루려면, range 객체를 알아야 해요. for 루프와 함께 자주 사용되거든요.
일단, range(num)이라고 코딩을 하면, 0에서 num-1까지의 정수들을 저장하고 있는 range 객체가 생성이 된답니다.
예를 들어, t = range(4)라고 하면, t는 0, 1, 2, 3이라는 네 정수들을 저장하고 있는 range 객체가 되는 것이죠.
그리고, 저장되어 있는 각 정수들을 참조(빼내어 사용)하려면, 리스트에서와 같은 형태로 사용하면 되요. 즉, t[0], t[3]등으로 사용하는 것이죠.
for 루프는 순차적으로 증가하는 정수를 토대로 코딩을 하는 경우가 많은데, range가 그 순차적으로 증가하는 정수들을 제공해 준답니다.

자, 그럼 range를 염두에 두고, for 루프를 어떻게 코딩하는지 배워 보지요.

[문법] For loop




동영상으로 보여주기

for 루프가 어떻게 돌아가는지 감이 좀 잡혔나요?
이제 로봇의 위치를 동영상처럼 보여주기 위해서, 아래 줄13~18처럼 for 루프를 이용해 보지요.

줄13에서는 for 루프의 첫 코드를 입력하였는데요. 줄3~4에서 로봇의 위치 좌표를 여덟개를 정했었지요? 그래서 range(8)을 for 루프에서 사용한 거랍니다. 그리고 range(8)에 저장되어 있는 값들, 즉, 0~7,은 i라는 변수 이름으로 받고 있답니다.
줄 14에서는 i의 값과 i를 인덱스번호로 이용할 때의 로봇 위치 좌표들을 출력하는 코드예요. print()함수는 처음 사용해 보지요? 사용법에 대해서 잠깐 알아보고 갈까요?

[문법] print()

줄15~16에서는, ln객체의 set_xdata()와 set_ydata()함수들을 이용해서 위치 좌표값들을 다른 값들로 교체하는 코드가 삽입되었어요.
줄17에서는 plt의 draw()함수를 이용해서 새롭게 업데이트 된 ln객체 정보를 가지고 그래프를 새롭게 그리는 코드가 추가되었답니다.
줄18에서는 0.5초간 for 루프 내에서의 동작을 멈추게 하는 코드를 추가했는데요, plt의 pause()함수를 사용했어요. 이렇게 잠시 멈추는 이유는, 그렇지 않을 경우 for 루프의 동작이 너무 빨라서 로봇 위치가 변하는 것을 볼 수 없기 때문이지요.

위 코드를 실행해 볼까요? 어떻게 실행하는지 기억하지...요?
저장한 후, 아래처럼 터미널에서 python3 를 이용하면 되지요? 기억이 안난다면, 여기에서 복습해 보세요.

실행하면, 파란 사각형(로봇)의 위치가 시간에 따라 변하는 것을 볼 수 있을 거예요. 그리고 Terminal 창에는 아래와 같은 출력이 이루어질 겁니다.
i: 0 --> x: 0 , y: 0
i: 1 --> x: 1 , y: 2
i: 2 --> x: 3 , y: 3
i: 3 --> x: 3 , y: 4
i: 4 --> x: 4.5 , y: 6
i: 5 --> x: 5 , y: 7
i: 6 --> x: 6 , y: 8
i: 7 --> x: 7 , y: 9

강의에서 작성된 소스 코드 (source code)를 다운받으려면, 다음 링크를 클릭하세요: 소스 코드 다운로드
혹시, 이해가 잘 안되는 부분에 대한 질문이 있거나 다루어 줬으면 하는 주제가 있으면, 화면 오르쪽 하단에 "질문하기" 버튼을 이용해 주세요.






발자취

2019-09-11 "키클 코딩랩 - 미국 공학박사 아빠의 코딩 연구소"로 이름 변경
2019-06-28 코딩 교실 공개
2019-03-18 코딩 교실 제작 시작

바로가기
Python 배움터
C/C++ 배움터
About
Contact
Privacy Policy
강의목록
질문하기
처음으로