다운로드 교육자료 문제해결 레퍼런스 구입방법

교육 자료 : 자바스크립트 : 햄스터 친구 따라가기

친구 따라가기
라인 트레이서를 활용하여 앞에서 주행하는 다른 햄스터 로봇과 충돌하지 않고 검은색 선을 따라 주행하도록 해봅시다. 규칙은 다음과 같습니다.

A4 용지를 준비하고 햄스터 로봇이 이동할 직선을 검은색 테이프 또는 펜으로 그립니다. 검은색 선의 폭은 양쪽 바닥 센서의 간격보다 약간 작은 정도(0.8cm)로 하는 것이 좋습니다. 미리 제작된 파일을 프린터로 인쇄해도 됩니다.

라인 트레이서 실습판 내려 받기 PDF PPT

햄스터 로봇이 검은색 선을 따라 주행하는 것은 지난 시간에 배운 센서 두 개를 사용한 라인 트레이서를 참고하도록 합시다.

var hamster = Hamster.create();

function execute() {
    var diff = hamster.leftFloor() - hamster.rightFloor();
    hamster.wheels(30 + diff * 0.4, 30 - diff * 0.4);
}

이제 전방을 살펴보면서 앞의 햄스터 로봇과 너무 가까우면 잠시 정지하도록 코드를 수정해 봅시다.

var hamster = Hamster.create();

function execute() {
    if(hamster.leftProximity() > 50 || hamster.rightProximity() > 50) {
        hamster.stop();
    } else {
        var diff = hamster.leftFloor() - hamster.rightFloor();
        hamster.wheels(30 + diff * 0.4, 30 - diff * 0.4);
    }
}

2인 1조가 되어 각자의 컴퓨터에서 코드를 실행한 후 뒤쪽의 햄스터 로봇이 앞의 햄스터 로봇과 충돌하지 않고 안전하게 잘 주행하는지 확인해 봅시다.

이번에는 하나의 컴퓨터에서 두 대의 햄스터 로봇을 제어해 봅시다. 하나의 컴퓨터에서 두 대의 햄스터 로봇을 사용하기 위해서는 컴퓨터에 동글을 두 개 꽂고 코드에서 Hamster.create()를 두 번 호출하면 됩니다.

var hamster1 = Hamster.create();
var hamster2 = Hamster.create();

각각의 햄스터 로봇이 전방을 살펴보면서 검은색 선을 따라 주행하는 코드는 다음과 같이 작성될 수 있습니다.

var hamster1 = Hamster.create(); // 첫 번째 햄스터 로봇
var hamster2 = Hamster.create(); // 두 번째 햄스터 로봇

function execute() {
    // 첫 번째 햄스터 로봇
    if(hamster1.leftProximity() > 50 || hamster1.rightProximity() > 50) {
        hamster1.stop();
    } else {
        var diff = hamster1.leftFloor() - hamster1.rightFloor();
        hamster1.wheels(30 + diff * 0.4, 30 - diff * 0.4);
    }

    // 두 번째 햄스터 로봇
    if(hamster2.leftProximity() > 50 || hamster2.rightProximity() > 50) {
        hamster2.stop();
    } else {
        var diff = hamster2.leftFloor() - hamster2.rightFloor();
        hamster2.wheels(30 + diff * 0.4, 30 - diff * 0.4);
    }
}

같은 코드를 두 번 작성하였기 때문에 뭔가 비효율적으로 보입니다. 햄스터 로봇의 수가 많아지면 어떻게 될까요? 함수로 만드는 것이 좋겠습니다.

var hamster1 = Hamster.create(); // 첫 번째 햄스터 로봇
var hamster2 = Hamster.create(); // 두 번째 햄스터 로봇

function trace(robot) {
    if(robot.leftProximity() > 50 || robot.rightProximity() > 50) {
        robot.stop();
    } else {
        var diff = robot.leftFloor() - robot.rightFloor();
        robot.wheels(30 + diff * 0.4, 30 - diff * 0.4);
    }
}

