2013 5 25
This presentation is the property of its rightful owner.
Sponsored Links
1 / 99

2013. 5. 25. PowerPoint PPT Presentation


  • 171 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

2013. 5. 25.

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.


2013 5 25

- Index -

  • • 제 1장 LEGO MINDSTORMS Education

  • • 제 2장ROBOTC 설치 및 기본 로봇 조립

  • 제 3장 ROBOTC 프로그램의 이해

  • 제 4장 ROBOTC 기초 프로그래밍(모터 구동 프로그래밍)

  • 제 5장 ROBOTC 제어문(While, if, if–else)

  • 제 6장 라인 로봇 (Light Sensor 사용)


2013 5 25

  • 제 1장 LEGO MINDSTORMS Education-


2013 5 25

- NXT -

  • NXT는 LEGO MINDSTORMS Education Set의 컨트롤러

  • 프로그래밍이 가능한 인텔리전트 브릭

  • 주변환경을 인식하고, 인터페이스 할 수 있는

  • 다양한 센서와 전동기를 연결하여 데이터를 수집

  • 및 테스트 할 수 있는 최고의 장비


2013 5 25

RCX에 이은 LEGO사의 차세대 로봇 컨트롤러

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

입력포트 4 / 출력포트 3

USB / Bluetooth 통신 지원

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

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

- NXT-


2013 5 25

기존 LEGO RCX용

디바이스 호환

엔코더 내장형

서보 모터

충전식

리튬폴리머

배터리

터치 센서

그래픽 LCD 및

블루투스 무선통신 내장

USB 2.0 지원

사운드 센서

초음파 센서

라이트 센서

- 사용할 수 있는 Sensor/Actuator -


2013 5 25

Output

USB

LCD

Speaker

Input

- NXT의 외형 -

꺼진 상태 : 전원 켜기

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

좌측의 메뉴로 넘어감

우측의 메뉴로 넘어감

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


2013 5 25

  • 제 2장 ROBOTC 설치 및 기본 로봇 조립 –


2013 5 25

- ROBOTC 설치하기 -

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

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

인터넷이 되지 않을 경우

USB 메모리에서 설치파일을

받는다.


2013 5 25

- 교육용 로봇 조립 -

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

다음 로봇 조립


2013 5 25

  • 제 3장 ROBOTC 프로그램의 이해 -


2013 5 25

- ROBOTC 소개 -

• RobotC는 카네기멜론 대학에

서 만든 ROBOT 전용프로그래

밍언어로, LEGO Mindstorms

RCX와 NXT를 지원

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

의 문법 체계를 90% 동일

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

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

수 있음


2013 5 25

- Quick Start Guide-

• 홈페이지 주소

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


2013 5 25

- ROBOTC 실행하기 -

  • 바탕화면의 ICON을 클릭하여 실행

  • Activate ROBOTC for Mindstorms= 정품 인증 모드(시리얼 키를 입력 후 실행)

  • Evaluate ROBOTC for Mindstorms = 30일 평가판 모드(시리얼 키 없이 실행)


2013 5 25

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

  • Port A,C에 연결되어 있는 모터를 50의 파워로 1초간 전진하는 프로그램

  • main() 함수 : 프로그램 내에 오직 1개만 사용할 수 있는 특별한 함수로서

  • 바디({..} )에 작성된 내용을 시작/종료 한다.


2013 5 25

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

  • 설정


2013 5 25

- ROBOTC 메뉴[Edit] -

  • Undo Typing (Alt+Backspace/Ctrl+z)

  • : 실행취소, 되돌리기 기능

  • Can’t Redo (Ctrl+Z)

  • : 실행 취소된 것을 되돌리기 기능

  • Cut (Shift+Delete) : 잘라내기

  • Copy (Ctrl+C) : 복제하기

  • Paste (Ctrl+V) : 붙여넣기


2013 5 25

