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

교육 자료 : 파이썬 : 표준 파이썬 : 센서 한 개를 사용한 라인 트레이서

개요
왜 내 로봇은 똑바로 가지 못할까요? 로봇의 양쪽 바퀴는 똑같지 않습니다. 양쪽 모터의 성능도 다르고 기어가 빡빡하거나 느슨한 정도, 바퀴와 바닥 간의 마찰력, 타이어의 마모 상태 등에 따라 실제로 바퀴가 이동하는 속도는 달라질 수 있습니다. 양쪽 바퀴가 이동하는 속도가 조금만 달라도 로봇은 똑바로 이동하지 못합니다. 이것이 실제의 로봇입니다.

사람은 똑바로 걸을 수 있을까요? 아무도 없는 복도를 눈 감고 걸어 가봅시다. 복도의 중앙에서 출발하면 아마 20 걸음도 채 못 가고 벽과 부딪칠 것입니다. 이번에는 눈을 뜨고 복도를 보면서 걸어 가봅시다. 복도 끝까지 문제 없이 갈 수 있을 것입니다. 사람은 걸으면서 주위의 상황을 끊임없이 인지하고 자신의 방향을 조정하기 때문입니다.

센서를 사용하면 똑바로 가지 못하는 로봇을 잘 조종하여 인간처럼 가게 할 수 있습니다. 하지만 지능이 없는 로봇은 이 일도 매우 어려운 일입니다. 이러한 지능을 직접 코드로 작성하여 햄스터 로봇을 똑똑하게 만들어 줍시다.

라인 트레이서는 일종의 지능형 로봇으로, 센서를 통해 검출된 선의 정보를 처리하여 정해진 선을 따라 이동하는 로봇을 말합니다. 무인 자동화 생산 공정에서 생산된 물건을 운반하는 용도로 사용될 수 있습니다.
우선 간단하게 햄스터 로봇의 바닥 센서 한 개를 사용하여 주행하는 방법을 알아보도록 하겠습니다.
왼쪽 바닥 센서를 사용하여 검은색 선의 오른쪽 테두리 따라가기
A4 용지를 준비하고 햄스터 로봇이 이동할 직선을 검은색 테이프 또는 펜으로 그립니다. 미리 제작된 파일을 프린터로 인쇄해도 됩니다.

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

라인 트레이서의 원리는 의외로 간단합니다. 햄스터 로봇의 왼쪽 바닥 센서가 하얀색 종이 위에 있으면 검은색 선의 오른쪽 테두리로 다가가기 위해 왼쪽으로 움직이고, 왼쪽 바닥 센서가 검은색 선 위에 있으면 오른쪽으로 움직이면 됩니다.

     

이를 반복하면 다음 그림과 같이 검은색 선의 오른쪽 테두리를 따라 앞으로 이동할 수 있습니다.

원리는 간단한데 이를 실제로 구현하기 위해서는 두 가지가 필요합니다.

우선 왼쪽 바닥 센서가 하얀색 종이 위에 있는지, 검은색 선 위에 있는지 알기 위해 왼쪽 바닥 센서의 값을 관찰해 봅시다. 왼쪽 바닥 센서가 하얀색 종이 위에 있을 때와 검은색 선 위에 있을 때 센서 값이 어떻게 다른지 확인해 봅시다.

from roboid import *

hamster = Hamster()

while True:
    print(hamster.left_floor()) # python 3.x.x
    #print hamster.left_floor() # python 2.7.x
    wait(20) # 너무 빨리 반복하지 않도록 한다.

측정된 센서 값으로부터 햄스터 로봇의 왼쪽 바닥 센서가 하얀색 종이 위에 있는지, 검은색 선 위에 있는지 판단하기 위해서는 크기를 비교하면 됩니다. 기준이 되는 숫자가 필요한데 앞에서 측정한 두 개의 센서 값의 중간 값을 사용해 봅시다. 하얀색 종이 위에 있을 때 센서 값이 100, 검은색 선 위에 있을 때 센서 값이 0이었다면 기준이 되는 숫자는 50으로 하면 됩니다. 왼쪽 바닥 센서가 하얀색 종이 위에 있는 경우를 다음과 같이 표현할 수 있습니다.

hamster.left_floor() > 50

