햄스터 미로찾기 광운대학교 로봇학부 박광현.

Slides:



Advertisements
Similar presentations
2014 가을학기 계산 입문 연습 #4 지도교수 : 박성우 조교 : 이다훈. Python 을 설치합시다.
Advertisements

Hamster Manual 정보통신과 이우형. 목차 세팅 햄스터 하드웨어 - Model - I/O -Sensor 센서별 예제.
Power Java 제6장 조건과 반복.
Implement of Input and Interaction
대림대학교 2017년도 1학기 강의 왕보현 순서도와 스크래치 5주차 대림대학교 2017년도 1학기 강의 왕보현
두근두근 파이썬 수업 7장 프로젝트 I.
2016 ITA 1월 강의 C Programming -4일차- 포인터배열 및 이중포인터 정대진 ( )
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Signal & Inter-Process Communication
레고 Digital Designer 사용법 알아보기
아두이노 프로그래밍 4일차 – Part1 모바일 로봇 강사: 김영준 목원대학교 겸임교수.
(1.1 v) 엔트리교육연구소 엔트리와 함께하는 피지컬 컴퓨팅 -햄스터-.
제3장 스택과 큐.
보고서 #5(제출기한: 10/14) 다음 문제를 해결하시오.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
1. 지구와 달의 운동 교과서 24쪽.
Microsoft Robotics Developer Studio 고급 프로그래밍 과정 [Part 3] VPL 로봇 프로그래밍
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
3. while문 반복문의 종류 while 문 while( 조건식 )        문장;.
CHAP 10:그래프 (2) 순천향대학교 하상호.
C 언어 교육 02 주차 – scanf & 반복문과 조건문 교육부장 조하정.
어서와 C언어는 처음이지 제14장.
Computer Graphics OpenGL 설치 및 설정
Signal & Inter-Process Communication
게임웹사이트운영 [9] div & span.
광원 제어 하기.
전기자동차 만들기 전기자동차 기어박스 조립 – 1 (고속형)
Lesson 4. 수식과 연산자.
15차시_스마트 애플리케이션 기획 스마트 애플리케이션 모형 제작 및 발표.
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
HBE-RoboCAR 제어 Obstacle Avoidance
귀의 구조와 기능(1) 두드려라 그러면 들릴 것이다! 귀의 구조와 기능 청각의 전달 경로.
16조 캡스톤 설계 중간보고Ⅲ 오승호 김종우 오윤진
Hello, Python! #2 <부제: 코딩은 혼자하는 것이다>
제어문 & 반복문 C스터디 2주차.
Python Turtle 민경현.
선택 정렬 #define SWAP(x, y, t) {(t) = (x); (x) = (y); (y) = (t);}
제 1 강.
제 3 강.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
마이크로소프트 박종호.
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
Hanoi Tower.
KMP ALPS 알고리즘 세미나 김태리.
P 등속 직선 운동 생각열기 – 자동차를 타고 고속도로를 달릴 때, 속력계 바늘이 일정한 눈금을 가리키며 움직이지 않을 때가 있다. 이 때 자동차의 속력은 어떠할까? ( 속력이 일정하다 .)
목차 한국기술교육대학교 강사: 김 영 준 ㈜헬로앱스
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
특수상대성 이론(The Special Theory of Relativity)
U N I X 창원대학교 전자계산학과 김병찬.
20강 패턴을 통한 객체지향 언어의 이해 - II - 난이도 있는 패턴 예제 - I Lecturer Kim Myoung-Ho
초기화면 미 술 5학년 10.판본체 궁체로 쓰기(3/8) 판본체와 궁체의 모양을 비교해 봅시다.
DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다.
5장. 선택 알고리즘.
컴퓨터 구성요소와 사용 컴퓨터 문서 작업 인터넷 활용
행성을 움직이는 힘은 무엇일까?(2) 만유인력과 구심력 만유인력과 케플러 제3법칙.
자동차의 정의 및 제원 자동차의 정의 치수에 의한 제원
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
7장 원운동과 중력의 법칙.
AdcRead API 함수 분석 마이크로프로세서.
수치해석 (Numerical Analysis)
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
교육자료 작성자 / 오두환.
2D Game Programming 1차 발표 배강산.
2. 굴착기 코스운전 1. 코스 운전 조건 : S 자 코스를 출발하여 반곡점 정지선 안에서 정지 하였다가 정지선 넘은 다음 후진하여 제자리 출발선 까지 4분 이내 완료 한다. 후진 정지선 시간 측정 정차 출발 도착 4분.
argc, argv 의 사용방법 #include <stdio.h>
Signal & Inter-Process Communication
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
Presentation transcript:

