News Download Tutorial FAQ Reference Buy

스크래치 : 로봇 움직이기

앞으로 이동하기
간단한 프로그램을 작성해 보자.

햄스터 로봇을 앞으로 이동시키기 위한 프로그램을 작성하시오.

왼쪽 바퀴와 오른쪽 바퀴는 -100부터 100까지의 값을 가지는데 최대 속도를 100으로 하였을 때 바퀴의 속도를 %로 나타낸 것이다. 양수 값이면 바퀴가 앞으로 굴러가고 0이면 멈춘다. 우선 왼쪽 바퀴를 앞으로 굴리기 위해 속도를 30으로 하고, 오른쪽 바퀴의 속도도 똑같이 30으로 해보자. 햄스터 로봇이 똑바로 앞으로 가기 위해서는 왼쪽과 오른쪽 바퀴의 속도를 같게 입력해야 한다.

이제, 햄스터 로봇이 앞으로 달려가는 프로그램이 완성되었다. 간단하다. 프로그램을 실행하기 전에 로봇이 달려갈 공간을 확인하도록 하자. 책상 위에서 로봇이 달려가다가 책상에서 떨어지면 곤란하다. 돈이 많아서 로봇을 새로 살 수 있다면 책상 위를 로봇이 달리다가 바닥으로 점프해도 된다. 프로그램을 실행하면 햄스터 로봇이 앞으로 이동하고, 프로그램을 종료하면 멈출 것이다.

바퀴의 속도를 0부터 100까지 변경하면서 로봇의 이동 속도가 어떻게 달라지는지 관찰해 보자. 바퀴의 속도를 작게 했을 때 로봇이 움직이지 않는다고 슬퍼하지 않기 바란다. 움직이려고 애를 쓰지만 힘이 없어 움직이지 못하는 것이다. 귀엽고 예쁜 햄스터 로봇이 안쓰러우니 바퀴의 속도를 높여 힘을 내도록 해주자.
뒤로 이동하기
햄스터 로봇의 주행 방향은 부호로 설정할 수 있다. 바퀴의 속도를 양수 값으로 하면 바퀴가 앞으로 굴러가고, 음수 값으로 하면 뒤로 굴러간다. 물론 바퀴의 속도가 0이면 멈춘다.

햄스터 로봇을 뒤로 이동시키기 위한 프로그램을 작성하시오.

앞에서 작성한 프로그램에서 바퀴의 속도만 음수 값으로 변경하면 된다.

프로그램을 실행하기 전에 로봇이 후진할 공간을 확인하도록 하자. 프로그램을 실행하면 햄스터 로봇이 뒤로 이동하는 것을 확인할 수 있다. 마찬가지로 프로그램을 종료하면 로봇이 멈출 것이다. 바퀴의 속도를 0부터 -100까지 변경하면서 로봇의 이동 속도가 어떻게 달라지는지 관찰해 보자.
제자리 돌기 (스핀)

햄스터 로봇이 제자리에서 돌도록 프로그램을 작성하시오.

다음 그림과 같이 왼쪽 바퀴와 오른쪽 바퀴의 회전 속도를 반대로 하면 회전하는 중심점은 어디일까? 답은 좌우 바퀴를 연결하는 선의 중심이다. 이렇게 두 바퀴의 회전 방향을 반대로 하고 속도 크기(속력)를 같게 하면 제자리에서 회전하게 된다. 이러한 회전 동작은 어떤 미션을 완료한 후 자축 세레모니로 활용할 수 있다.


한쪽 바퀴를 축으로 회전하기 (피봇 턴)

햄스터 로봇의 왼쪽 바퀴를 축으로 회전하는 프로그램을 작성하시오.

다음 그림과 같이 왼쪽 바퀴를 정지하고 오른쪽 바퀴에만 속도 값을 주면 로봇이 회전하는 중심점은 어디일까? 답은 로봇의 왼쪽 바퀴이다. 오른쪽 바퀴는 움직이는데 왼쪽 바퀴가 움직이지 않으므로 로봇은 왼쪽 바퀴를 중심으로 회전하게 된다. 사람도 마찬가지이다. 왼쪽 발을 땅에 고정시키고 오른쪽 발만 앞으로 가면 어떻게 될까?

