친구 따라가기
라인 트레이서를 활용하여 앞에서 주행하는 다른 햄스터 로봇과 충돌하지 않고 검은색 선을 따라 주행하도록 해봅시다.
규칙은 다음과 같습니다.
- 검은색 선을 벗어나지 않도록 주의하면서 앞으로 주행합니다.
- 전방을 살펴보면서 앞의 햄스터 로봇과 너무 가까우면 잠시 정지하였다가 다시 주행합니다.
A4 용지를 준비하고 햄스터 로봇이 이동할 직선을 검은색 테이프 또는 펜으로 그립니다.
검은색 선의 폭은 양쪽 바닥 센서의 간격보다 약간 작은 정도(0.8cm)로 하는 것이 좋습니다.
미리 제작된 파일을 프린터로 인쇄해도 됩니다.
햄스터 로봇이 검은색 선을 따라 주행하는 것은 지난 시간에 배운
센서 두 개를 사용한 라인 트레이서를 참고하도록 합시다.
#include "roboid.h"
int main(int argc, char *argv[]) {
int diff;
hamster_create();
while(1) {
diff = hamster_left_floor() - hamster_right_floor();
hamster_wheels(30 + diff * 0.4, 30 - diff * 0.4);
wait(10); // 너무 빨리 반복하지 않도록 한다.
}
return 0;
}
이제 전방을 살펴보면서 앞의 햄스터 로봇과 너무 가까우면 잠시 정지하도록 코드를 수정해 봅시다.
#include "roboid.h"
int main(int argc, char *argv[]) {
int diff;
hamster_create();
while(1) {
if(hamster_left_proximity() > 50 || hamster_right_proximity() > 50) {
hamster_stop();
} else {
diff = hamster_left_floor() - hamster_right_floor();
hamster_wheels(30 + diff * 0.4, 30 - diff * 0.4);
}
wait(10); // 너무 빨리 반복하지 않도록 한다.
}
return 0;
}
2인 1조가 되어 각자의 컴퓨터에서 코드를 실행한 후 뒤쪽의 햄스터 로봇이 앞의 햄스터 로봇과 충돌하지 않고 안전하게 잘 주행하는지 확인해 봅시다.
쇼트 트랙 릴레이
햄스터 로봇 두 대가 한 조가 되어 일정 거리를 유지하며 함께 이동하도록 합시다.
규칙은 다음과 같습니다.
- 선두 로봇은 라인 트레이서 주행으로 검은색 선을 따라 이동합니다.
- 뒤따라가는 로봇은 선두 로봇과 일정한 거리 이내에서 함께 주행해야 합니다. 단, 뒤따라가는 로봇은 라인 트레이서 주행을 하면 안 됩니다.
A4 용지를 준비하고 햄스터 로봇이 이동할 직선을 검은색 테이프 또는 펜으로 그립니다.
검은색 선의 폭은 양쪽 바닥 센서의 간격보다 약간 작은 정도(0.8cm)로 하는 것이 좋습니다.
미리 제작된 파일을 프린터로 인쇄해도 됩니다.
뒤따라가는 햄스터 로봇은 선두 로봇을 따라가야 하기 때문에 햄스터 로봇의 앞면에 있는 근접 센서를 잘 활용해야 합니다.
혹시, 햄스터 로봇을 한 대만 가지고 있다면 지우개나 조그만 상자를 선두 로봇 대신 사용해도 됩니다.
#include "roboid.h"
void trace(void) {
if(hamster_left_proximity() > 50 || hamster_right_proximity() > 50) {
hamster_stop();
} else {
int diff = hamster_left_floor() - hamster_right_floor();
hamster_wheels(30 + diff * 0.4, 30 - diff * 0.4);
}
}
int calc_speed(int proximity) {
if(proximity > 60) {
return 0;
} else {
return (int)((60 - proximity) * 0.8);
}
}
void chase(void) {
int left_speed = calc_speed(hamster_left_proximity());
int right_speed = calc_speed(hamster_right_proximity());
hamster_wheels(left_speed, right_speed);
}
int main(int argc, char *argv[]) {
hamster_create();
while(1) {
trace(); // 첫 번째 햄스터 로봇
//chase(); // 두 번째 햄스터 로봇
wait(10); // 너무 빨리 반복하지 않도록 한다.
}
return 0;
}
왼쪽 근접 센서의 값으로 왼쪽 바퀴의 속도를 제어하고
오른쪽 근접 센서의 값으로 오른쪽 바퀴의 속도를 제어합니다.
각각의 근접 센서는 하나의 바퀴 속도만 제어하기 때문에 코드가 간단하고 센서와 바퀴 속도 간의 관계가 명확합니다.
쇼트 트랙 경기장처럼 생긴 라인 트레이서 실습판 위에 햄스터 로봇 두 대를 가까이 올려 놓고 코드를 실행해 봅시다.
뒤따라가는 햄스터 로봇은 근접 센서를 사용하여 선두 로봇을 따라가기 때문에 급격한 회전은 잘 따라가지 못합니다.
완만한 곡선으로 된 큰 원이나 타원의 실습판을 사용하세요.
목차
고급
- 행위 기반의 로봇 제어
- 경로 탐색
- 자리 바꾸기
Copyright 로봇SW교육원 All rights reserved.
어려운 일이 있으면 광운대학교 로봇학부 박광현 교수(
akaii@kw.ac.kr)에게 연락하세요.