function execute() {
    trace(hamster1); // 첫 번째 햄스터 로봇
    trace(hamster2); // 두 번째 햄스터 로봇
}

이제 햄스터 로봇의 수가 많아져도 Hamster.create()를 호출하는 부분과 trace() 함수를 호출하는 부분만 추가하면 되기 때문에 훨씬 간단해졌습니다. 참고로, 자바스크립트의 배열을 사용하여 좀 더 일반적인 형태로 수정하면 다음과 같이 됩니다.

var hamsters = [Hamster.create(), Hamster.create()];

function trace(robot) {
    if(robot.leftProximity() > 50 || robot.rightProximity() > 50) {
        robot.stop();
    } else {
        var diff = robot.leftFloor() - robot.rightFloor();
        robot.wheels(30 + diff * 0.4, 30 - diff * 0.4);
    }
}

function execute() {
    for(var i = 0, len = hamsters.length; i < len; ++i) {
        trace(hamsters[i]);
    }
}
쇼트 트랙 릴레이
햄스터 로봇 두 대가 한 조가 되어 일정 거리를 유지하며 함께 이동하도록 합시다. 규칙은 다음과 같습니다.

A4 용지를 준비하고 햄스터 로봇이 이동할 직선을 검은색 테이프 또는 펜으로 그립니다. 검은색 선의 폭은 양쪽 바닥 센서의 간격보다 약간 작은 정도(0.8cm)로 하는 것이 좋습니다. 미리 제작된 파일을 프린터로 인쇄해도 됩니다.

라인 트레이서 실습판 내려 받기 PDF PPT

뒤따라가는 햄스터 로봇은 선두 로봇을 따라가야 하기 때문에 햄스터 로봇의 앞면에 있는 근접 센서를 잘 활용해야 합니다. 혹시, 햄스터 로봇을 한 대만 가지고 있다면 지우개나 조그만 상자를 선두 로봇 대신 사용해도 됩니다.

var hamster1 = Hamster.create(); // 첫 번째 햄스터 로봇
var hamster2 = Hamster.create(); // 두 번째 햄스터 로봇

function trace(robot) {
    if(robot.leftProximity() > 50 || robot.rightProximity() > 50) {
        robot.stop();
    } else {
        var diff = robot.leftFloor() - robot.rightFloor();
        robot.wheels(30 + diff * 0.4, 30 - diff * 0.4);
    }
}

function chase(robot) {
    // 왼쪽 근접 센서, 왼쪽 바퀴 속도
    var proximity = robot.leftProximity();
    if(proximity > 60) {
        robot.leftWheel(0);
    } else {
        robot.leftWheel((60 - proximity) * 0.8);
    }

    // 오른쪽 근접 센서, 오른쪽 바퀴 속도
    proximity = robot.rightProximity();
    if(proximity > 60) {
        robot.rightWheel(0);
    } else {
        robot.rightWheel((60 - proximity) * 0.8);
    }
}

function execute() {
    trace(hamster1); // 첫 번째 햄스터 로봇
    chase(hamster2); // 두 번째 햄스터 로봇
}

쇼트 트랙 경기장처럼 생긴 라인 트레이서 실습판 위에 햄스터 로봇 두 대를 가까이 올려 놓고 코드를 실행해 봅시다. 뒤따라가는 햄스터 로봇은 근접 센서를 사용하여 선두 로봇을 따라가기 때문에 급격한 회전은 잘 따라가지 못합니다. 완만한 곡선으로 된 큰 원이나 타원의 실습판을 사용하세요.

왼쪽 근접 센서의 값으로 왼쪽 바퀴의 속도를 제어하고 오른쪽 근접 센서의 값으로 오른쪽 바퀴의 속도를 제어합니다. 각각의 근접 센서는 하나의 바퀴 속도만 제어하기 때문에 코드가 간단하고 센서와 바퀴 속도 간의 관계가 명확합니다. 서로 독립적이기 때문에 또 다른 함수를 만들어서 코드를 간략하게 만들 수 있습니다.