앞에서 프로그래밍한 제자리 돌기보다는 회전 반경이 크지만 다음 그림과 같이 한쪽 바퀴를 기준으로 회전할 때 사용하는 방식이다.


반대로 오른쪽 바퀴를 중심으로 회전하도록 해보고, 시계 방향, 반시계 방향 등 다양한 회전을 만들어 보자.
둥글게 회전하기 (라운드 턴)

햄스터 로봇이 원을 그리며 회전하는 프로그램을 작성하시오.

다음 그림과 같이 왼쪽 바퀴는 20의 속도로 회전하고 오른쪽 바퀴는 50의 속도로 회전하면 햄스터 로봇이 원을 그리면서 왼쪽으로 회전하게 된다. 두 바퀴 간의 속도 차이에 의해 회전하게 되므로 두 바퀴 간의 속도 차이가 작을수록 큰 원을 그리면서 회전한다.



좌우 바퀴의 속도를 다양하게 변경해 보면서 로봇이 회전하는 원의 크기가 어떻게 달라지는지 관찰해 보도록 하자.
일정 시간 동안 움직이기
이번에는 일정한 시간동안만 로봇이 움직이도록 해보자.

햄스터 로봇을 2초 동안 앞으로 이동시키기 위한 프로그램을 작성하시오.

다음 그림과 같이 '앞으로 ~초 이동하기' 블록을 사용해도 되지만 직접 구현해 보도록 하자.

간단하게 생각해서 좌우 바퀴의 속도를 30으로 명령한 후에 2초 쉬었다가 정지하면 되지 않을까?

이제, 햄스터 로봇이 2초 동안 앞으로 달린 후 정지하는 프로그램이 완성되었다. 2초 동안 후진하거나 회전하는 프로그램 등 다양한 동작을 만들어 보자.
단위 동작을 연결하여 프로그래밍하기

햄스터 로봇이 1초 동안 앞으로 이동한 후 1초 동안 오른쪽으로 회전하는 프로그램을 작성하시오.

이 동작은 다음과 같은 두 개의 단위 동작으로 구현할 수 있다.

'앞으로 ~초 이동하기', '뒤로 ~초 이동하기', '왼쪽으로 ~초 돌기' 등의 블록들은 특정 동작을 수행하도록 미리 제작된 것으로, 복잡한 동작을 구성하기 위한 부품 블록으로 생각할 수 있다. 이 블록들을 연결하여 다양한 프로그램을 작성할 수 있다. 단위 동작을 만드는 이유는 전체 프로그램이 크고 복잡해도 작은 단위로 잘라서 만들면 쉽게 프로그래밍할 수 있고, 다른 프로그램에서도 다시 사용할 수 있다는 장점 때문이다.

다음 그림과 같이 연결하여 실행해 보고, 블록의 순서를 바꾸어 연결한 후 실행해 보자. 블록들의 연결 순서에 따라 햄스터 로봇의 동작이 달라지는 것을 확인할 수 있다. 이와 같이 햄스터 로봇의 동작을 단위 동작으로 구분하여 만들면 연결 순서에 따라 다양한 동작을 쉽게 만들 수 있다.

햄스터 로봇이 1초 동안 앞으로 이동한 후 1초 동안 뒤로 이동하는 프로그램을 작성하시오.

다음 그림과 같이 햄스터 로봇이 사각형 모양으로 주행하는 프로그램을 작성하시오.

사각형 모양으로 주행하기 위해서는 햄스터 로봇이 90도로 회전해야 하는데, 실험을 통해 몇 초 동안 회전하면 90도가 되는지 알아보도록 하자. 0.6이라는 숫자는 실험 환경에 따라 달라질 수 있다.