햄스터 미로찾기 광운대학교 로봇학부 박광현

블록 커버 레고블록 나노블록

블록 커버 나노블록 레고블록

컵 따라 돌기

근접 센서 컵

반사판 양쪽 반사판을 끼워 주세요 !!

미로찾기용 부품 조립 방법 위에서 누르면 끼울 수 있어요 뒤에서 앞으로 밀면 뺄 수 있어요

컵 따라 돌기 컵 컵 컵

컵 따라 돌기 from roboid import * hamster = Hamster() while True: if hamster.left_proximity() > 10: hamster.wheels(30, 0) else: hamster.wheels(0, 30) wait(10) #include "roboid.h" int main(int argc, char *argv[]) { hamster_create(); while(1) { if(hamster_left_proximity() > 10) hamster_wheels(30, 0); else hamster_wheels(0, 30); wait(10); } return 0;

개선된 컵 따라 돌기 컵 컵 컵

개선된 컵 따라 돌기 from roboid import * hamster = Hamster() while True: if hamster.left_proximity() > 10: hamster.wheels(30, 30) else: hamster.wheels(0, 30) wait(10) #include "roboid.h" int main(int argc, char *argv[]) { hamster_create(); while(1) { if(hamster_left_proximity() > 10) hamster_wheels(30, 30); else hamster_wheels(0, 30); wait(10); } return 0;

좀 더 개선된 컵 따라 돌기 근접 센서 값이 커지면 바퀴의 속도도 커진다 ?

좀 더 개선된 컵 따라 돌기 from roboid import * hamster = Hamster() while True: hamster.wheels(hamster.left_proximity(), 30) wait(10) #include "roboid.h" int main(int argc, char *argv[]) { hamster_create(); while(1) { hamster_wheels(hamster_left_proximity(), 30); wait(10); } return 0;

원 운동 컵

원하는 거리만큼 떨어져서 돌기 센서 위치를 컵의 중심에 맞춘다 !! 원하는 거리만큼 컵 30

원하는 거리만큼 떨어져서 돌기 센서 위치를 컵의 중심에 맞춘다 !! 컵 센서 값: 16 30 센서 값: 16

원하는 거리만큼 떨어져서 돌기 센서 위치를 컵의 중심에 맞춘다 !! 컵 센서 값: 16 30 센서 값: 16 30  16 = 1.875

원하는 거리만큼 떨어져서 돌기 from roboid import * hamster = Hamster() while True: hamster.wheels(hamster.left_proximity() * 1.875, 30) wait(10) #include "roboid.h" int main(int argc, char *argv[]) { hamster_create(); while(1) { hamster_wheels(hamster_left_proximity() * 1.875, 30); wait(10); } return 0;

여러 가지 활동들 중급 일정 횟수만큼 돌고 정지하기 고급 컵 라인 트레이싱 + 컵 따라 돌기 컵

여러 가지 활동들 중급 고급 햄스터 플래닛 중급 컵

슬라럼 경주 컵 컵 컵

슬라럼 경주 컵 컵 컵 중간으로 지나가게 하는 방법은?

슬라럼 경주 컵 컵 4 오른쪽 컵이 사라질 때까지 왼쪽 컵 따라 돌기 2 왼쪽 컵이 사라질 때까지 오른쪽 컵 따라 돌기 1 오른쪽 컵을 발견할 때까지 왼쪽 컵 따라 돌기 3 왼쪽 컵을 발견할 때까지 오른쪽 컵 따라 돌기

판단 기준 안전한 범위 다른 컵 사라짐 다른 컵 발견 기 준 값 5 15 컵 10 20 실제 센서 값 센서 값: 20

