ROBOTC 활용하기 - ies

Download Report

Transcript ROBOTC 활용하기 - ies

ROBOTC 활용하기
- 전국 전문대학교 로봇대회 1차 기술 세미나 -
2013. 5. 25.
- Index • 제 1장 LEGO MINDSTORMS Education
• 제 2장 ROBOTC 설치 및 기본 로봇 조립
• 제 3장 ROBOTC 프로그램의 이해
• 제 4장 ROBOTC 기초 프로그래밍(모터 구동 프로그래밍)
• 제 5장 ROBOTC 제어문 (While, if, if–else)
• 제 6장 라인 로봇 (Light Sensor 사용)
-제 1장 LEGO MINDSTORMS Education -
- NXT -
• NXT는 LEGO MINDSTORMS Education Set의
컨트롤러
• 프로그래밍이 가능한 인텔리전트 브릭
• 주변환경을 인식하고, 인터페이스 할 수 있는
다양한 센서와 전동기를 연결하여 데이터를 수집
및 테스트 할 수 있는 최고의 장비
- NXT •
RCX에 이은 LEGO사의 차세대 로봇
컨트롤러
•
32bit ARM7 Processor / 256k Flash /
64k Ram
•
입력포트 4 / 출력포트 3
•
USB / Bluetooth 통신 지원
•
60*100 Graphic LCD / 스피커 / 충전식
배터리 지원
•
엔코더 내장 모터 / 초음파 / 사운드 /
터치 / 빛 센서
- 사용할 수 있는 Sensor/Actuator 기존 LEGO RCX용
디바이스 호환
엔코더 내장형
서보 모터
충전식
리튬폴리머
배터리
터치 센서
그래픽 LCD 및
블루투스 무선통신 내장
USB 2.0 지원
사운드 센서
라이트 센서
초음파 센서
- NXT의 외형 Output
꺼진 상태 : 전원 켜기
켜진 상태 : 가운데 메뉴 실행
USB
LCD
좌측의 메뉴로 넘어감
Speaker
우측의 메뉴로 넘어감
취소 / 최상위 메뉴에서 끄기
Input
-제 2장 ROBOTC 설치 및 기본 로봇 조립 –
- ROBOTC 설치하기 -
http://www.robotc.net에 접
속하여 RobotC for Lego
프로그램과 드라이버를
download 받는다.
인터넷이 되지 않을 경우
USB 메모리에서 설치파일을
받는다.
- 교육용 로봇 조립 대회 공식 사이트에 공지된 이미지를 참조하여,
다음 로봇 조립
-제 3장 ROBOTC 프로그램의 이해 -
- ROBOTC 소개 -
• RobotC는 카네기멜론 대학에
서 만든 ROBOT 전용 프로그래
밍언어로, LEGO Mindstorms
RCX와 NXT를 지원
• C언어를 기반으로 하여 C언어
의 문법 체계를 90% 동일
• C언어를 공부한 학생과 이제 시
작하는 학생들 모두 쉽게 배울
수 있음
- Quick Start Guide-
• 홈페이지 주소
http://www.robotc.net/support/n
xt/
- ROBOTC 실행하기 -
• 바탕화면의 ICON을 클릭하여 실행
• Activate ROBOTC for Mindstorms = 정품 인증 모드(시리얼 키를 입력 후 실행)
• Evaluate ROBOTC for Mindstorms = 30일 평가판 모드(시리얼 키 없이 실행)
- 전체적인 프로그램 사용법 -
• Port A,C에 연결되어 있는 모터를 50의 파워로 1초간 전진하는 프로그램
• main() 함수 : 프로그램 내에 오직 1개만 사용할 수 있는 특별한 함수로서
바디( {..} )에 작성된 내용을 시작/종료 한다.
- ROBOTC 메뉴[File] • New File (Ctrl + N) : 새로운 문서 작성
• Open and Compile : 불러오기/컴파일을 동시 실행
• Open Sample Program : 샘플 프로그램을 불러오기
• Save(Ctrl+S) : 작성된 소스를 RobotC파일로 저장
• Save As : 다른 이름으로 저장
• Print(Ctrl+P) : 작성된 프로그램을 인쇄
• Print Preview : 인쇄한 프로그램 미리보기
• Page Setup : 현재 작성된 프로그램의 출력페이지를
설정
- ROBOTC 메뉴[Edit] -
• Undo Typing (Alt+Backspace/Ctrl+z)
: 실행취소, 되돌리기 기능
• Can’t Redo (Ctrl+Z)
: 실행 취소된 것을 되돌리기 기능
• Cut (Shift+Delete) : 잘라내기
• Copy (Ctrl+C) : 복제하기
• Paste (Ctrl+V) : 붙여넣기
- ROBOTC 메뉴[View] -
• Source : 현재 사용 중인 프로그램
• Function Explorer View : 함수 도움말 창
실행
• Compile Errors View : Error 내용 창
• Font Increase (Ctrl +‘ +’) : 폰트 사이즈
증가
• Font Decrease (Ctrl +‘ -’) : 폰트 사이즈
감소
- ROBOTC 메뉴[Robot] -
• Download Program(F5) : 소스코드 컴파
일 후 NXT 로봇으로 프로그램 다운로드
• Compile Program(F7) : 소스코드 컴파일
(프로그램 다운로드 안함)
• Debugger : 프로그램의 실행 또는 단계
적인 실행을 할 수 있다. Refresh Rate를
Continuous를 클릭하면 NXT에 있는 모터
및 센서의 값들을 계속적인 모니터링이
가능하다.
- ROBOTC 메뉴[Robot]-3 -
• Motors and Sensors Setup : 모터와 센서를 어떤 포트에 어떤 별명(Alias)을 사
용할 지를 결정하기 위해 Motors and Sensors Setup을 이용한다. 프로그램 작성
시 모터 및 센서에 대한 변수 이름을 입력하면 코드를 자동으로 생성한다.
- ROBOTC Firmware download -
• Download Firmware : 펌웨어 다운로드 기능을 이용하여 확장자가 “.rfw”인
파일을 다운로드 한다. 다운로드가 완료되면 ”Firmware download completed”
라는 메시지가 나타난다.
- ROBOTC 프로그램 규칙 ▪ ROBOTC는 표준 C언어 프로그램 규칙을 따르는 text기반의 프로그램
언어이다.
▪ 사용자가 프로그램을 작성하면서 파랑색이나 보라색으로 글씨가나오면
ROBOTC가 그 단어를 매우 중요한 단어로 인식한다는 뜻이고 ROBOTC가 인
식하는 키워드(keyword)는 자동으로 색상이 결정되어 표시된다.
▪ ROBOTC 컴파일러는 대문자와 소문자를 엄격하게 구분한다.
▪ 프로그램의 실행 순서는 1번 줄부터 순차적으로 실행된다.
▪ 스페이스(space), 탭(tab)은 프로그램의 실행에 영향을 주지 않지만 프로그램
의 가독성(읽어 낼 수 있는 정도)을 높이기 위해서 적절한 사용을 해야 한다.
▪ 세미콜론(‘;’)은 모든 ROBOTC 프로그램 문장의 끝을 알려준다.
▪ 프로그램을 작성할 때는 반드시 적어도 하나의 main() 함수를 갖고 있어야
한다. Task main() 함수 안에 실행하고자 하는 프로그램을 기록하면 된다
- 변수 선언 유의 사항 변수 선언 시 유의 사항
• 대문자(A~Z), 소문자(a~z), 숫자(0~9), 밑줄문자‘ _ ’를 사용한다.
• 변수명은 숫자로 시작할 수 없다.
• 변수명은 기본 예약어 또는 함수명을 사용할 수 없다.
• 변수명은 대·소문자를 다르게 구분한다.
• 변수명은 한글로 사용할 수 없다.
- ROBOTC 자료형(데이터형) -
• RobotC의 자료형은 프로그램에서 처리하고자 하는 자료의 형태를 의미
• 자료형은 NXT 메로리 영역의 크기를 결정
- 화면 출력 서식 -
- ROBOTC 자료형(정수형) -
• 정수형 변수
정수형 변수는 RobotC 프로그램 작성 중 가장 많이 사용하는 데이터형으로서 정수 형태
의 자료를 표현하기에 적당하다. 선언 방법은 int라는 키워드(keyword)를 작성하고 뒤에
변수명을 사용하면 된다. %d는 10진수 출력을 의미한다.
• nxtDisplayTextLine(LCD 위치, “출력 내용”, 출력 변수명) :
NXT LCD 창에 지정된 형식으로 변수 값을 출력(LCD의 글 위치는 0~7까지)
• PlaySound(내장 사운드 명) : 미리 정해져 있는 내장 사운드를 재생
- ROBOTC 자료형(실수형) -
• 실수형 변수
실수형 변수는 아주 큰 수나 아주 작은 수를 표현해야 하거나, 소수점을 포함하
는 실수 자료를 표현 할 때 사용된다. 실수형 변수를 출력할 때“ %f”를 사용한다.
특별히 소수점 아래에 자릿 수를 지정하고 싶을 때는 위의 예처럼“ %.2f”처럼
표현하고 이것은 소수 셋째 자리에서 반올림하여 소수점 2자리로 표현하라는
것이다.
- ROBOTC 자료형(문자형) -
• 문자형 변수
RobotC에서 문자형 변수는 8비트의 영역을 차지하고 있다. 주로 ASCII문자를
표현하기 위해서 사용한다.
위의 예제는 문자 ‘A’에 해당하는 아스키 코드 값을 출력하고, x변수에 해당하는
문자를 출력하는 프로그램이며, 여기서“ %d”정수형 변수의 값을 출력하고“ %c”
는 문자를 표현하는데 사용한다.
- ROBOTC 자료형(지역변수) -
• 지역변수(Local Variables)
함수의 내부에 정의된 변수이다. 지역 변수들은 함수의 실행이 시작될 때 메
모리에 만들어지고, 함수가 종료될 때 메모리로부터 소멸된다.
- ROBOTC 연산자(관계연산자) -
- ROBOTC 연산자(논리연산자) -
- ROBOTC 연산자(논리연산자)-2 • AND
• 조건 값이 참이 아
니므로 실행되지
않는다.
• NOT
• 11번 모터가 0.1
초 동안 회전한다.
- 제 4장 ROBOTC 기초 프로그래밍 -
- 로봇을 2초 동안 전진시켜라 -
• NXT 서보 모터 파워는 건전지의 양에 따른 상대적인 비율로 -100 ~ +100%까지
파워 레벨을 조정 가능
- 2초 동안 전진, 2초 동안 후진 -
각 명령에 따른 회전 방식
Swing Turn
Point Turn
Curve Turn
- 도전 과제 I • 2초 전진 후 90도 회전하고 2초 전진
- 제 5장 ROBOTC 제어문 -
- if 제어문 함수 설명 if(조건식) 문장1
•
조건식이 ‘True’인지 ‘False’ 인지 판정
•
‘False’일 경우에 대한 고려 없이 ‘True’ 일 경우
문장 1을 실행
•
한 조건에 대해 여러 문장 실행 시 문장들을
{ }으로 묶어서 사용
- if 제어문 예제 -
•
random 함수 이용 난수값 생성(0-99)
•
if 함수를 이용하여 난수값이 50보다
크면 1초간 직진
•
직진 후 사운드 출력
- if-else 제어문 함수 설명if(조건식) 문장1
else 문장2
•
조건식이 ‘True’인지 ‘False’ 인지 판정
•
‘True’ 일 경우 문장 1 실행
•
‘False’ 일 경우 문장 2 실행
•
한 조건식에 대해 ‘True’ 일 경우와 ‘False’ 일
경우를 나누어 제어할 때 사용
- if-else 제어문 예제 -
•
random 함수 이용 난수값 생성(0-99)
•
if 함수 이용 값이 50보다 크면 우회전,
값이 같거나 작으면 좌회전
•
조건 식 동작 후 사운드 출력
- while 제어문 함수 설명while(조건식) 반복문장
•
조건식이 ‘True’이면 반복문장 계속 실행
•
그 후 검사하여 ‘False’이면 while 제어 문을 빠져 나
와 다음 문장 실행
•
조건 식에 ‘True’ 또는 ‘1’ 을 넣으면 무한반복
- while 제어문 예제 •
0.5초간 전진과 후진을 10번 동안
반복(0-9)
•
i++ 는 i = i + 1 을 의미 한다.
•
단, while 문을 사용
•
동작 후 사운드 출력
- do-while 제어문 함수 설명 do
반복문장
while(조건식)
•
반복 문장을 일단 한번 실행 한 후 while 제어문의조
건 식 검사
•
조건 식의 값이 처음부터 거짓이라도 반복 문장은
한번 실행
•
위의 내용을 빼고는 while과 동일
- 제 6장 라인로봇(Light Sesnor) -
- 빛 센서(Light Sensor) •
전방에 간접조명용 붉은LED와 Photo
Transistor가 내장되어 있으며, 명암을 구분
•
지면과 5mm가 가장 적합
•
조명의 켜짐 유무에 따라 액티브 모드/인액티
브 모드를 가지고 있다.
•
측정 값은 0~100%으로 표현
- 문턱 값(Threshold) • 어두운 영역과 밝은 영역을 어떻게 구분할 것인가?
- 빛 센서 셀프 테스트 1.
2.
빛 센서를 3번에 연결
NXT를 켜고 View 를 선택 (
)
3.
반사광 측정하기
- 반사광(Reflected light) 아이콘을 선택
- 포트 3을 선택
4.
주변광 측정하기
- 주변광(Ambient light) 아이콘을 선택
- 포트 3을 선택
- 빛 센서 설정하기 -
• Port S3의 Name에 light를 입력한다.
(편의상 light라고 입력하였으나 다른 이름도 가능하다.)
- 빛 센서 값에 따라 로봇의 속도 변화-
• int 변수 이름 : 정수를 저장하기 위해 변수를 선언
이름은 문자나 ‘_’로만 시작 가능
• int light_value : 정수값을 저장하기 위해 light_value란 변수를
사용하겠다고 선언
- 전진하다가 바닥이 검정이면 정지 -
• #define THRESHOLD 50(매크로 상수):
THRESHOLD라고 쓰인 모든 부분을 50으로 치환하여 실행
• break; : 문을 만나면 반복되는 블록의 마지막에서 반복문
을 이탈
- 1센서 라인 트레이싱 주행법 -
출발
도착
- 1센서 라인 트레이싱 로봇(왼쪽 경계) -
- 빛 센서 2개로 변경하기 -
• 빛센서 두 개를 사용하는 라인로봇을 위해 아래와 같이 설정한다.
- 왼쪽 빛 센서 설정 : 포트2, left_light, Light Active
- 오른쪽 빛 센서 설정 : 포트3, right_light, Light Active
- 2센서 라인트레이싱 주행법 1
3
출발
도착
- 2센서 라인트레이싱 로봇 1 • 빛 센서 2개를 사용한 라
인트레이서
• 모터와 빛센서는 각각 움
직인다.
• StartTask(태스크명);
-Task 형태로 호출된 함수
를 호출하여 멀티 태스크
형태로 동시에 실행시킨다.
- 최대 255개 까지 가능
- 종료는 StopTask(태스크
명); 이나 StopAllTask();를
사용한다.
• 교차로 통과 불가
- 2센서 라인트레이싱 로봇 1 -
- 2 센서 라인트레이싱 로봇 2 -
- 2 센서 라인트레이싱 로봇 3 •
•
•
빛센서 2개로 라인트레이스
두 빛 센서의 상태 조합을 통해 로봇이 동작
교차로 통과하면서 교차점 개수 카운트
- 도전 과제 Ⅲ -
컬러 센서의 이용
컬러 센서 (Color Sensor)
• 빨간색, 파란색, 초록색의 삼원색을
측정할 수 있는 센서
• 주변광 측정 모드, 단색 모드, 컬러
모드 제공
• 미리 정의된 색을 기준으로 감지하거
나 raw 값을 읽을 수 있음
– 미리 정의된 색: 검은색(1), 파란색
(2), 초록색(3), 노란색(4), 빨간색(5),
흰색(6)
– raw값: 가공되지 않은 센서의 측정
값
ENCODER 사용하기
Encoder 소개
Encoder
• 회전의 양을 감지하는 센서, 다른 말로 “각도 센서”
• NXT Servo 모터에 내장되어 있음
nMotorEncoder[]
• Encoder의 값이 저장되어 있는 변수
• 값의 단위는 ‘도(Degree)’
• 모터가 회전하면 그에 따라 각도 값이 누적
– +방향 회전은 값이 증가, -방향 회전은 값이 감소
• 이 변수에 값을 할당하려고 하면 0으로 초기화됨
nMotorEncoder[] 사용 예시
• 3번 줄: 사용하기 전에 nMotorEncoder[] 초기화
• 4번 줄: 모터에 전원 넣기
• 5번 줄: while문 조건 – nMotorEncoder[]가 360보다 작은 동안에
반복
• 6번 줄: 루프를 탈출하면 모터 정지
• 360도 이상이 되어야 비로소 모터 정지  360도를 약간 넘길 수 있
다
nMotorEncoder[]를 이용한 회전의 잘못
된 사용 예시 (1)
> -360
으로 수정
• 모터의 파워 값은 음수(-30)이지만 while문에서 확인하
는 encoder 값은 양수(+360)
– 프로그램이 끝나지 않고 모터는 무한히 회전한다
nMotorEncoder[]를 이용한 회전의 잘못
된 예 (2)
nMotorEncoder[motorA] = 0;
명령 추가
•
•
•
첫 번째 회전은 정상적으로 360도 회전
두 번째 회전 이전에 nMotorEncoder[]의 초기화 과정이 없음
nMotorEncoder[]의 값이 이미 360 이상인 상태이므로 12번 줄의 while 루
프는 실행되지 않는다
nMotorEncoderTarget[]
• NXT 펌웨어가 자동으로 회전을 제어하도록 명령하는 변수
• (1)이 변수에 회전할 각도를 할당한 뒤에 (2)모터 파워를 주면, 펌웨
어가 정확히 해당 각도만큼 모터를 회전시킨 뒤 정지한다
• 장점
– 모터 파워를 끄는 명령을 입력할 필요가 없다 (펌웨어가 자동으로 정지시킴)
– nMotorEncoder만 사용하는 것보다 정확하게 목표한 각도만큼 회전시켜 준다
– 모터가 목표 각도만큼 돌 때까지 기다릴 필요가 없다
• 단점
– 펌웨어의 제어 처리가 의도하지 않은 버그를 만들어낼 수 있다 (ex: 모터 과부하
시 오작동)
nMotorEncoderTarget[] 사용 예시 (1)
• 2번 줄: nMotorEncoderTarget[]에 회전 각도의 절대값 입력
• 3번 줄: 모터에 전원 넣기
• 4번 줄: 펌웨어가 모터의 전원을 내릴 때까지 루프로 대기
– nMotorRunState[]는 모터의 회전 상태가 기록된 변수로,
runStateIdle(브레이크 완료), runStateHoldPosition(브레이크
도중), runStateRunnig(회전 도중)의 3가지 상태가 있다
• 모터를 일부러 멈추는 명령(motor[motorA] = 0;) 이 없다는 것을
확인할 것
nMotorEncoderTarget[] 사용 예시 (2)
•
•
•
nMotorEncoderTarget[]에 값을 할당한 뒤 다른 작업을 연이어 수행
하는 예 (여기서는 숫자 카운트)
모터의 회전과 숫자 카운트가 동시에 실행된다
– 모터는 목표한 각도에 도달하면 자동으로 멈춘다
모터의 멈춤은 펌웨어에서 관리하므로 일부러 모터를 멈추는 명령을 넣
을 필요가 없다
nMotorEncoderTarget[]의 잘못된 사용 (1)
• nMotorEncoderTarget[]이 motor[]명령 다음에 있다
• 모터가 무한히 회전한다
• nMotorEncoderTarget[]  motor[] 순서로 명령이 실
행되어야만 한다
nMotorEncoderTarget[]의 잘못된 사용 (2)
while(nMotorRunState[motorA] != runStateIdle) {}
추가
• 첫 번째 회전에서 모터 회전이 끝날 때까지 기다리는 루프가 없다
• 곧바로 두 번째 회전으로 넘어가, 두 번째 회전만을 하고 마친다
내장 PID와 SYNCH 기능
PID란?
• 비례P 적분I 미분D 제어: Encoder값을 기반으로 모터
파워를 조절해 회전 속도를 일정하게 만드는 제어법
• 현실의 모터는 같은 전압을 주어도 회전 속도가 다르다:
내부 부품 마찰 등의 이유
• 따라서 소프트웨어적으로 적절하게 각 모터의 전압을 다
르게 하여 목표하는 회전 속도를 달성한다 – 이것이 PID
• NXT 펌웨어에 제어 기능이 이미 내장되어 있다 – 프로
그래머가 직접 구현하지 않아도 된다
nMotorPIDSpeedCtrl[]
• 모터의 PID 모드를 설정하는 변수
• PID 모드에는 여러 가지가 있다
– mtrNoReg: PID 사용 안함
– mtrSpeedReg: 회전 속도의 일정함을 우선시하는 PID
– mtrEncoderReg: nMotorEncoderTarget[]의 정확도를 우선시
하는 PID
– mtrSyncRegMaster, mtrSyncRegSlave: Synch 주행 전용 PID
• Motors and Sensors Setup에서 PID Ctrl을 체크하면 자동으로
mtrSpeedReg, 아니면 mtrNoReg다
– 따라서 PID Ctrl만 체크하면 별다른 설정 없이 PID를 이용할 수
있다
• 사용례: nMotorPIDSpeedCtrl[motorA] = mtrSpeedReg;
모터의 Synch란?
• 두 모터의 회전 속도를 비례하도록 연동해서 제어하
는 기능
• 사용자가 제어할 쪽을 Master 모터, Master의 동작
에 연동될 쪽을 Slave 모터라 한다
• 장점
– 손쉽게 각종 회전과 직진 동작을 구현할 수 있다
• 단점
– 두 모터의 반응시간이 차이가 있어서 출발 또는
정지 시에 방향이 틀어지는 현상이 발생한다
nSyncedMotors
• Synch를 사용할 모터를 설정하는 변수
– synchAB, synchAC, …, synchCB,
synchNone 의 값을 가진다
• synchAB: Master 모터가 A, Slave 모터가 B
• synchCB: Master 모터가 C, Slave 모터가 B
• synchNone: Synch 해제
nSyncedTurnRatio
• Master 모터 파워 대비 Slave 모터 파워를 설정하는 변
수
• -100 ~ +100 사이의 값을 가진다
• motor[slave] = motor[master] * nSyncedTurnRatio;
– nSyncTurnRatio = 100;  직진
– nSyncTurnRatio = 1~99;  Curve 턴
– nSyncTurnRatio = 0;  Swing 턴
– nSyncTurnRatio = -100;  Point 턴
Synch 사용 예시
•
•
•
•
•
2번
3번
4번
5번
6번
줄:
줄:
줄:
줄:
줄:
nSyncedMotors로 Master와 Slave 모터 설정
nSyncedTurnRatio로 파워 비율 설정
Master 모터에 파워
1초 기다림
Master 모터 정지 (Slave는 연동되므로 함께 정지됨)
배열
배열이란?
배열 사용 전
배열 사용 후
• 같은 자료형을 가진 다수의 변수의 묶음
• 대괄호 내부의 숫자를 첨자 또는 인덱스라고 부름 (배열의 순번)
• 첨자를 활용하여 대량의 자료를 효율적으로 처리할 수 있다
배열의 선언
• 변수의 선언과 거의 동일하나, 변수명 옆에
대괄호 쌍을 쓰고 그 안에 배열의 크기를
입력한다
배열의 초기화
• 배열의 인덱스는 0부터 시작한다
– 10개짜리 변수의 인덱스는 0~9의
범위다
• 배열을 선언하면서 동시에 초기화하고
자 할 때는 중괄호를 이용한다
배열의 사용례:
초음파 최소값 찾아내기
•
•
0.1초 간격으로 1초 동안 수집한 초음파 값들 중 최소값을 찾아냄
초음파 값이 불안정할 때 필터 역할을 할 수 있음
격자 사이의 이동
격자 사이를 어떻게 이동할까?
1.
Encoder를 활용한 경로 주행
– 미리 입력된 Encoder 값에 맞추어 직진과 90도 회전을 수행한
다
– 구현하기가 가장 쉽다
– 지면과의 미끄러짐 등으로 오차가 누적되면서 갈수록 원래 경
로에서 틀어진다
2. 라인 트레이싱을 활용한 주행
– 1센서 라인 트레이싱을 활용해 격자 사이를 주행한다
– 구현하기가 비교적 어렵다
– 격자 줄 한쪽으로 치우쳐서 주행하게 된다
– 오차에서 비교적 자유롭다
동작 나누기: foward와 center
center:
앞쪽 격자까지
foward:
앞쪽 격자의 물체 직전까지
•
•
•
drvStraight 함수: 직진을 수행하는 함수
moveForward 함수: forward에 해당하는 동작을 수행하는 함수
moveCenter 함수: center에 해당하는 동작을 수행하는 함수
좌표 주행 알고리즘
좌표 주행을 위한 3가지 정보
• 3가지 정보: X좌표, Y좌표, 방향
– X좌표, Y좌표는 위치를 알기 위한 정보
– 방향은 로봇이 바라보는 방향을 알기 위한 정보
• 이 3가지 정보를 활용해 경기장 상의 격자 위치를 좌표로
표현할 수 있다
북
(0, 0)
(4, 0)
서
동
(0, 8)
(4, 8)
남
-Q&A-
???
감사합니다