프로그램을 실행해 보면 햄스터 로봇이 정확하게 사각형 모양으로 주행할 수도 있고, 약간 찌그러진 사각형 모양으로 주행할 수도 있다. 바닥의 재질에 따라서는 완전히 이상한 모양으로 주행할 수도 있다. 이 프로그램은 사람이 눈을 감고 사각형 모양으로 걸어가는 것과 같다. 센서 정보를 사용하지 않기 때문이다. 여러분도 눈을 감고 사각형 모양으로 걸어가 보면 얼마나 어려운 일인지를 알 수 있을 것이다. 로봇에게 센서는 사람의 눈과 같다. 따라서 센서 정보를 사용하지 않고 주행하는 것에는 한계가 있을 수밖에 없다. 햄스터 로봇이 센서를 사용하여 주행하는 방법은 앞으로 프로그램을 작성해 보면서 하나씩 배우게 될 것이다.
반복하기
앞서 프로그래밍한 것처럼 같은 내용을 반복적으로 작성하는 것은 매우 비효율적이다. 예를 들어 전진과 후진을 300번 반복하는 경우는 어떻게 프로그래밍할까? '전진 – 후진 – 전진 – 후진 – ... – 전진 – 후진'과 같은 방법으로 프로그램을 작성한다면 프로그래밍에 대한 즐거움을 느끼지 못할 것이다. '~번 반복하기' 블록은 내부의 블록들을 설정한 횟수만큼 반복하여 실행한다.

햄스터 로봇이 전진과 후진을 4회 반복하는 프로그램을 작성하시오.

아무리 재빠른 햄스터 로봇이라고 하더라도 갑자기 속도를 바꾸면 당황할 것 같다. 로봇을 프로그래밍할 때 서서히 속도를 높이고 내리는 작업은 중요하다. 여러분이 자전거를 타고 갈 때 갑자기 속도를 0으로 하면 어떻게 될까? 상상만 해도 겁이 난다. 이제 햄스터 로봇의 속도를 서서히 높이거나 내리는 프로그램을 작성해 보도록 하자.

서서히 속도를 내려 정지하는 프로그램을 작성하시오.

속도를 서서히 내리기 위해서는 매번 속도 값을 다르게 주어야 한다. 속도 30에서 시작하여 3초 후에 속도가 0이 되도록 하려면 0.1초마다 속도를 1씩 감소시키면 된다.

서서히 속도를 높여 출발하는 프로그램도 만들어 보도록 하자.
조건에 따른 흐름 제어
'~부터 ~ 사이의 난수' 블록은 난수를 발생시키기 위한 블록이다. 1부터 10 사이로 설정하면 1부터 10까지의 난수를 발생시킨다. '만약 ~라면 ~' 블록은 조건에 따라 블록의 실행을 다르게 하기 위한 블록이다. 조건이 참이 되면 내부의 블록들을 실행하고, 거짓이면 실행하지 않는다.

햄스터 로봇이 1초 동안 앞으로 이동한 후 1부터 10까지의 난수를 발생시켜서 5보다 크면 좌회전하도록 하고, 이 전체 과정을 10회 반복하는 프로그램을 작성하시오.

'만약 ~라면 ~ 아니면 ~' 블록은 조건이 참이 되면 위쪽에 포함된 블록들을 실행하고, 거짓이면 아래쪽에 포함된 블록들을 실행한다.

1부터 10까지의 난수를 발생시켜서 5보다 크면 1초 동안 앞으로 이동하고, 아니면 1초 동안 뒤로 이동하도록 하고, 이 전체 과정을 10회 반복하는 프로그램을 작성하시오.
목차
Hardware
  1. Hamster robot
  2. USB dongle
Preparation for Class
  1. Software installation   Windows · MacOS · Linux
  2. Robot to PC connection
  3. Software execution   Windows · MacOS · Linux
Basic
  1. Standing and singing
  2. My precious ass
  3. Moving an object with the accelerometer
Advanced
  1. Moving an object with the accelerometer
  2. Line follower with one sensor
Previous Lectures
  1. Ordering in sequence
  2. Repeat
  3. Debugging
  4. Repeat until hand found
  5. Move a robot
  6. Use sensors
  7. Use the default board
  8. Braitenberg's robot
Copyright Robot Software Education Institute. All rights reserved.
Please contact prof. Kwang-Hyun Park (akaii@kw.ac.kr) if you have any problem.