2013 5 25
Download
Skip this Video
Download Presentation
2013. 5. 25.

Loading in 2 Seconds...

play fullscreen
1 / 99

2013. 5. 25. - PowerPoint PPT Presentation


  • 286 Views
  • Uploaded on

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 사용 ).

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 2013. 5. 25.' - imelda-matthews


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
2013 5 25

ROBOTC 활용하기

- 전국 전문대학교로봇대회 1차 기술 세미나 -

2013. 5. 25.

slide2

- Index -

  • • 제 1장 LEGO MINDSTORMS Education
  • • 제 2장ROBOTC 설치 및 기본 로봇 조립
  • 제 3장 ROBOTC 프로그램의 이해
  • 제 4장 ROBOTC 기초 프로그래밍(모터 구동 프로그래밍)
  • 제 5장 ROBOTC 제어문(While, if, if–else)
  • 제 6장 라인 로봇 (Light Sensor 사용)
slide4

- NXT -

  • NXT는 LEGO MINDSTORMS Education Set의 컨트롤러
  • 프로그래밍이 가능한 인텔리전트 브릭
  • 주변환경을 인식하고, 인터페이스 할 수 있는
  • 다양한 센서와 전동기를 연결하여 데이터를 수집
  • 및 테스트 할 수 있는 최고의 장비
slide5
RCX에 이은 LEGO사의 차세대 로봇 컨트롤러

32bit ARM7 Processor / 256k Flash / 64k Ram

입력포트 4 / 출력포트 3

USB / Bluetooth 통신 지원

60*100 Graphic LCD / 스피커 / 충전식 배터리 지원

엔코더 내장 모터 / 초음파 / 사운드 / 터치 / 빛 센서

- NXT-

slide6

기존 LEGO RCX용

디바이스 호환

엔코더 내장형

서보 모터

충전식

리튬폴리머

배터리

터치 센서

그래픽 LCD 및

블루투스 무선통신 내장

USB 2.0 지원

사운드 센서

초음파 센서

라이트 센서

- 사용할 수 있는 Sensor/Actuator -

slide7

Output

USB

LCD

Speaker

Input

- NXT의 외형 -

꺼진 상태 : 전원 켜기

켜진 상태 : 가운데 메뉴 실행

좌측의 메뉴로 넘어감

우측의 메뉴로 넘어감

취소 / 최상위 메뉴에서 끄기

slide9

- ROBOTC 설치하기 -

http://www.robotc.net에 접속하여 RobotC for Lego

프로그램과 드라이버를 download 받는다.

인터넷이 되지 않을 경우

USB 메모리에서 설치파일을

받는다.

slide10

- 교육용 로봇 조립 -

대회 공식 사이트에 공지된 이미지를 참조하여,

다음 로봇 조립

slide12

- ROBOTC 소개 -

• RobotC는 카네기멜론 대학에

서 만든 ROBOT 전용프로그래

밍언어로, LEGO Mindstorms

RCX와 NXT를 지원

• C언어를 기반으로 하여 C언어

의 문법 체계를 90% 동일

• C언어를 공부한 학생과 이제 시

작하는 학생들 모두 쉽게 배울

수 있음

slide13

- Quick Start Guide-

• 홈페이지 주소

http://www.robotc.net/support/nxt/

slide14

- ROBOTC 실행하기 -

  • 바탕화면의 ICON을 클릭하여 실행
  • Activate ROBOTC for Mindstorms= 정품 인증 모드(시리얼 키를 입력 후 실행)
  • Evaluate ROBOTC for Mindstorms = 30일 평가판 모드(시리얼 키 없이 실행)
slide15

- 전체적인프로그램 사용법 -

  • Port A,C에 연결되어 있는 모터를 50의 파워로 1초간 전진하는 프로그램
  • main() 함수 : 프로그램 내에 오직 1개만 사용할 수 있는 특별한 함수로서
  • 바디({..} )에 작성된 내용을 시작/종료 한다.
slide16

- 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 : 현재 작성된 프로그램의 출력페이지를
  • 설정
slide17

- ROBOTC 메뉴[Edit] -

  • Undo Typing (Alt+Backspace/Ctrl+z)
  • : 실행취소, 되돌리기 기능
  • Can’t Redo (Ctrl+Z)
  • : 실행 취소된 것을 되돌리기 기능
  • Cut (Shift+Delete) : 잘라내기
  • Copy (Ctrl+C) : 복제하기
  • Paste (Ctrl+V) : 붙여넣기