var hamster1 = Hamster.create(); // 첫 번째 햄스터 로봇
var hamster2 = Hamster.create(); // 두 번째 햄스터 로봇

function trace(robot) {
    if(robot.leftProximity() > 50 || robot.rightProximity() > 50) {
        robot.stop();
    } else {
        var diff = robot.leftFloor() - robot.rightFloor();
        robot.wheels(30 + diff * 0.4, 30 - diff * 0.4);
    }
}

function calcSpeed(proximity) {
    if(proximity > 60) {
        return 0;
    } else {
        return (60 - proximity) * 0.8;
    }
}

function chase(robot) {
    var leftSpeed  = calcSpeed(robot.leftProximity());
    var rightSpeed = calcSpeed(robot.rightProximity());

    robot.wheels(leftSpeed, rightSpeed);
}

function execute() {
    trace(hamster1); // 첫 번째 햄스터 로봇
    chase(hamster2); // 두 번째 햄스터 로봇
}

USB 동글을 꽂는 위치에 따라 선두 로봇과 뒤따라가는 로봇의 순서가 바뀔 수 있습니다. 이 경우에는 다음과 같이 선두 로봇과 뒤따라가는 로봇을 서로 바꾸어 주면 됩니다.

function execute() {
    trace(hamster2); // 첫 번째 햄스터 로봇
    chase(hamster1); // 두 번째 햄스터 로봇
}
목차
수업 자료 내려 받기
수업 준비
  1. 하드웨어 살펴보기
  2. 햄스터 · 햄스터S · USB 동글 PDF · PPT
  3. 소프트웨어 설치
  4. PDF · PPT
  5. 로봇과 컴퓨터 연결
  6. PDF · PPT
  7. 소프트웨어 실행
  8. PDF · PPT
기초
  1. 코드의 기본 형태 만들기
  2. 이동하고 회전하기
  3. LED 켜고 소리 내기
  4. 순서대로, 반복하여 명령하기
  5. 키보드 이벤트
  6. 근접 센서 사용하기
  7. 바닥 센서 사용하기
  8. 밝기 센서와 가속도 센서 사용하기
  9. 브레이튼버그의 로봇
심화
  1. 말판 이동하기
  2. 보드 게임 만들기
  3. 그래픽 인터페이스
  4. 센서 한 개를 사용한 라인 트레이서
  5. 센서 두 개를 사용한 라인 트레이서
  6. 햄스터 친구 따라가기 (2인 1조)
  7. 벽 따라가기
  8. 로봇 청소기 흉내 내기
  9. 라인 트레이서 교차로 주행하기
  10. 미로 탈출
확장 키트
  1. 조립하기
  2. 핀/소켓 배치 살펴보기
  3. 디지털 입력 - 버튼을 누르면 삐 소리가 나요
  4. 디지털 출력 - 어두우면 LED 불이 켜져요
  5. 디지털 출력 - 반짝반짝 LED를 깜박여요
  6. 디지털 출력 - 기울이는 방향으로 LED가 켜져요
  7. 아날로그 입력 - 포텐셔미터를 돌리면 음 높이가 달라져요
  8. 아날로그 입력 - 뜨겁지 않게 해주세요
  9. 아날로그 입력 - 빛을 따라 움직여요
  10. PWM 출력 - LED 불이 부드럽게 밝아졌다 어두워져요
  11. PWM 출력 - LED 촛불이 바람에 흔들려요
  12. 아날로그 서보 출력 - 햄스터 로봇에게 꼬리가 생겼어요
고급
  1. 행위 기반의 로봇 제어
  2. 경로 탐색
  3. 자리 바꾸기
Copyright 로봇SW교육원 All rights reserved.
어려운 일이 있으면 광운대학교 로봇학부 박광현 교수(akaii@kw.ac.kr)에게 연락하세요.