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단계 질의 / 응답 시간 ??? 감사합니다.