slide18

- ROBOTC 메뉴[View] -

  • • Source : 현재 사용 중인 프로그램
  • Function Explorer View : 함수 도움말 창
  • 실행
  • Compile Errors View : Error 내용 창
  • Font Increase (Ctrl +‘ +’) : 폰트 사이즈
  • 증가
  • • Font Decrease (Ctrl +‘ -’) : 폰트 사이즈
  • 감소
slide19

- ROBOTC 메뉴[Robot] -

  • Download Program(F5) : 소스코드 컴파일 후 NXT 로봇으로 프로그램 다운로드
  • Compile Program(F7) : 소스코드 컴파일(프로그램 다운로드 안함)
  • Debugger : 프로그램의 실행 또는 단계적인 실행을 할 수 있다. Refresh Rate를Continuous를 클릭하면 NXT에 있는 모터 및 센서의 값들을 계속적인 모니터링이
  • 가능하다.
slide20

- ROBOTC 메뉴[Robot]-3 -

• Motors and Sensors Setup : 모터와 센서를 어떤 포트에 어떤 별명(Alias)을 사용할 지를 결정하기 위해 Motors and Sensors Setup을 이용한다. 프로그램 작성시 모터 및 센서에 대한 변수 이름을 입력하면 코드를 자동으로 생성한다.

slide21

- ROBOTC Firmware download -

• Download Firmware : 펌웨어 다운로드 기능을 이용하여 확장자가 “.rfw”인 파일을 다운로드 한다. 다운로드가 완료되면 ”Firmware download completed”라는 메시지가 나타난다.

slide22

- ROBOTC 프로그램 규칙 -

▪ ROBOTC는 표준 C언어 프로그램 규칙을 따르는 text기반의 프로그램

언어이다.

▪ 사용자가 프로그램을 작성하면서 파랑색이나 보라색으로 글씨가나오면

ROBOTC가 그 단어를 매우 중요한 단어로 인식한다는 뜻이고 ROBOTC가 인

식하는 키워드(keyword)는 자동으로 색상이 결정되어 표시된다.

▪ ROBOTC 컴파일러는 대문자와 소문자를 엄격하게 구분한다.

▪ 프로그램의 실행 순서는 1번 줄부터 순차적으로 실행된다.

▪ 스페이스(space), 탭(tab)은 프로그램의 실행에 영향을 주지 않지만 프로그램

의 가독성(읽어 낼 수 있는 정도)을 높이기 위해서 적절한 사용을 해야 한다.

▪ 세미콜론(‘;’)은 모든 ROBOTC 프로그램 문장의 끝을 알려준다.

▪ 프로그램을 작성할 때는 반드시 적어도 하나의 main() 함수를 갖고 있어야

한다. Task main() 함수 안에 실행하고자 하는 프로그램을 기록하면 된다

slide23

- 변수 선언 유의 사항 -

변수 선언 시 유의 사항

• 대문자(A~Z), 소문자(a~z), 숫자(0~9), 밑줄문자‘ _ ’를 사용한다.

• 변수명은 숫자로 시작할 수 없다.

• 변수명은 기본 예약어 또는 함수명을 사용할 수 없다.

• 변수명은 대·소문자를 다르게 구분한다.

• 변수명은 한글로 사용할 수 없다.

slide24

- ROBOTC 자료형(데이터형)-

  • RobotC의 자료형은 프로그램에서 처리하고자 하는 자료의 형태를 의미
  • 자료형은 NXT 메로리 영역의 크기를 결정
slide26

- ROBOTC 자료형(정수형)-

  • 정수형 변수
  • 정수형 변수는 RobotC프로그램 작성 중 가장 많이 사용하는 데이터형으로서 정수 형태의 자료를 표현하기에 적당하다. 선언 방법은 int라는 키워드(keyword)를 작성하고 뒤에 변수명을 사용하면 된다. %d는 10진수 출력을 의미한다.
  • nxtDisplayTextLine(LCD 위치, “출력 내용”, 출력 변수명) :
  • NXT LCD 창에 지정된 형식으로 변수 값을 출력(LCD의 글 위치는 0~7까지)
  • PlaySound(내장 사운드 명) : 미리 정해져 있는 내장 사운드를 재생
