슬라이드 1

Download Report

Transcript 슬라이드 1

활용하기
- NXT를 활용한 ROBOLAB 기초/중급 EASYTECH
R&D
Index - 1/3
이지테크 소개
1. LEGO & NXT 소개
2. ROBOLAB 소개 및 기본 사용법
3. 로봇의 기본 구동
4. 터치 센서의 활용
5. 빛 센서의 활용
6. 사운드 센서의 활용
7. 초음파 센서의 활용
이지테크 소개
Education&
Experiment
Solution
이지테크 4E 철학
1. LEGO & NXT
레고를 응용한 다양성
• 레고의 기계공학적 특징은 상용화된 완구 모델에서도 나타나고 있음
• X-Y축 플로터 시스템이나 수동식 8륜 공압 크레인과 같은 복잡한 기
계적 구조를 가진 모델도 레고 부품들을 이용하여 구성되어 판매됨.
1. LEGO & NXT
NXT 란 무엇인가?
•
RCX에 이은 LEGO사의 차세대 로봇
트롤러
컨
•
32bit ARM7 Processor / 256k Flash /
64k Ram
•
입력포트 4 / 출력포트 3
•
USB / Bluetooth 통신 지원
•
60*100 Graphic LCD / 스피커 / 충전식
배터리 지원
•
엔코더 내장 모터 / 초음파 / 사운드 /
터치 / 라이트 센서
1. LEGO & NXT
사용할 수 있는 Sensor / Actuator
기존 LEGO RCX용
디바이스 호환
엔코더 내장형
서보 모터
충전식
리튬폴리머
배터리
터치 센서
그래픽 LCD 및
블루투스 무선통신 내장
USB 2.0 지원
사운드 센서
라이트 센서
초음파 센서
1. LEGO & NXT
NXT 의 외형
Output
꺼진 상태 : 전원 켜기
켜진 상태 : 가운데 메뉴 실행
USB
LCD
좌측의 메뉴로 넘어감
Speaker
우측의 메뉴로 넘어감
취소 / 최상위 메뉴에서 끄기
Input
2. ROBOLAB 소개 및 기본사용법
LEGO Mindstorms Education
• LEGO MINDSTORMS NXT는 쉽게 접근할
수 있는 참신한 하드웨어 구성과 최신 그
래픽 기반 프로그래밍 기술이 결합해 로보
틱스 교육의 편이성 및 직관성을 향상시킨
LEGO Education 제품이다.
• 계측 및 자동화 산업에서 널리 사용되고
있는 그래픽 기반의 프로그래밍 언어
LabVIEW를 기반으로 제작된 ROBOLAB
Software는 다양한 사용자 인터페이스 환
경을 제공하며, 대화식 구조를 이용하여 프
로그래밍에 쉽게 접근할 수 있다.
2. ROBOLAB 소개 및 기본사용법
Download Firmware
1. ADMINISTRATOR 클릭
2. SELECT COM PORT 아이콘 클릭
3. 아래 화면에서 NXT 이름을 찾아 클릭
4. DOWNLOAD FIRMWARE 아이콘 클릭
2. ROBOLAB 소개 및 기본사용법
Download Firmware
• 펌웨어 다운로드(PC의
운영체제 설치의 개념)
• 약 20여초 소요됨
• 펌웨어가 설치된 후 사용
자는 자신의 프로그램
입력 가능
• 주의! 펌웨어 다운로드 중 연결이 끊어질 경우 NXT가 Boot 모드로
전환됨. 이 때 NXT는 화면이 뜨지 않고 미세한 beep 소리를 출력하
며, USB 연결시 ‘NXT_USB#1’ 과 같은 이름으로 인식됨. 이 경우 다
시 펌웨어 다운로드를 수행하면 NXT가 재부팅 되면서 사용 가능
2. ROBOLAB 소개 및 기본사용법
ROBOLAB 프로그램 창 (Pilot)
시작
1. PROGRAMMER 클릭
종료
프로그램 흐름
다운로드
2. Pilot 1 더블클릭
2. ROBOLAB 소개 및 기본사용법
Pilot 프로그램
• 출력
- Port : A, B, C
- 오른쪽 화살표 : Forward (정회전)
- 왼쪽 화살표 : Reverse (역회전)
• Wait For (대기 함수)
- 지정된 시간(sec) 동안 대기
- 센서 동작 대기(예 : 터치센서 눌림 대기)
2. ROBOLAB 소개 및 기본사용법
Pilot 프로그램 예제(Pilot1)
• 프로그램 시작 - A 모터 정회전 - 2초 대기 - 프로그램 종료
2. ROBOLAB 소개 및 기본사용법
Pilot 프로그램 예제(Pilot2)
• 프로그램 시작 - A,C 모터 역회전 - 4초 대기- 프로그램 종료
2. ROBOLAB 소개 및 기본사용법
ROBOLAB 프로그램 창 (Inventor)
Front Panel
(User Interface)
Functions
Palette
Block Diagram
2. ROBOLAB 소개 및 기본사용법
ROBOLAB 사용법 (도구팔레트)
• VI 선택, 배치, 드래그 등에 사용
(단축키 - Space Key, Tap Key)
• VI와 VI간 wiring에 사용
(단축키 - Space Key, Tap Key)
• 텍스트 입력 시 (센서 값, 파일명)
(단축키 – Tap Key)
2. ROBOLAB 소개 및 기본사용법
ROBOLAB 사용법 (VI Wiring)
• 분홍 : 프로그램의 흐름
• 녹색 : 입/출력 포트
• 청색 : 수치값(정수)
• 황색 : 수치값(유리수)
• 갈색 : 컨테이너(변수)
2. ROBOLAB 소개 및 기본사용법
기본프로그램 작성
NXT Command
Wait For
A 모터 전진 후 C 모터 전진, 1초 후 정지
2. ROBOLAB 소개 및 기본사용법
ROBOLAB 사용법 (함수 팔레트)
• 커서를 위에 올렸을 때 돌출되는
그림은 함수 그룹
• 그룹 명에 관계되는 함수들이
내부에 나열
• 그룹 내에 또 다른 그룹이 존재
하는 경우도 있다
(예 : Structures - Forks)
2. ROBOLAB 소개 및 기본사용법
ROBOLAB 사용법 (에러 리스트)
• 다운로드 화살표가 깨져있을 때
클릭하면 에러리스트가 출력됨.
• 중간에서 에러내용을 확인할 수
있고 클릭하면 에러로 이동함.
2. ROBOLAB 소개 및 기본사용법
프로그램 다운로드 오류 상황1
• 다운로드 시 이름을 미
리 정하지 않았을 경우
(Select Com Port에서
AUTODETECT) PC에서
자동 탐색을 통해서 대
상 NXT / RCX를 찾음
• NXT가 제대로 연결된 경우 우측 NXT 아이콘을 클릭하면
바로 다운로드가 진행됨
2. ROBOLAB 소개 및 기본사용법
프로그램 다운로드 오류 상황2
• 다운로드 진행표시. 100%완료되
면 NXT에서 멜로디 출력
• NXT의 전원이 Off 상태이거나
다운로드 케이블이 정상적으로
연결되지 않은 경우 등, 통신이
불가능한 경우 우측 윈도우가
떠서 상태 보고
2. ROBOLAB 소개 및 기본사용법
ROBOLAB 사용법 (Help)
• Help 메뉴를 통해
ROBOLAB 함수 설명을
볼 수 있음
- 단축키 : Ctrl + H
- 동작 설명 (예제)
- Modifiers(추가 정보)
- Default에 관한 정보
3. 로봇의 기본 구동
NXT 서보 모터의 특징
• 엔코더 내장 DC Geard 모터
(종전의 모터 대비 6~7배
Torque)
• 16.7N.cm / 170rpm / 0.6A
(2.25N.cm / 340rpm /0.9A)
• Stalled Torque 50N.cm / 2A
(5.5N.cm / 340mA)
• 엔코더 해상도 about 1’
3. 로봇의 기본 구동
모터 구동 방향
정회전
역회전
(시계방향)
(시계반대방향)
3. 로봇의 기본 구동
정지, 시간 대기
• Wait for
– wait for ( )sec
– N초간 대기
• 정지 VI
– 각 포트별
– 전체포트 정지
– 지정포트 정지
3. 로봇의 기본 구동
기본 전 후진 프로그래밍
전진 1초 후 정지
basic1
Wait For
NXT Command
basic2
전진 1초 후
후진 1초 후
정지
3. 로봇의 기본 구동
Modifiers (추가 정보)
B 출력 포트에 연결된
모터 정회전
1번 입력 포트에 연결된
터치센서가 눌림을 기다림
Modifiers (추가 정보)
1의 모터 파워로 B 출력
포트에 연결된 모터 정회전
해당 입력 포트에 연결된
센서의 값
Ex) 사운드센서 도전과제
3. 로봇의 기본 구동
각 명령에 따른 회전 방식
Swing Turn
Point Turn
Curve Turn
4. 터치 센서의 활용
터치 센서
• 터치 센서는 황색 스위치 부분의
눌림을 감지
• 키보드 키 / 마우스 버튼과
동일한 개념
• 전방의 장애물에 대한 물리적
접촉을 통한 인식
4. 터치 센서의 활용
터치센서의 동작 - View
1. 터치센서를 1번에 연결
2. NXT를 켜고 View 를 선택 (
3.
)
4. 터치센서 스위치를 눌러보며 값을 확인한다.
회로 개방
대기상태
회로 폐쇄
전류의 흐름
전압 측정
안눌림
눌림
4. 터치 센서의 활용
터치센서 Wait for 함수
• 터치센서는 ‘눌림’ 과 ‘떨어짐’
두 가지 동작으로 나뉜다.
• 센서 입력을 위해 Input 에
녹색 포트 Modifier 를 입력한다.
• 이 때 같은 색의 출력 포트
Modifier 와 혼동하지 않도록
주의
4. 터치 센서의 활용
터치 센서 활용 예제(Wait for)
• 프로그램 시작 - A, C 정회전 - 터치 센서
눌림 대기 - 정지 - 프로그램 종료
4. 터치 센서의 활용
제한된 반복 (Loop)
-프로그램의 일정한 구간을 반복
- 반복횟수에 제한 가능
- 반복 시작점에는 반복 조건을
표시한 Start Loop를 사용
- 터치, 빛, 사운드, 초음파 센서
Loop 함수 사용 가능
- 반드시 End of Loop 사용
- 수행조건이 만족되는 동안 Loop
안의 프로그램을 수행
4. 터치 센서의 활용
터치 센서 활용 예제(Loop)
• 두 프로그램은 어떤 차이가 있을까?
5. 빛 센서의 활용
빛 센서
• 전방에 간접조명용 붉은LED와 Photo
Transistor가 내장되어 있다.
• 밝고 어두움의 구분, 실내에서의 광도 감
지 및 채색된 표면의 광도를 감지한다.
사람의 눈이 인식하는 색
빛 센서가 인식하는 색
5. 빛 센서의 활용
빛 센서의 동작 - View
1. 빛 센서를 3번에 연결
2. NXT를 켜고 View 를 선택 (
3.
)
4. 각각의 모드에서 색을 바꾸며 빛 값을 확인한다.
5. 빛 센서의 활용
빛 센서 Wait for 함수
NXT Wait for Light
지정한 값보다 밝아 지
기를 기다린다.
NXT Wait for Dark
지정한 값보다 어두워
지기를 기다린다.
NXT Wait for Brighter
지정한 값만큼 더 밝아지
길 기다린다.
NXT Wait for Darker
지정한 값만큼 더 어두워
지기를 기다린다.
5. 빛 센서의 활용
빛 센서의 기준값 설정
전류의 흐름
LOW
어둡다
밝다
1.
메뉴에서 View 선택
2.
Reflected Light 선택
3.
빛 센서가 연결된 포트를 선택
4.
빛 센서에 적색 불이 들어온 것
을 확인하고, LCD에 출력된 %
전류의 흐름
값을 기록
HIGH
5.
기준값 계산
기준 값 : 최소치와 최대치의 중간값
5. 빛 센서의 활용
빛 센서 활용 예제 (Wait for)
• 프로그램 시작 - A, C 정회전 - 검정 라인인식 대기 정지 - 프로그램 종료
5. 빛 센서의 활용
빛 센서 도전 과제(Wait for)
• 첫 번째 검정라인 통과 - 두 번째 검정라인 인식
하면 정지
STOP
5. 빛 센서의 활용
빛 센서 도전 과제(Wait for)
• 첫 번째 검정라인 통과 - 두 번째 검정라인 인식 하면 정지
5. 빛 센서의 활용
조건 분기 VI, Fork 함수
• Fork는 각각 할당된 조건을 검사하여
프로그램의 흐름을 나누는 역할을 한다.
• Fork 분기를 만든 경우 Fork Merge로 두 개
의 흐름을 묶어 주어야 한다. Fork는 위쪽 분기
가 True, 아래쪽이 False 로 할당되어 있다.
5. 빛 센서의 활용
빛 센서 활용 예제 (Fork)
• 프로그램 시작 후
측정값 > 기준값 이면 멜로디
측정값 < 기준값 이면 A 모터 2초 전진
5. 빛 센서의 활용
흐름 제어용 VI, Jump / Land
Jump
Land
• Jump 와 Land 는 각각 같은 색
을 가진 것들끼리 짝을 이룬다.
• 프로그램은 Jump 를 만나면
같은 색의 Land 로 이동한다
• 하얀색 Jump 와 Land 는 각각
번호를 부여하여 사용할 수 있다.
5. 빛 센서의 활용
Jump / Land 의 이해
Jump 가 먼저 들어갈
경우 구간을 건너뛰는
기능을 한다.
Land 가 먼저 들어갈
경우 구간을 반복하는
기능을 한다.
…
5. 빛 센서의 활용
출발
1센서 주행법
도착
5. 빛 센서의 활용
라인트레이서의 Flow Chart
시작
빛 센서 값이
기준값 보다 큰가?
아니오
예
우회전
좌회전
5. 빛 센서의 활용
1센서 지그재그 프로그래밍
6. 사운드 센서의 활용
사운드 센서
• 사운드 센서는 데시벨 레벨
즉, 소리의 크기 또는 강도를 감지한다.
• dB : 모든 실제 소리.
즉, 인간이 듣기에 너무 높거나 낮은 소리 포함
• dBA : 사람의 귀가 실제로 들을 수 있는 소리
<음원이 센서에서 1m거리에 있다고 가정할 때>
음향 백분율(%)
소리의 크기
4~5%
조용한 거실
5~10%
멀리서 이야기하는 소리
10~13%
대화, 잔잔한 음악
30~100%
소리를 지르거나 시끄러운 음악소리
6. 사운드 센서의 활용
사운드센서의 동작 - View
1. 사운드센서를 2번에 연결
2. NXT를 켜고 View 를 선택 (
3.
)
4. 입김을 불거나 소리크기를 변형하면서 Sound 크기를 확
인한다.
6. 사운드 센서의 활용
Advanced Output Control - Motor Power
출력 모터 포트
파워
100단계, 부호로 방향 결정
• 0 은 정지 상태
• 1 ~ 100까지는 정회전
• -1 ~ -100까지는 역회전
• Motor Power 활용 예제
6. 사운드 센서의 활용
사운드 센서 도전과제
• 소리 크기에 따른 가감속
- 사운드 센서의 측정값을 모터 파워로 사용하여 소리 크기
변화에 따라 모터 회전 속도가 변화하도록 해본다.
(Value of Port 사용)
7. 초음파 센서의 활용
초음파 센서
•
•
•
•
초음파 센서는 박쥐들이 사용하는 것과 같은
과학적 원리를 기반으로, 음파가 어떠한 물체
에 부딪쳐서 되돌아오는 시간을 환산하여 거
리를 계산한다.
Cm 와 Inch 단위로 값을 측정한다.
측정 가능 범위 0~250cm, 오차범위 : ± 3cm
크고 표면이 단단한 물체는 정확히 측정되나,
부드러운 천이나 공처럼 표면이 굽은 물체는
센서가 감지하기 어렵다.
• 초음파를 이용하기 때문에 센서의 측정
범위는 왼편과 같은 Corn 형태가 된다.
• 옆 또는 위, 아래에 있는 장애물도 인식
하기 때문에 사용하기에 까다롭다.
7. 초음파 센서의 활용
초음파센서의 동작 - View
1. 초음파센서를 4번에 연결
2. NXT를 켜고 View 를 선택 (
3.
)
4. 터치센서 스위치를 눌러보며 값을 확인한다.
7. 초음파 센서의 활용
초음파 센서 Wait for 함수
• NXT Forward Distance X
지정 값(cm) 보다 멀어지기를 대기
• NXT Reverse Distance X
지정 값(cm) 보다 가까워 지기를 대기
7. 초음파 센서의 활용
초음파 센서 활용 예제(Wait for)
• 프로그램 시작 - A, C 모터 정회전 - 30cm 보다
가까워 지기 대기 - 정지 - 프로그램 종료
7. 초음파 센서의 활용
초음파 센서 도전 과제
• 초음파 센서 이용, 전방 물체와 거리를 일정하게 유지하
도록 프로그램 해본다.
• Fork 함수를 사용
질의 / 응답 시간
???
Index - 2/3
8. 컨테이너의 활용
9. 서보모터의 활용
10. 멀티 태스킹(Task Split)
11. Synch Motor Control 활용
12. 도전과제
- 사운드 가속 로봇
- 다양한 라인트레이싱
- 중첩분기의 활용
13. 서브루틴 활용
8. 컨테이너 함수의 활용
Container 함수
Container 의 특성
- 통상적인 프로그래밍 언어의 ‘변수’와 동일
- 단일 수치 값이나 센서의 출력 값 저장 가능
- 사칙연산을 포함한 연산자 사용 가능
- 사용자는 Container 를 이용해 로봇이 ‘기억’
하고 ‘판단’ 할 수 있도록 프로그램을 구성 가
능
8. 컨테이너 함수의 활용
Container 함수의 활용
- 여기에 저장된 변수는 사용자가
임의로 수정 / 접근이 가능
- Empty Container 함수로 ‘초기화’
가능
- 컨테이너 관련 VI들은 센서 VI들이
Port 정보를 필요로 하는 것처럼 컨테
이너 정보를 요구
- Modifier 를 이용해 컨테이너 정보를
주면 이 VI들은 주어진 수치 값을 이용
해서 컨테이너에 값을 채우거나 연산
하는 동작을 수행
8. 컨테이너 함수의 활용
Container 관련 Modifier
C 모터의 엔코더 값을 Red Container 에 저장
2번 빛 센서의 입력 받은 값을 3번 Container 에 저장
3
- 컨테이너 역시 Wait for / Fork / Loop 등의 모든 기능을 사용할 수 있다.
8. 컨테이너 함수의 활용
Container 함수 사용법
5
Red 컨테이너에 단일
수치 값 5를 저장한다
=5
Container Value
Red 컨테이너에 저장된 값
8. 컨테이너 함수의 활용
Container 함수 활용 예제
1
2
3
4
5
6
7
:
:
:
:
:
:
:
적색 초기화
청색 초기화
적색에 5 기록
청색에 1 기록
청색에 ‘상수 2’ 더하기
적색에 ‘청색의 값’ 빼기
LCD출력 함수에 ‘적색의 값’ 기록
8. 컨테이너 함수의 활용
초음파 거리 유지
• 초음파 센서를 이용해서
컨테이너에 저장된
값만큼 벽과 거리를
유지한 뒤 멈추도록 한다.
실제로 컨테이너의 값의
변화에 따라 벽과의 거리도
변화하는지 확인해본다.
8. 컨테이너 함수의 활용
초음파 거리 유지
??
기준 값
• ‘Fill Container’를 통해 Red Container에 들어
가는 값을 변화 시켜 벽과의 거리를 조정해본다.
9. 서보모터의 활용
엔코더의 동작 - View
1. 모터를 A번에 연결
2. NXT를 켜고 View 를 선택 (
3.
)
4. 모터를 정 / 역회전 시키며 값을 확인한다.
9. 서보모터의 활용
NXT Wait for Rotation
• 설정된 각도까지 Encoder 값
이 도달하는 것을 대기
• 값을
출된
키고
것의
누적시키는 기능과, 호
시점부터 값을 초기화시
Encoder 값을 검사하는
두 가지 종류가 있음
9. 서보모터의 활용
NXT Wait for Rotation 예제
• 위 프로그램을 작성해보고 각각 어떻게 동작하
는지 확인해본다.
9. 서보모터의 활용
Reset의 역할
• ‘Zero Angle Sensor’ VI를 사용하여 측정된 회전
센서의 데이터 값을 초기화 시킬 수 있다.
9. 서보모터의 활용
모터 제어 함수 동작 오류
모터의 회전 방향에 따라 대기 함수의
기준 값 부호를 설정해 주어야 한다
9. 서보모터의 활용
Encoder를 통한 이동거리 예측
• 바퀴의 지름을 알면 회전센서를 통해 로봇의 이
동량을 예측할 수 있다.
• LEGO 타이어는 측면에 바퀴 지름과 폭이 표기됨
9. 서보모터의 활용
서보모터 활용 도전과제
• 로봇이 정확히 10cm 전진하도록 한다.(이론 값 이용)
바퀴의 지름
바퀴의 폭
10. 멀티 태스킹 Task Split
Task 함수
-Task 함수는 프로그램의 흐름을 나누어 동시에 두 개의 프로그램 진행할
수 있게 한다.
- Task로 분기된 두 개의 작업은 서로 다른 작업에 간섭하지 않고 독립적
으로 동작한다.
- 여러분은 Task 를 이용해서 동시에 최대 10개의 독립된 작업을 수행하
도록 만들 수 있다.
-두 작업은 하나의 NXT를 공유한다. 그러므로 두 개의 태스크가 한 개의
센서 값을 읽고 판단하는 것 가능하나 두 개의 태스크가 한 개의 모터를
제어하는 것은 오류를 일으키게 된다.
10. 멀티 태스킹 Task Split
Task 함수 사용시 주의사항
-두 개의 작업은 서로 독립
- Task 에서 다른 Task 로 넘어
갈 수 없다.
- Task 중간에서 Task 시작점
이전으로 돌아갈 수도 없다.
10. 멀티 태스킹 Task Split
Task 함수 도전과제
• 터치 센서 두 개를 이용하여 로봇을 조종할 수 있도
록 해본다. (Task 함수 이용)
1,3번 눌림–전진,1번 눌림-우회전, 3번 눌림-좌회전
11. Synch Motor Control 활용
모터 동기화 VI -Synch Motor Control
• AB,BC 또는 AC 형식으로 두
모터의 회전을 동기화 시킨다.
• 동기화 된 모터는 컨트롤 모터
에 회전에 따라 움직인다.
11. Synch Motor Control 활용
싱크로 비율에 따른 동작
• 로봇의 동작을 예상해 보자
12. 도전 과제 –사운드 가속 로봇
사운드 가속 로봇
• 사운드센서를 이용해서 소리의
음량에 따라서 속도가 바뀌는 로봇
• 변수 개념을 도입하여 로봇의 센서값
기록 및 활용기법을 볼 수 있다.
12. 도전 과제 – 사운드 가속 로봇
사운드 가속 로봇 Flow Chart
시작
사운드 값 측정
메모리 기억 값 모터
파워로 설정
사운드 값 메모리에
기억
모터 구동
12. 도전 과제 – 사운드 가속 로봇
사운드 가속 로봇 프로그래밍
12. 도전 과제 – 다양한 라인트레이싱
2센서 라인트레이싱 주행법
1
3
출발
도착
12. 도전 과제 – 다양한 라인트레이싱
2센서 라인트레이싱 Flow Chart
시작
예
1번 빛센서 값
기준값보다 큰가?
3번 빛센서 값
기준값보다 큰가?
아니오
3번 빛센서 값
기준값보다 큰가?
아니오
예
예
전진
아니오
좌회전
우회전
기타
12. 도전 과제 – 다양한 라인트레이싱
2센서 라인트레이싱 프로그래밍
12. 도전 과제 – 다양한 라인트레이싱
2센서 라인카운트 FlowChart
12. 도전 과제 – 다양한 라인트레이싱
교차형 트랙예제
1
1
0
교차점 컨
1번째
1
2번째
2
3번째
2
1
1
2
끝
1
12. 도전 과제 – 다양한 라인트레이싱
교차형 트랙 프로그래밍
12. 도전 과제 – 다양한 라인트레이싱
중첩 분기 응용 예제
20cm
벽
• 1센서 라인 트레이스 실행 중 전방의 초음파
센서가 벽을 인식하면 180도 회전하여 벽과 부딪
치지 않고 계속 주행 할 수 있도록 해야 한다.
• 1센서 라인트레이스 프로그램의 분기문에 앞서
초음파 센서 분기문을 사용할 수있다.
12. 도전 과제 – 다양한 라인트레이싱
센서 중첩 분기 예제 Flow Chart
12. 도전 과제 – 다양한 라인트레이싱
센서 중첩 분기 프로그래밍
13. 서브루틴 활용
Subroutine 함수
• Subroutine은 프로그램의 모듈화를 위한 기능
• 함수를 선언해 주고, 메인 프로그램에서 선언한
함수를 호출하는 구조를 이해할 수 있다.
13. 서브루틴 활용
Subroutine 응용 1
•Subroutine은 프로그램 안에서 구현되는 일종의 약속으로 프로그램의 구조
화를 위한 기법이다.
• 아래 프로그램은 전진과 회전 동작을 서브루틴으로 선언해 두고 호출하는
방식을 보여주고 있다.
•Create Subroutine을 사용하여 프로그램 모듈에 번호를 부여하고 Run
Subroutine을 사용하여 해당 번호의 프로그램 모듈을 실행할 수 있다.
• 전진 1과 회전 2루틴의 호출을 통해 로봇은 각 동작을 실행하게 된다.
13. 서브루틴 활용
Subroutine 응용 2
• 서브루틴의 다른 활용으로 컨테이너를 연동시켜 서브 루틴이 ‘정적인’ 명
령 집합이 아닌 ‘동적인’ 명령을 수행할 수 있도록 구현하고 있다. 컨테이너
값을 통해 이 서브루틴은 다양한 거리 제어에 활용할 수 있다.
센서별 활용예제
1. Bugbot
- 터치센서 2개를 로봇의 좌우에 설치한다.
- 왼쪽 터치센서가 충돌하면 오른쪽으로 회피
- 오른쪽 터치센서가 충돌하면 왼쪽으로 회피
- 장애물과 충돌할 때의 동작에 대한 전략필요
Touch Sensor
2. 유선조종 리모컨 자동차
- 터치센서 2개를 사용하여 유선조종 가능한
자동차를 만든다.
- 터치센서 2개를 사용하여 사용하기 편안한
리모컨을 제작한다.
센서별 활용예제
1. 10초간 라인 트레이싱
- 중첩포크를 활용하여 동작의 제한을 준다.
- Timer 관련 VI를 사용한다.
- 제한을 줄 수 있는 다양한 방법을 찾아본다.
Light Sensor
2. 빛 센서 값의 차이를 활용한
2센서 라인 트레이싱
- 두 빛 센서 값의 차이를 적당한 연산을 하여 최
적의 라인 트레이싱 속도를 찾는다.
- 로봇에 따라 적당한 속도가 다를 수 있다.
센서별 활용예제
1. 박수소리에 맞춰 동작하는 로봇
- 터치센서를 누른 뒤 4초(임의의 시간) 동
안 박수 1회 – 전진, 2회 – 우회전, 3회 – 좌
회전 4회 – 후진하도록 프로그래밍 한다.
- 박수를 구별하기 위해 소리가 커졌다가
작아지는 때를 1회로 체크해야 한다.
Sound Sensor
2. 입김 드리블 로봇
- 로봇 전면에 공을 두고 목적지까지 공을
몰고 가도록 한다.
- 사운드 센서 2개를 이용하여 입김을 부는
센서에 따라서 로봇의 동작이 달라지도록
한다.
센서별 활용예제
1. 캔을 찾아라
- 80cm 범위 어딘가에 캔을 위치시키고, 로봇
이 캔 앞에 찾아가 멈출 수 있도록 한다.
-가장 빨리 캔을 찾을 수 있는 프로그램을 다양
한 방법으로 작성하도록 한다.
Ultrasonic
Sensor
2. 장애물 사이를 통과하기
- 일정간격에 규격 사이즈의 장애물을 두고 초
음파센서를 활용하여 중간을 찾아내 통과 하도
록 프로그램을 작성한다.
- 컨테이너를 사용한 연산이 필요하다.
질의 / 응답 시간
???
Index - 3/3
14. ROBOLAB 초급 함수 복습
15. NXT Command 모터제어
16. 다양한 2센서 라인트레이싱
17. 도전과제 - 중첩분기
18. 컨테이너 고급활용
19. Investigator
20. 도전과제
- 임베디드 공모전 1,2단계
14. ROBOLAB 초급 함수 복습
모터 구동 및 Modifiers (추가 정보)
B 출력 포트에 연결된
모터 정회전
해당 입력 포트에 연결된
센서의 값
Ex) 사운드센서 도전과제
14. ROBOLAB 초급 함수 복습
Advanced Output Control - Motor Power
출력 모터 포트
파워
100단계, 부호로 방향 결정
• 0 은 정지 상태
• 1 ~ 100까지는 정회전
• -1 ~ -100까지는 역회전
• Motor Power 활용 예제
14. ROBOLAB 초급 함수 복습
Wait for 함수
• 어떠한 상태가 되기를 대기하
고 상태를 유지하는 VI
• 이전의 동작에 관련된 함수는
포함되어 있지 않음에 유의한다.
• 시간을 기다리거나 센서의 값
을 기다리는 VI로 구성되어 있다.
14. ROBOLAB 초급 함수 복습
제한된 반복 (Loop)
- 프로그램의 일정한 구간을 반복
- 반복횟수에 제한 가능
- 반복 시작점에는 반복 조건을
표시한 Start Loop를 사용
- 터치, 빛, 사운드, 초음파 센서 Loop
함수 사용 가능
- 반드시 End of Loop 사용
- 수행조건이 만족되는 동안 Loop 안의
프로그램을 수행
14. ROBOLAB 초급 함수 복습
조건 분기 VI, Fork 함수
• Fork는 각각 할당된 조건을 검사하여
프로그램의 흐름을 나누는 역할을 한다.
• Fork 분기를 만든 경우 Fork Merge로 두 개
의 흐름을 묶어 주어야 한다. Fork는 위쪽 분기
가 True, 아래쪽이 False 로 할당되어 있다.
14. ROBOLAB 초급 함수 복습
흐름 제어용 VI, Jump / Land
Jump
Land
• Jump 와 Land 는 각각 같은 색
을 가진 것들끼리 짝을 이룬다.
• 프로그램은 Jump 를 만나면
같은 색의 Land 로 이동한다
• 하얀색 Jump 와 Land 는 각각
번호를 부여하여 사용할 수 있다.
14. ROBOLAB 초급 함수 복습
Task 함수
-Task 함수는 프로그램의 흐름을 나누어 동시에 두 개의 프로그램 진행할 수 있게
한다.
- Task로 분기된 두 개의 작업은 서로 다른 작업에 간섭하지 않고 독립적으로 동
작한다.
- 여러분은 Task 를 이용해서 동시에 최대 10개의 독립된 작업을 수행하도록 만들
수 있다.
-두 작업은 하나의 NXT를 공유한다. 그러므로 두 개의 태스크가 한 개의 센서 값
을 읽고 판단하는 것 가능하나 두 개의 태스크가 한 개의 모터를
제어하는 것은 오류를 일으키게 된다.
14. ROBOLAB 초급 함수 복습
Subroutine 함수
• Subroutine은 프로그램의 모듈화를 위한 기능
• 함수를 선언해 주고, 메인 프로그램에서 선언한
함수를 호출하는 구조를 이해할 수 있다.
14. ROBOLAB 초급 함수 복습
Container 함수의 활용
- 여기에 저장된 변수는 사용자가
로 수정 / 접근이 가능
임의
- Empty Container 함수로 ‘초기화’ 가능
- 컨테이너 관련 VI들은 센서 VI들이 Port
정보를 필요로 하는 것처럼 컨테이너 정보
를 요구
- Modifier 를 이용해 컨테이너 정보를 주
면 이 VI들은 주어진 수치 값을 이용해서
컨테이너에 값을 채우거나 연산하는 동작
을 수행
15. NXT Command 모터제어
1) 모터 동기화 VI -Synch Motor Control
• AB,BC 또는 AC 형식으로 두
모터의 회전을 동기화 시킨다.
• 동기화 된 모터는 컨트롤 모터
에 회전에 따라 움직인다.
15. NXT Command 모터제어
1) 싱크로 비율에 따른 동작
• 로봇의 동작을 예상해 보자
15. NXT Command 모터제어
1) Synch Motor Control 활용예제
• 정사각형 그리기 (HINT : Loop 활용)
15. NXT Command 모터제어
2) NXT Speed Control
• 배터리에 영향을 덜 받게 하기 위해
모터의 최대 속도에 제한을 주는 VI
• 새 배터리일 경우에는 1000까지 가
능하지만, Max regulated speed 값
에 750을 연결할 것을 추천한다.
• NXT 자체에 주는 명령이 되어 모든
프로그램에 영향을 주게 되므로 신
중하게 사용하여야 한다.
15. NXT Command 모터제어
2) NXT Speed Control
• Max Regulated Speed 값을 조절해 보면서, 모
터의 움직임이 어떻게 달라지는지 TEST 해 보자
.
15. NXT Command 모터제어
3) NXT Distance Control
• 원하는 거리만큼 모터를 움직이도록
정의하는 VI
• Motor를 움직이는 명령은 포함되어
있지 않으므로 Motor 관련 VI와 함
께 사용해야 한다.
15. NXT Command 모터제어
4) NXT Flip Motor Orientation
• A, B ,C 출력 포트에 연결된 모터
의 회전방향을 정상 Command의
반대 방향으로 회전하도록 설정
한다.
• 회전 방향이 전환된 모터는 정방
향 함수를 사용할 경우 역방향, 역
방향 함수를 사용할 경우 정방향
으로 회전하게 된다.
15. NXT Command 모터제어
4) NXT Flip Motor Orientation
• Flip Motor 수행 후 모든 모터 제어 함수는 회전
방향에 반대로 바뀌게 된다.
16. 다양한 2센서 라인트레이싱
1) 교차점 인식 라인트레이싱
1
1
0
1
2
교차점 컨
1번째
2
2번째
3
3번째
4
끝
1
1
• 주행 구간에 위치한 교차
점의 개수를 Counting
• 교차점 개수로 트레이싱
동작에 제한 가능
16. 다양한 2센서 라인트레이싱
1) 교차점 인식 라인트레이싱 FlowChart
16. 다양한 2센서 라인트레이싱
1) 교차점 인식 라인트레이싱
• Container Fork 사용
• 라인트레이싱 중 4번째 교차점 인식하면 정지
16. 다양한 2센서 라인트레이싱
2) Timer로 제한을 주는 라인트레이싱
• Red, Blue, Yellow 총 3개
의 Timer 사용가능
• 프로그램 Run하는 순간부
터 Timer 활성화
• 필요 시 Zero Timer VI 사
용하여 초기화 가능
16. 다양한 2센서 라인트레이싱
2) Timer로 제한을 주는 라인트레이싱 FlowChart
16. 다양한 2센서 라인트레이싱
2) Timer로 제한을 주는 라인트레이싱
• Timer를 사용하여 5초 동안 2센서 라인트레이싱
하도록 프로그램을 작성해 보자.
16. 다양한 2센서 라인트레이싱
3) Rotation으로 제한을 주는 라인트레이싱
시작
A 모터 엔코더 값이
500보다 작은가?
아니오
정지
예
예
1번 빛센서 값이
기준값보다 큰가?
3번 빛센서 값이
기준값보다 큰가?
아니오
3번 빛센서 값이
기준값보다 큰가?
아니오
예
예
전진
아니오
좌회전
우회전
전진
종료
16. 다양한 2센서 라인트레이싱
3) Rotation으로 제한을 주는 라인트레이싱
• 회전센서를 사용하여 500도 동안 2센서 라인트
레이싱하도록 프로그램을 작성해 보자.
• 방법1) Rotation fork
16. 다양한 2센서 라인트레이싱
3) Rotation으로 제한을 주는 라인트레이싱
• 회전센서를 사용하여 500도 동안 2센서 라인트
레이싱하도록 프로그램을 작성해 보자.
• 방법2) Rotation loop
17. 도전과제 – 중첩분기
초음파센서로 제한을 주는 2센서 라인트레이싱
20cm
벽
• 2센서 라인 트레이스 실행 중 전방의 초음파
센서가 벽을 인식하면 180도 회전하여 출발점까
지 되돌아 오도록 한다.
17. 도전과제 – 중첩분기
초음파센서로 제한을 주는 2센서 라인트레이싱
17. 도전과제 – 중첩분기
초음파센서로 제한을 주는 2센서 라인트레이싱
18. Container 고급 활용
Variable Modifier
• Red, Blue, Yellow, Generic
Container 외에 문자형으로
변수 선언 가능
• 'STR' 컨테이너에 5의 값을
저장한다.
=
5
18. Container 고급 활용
Formula Container
Addition
+
Subtraction
-
Multiplication
*
Division
/
AND
&
OR
|
• 연산 공식을
Container에 직
접 기입 가능
• '2'와 '7' 값을
Formula Container
를 이용해 합하였다.
18. Container 고급 활용
Formula Container 예제
• Formula Container를 사용하여 연산을 할 수 있다.
18. Container 고급 활용
Timer Container / Mail Container
• Timer Value를 지정된
Container에 저장
• 블루투스 통신을 통
해 수신된 데이터를
Container에 저장
18. Container 고급 활용
Timer Container 예제
• Timer Container를 사용하여 터치센서 눌릴 때까지 전진
한 후, 움직인 시간 만큼 후진하여 돌아오도록 해보자.
18. Container 고급 활용
Container를 이용한 자동 센싱 FlowChart
18. Container 고급 활용
Container를 이용한 자동 센싱
• 흰색과 검정색의 경계값을 자동으로 구하는 프로그램
• Formula Container 사용
• Loop를 사용하여 5번 빛 센서 측정값을 읽고 평균을 구한다
18. Container 고급 활용
Container를 이용한 자동 센싱
• 좌우 빛 센서의 경계값을 자동 측정하여 LCD 화
면에 나타내보고 두 값을 비교해보자.
18. Container 고급 활용
도전과제 – NXT LCD에 사각형 그리기
• NXT LCD에 사각형을
그리도록 프로그램
해 보자
• NXT Draw Pixcel VI
를 사용한다.
19. Investigator
Investigator 소개
• 센서의 측정값을 NXT LCD의 그래
프를 통해 볼 수 있으며, 데이터 값
을 모니터에서 그래프로 확인하고
센서 값도 Excel로 저장할 수 있다.
19. Investigator
Investigator 예제
• 1번에 연결된 빛 센서의 측정 값을 0.1초마다 샘
플링하여 값을 저장한다.
19. Investigator
Detective
• 상위 메뉴에서 Projects – Detective 클릭
• Data Logged 클릭
19. Investigator
• 그래프에 표현되
는 측정 값과 시간
의 범위를 마우스
로 더블 클릭하여
변경할 수 있다.
(LabVIEW와 유사
하게 사용)
Detective
19. Investigator
Sensor Scope
• 상위 메뉴에서 Projects – Detective 클릭
• Sensor Scope 클릭
20. 도전과제
도전과제 – 임베디드 1,2단계
질의 / 응답 시간
???
감사합니다.