- ROBOTC 메뉴[View] -

  • • Source : 현재 사용 중인 프로그램

  • Function Explorer View : 함수 도움말 창

  • 실행

  • Compile Errors View : Error 내용 창

  • Font Increase (Ctrl +‘ +’) : 폰트 사이즈

  • 증가

  • • Font Decrease (Ctrl +‘ -’) : 폰트 사이즈

  • 감소


2013 5 25

- ROBOTC 메뉴[Robot] -

  • Download Program(F5) : 소스코드 컴파일 후 NXT 로봇으로 프로그램 다운로드

  • Compile Program(F7) : 소스코드 컴파일(프로그램 다운로드 안함)

  • Debugger : 프로그램의 실행 또는 단계적인 실행을 할 수 있다. Refresh Rate를Continuous를 클릭하면 NXT에 있는 모터 및 센서의 값들을 계속적인 모니터링이

  • 가능하다.


2013 5 25

- ROBOTC 메뉴[Robot]-3 -

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


2013 5 25

- ROBOTC Firmware download -

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


2013 5 25

- ROBOTC 프로그램 규칙 -

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

언어이다.

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

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

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

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

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

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

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

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

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

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


2013 5 25

- 변수 선언 유의 사항 -

변수 선언 시 유의 사항

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

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

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

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

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


2013 5 25

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

  • RobotC의 자료형은 프로그램에서 처리하고자 하는 자료의 형태를 의미

  • 자료형은 NXT 메로리 영역의 크기를 결정


2013 5 25

- 화면 출력 서식 -


2013 5 25

- ROBOTC 자료형(정수형)-

  • 정수형 변수

  • 정수형 변수는 RobotC프로그램 작성 중 가장 많이 사용하는 데이터형으로서 정수 형태의 자료를 표현하기에 적당하다. 선언 방법은 int라는 키워드(keyword)를 작성하고 뒤에 변수명을 사용하면 된다. %d는 10진수 출력을 의미한다.

  • nxtDisplayTextLine(LCD 위치, “출력 내용”, 출력 변수명) :

  • NXT LCD 창에 지정된 형식으로 변수 값을 출력(LCD의 글 위치는 0~7까지)

  • PlaySound(내장 사운드 명) : 미리 정해져 있는 내장 사운드를 재생


2013 5 25

- ROBOTC 자료형(실수형)-

  • 실수형 변수

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


2013 5 25

- ROBOTC 자료형(문자형)-

  • 문자형 변수

  • RobotC에서 문자형 변수는 8비트의 영역을 차지하고 있다. 주로 ASCII문자를 표현하기 위해서 사용한다.

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


2013 5 25

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

  • 지역변수(Local Variables)

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


2013 5 25

- ROBOTC 연산자(관계연산자)-


2013 5 25

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


2013 5 25

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

  • AND

  • 조건 값이 참이 아니므로 실행되지 않는다.

  • 11번 모터가 0.1초 동안 회전한다.

  • NOT


2013 5 25

- 제 4장 ROBOTC 기초 프로그래밍 -


2013 5 25

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

  • NXT 서보 모터 파워는 건전지의 양에 따른 상대적인 비율로 -100 ~ +100%까지

  • 파워 레벨을 조정 가능


2013 5 25

- 2초 동안 전진, 2초 동안 후진 -


2013 5 25

각 명령에 따른 회전 방식

Swing Turn

Point Turn

Curve Turn


2013 5 25

- 도전 과제 I-

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


2013 5 25

- 제 5장 ROBOTC 제어문 -


2013 5 25

if(조건식) 문장1

- if 제어문 함수 설명 -

  • 조건식이 ‘True’인지 ‘False’ 인지 판정

  • ‘False’일 경우에 대한 고려 없이 ‘True’ 일 경우 문장 1을 실행

  • 한 조건에 대해 여러 문장 실행 시 문장들을

  • { }으로 묶어서 사용


2013 5 25

- if 제어문 예제 -

  • random 함수 이용 난수값 생성(0-99)

  • if 함수를 이용하여 난수값이50보다 크면 1초간 직진

  • 직진 후 사운드 출력


2013 5 25

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

if(조건식) 문장1