slide27

- ROBOTC 자료형(실수형)-

  • 실수형 변수
  • 실수형 변수는 아주 큰 수나 아주 작은 수를 표현해야 하거나, 소수점을 포함하는 실수 자료를 표현 할 때 사용된다. 실수형 변수를 출력할 때“ %f”를 사용한다. 특별히 소수점 아래에 자릿 수를 지정하고 싶을 때는 위의 예처럼“ %.2f”처럼 표현하고 이것은 소수 셋째 자리에서 반올림하여 소수점 2자리로 표현하라는 것이다.
slide28

- ROBOTC 자료형(문자형)-

  • 문자형 변수
  • RobotC에서 문자형 변수는 8비트의 영역을 차지하고 있다. 주로 ASCII문자를 표현하기 위해서 사용한다.
  • 위의 예제는 문자 ‘A’에 해당하는 아스키 코드 값을 출력하고, x변수에 해당하는 문자를 출력하는 프로그램이며, 여기서“ %d”정수형 변수의 값을 출력하고“ %c”는 문자를 표현하는데 사용한다.
slide29

- ROBOTC 자료형(지역변수)-

  • 지역변수(Local Variables)
  • 함수의 내부에 정의된 변수이다. 지역 변수들은 함수의 실행이 시작될 때 메모리에 만들어지고, 함수가 종료될 때 메모리로부터 소멸된다.
slide32

- ROBOTC 연산자(논리연산자)-2-

  • AND
  • 조건 값이 참이 아니므로 실행되지 않는다.
  • 11번 모터가 0.1초 동안 회전한다.
  • NOT
slide34

- 로봇을 2초 동안 전진시켜라 -

  • NXT 서보 모터 파워는 건전지의 양에 따른 상대적인 비율로 -100 ~ +100%까지
  • 파워 레벨을 조정 가능
slide36
각 명령에 따른 회전 방식

Swing Turn

Point Turn

Curve Turn

slide37

- 도전 과제 I-

  • 2초 전진 후 90도 회전하고 2초 전진
slide39

if(조건식) 문장1

- if 제어문 함수 설명 -

  • 조건식이 ‘True’인지 ‘False’ 인지 판정
  • ‘False’일 경우에 대한 고려 없이 ‘True’ 일 경우 문장 1을 실행
  • 한 조건에 대해 여러 문장 실행 시 문장들을
  • { }으로 묶어서 사용
slide40

- if 제어문 예제 -

  • random 함수 이용 난수값 생성(0-99)
  • if 함수를 이용하여 난수값이50보다 크면 1초간 직진
  • 직진 후 사운드 출력
slide41

- if-else 제어문 함수 설명-

if(조건식) 문장1

else 문장2

  • 조건식이 ‘True’인지 ‘False’ 인지 판정
  • ‘True’ 일 경우 문장 1 실행
  • ‘False’ 일 경우 문장 2 실행
  • 한 조건식에 대해 ‘True’ 일 경우와 ‘False’ 일 경우를 나누어 제어할 때 사용
slide42

- if-else 제어문 예제 -

  • random 함수 이용 난수값 생성(0-99)
  • if 함수 이용 값이 50보다 크면 우회전, 값이 같거나 작으면 좌회전
  • 조건 식 동작 후 사운드 출력
slide43

- while 제어문 함수 설명-

while(조건식) 반복문장

  • 조건식이 ‘True’이면 반복문장 계속 실행
  • 그 후 검사하여 ‘False’이면 while 제어 문을 빠져 나와 다음 문장 실행
  • 조건 식에 ‘True’ 또는 ‘1’ 을 넣으면 무한반복
slide44

- while 제어문 예제 -

  • 0.5초간 전진과 후진을 10번 동안 반복(0-9)
  • i++ 는 i = i + 1 을 의미 한다.
  • 단, while 문을 사용
  • 동작 후 사운드 출력
slide45

- do-while 제어문 함수 설명 -

do

반복문장

while(조건식)

  • 반복 문장을 일단 한번 실행 한 후 while 제어문의조건 식 검사
  • 조건 식의 값이 처음부터 거짓이라도 반복 문장은 한번 실행
  • 위의 내용을 빼고는 while과 동일