다이어그램 왼쪽 컵 따라 돌기 오른쪽 컵 따라 돌기 상태 상태 1 오른쪽 센서 > 15 오른쪽 센서 < 5 상태 1 오른쪽 센서 > 15 오른쪽 센서 < 5 왼쪽 센서 < 5 상태 3 상태 2 왼쪽 센서 > 15 왼쪽 컵 따라 돌기 오른쪽 컵 따라 돌기

잘 안 되는 코드... 왜?

잘 안 되는 코드... 왜?

잘 안 되는 코드... 왜? from roboid import * hamster = Hamster() state = 0 #include "roboid.h" int main(int argc, char *argv[]) { int state = 0, left, right; hamster_create(); while(1) { left = hamster_left_proximity(); right = hamster_right_proximity(); switch(state) { case 0: hamster_wheels(left * 2.5, 50); if(right > 15) state = 1; break; case 1: hamster_wheels(50, right * 2.5); if(left < 5) state = 2; case 2: if(left > 15) state = 3; case 3: if(right < 5) state = 0; } wait(10); return 0; from roboid import * hamster = Hamster() state = 0 while True: left = hamster.left_proximity() right = hamster.right_proximity() if state == 0: hamster.wheels(left * 2.5, 50) if right > 15: state = 1 elif state == 1: hamster.wheels(50, right * 2.5) if left < 5: state = 2 elif state == 2: if left > 15: state = 3 else: if right < 5: state = 0 wait(10)

순간적으로 튀는 센서 값 제거하기 10번 연속으로 조건 만족하면...

순간적으로 튀는 센서 값 제거하기 10번 연속으로 조건 만족하면...

다르게 작성해 보기

다르게 작성해 보기

2% 부족한... 그러나 좀 더 간단한 10번 연속으로 조건 만족하면...

2% 부족한... 그러나 좀 더 간단한 10번 연속으로 조건 만족하면...

순간적으로 튀는 센서 값 제거하기 from roboid import * hamster = Hamster() state = 0 count = 0 while True: left = hamster.left_proximity() right = hamster.right_proximity() if state == 0: hamster.wheels(left * 2.5, 50) if right > 15: count += 1 else: count = 0 if count > 10: state = 1 elif state == 1: hamster.wheels(50, right * 2.5) if left < 5: count += 1 state = 2 elif state == 2: hamster.wheels(50, right * 2.5) if left > 15: count += 1 else: count = 0 if count > 10: count = 0 state = 3 else: hamster.wheels(left * 2.5, 50) if right < 5: count += 1 state = 0 wait(10)

다르게 작성해 보기 from roboid import * hamster = Hamster() def slalom(left_speed, right_speed, check): count = 0 while count < 10: left = hamster.left_proximity() right = hamster.right_proximity() hamster.wheels(left_speed(left, right), right_speed(left, right)) if check(left, right): count += 1 else: count = 0 wait(10) while True: slalom(lambda l, r: l * 2.5, lambda l, r: 50, lambda l, r: r > 15) slalom(lambda l, r: 50, lambda l, r: r * 2.5, lambda l, r: l < 5) slalom(lambda l, r: 50, lambda l, r: r * 2.5, lambda l, r: l > 15) slalom(lambda l, r: l * 2.5, lambda l, r: 50, lambda l, r: r < 5)

이렇게 작성할 수도 있지만 좀 그러한...

순간적으로 튀는 센서 값 제거하기 #include "roboid.h" int main(int argc, char *argv[]) { int state = 0, count = 0, left, right; hamster_create(); while(1) { left = hamster_left_proximity(); right = hamster_right_proximity(); switch(state) { case 0: hamster_wheels(left * 2.5, 50); if(right > 15) count ++; else count = 0; if(count > 10) { count = 0; state = 1; } break; case 1: hamster_wheels(50, right * 2.5); if(left < 5) count ++; state = 2; case 2: hamster_wheels(50, right * 2.5); if(left > 15) count ++; else count = 0; if(count > 10) { count = 0; state = 3; } break; case 3: hamster_wheels(left * 2.5, 50); if(right < 5) count ++; state = 0; wait(10); return 0;

미로 찾기

한 쪽 센서 사용하여 벽 따라 가기 미로판 왼쪽 벽을 따라 주행