else 문장2

  • 조건식이 ‘True’인지 ‘False’ 인지 판정

  • ‘True’ 일 경우 문장 1 실행

  • ‘False’ 일 경우 문장 2 실행

  • 한 조건식에 대해 ‘True’ 일 경우와 ‘False’ 일 경우를 나누어 제어할 때 사용


2013 5 25

- if-else 제어문 예제 -

  • random 함수 이용 난수값 생성(0-99)

  • if 함수 이용 값이 50보다 크면 우회전, 값이 같거나 작으면 좌회전

  • 조건 식 동작 후 사운드 출력


2013 5 25

- while 제어문 함수 설명-

while(조건식) 반복문장

  • 조건식이 ‘True’이면 반복문장 계속 실행

  • 그 후 검사하여 ‘False’이면 while 제어 문을 빠져 나와 다음 문장 실행

  • 조건 식에 ‘True’ 또는 ‘1’ 을 넣으면 무한반복


2013 5 25

- while 제어문 예제 -

  • 0.5초간 전진과 후진을 10번 동안 반복(0-9)

  • i++ 는 i = i + 1 을 의미 한다.

  • 단, while 문을 사용

  • 동작 후 사운드 출력


2013 5 25

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

do

반복문장

while(조건식)

  • 반복 문장을 일단 한번 실행 한 후 while 제어문의조건 식 검사

  • 조건 식의 값이 처음부터 거짓이라도 반복 문장은 한번 실행

  • 위의 내용을 빼고는 while과 동일


2013 5 25

- 제 6장 라인로봇(Light Sesnor) -


2013 5 25

- 빛 센서(Light Sensor) -

  • 전방에 간접조명용 붉은LED와 Photo Transistor가 내장되어 있으며, 명암을 구분

  • 지면과 5mm가 가장 적합

  • 조명의 켜짐 유무에 따라 액티브 모드/인액티브 모드를 가지고 있다.

  • 측정 값은 0~100%으로 표현


2013 5 25

- 문턱 값(Threshold) -

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


2013 5 25

- 빛 센서셀프 테스트 -

  • 빛 센서를 3번에 연결

  • NXT를 켜고 View 를 선택 ( )

  • 3. 반사광 측정하기

  • - 반사광(Reflected light) 아이콘을 선택

  • - 포트 3을 선택

  • 주변광 측정하기

  • - 주변광(Ambient light) 아이콘을 선택

  • - 포트 3을 선택


2013 5 25

- 빛 센서 설정하기 -

  • Port S3의 Name에 light를 입력한다.

  • (편의상 light라고 입력하였으나 다른 이름도 가능하다.)


2013 5 25

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

  • int 변수 이름 : 정수를 저장하기 위해 변수를 선언

  • 이름은 문자나 ‘_’로만 시작 가능

  • int light_value : 정수값을 저장하기 위해 light_value란 변수를

  • 사용하겠다고 선언


2013 5 25

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

  • #define THRESHOLD 50(매크로 상수):

  • THRESHOLD라고 쓰인 모든 부분을 50으로 치환하여 실행

  • break; : 문을 만나면 반복되는 블록의 마지막에서 반복문

  • 을 이탈


2013 5 25

- 1센서 라인 트레이싱주행법 -

도착

출발


2013 5 25

- 1센서 라인 트레이싱 로봇(왼쪽 경계) -


2013 5 25

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

  • 빛센서 두 개를 사용하는 라인로봇을 위해 아래와 같이 설정한다.

  • - 왼쪽 빛 센서 설정 : 포트2, left_light, Light Active

  • - 오른쪽 빛 센서 설정 : 포트3, right_light, Light Active


2013 5 25

- 2센서 라인트레이싱주행법 -

1

도착

3

출발


2013 5 25

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

  • 빛 센서 2개를 사용한 라

  • 인트레이서

  • 모터와 빛센서는 각각 움

  • 직인다.

  • StartTask(태스크명);

  • Task 형태로 호출된 함수를 호출하여 멀티 태스크 형태로 동시에 실행시킨다.

  • 최대 255개 까지 가능

  • 종료는 StopTask(태스크명); 이나 StopAllTask();를 사용한다.

  • 교차로 통과 불가