햄스터 로봇을 왼쪽 또는 오른쪽으로 움직이기 위한 방법은 다양하게 있지만 간단하게 하기 위해 한쪽 바퀴를 축으로 회전하는 방법을 사용해 봅시다. 왼쪽으로 회전하기 위해서는 왼쪽 바퀴를 정지하고 오른쪽 바퀴를 앞으로 움직이면 됩니다.

hamster.wheels(0, 30)

오른쪽으로 회전하기 위해서는 오른쪽 바퀴를 정지하고 왼쪽 바퀴를 앞으로 움직이면 됩니다.

hamster.wheels(30, 0)

왼쪽 바닥 센서가 하얀색 종이 위에 있으면, 즉 센서 값이 50보다 크면 왼쪽으로 회전하고, 아니면 오른쪽으로 회전하도록 코드를 작성해 봅시다.

if hamster.left_floor() > 50:
    hamster.wheels(0, 30)
else:
    hamster.wheels(30, 0)

이제 이 코드를 계속 반복하면 됩니다.

from roboid import *

hamster = Hamster()

while True:
    if hamster.left_floor() > 50:
        hamster.wheels(0, 30)
    else:
        hamster.wheels(30, 0)

    wait(10) # 너무 빨리 반복하지 않도록 한다.

다음 그림과 같이 햄스터 로봇의 왼쪽 바닥 센서를 검은색 선의 오른쪽 테두리에 올려 놓고 작성한 코드를 실행해 봅시다.

크기를 비교하는 기준이 되는 숫자 50을 변경하면 햄스터 로봇의 동작이 어떻게 달라지는지 관찰해 봅시다.
왼쪽 바닥 센서를 사용하여 검은색 선의 오른쪽 테두리를 따라 곡선 및 90도 주행하기
직선을 따라 주행하는 것은 너무 단순합니다. 곡선을 따라 주행하거나 90도 꺾어진 길도 잘 달려갈 수 있어야 물건을 이곳저곳으로 운반할 수 있는 멋진 햄스터 로봇이 될 수 있습니다.

우리가 복도를 달려가다가 왼쪽 또는 오른쪽으로 꺾어진 길을 만나면 어떻게 하는지 생각해 봅시다. 속도를 줄여서 모퉁이를 돈 다음 다시 달려가지 않을까요? 하지만 모퉁이가 어디쯤 있는지 알 수 있어야 속도를 줄일 수 있습니다. 앞에서 실습한 햄스터 로봇은 바닥만 보면서 움직입니다. 우리도 바닥만 보면서 복도를 달려간다면 언제 모퉁이가 나타날지 알 수가 없어서 빨리 달리지는 못할 것 같습니다.

작성한 코드를 그대로 사용하여 곡선을 따라 주행할 수 있는지 실험해 봅시다. 선을 벗어나지 않고 잘 주행할 수 있도록 햄스터 로봇이 왼쪽 또는 오른쪽으로 회전하는 속도를 조정하면 됩니다. 큰 원에서 시작하여 원의 크기를 조금씩 줄이면서 실험해 봅시다. 원이 클 때와 작을 때 햄스터 로봇의 회전 속도를 어떻게 해야 하는지 실험하고 관찰하여 원의 크기와 회전 속도 간의 관계를 알아봅시다.

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

왼쪽으로 90도 꺾어진 길은 잘 따라갈 수 있을까요? 문제 없이 잘 따라간다면 설명을 듣기 전에, 작성한 코드와 햄스터 로봇의 동작을 관찰하면서 그 이유를 추론하고 토의해 봅시다.

검은색 선의 오른쪽 테두리를 따라 주행하다가 왼쪽 바닥 센서가 검은색 선의 바깥으로 나가게 되는데, 왼쪽 바닥 센서가 하얀색 종이 위에 있는 경우가 되기 때문에 왼쪽 바퀴를 축으로 왼쪽으로 회전하게 됩니다. 즉 왼쪽 바닥 센서가 검은색 선을 만나게 될 때까지 왼쪽으로 회전한 후, 다시 검은색 선의 오른쪽 테두리를 따라 주행합니다.

오른쪽으로 90도 꺾어진 길에서는 어떻게 될까요? 설명을 듣기 전에 실험을 통해 관찰하면서 햄스터 로봇이 그렇게 동작하는 이유를 추론하고 토의해 봅시다.