slide47

- 빛 센서(Light Sensor) -

  • 전방에 간접조명용 붉은LED와 Photo Transistor가 내장되어 있으며, 명암을 구분
  • 지면과 5mm가 가장 적합
  • 조명의 켜짐 유무에 따라 액티브 모드/인액티브 모드를 가지고 있다.
  • 측정 값은 0~100%으로 표현
slide48

- 문턱 값(Threshold) -

  • 어두운 영역과 밝은 영역을 어떻게 구분할 것인가?
slide49

- 빛 센서셀프 테스트 -

  • 빛 센서를 3번에 연결
  • NXT를 켜고 View 를 선택 ( )
  • 3. 반사광 측정하기
  • - 반사광(Reflected light) 아이콘을 선택
  • - 포트 3을 선택
  • 주변광 측정하기
  • - 주변광(Ambient light) 아이콘을 선택
  • - 포트 3을 선택
slide50

- 빛 센서 설정하기 -

  • Port S3의 Name에 light를 입력한다.
  • (편의상 light라고 입력하였으나 다른 이름도 가능하다.)
slide51

- 빛 센서 값에 따라 로봇의 속도 변화-

  • int 변수 이름 : 정수를 저장하기 위해 변수를 선언
  • 이름은 문자나 ‘_’로만 시작 가능
  • int light_value : 정수값을 저장하기 위해 light_value란 변수를
  • 사용하겠다고 선언
slide52

- 전진하다가 바닥이 검정이면 정지 -

  • #define THRESHOLD 50(매크로 상수):
  • THRESHOLD라고 쓰인 모든 부분을 50으로 치환하여 실행
  • break; : 문을 만나면 반복되는 블록의 마지막에서 반복문
  • 을 이탈
slide55

- 빛 센서 2개로 변경하기 -

  • 빛센서 두 개를 사용하는 라인로봇을 위해 아래와 같이 설정한다.
  • - 왼쪽 빛 센서 설정 : 포트2, left_light, Light Active
  • - 오른쪽 빛 센서 설정 : 포트3, right_light, Light Active
slide57

- 2센서 라인트레이싱 로봇 1 -

  • 빛 센서 2개를 사용한 라
  • 인트레이서
  • 모터와 빛센서는 각각 움
  • 직인다.
  • StartTask(태스크명);
  • Task 형태로 호출된 함수를 호출하여 멀티 태스크 형태로 동시에 실행시킨다.
  • 최대 255개 까지 가능
  • 종료는 StopTask(태스크명); 이나 StopAllTask();를 사용한다.
  • 교차로 통과 불가
slide60

- 2 센서 라인트레이싱 로봇 3-

  • 빛센서2개로 라인트레이스
  • 두 빛 센서의 상태 조합을 통해 로봇이 동작
  • 교차로 통과하면서 교차점 개수 카운트
color sensor
컬러 센서 (Color Sensor)
  • 빨간색, 파란색, 초록색의 삼원색을 측정할 수 있는 센서
  • 주변광 측정 모드, 단색 모드, 컬러 모드 제공
  • 미리 정의된 색을 기준으로 감지하거나 raw 값을 읽을 수 있음
    • 미리 정의된 색: 검은색(1), 파란색(2), 초록색(3), 노란색(4), 빨간색(5), 흰색(6)
    • raw값: 가공되지 않은 센서의 측정 값
encoder1
Encoder 소개

Encoder

  • 회전의 양을 감지하는센서, 다른 말로 “각도 센서”
  • NXT Servo 모터에 내장되어 있음
nmotorencoder
nMotorEncoder[]
  • Encoder의 값이 저장되어 있는 변수
  • 값의 단위는 ‘도(Degree)’
  • 모터가 회전하면 그에 따라 각도 값이 누적
    • +방향 회전은 값이 증가, -방향 회전은 값이 감소
  • 이 변수에 값을 할당하려고 하면 0으로 초기화됨
nmotorencoder1
nMotorEncoder[] 사용 예시
  • 3번 줄: 사용하기 전에 nMotorEncoder[] 초기화
  • 4번 줄: 모터에 전원 넣기
  • 5번 줄: while문 조건 – nMotorEncoder[]가 360보다 작은 동안에 반복
  • 6번 줄: 루프를 탈출하면 모터 정지
  • 360도 이상이 되어야 비로소 모터 정지  360도를 약간 넘길 수 있다