2013 5 25

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


2013 5 25

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


2013 5 25

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

  • 빛센서2개로 라인트레이스

  • 두 빛 센서의 상태 조합을 통해 로봇이 동작

  • 교차로 통과하면서 교차점 개수 카운트


2013 5 25

- 도전 과제 Ⅲ-


2013 5 25

컬러 센서의 이용


Color sensor

컬러 센서 (Color Sensor)

  • 빨간색, 파란색, 초록색의 삼원색을 측정할 수 있는 센서

  • 주변광 측정 모드, 단색 모드, 컬러 모드 제공

  • 미리 정의된 색을 기준으로 감지하거나 raw 값을 읽을 수 있음

    • 미리 정의된 색: 검은색(1), 파란색(2), 초록색(3), 노란색(4), 빨간색(5), 흰색(6)

    • raw값: 가공되지 않은 센서의 측정 값


Encoder

Encoder 사용하기


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) {}

추가

  • 첫 번째 회전에서 모터 회전이 끝날 때까지 기다리는 루프가 없다

  • 곧바로 두 번째 회전으로 넘어가, 두 번째 회전만을 하고 마친다


Pid synch

내장 PID와 Synch 기능


2013 5 25

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는 연동되므로 함께 정지됨)


2013 5 25

배열


2013 5 25

배열이란?

배열 사용 전

배열 사용 후

  • 같은 자료형을 가진 다수의 변수의 묶음

  • 대괄호 내부의 숫자를 첨자 또는 인덱스라고 부름 (배열의 순번)

  • 첨자를 활용하여 대량의 자료를 효율적으로 처리할 수 있다


2013 5 25

배열의 선언

  • 변수의 선언과 거의 동일하나, 변수명 옆에 대괄호 쌍을 쓰고 그 안에 배열의 크기를 입력한다


2013 5 25

배열의 초기화

  • 배열의 인덱스는 0부터 시작한다

    • 10개짜리 변수의 인덱스는 0~9의 범위다

  • 배열을 선언하면서 동시에 초기화하고자 할 때는 중괄호를 이용한다


2013 5 25

배열의 사용례:초음파 최소값 찾아내기

  • 0.1초 간격으로 1초 동안 수집한 초음파 값들 중 최소값을 찾아냄

  • 초음파 값이 불안정할 때 필터 역할을 할 수 있음


2013 5 25

격자 사이의 이동


2013 5 25

격자 사이를 어떻게 이동할까?

  • Encoder를 활용한 경로 주행

    • 미리 입력된 Encoder 값에 맞추어 직진과 90도 회전을 수행한다

    • 구현하기가 가장 쉽다

    • 지면과의 미끄러짐 등으로 오차가 누적되면서 갈수록 원래 경로에서 틀어진다

  • 라인 트레이싱을 활용한 주행

    • 1센서 라인 트레이싱을 활용해 격자 사이를 주행한다

    • 구현하기가 비교적 어렵다

    • 격자 줄 한쪽으로 치우쳐서 주행하게 된다

    • 오차에서 비교적 자유롭다


Foward center

동작 나누기: foward와 center

center:

앞쪽 격자까지

foward:

앞쪽 격자의 물체 직전까지


2013 5 25

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

  • moveForward함수: forward에 해당하는 동작을 수행하는 함수

  • moveCenter함수: center에 해당하는 동작을 수행하는 함수


2013 5 25

좌표 주행 알고리즘


2013 5 25

좌표 주행을 위한 3가지 정보

  • 3가지 정보: X좌표, Y좌표, 방향

    • X좌표, Y좌표는 위치를 알기 위한 정보

    • 방향은 로봇이 바라보는 방향을 알기 위한 정보

  • 이 3가지 정보를 활용해 경기장 상의 격자 위치를 좌표로 표현할 수 있다


2013 5 25

(0, 0)

(4, 0)

(0, 8)

(4, 8)


2013 5 25

- Q & A -

???


2013 5 25

감사합니다


  • Login