검은색 선을 따라 주행하다가 오른쪽으로 90도 꺾어진 길을 만나면 왼쪽 바닥 센서는 검은색 선 위에 있기 때문에 오른쪽 바퀴를 축으로 오른쪽으로 회전하게 됩니다. 오른쪽으로 회전하면 왼쪽 바닥 센서가 검은색 선의 바깥으로 나가게 되어 하얀색 종이 위에 있는 경우가 되고, 왼쪽 바닥 센서가 검은색 선을 만나게 될 때까지 왼쪽 바퀴를 축으로 왼쪽으로 회전합니다. 즉 검은색 선의 오른쪽 테두리를 따라 왔던 길을 되돌아 가게 됩니다.

오른쪽으로 90도 꺾어진 길에서 오른쪽으로 회전하다가 왼쪽 바닥 센서가 검은색 선을 벗어나지 않도록 선의 굵기를 굵게 해도 되지만 다른 방법을 알아보도록 합시다.
왼쪽 바닥 센서를 사용하여 검은색 선의 왼쪽 테두리 따라가기
이번에는 검은색 선의 왼쪽 테두리를 따라가도록 해봅시다. 원리는 비슷합니다. 햄스터 로봇의 왼쪽 바닥 센서가 하얀색 종이 위에 있으면 검은색 선의 왼쪽 테두리로 다가가기 위해 오른쪽으로 움직이고, 왼쪽 바닥 센서가 검은색 선 위에 있으면 왼쪽으로 움직이면 됩니다.

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

     

이를 반복하면 다음 그림과 같이 검은색 선의 왼쪽 테두리를 따라 앞으로 이동할 수 있습니다.

from roboid import *

hamster = Hamster()

while True:
    if hamster.left_floor() > 50:
        hamster.wheels(30, 0)
    else:
        hamster.wheels(0, 30)

    wait(10) # 너무 빨리 반복하지 않도록 한다.

다음 그림과 같이 햄스터 로봇의 왼쪽 바닥 센서를 검은색 선의 왼쪽 테두리에 올려 놓고 작성한 코드를 실행해 봅시다.

크기를 비교하는 기준이 되는 숫자 50을 변경하면 햄스터 로봇의 동작이 어떻게 달라지는지 관찰해 봅시다.
왼쪽 바닥 센서를 사용하여 검은색 선의 왼쪽 테두리를 따라 곡선 및 90도 주행하기
작성한 코드를 그대로 사용하여 곡선을 따라 주행할 수 있는지 실험해 봅시다. 선을 벗어나지 않고 잘 주행할 수 있도록 햄스터 로봇이 왼쪽 또는 오른쪽으로 회전하는 속도를 조정하면 됩니다. 큰 원에서 시작하여 원의 크기를 조금씩 줄이면서 실험해 봅시다. 원이 클 때와 작을 때 햄스터 로봇의 회전 속도를 어떻게 해야 하는지 실험하고 관찰하여 원의 크기와 회전 속도 간의 관계를 알아봅시다.

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

왼쪽으로 90도 꺾어진 길은 잘 따라갈 수 있을까요? 문제 없이 잘 따라간다면 설명을 듣기 전에, 작성한 코드와 햄스터 로봇의 동작을 관찰하면서 그 이유를 추론하고 토의해 봅시다.

검은색 선을 따라 주행하다가 왼쪽으로 90도 꺾어진 길을 만나면 왼쪽 바닥 센서는 검은색 선 위에 있기 때문에 왼쪽 바퀴를 축으로 왼쪽으로 회전하게 됩니다. 즉 왼쪽 바닥 센서가 하얀색 종이를 만나게 될 때까지 왼쪽으로 회전한 후, 다시 검은색 선의 왼쪽 테두리를 따라 주행합니다.

오른쪽으로 90도 꺾어진 길에서는 어떻게 될까요? 설명을 듣기 전에 실험을 통해 관찰하면서 햄스터 로봇이 그렇게 동작하는 이유를 추론하고 토의해 봅시다.

검은색 선의 왼쪽 테두리를 따라 주행하다가 왼쪽 바닥 센서가 검은색 선의 바깥으로 나가게 되는데, 왼쪽 바닥 센서가 하얀색 종이 위에 있는 경우가 되기 때문에 오른쪽 바퀴를 축으로 오른쪽으로 회전하게 됩니다. 즉 왼쪽 바닥 센서가 검은색 선을 만나게 될 때까지 오른쪽으로 회전한 후, 다시 검은색 선의 왼쪽 테두리를 따라 주행합니다.