nmotorencoder 1
nMotorEncoder[]를 이용한 회전의 잘못된 사용 예시 (1)
  • 모터의 파워 값은 음수(-30)이지만 while문에서 확인하는 encoder 값은 양수(+360)
    • 프로그램이 끝나지 않고 모터는 무한히 회전한다

> -360

으로 수정

nmotorencoder 2
nMotorEncoder[]를 이용한 회전의 잘못된 예 (2)
  • 첫 번째 회전은 정상적으로 360도 회전
  • 두 번째 회전 이전에 nMotorEncoder[]의 초기화 과정이 없음
  • nMotorEncoder[]의 값이 이미 360 이상인 상태이므로 12번 줄의 while 루프는 실행되지 않는다

nMotorEncoder[motorA] = 0;

명령 추가

nmotorencodertarget
nMotorEncoderTarget[]
  • NXT펌웨어가 자동으로 회전을 제어하도록 명령하는 변수
  • (1)이 변수에 회전할 각도를 할당한 뒤에 (2)모터 파워를 주면, 펌웨어가정확히 해당 각도만큼 모터를 회전시킨 뒤 정지한다
  • 장점
    • 모터 파워를 끄는 명령을 입력할 필요가 없다 (펌웨어가 자동으로 정지시킴)
    • nMotorEncoder만 사용하는 것보다 정확하게 목표한 각도만큼 회전시켜 준다
    • 모터가 목표 각도만큼 돌 때까지 기다릴 필요가 없다
  • 단점
    • 펌웨어의 제어 처리가 의도하지 않은 버그를 만들어낼 수 있다 (ex: 모터 과부하 시 오작동)
nmotorencodertarget 1
nMotorEncoderTarget[] 사용 예시 (1)
  • 2번 줄: nMotorEncoderTarget[]에 회전 각도의 절대값 입력
  • 3번 줄: 모터에 전원 넣기
  • 4번 줄: 펌웨어가 모터의 전원을 내릴 때까지 루프로 대기
    • nMotorRunState[]는 모터의 회전 상태가 기록된 변수로, runStateIdle(브레이크 완료), runStateHoldPosition(브레이크 도중), runStateRunnig(회전 도중)의 3가지 상태가 있다
  • 모터를 일부러 멈추는 명령(motor[motorA] = 0;) 이 없다는 것을 확인할 것
nmotorencodertarget 2
nMotorEncoderTarget[] 사용 예시 (2)
  • nMotorEncoderTarget[]에 값을 할당한 뒤 다른 작업을 연이어 수행하는 예 (여기서는 숫자 카운트)
  • 모터의 회전과 숫자 카운트가 동시에 실행된다
    • 모터는 목표한 각도에 도달하면 자동으로 멈춘다
  • 모터의 멈춤은 펌웨어에서 관리하므로 일부러 모터를 멈추는 명령을 넣을 필요가 없다
nmotorencodertarget 11
nMotorEncoderTarget[]의 잘못된 사용 (1)
  • nMotorEncoderTarget[]이 motor[]명령 다음에 있다
  • 모터가 무한히 회전한다
  • nMotorEncoderTarget[]  motor[] 순서로 명령이 실행되어야만 한다
nmotorencodertarget 21
nMotorEncoderTarget[]의 잘못된 사용 (2)

while(nMotorRunState[motorA] != runStateIdle) {}

추가

  • 첫 번째 회전에서 모터 회전이 끝날 때까지 기다리는 루프가 없다
  • 곧바로 두 번째 회전으로 넘어가, 두 번째 회전만을 하고 마친다
slide77
PID란?
  • 비례P 적분I 미분D 제어: Encoder값을 기반으로 모터 파워를 조절해 회전 속도를 일정하게 만드는 제어법
  • 현실의 모터는 같은 전압을 주어도 회전 속도가 다르다: 내부 부품 마찰 등의 이유
  • 따라서 소프트웨어적으로 적절하게 각 모터의 전압을 다르게 하여 목표하는 회전 속도를 달성한다 – 이것이 PID
  • NXT 펌웨어에 제어 기능이 이미 내장되어 있다 – 프로그래머가 직접 구현하지 않아도 된다