한 쪽 센서 사용하여 벽 따라 가기 원하는 거리만큼 센서 값: 30 센서 값 > 30 센서 값 < 30

한 쪽 센서 사용하여 벽 따라 가기 from roboid import * hamster = Hamster() while True: if hamster.left_proximity() > 30: hamster.wheels(50, 0) else: hamster.wheels(0, 50) wait(10) #include "roboid.h" int main(int argc, char *argv[]) { hamster_create(); while(1) { if(hamster_left_proximity() > 30) hamster_wheels(50, 0); else hamster_wheels(0, 50); wait(10); } return 0;

양쪽 센서 사용하여 복도 주행 미로판 복도 중앙으로 주행

양쪽 센서 사용하여 복도 주행

양쪽 센서 사용하여 복도 주행 왼쪽 센서 값 > 오른쪽 센서 값 왼쪽 센서 값 < 오른쪽 센서 값

양쪽 센서 사용하여 복도 주행

양쪽 센서 사용하여 복도 주행 오른쪽으로 많이 움직여야... 오른쪽으로 조금 움직이면...

양쪽 센서 사용하여 복도 주행

양쪽 센서 사용하여 복도 주행 from roboid import * hamster = Hamster() while True: diff = hamster.left_proximity() - hamster.right_proximity() hamster.wheels(50 + diff * 1.3, 50 - diff * 1.3) wait(10) #include "roboid.h" int main(int argc, char *argv[]) { int diff; hamster_create(); while(1) { diff = hamster_left_proximity() - hamster_right_proximity() hamster_wheels(50 + diff * 1.3, 50 - diff * 1.3); wait(10); } return 0;

미로 찾기 왼쪽 반사판으로 교체해 주세요 !!

미로 찾기 원하는 거리만큼 센서 값: 35 왼쪽 벽을 따라 주행

미로 찾기 오른쪽으로 많이 움직여야... 오른쪽으로 조금 움직이면...

미로 찾기 왼쪽 벽을 따라 주행

from roboid import * hamster = Hamster() while True: diff = hamster.left_proximity() - 35 hamster.wheels(50 + diff * 0.8, 50 – diff * 0.8) wait(10) #include "roboid.h" int main(int argc, char *argv[]) { int diff; hamster_create(); while(1) { diff = hamster_left_proximity() - 35; hamster_wheels(50 + diff * 0.8, 50 – diff * 0.8); wait(10); } return 0;

모퉁이를 잘 도는가? 미로판

모퉁이를 잘 도는가?

막힌 길에서 제자리 돌기 언제까지 돌아야 하나?

미로 찾기 미로판

미로 찾기 좌수법 (좌선법): 왼쪽  앞쪽  오른쪽 왼쪽 벽을 따라 주행 앞쪽에 벽이 있으면 벽이 없을 때까지 오른쪽으로 회전

미로 찾기

미로 찾기 from roboid import * hamster = Hamster() while True: left = hamster.left_proximity() right = hamster.right_proximity() if right > 47: while right > 5: hamster.wheels(50, -50) wait(10) else: diff = left – 35 hamster.wheels(50 + diff * 0.8, 50 – diff * 0.8) #include "roboid.h" int main(int argc, char *argv[]) { int left, right, diff; hamster_create(); while(1) { left = hamster_left_proximity(); right = hamster_right_proximity(); if(right > 47) { while(right > 5) { hamster_wheels(50, -50); wait(10); } } else { diff = left – 35; hamster_wheels(50 + diff * 0.8, 50 – diff * 0.8); return 0;

생각해 봅시다

햄스터 플래닛 중급 고급 컵 컵 컵과의 거리가 점점 멀어지다가 점점 가까워지다가... 타원 궤도를 따라 이동하기

최단 경로 찾기 출발 도착

알고리즘 미로 탐색 알고리즘 미로 제작 알고리즘 좌수법(좌선법), 우수법(우선법) 깊이 우선 탐색, 너비 우선 탐색 다익스트라 알고리즘 A* 알고리즘 미로 제작 알고리즘 http://weblog.jamisbuck.org/2011/2/7/maze-generation-algorithm-recap

수고하셨습니다. http://hamster.school akaii@kw.ac.kr