좀 더 자세히 분석하기
앞서 수행한 실험을 통해 왼쪽 바닥 센서를 사용하여 검은색 선의 오른쪽 테두리를 따라가는 경우에는 오른쪽으로 90도 꺾어진 길에서 문제가 발생하지만, 왼쪽 테두리를 따라가는 경우에는 왼쪽이나 오른쪽으로 90도 꺾어진 길 모두 문제가 발생하지 않는다는 것을 알 수 있습니다.

우선 오른쪽 테두리를 따라가는 경우를 좀 더 자세히 살펴 봅시다. 왼쪽 바닥 센서가 하얀색 종이 위에 있으면 왼쪽으로 회전한다는 것을 기억합시다. 왼쪽으로 90도 꺽어진 길에서는 왼쪽 바닥 센서가 하얀색 종이 위에 있으므로 왼쪽으로 회전하는 것과 일치하여 문제가 발생하지 않습니다. 오른쪽으로 90도 꺾어진 길에서는 오른쪽으로 회전해야 하는데 회전의 중심이 오른쪽 바퀴에 있고 왼쪽 바닥 센서와 회전 중심 간의 거리, 즉 회전 반경이 크기 때문에 왼쪽 바닥 센서가 검은색 선을 벗어나게 됩니다. 이 때문에 문제가 발생하게 됩니다.

     

왼쪽 테두리를 따라가는 경우에는 왼쪽 바닥 센서가 하얀색 종이 위에 있으면 오른쪽으로 회전한다는 것을 기억합시다. 오른쪽으로 90도 꺾어진 길에서는 왼쪽 바닥 센서가 하얀색 종이 위에 있으므로 오른쪽으로 회전하는 것과 일치하여 문제가 발생하지 않습니다. 왼쪽으로 90도 꺾어진 길에서는 왼쪽으로 회전해야 하는데 회전의 중심이 왼쪽 바퀴에 있고 왼쪽 바닥 센서와 회전 중심 간의 거리, 즉 회전 반경이 작기 때문에 왼쪽 바닥 센서가 검은색 선을 벗어나지 않습니다. 따라서 문제가 발생하지 않습니다.

     

분석된 결과를 바탕으로 다음과 같이 유추할 수 있습니다.

오른쪽 바닥 센서를 사용하는 경우에도 유추한 결과가 맞는지 앞서 수행한 실험들을 다시 수행하여 확인해 봅시다.
목차
수업 준비
  1. 하드웨어 살펴보기
  2. 햄스터 · 햄스터S · USB 동글 PDF · PPT
  3. 디바이스 드라이버 설치
  4. 윈도우 · 맥OS · 리눅스 PDF · PPT
  5. 파이썬 설치
  6. 윈도우 · 맥OS · 리눅스 PDF · PPT
  7. 라이브러리 설치
  8. PDF · PPT
  9. 로봇과 컴퓨터 연결
  10. PDF · PPT
  11. 예제 파일 실행
  12. 윈도우 · 맥OS · 리눅스 PDF · PPT
기초
  1. IDLE에서 새 파일 만들기
  2. 클라우드 컴퓨터 환경에서 작업하기 (선택 사항)
  3. 말판 이동하기 #1 (순차, 횟수 반복)
  4. 이동하고 회전하기
  5. LED 켜고 소리 내기
  6. 순서대로, 반복하여 명령하기
  7. 키보드 이벤트
  8. 근접 센서 사용하기
  9. 말판 이동하기 #2 (~인 동안 반복)
  10. 바닥 센서 사용하기
  11. 밝기 센서와 가속도 센서 사용하기
  12. 브레이튼버그의 로봇
심화
  1. 보드 게임 만들기
  2. 그래픽 인터페이스
  3. 센서 한 개를 사용한 라인 트레이서
  4. 센서 두 개를 사용한 라인 트레이서
  5. 햄스터 친구 따라가기 (2인 1조)
  6. 라인 트레이서 교차로 주행하기
  7. 벽 따라가기
  8. 컵 따라 돌기 (미로 찾기용 커버 사용)
  9. 슬라럼 (미로 찾기용 커버 사용)
  10. 미로 탈출 (미로 찾기용 커버 사용)
  11. 로봇 청소기 흉내 내기
  12. 병렬 처리 (버전 1.4.0부터)
  13. 이벤트 처리 (버전 1.4.0부터)
확장 키트
  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)에게 연락하세요.