nmotorpidspeedctrl
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
모터의 Synch란?
  • 두 모터의 회전 속도를 비례하도록 연동해서 제어하는 기능
  • 사용자가 제어할 쪽을 Master 모터, Master의 동작에 연동될 쪽을 Slave 모터라 한다
  • 장점
    • 손쉽게 각종 회전과 직진 동작을 구현할 수 있다
  • 단점
    • 두 모터의 반응시간이 차이가 있어서 출발 또는 정지 시에 방향이 틀어지는 현상이 발생한다
nsyncedmotors
nSyncedMotors
  • Synch를 사용할 모터를 설정하는 변수
    • synchAB, synchAC, …, synchCB, synchNone의 값을 가진다
      • synchAB: Master 모터가 A, Slave 모터가 B
      • synchCB: Master 모터가 C, Slave 모터가 B
      • synchNone: Synch 해제
nsyncedturnratio
nSyncedTurnRatio
  • Master 모터 파워 대비 Slave 모터 파워를 설정하는 변수
  • -100 ~ +100 사이의 값을 가진다
  • motor[slave] = motor[master] * nSyncedTurnRatio;
    • nSyncTurnRatio = 100;  직진
    • nSyncTurnRatio = 1~99;  Curve 턴
    • nSyncTurnRatio = 0;  Swing 턴
    • nSyncTurnRatio = -100;  Point 턴
synch1
Synch 사용 예시
  • 2번 줄: nSyncedMotors로 Master와 Slave 모터 설정
  • 3번 줄: nSyncedTurnRatio로 파워 비율 설정
  • 4번 줄: Master 모터에 파워
  • 5번 줄: 1초 기다림
  • 6번 줄: Master 모터 정지 (Slave는 연동되므로 함께 정지됨)
slide84
배열이란?

배열 사용 전

배열 사용 후

  • 같은 자료형을 가진 다수의 변수의 묶음
  • 대괄호 내부의 숫자를 첨자 또는 인덱스라고 부름 (배열의 순번)
  • 첨자를 활용하여 대량의 자료를 효율적으로 처리할 수 있다
slide85
배열의 선언
  • 변수의 선언과 거의 동일하나, 변수명 옆에 대괄호 쌍을 쓰고 그 안에 배열의 크기를 입력한다
slide86
배열의 초기화
  • 배열의 인덱스는 0부터 시작한다
    • 10개짜리 변수의 인덱스는 0~9의 범위다
  • 배열을 선언하면서 동시에 초기화하고자 할 때는 중괄호를 이용한다
slide87
배열의 사용례:초음파 최소값 찾아내기
  • 0.1초 간격으로 1초 동안 수집한 초음파 값들 중 최소값을 찾아냄
  • 초음파 값이 불안정할 때 필터 역할을 할 수 있음
slide89
격자 사이를 어떻게 이동할까?
  • Encoder를 활용한 경로 주행
    • 미리 입력된 Encoder 값에 맞추어 직진과 90도 회전을 수행한다
    • 구현하기가 가장 쉽다
    • 지면과의 미끄러짐 등으로 오차가 누적되면서 갈수록 원래 경로에서 틀어진다
  • 라인 트레이싱을 활용한 주행
    • 1센서 라인 트레이싱을 활용해 격자 사이를 주행한다
    • 구현하기가 비교적 어렵다
    • 격자 줄 한쪽으로 치우쳐서 주행하게 된다
    • 오차에서 비교적 자유롭다
foward center
동작 나누기: foward와 center

center:

앞쪽 격자까지

foward:

앞쪽 격자의 물체 직전까지

slide91

drvStraight함수: 직진을 수행하는 함수

  • moveForward함수: forward에 해당하는 동작을 수행하는 함수
  • moveCenter함수: center에 해당하는 동작을 수행하는 함수
slide93
좌표 주행을 위한 3가지 정보
  • 3가지 정보: X좌표, Y좌표, 방향
    • X좌표, Y좌표는 위치를 알기 위한 정보
    • 방향은 로봇이 바라보는 방향을 알기 위한 정보
  • 이 3가지 정보를 활용해 경기장 상의 격자 위치를 좌표로 표현할 수 있다
slide94

(0, 0)

(4, 0)

(0, 8)

(4, 8)

ad