블록쌓기 프로그래밍

브로클리프롭 로봇카 프로그래밍

프로펠러 로봇카 - 4. 프로펠러 로봇카 센서 주행실습 L1

Contents

브로클리프롭 로봇카 프로그래밍 실습 세부목차


1. 프로펠러 로봇카 준비하기

2. 프로펠러 로봇카 전자회로 실습하기

3. 프로펠러 로봇카 기초 주행실습

4. 프로펠러 로봇카 센서 주행실습 L1

5. 프로펠러 로봇카 센서 주행실습 L2

6. 프로펠러 로봇카 센서 주행실습 L3

7. 프로펠러 로봇카 문제해결 


본 페이지의 내용은 패럴렉스(Learn.Parallax.com)사의 공식 홈페이지에서 제공되는 자료를 참고하여 작성되었습니다.


브로클리프롭(BlocklyProp) 프로그래밍 방법으로 프로펠러 로봇카를 이용하여 실습할 수 있습니다. 로봇카와 브로클리프롭(BlocklyProp) 비주얼 프로그래밍으로 로봇공학, 그래픽 프로그래밍, 전자 공학을 익혀 보십시오!


이 페이지에서는 물체와 직접 접촉해서 감지하는 더듬이 센서 방식과 초음파 센서 방식으로 주행하는 로봇카 주행실습을 소개합니다. 여기서 다루는 센서는 비교적 주변환경에 덜 영향을 받는 센서에 속합니다. 그래서 로봇카와 센서에만 집중하면 실습을 잘 따라할 수 있습니다. 상세한 내용은 아래 연결링크를 사용하여 찾아볼 수 있습니다.


아래 세부 내용들을 살펴볼 수 있습니다.

1) 더듬이 스위치 센서 만들기

2) 더듬이 스위치 테스트

3) 더듬이와 바퀴 응답

4) 더듬이 센서로 주행하기

5) 초음파 센서로 추행하기

6) 초음파 센서로 로봇카 주행하기

7) 초음파 센서로 물체와의 거리 유지하기


먼저 더듬이 센서를 사용하면 로봇이 장애물을 직접 접촉하여 감지할 수 있습니다. 로봇의 더듬이가 물체에 접촉하면 수염면과 브레드 보드상의 회로가 전기적으로 연결됩니다. 이 실습에서는 로봇의 프로펠러 마이크로 컨트롤러를 프로그래밍하여 해당 접촉을 감지하고 로봇이 장애물을 피하도록 합니다.


1) 더듬이 스위치 센서 만들기


부품 목록

(2) 위스키 와이어 (또는 더듬이 와이어 센서)

(2) 3 핀 헤더

(2) 10 kΩ 저항기 (갈색 검정색 주황색)

(2) 220 Ω 저항기 (빨강 - 적갈색)

(기타) 점퍼 와이어

그림입니다. 원본 그림의 이름: mem000021c00554.jpg 원본 그림의 크기: 가로 346pixel, 세로 339pixel


더듬이 붙이기

- 보드 전면에 연결된 섀시 스탠드 오프 연결 나사 2 개를 풉니다.

- 아래 그림과 같이 각 나사에 위스커 선(더듬이 와이어)을 걸으십시오.

- 나일론 와셔 위에 위스커 한 개를 놓고 아래에 다른 한 개를 놓으십시오.

- 부드럽게 나사를 다시 조이고 와이어의 모서리가 브레드 보드의 모서리와 평행한지 확인하십시오.

그림입니다. 원본 그림의 이름: mem000021c00001.jpg 원본 그림의 크기: 가로 501pixel, 세로 328pixel


전자회로 만들기

다음 그림은 위스커 배선을 보여줍니다. 더듬이 회로와 함께, 그것은 우리가 사용해온 피에조 스피커와 똑같습니다.

- 그림과 같이 회로를 만드십시오.

- 수염 모양과 3 핀 헤더 사이에 약간의 간격을 두십시오.

- 또한 10kΩ 저항 (갈색 - 검정색 주황색)이 3.3V 소켓과 3 핀 헤더가 있는 행을 연결하는 저항인지 확인하십시오.

- 마찬가지로 220 Ω (빨강 - 갈색) 저항은 P8과 P7을 3 핀 헤더 행에 연결해야 합니다. 


그림입니다. 원본 그림의 이름: mem000021c00002.png 원본 그림의 크기: 가로 549pixel, 세로 478pixel 사진 찍은 날짜: 2013년 08월 30일 오후 4:19

그림입니다. 원본 그림의 이름: mem000021c00003.png 원본 그림의 크기: 가로 545pixel, 세로 289pixel 사진 찍은 날짜: 2013년 08월 30일 오후 4:20


2) 더듬이 스위치 테스트


로봇을 주행하기 전에 더듬이 스위치를 테스트하는 것이 중요합니다. 그렇게 하면 더듬이 모양이 올바른 메시지를 보내는지 확인할 수 있습니다. 그렇지 않으면, 더듬이가 프로펠러에게 아무것을 감지하지 못해도 무엇인가를 감지했다고 말하거나, 반대의 상황이 일어날 수 있습니다. 


- 로봇의 배터리 팩이 보드에 꽂혀 있는지 확인하십시오.

- 전원 스위치를 1로 설정하십시오.

- 아래에 표시된 더듬이 프로젝트를 빌드하고 코드를 저장하십시오. 


그림입니다. 원본 그림의 이름: mem000021c00004.png 원본 그림의 크기: 가로 501pixel, 세로 394pixel 사진 찍은 날짜: 2017년 02월 24일 오후 8:55


- Run Once (한 번 실행) 버튼을 클릭하고 터미널을 보십시오.


더듬이를 누르지 않으면 터미널에 wL = 1 및 wR = 1이 표시됩니다. 숫자중 하나가 0이거나 1과 0 중 하나가 깜박이면 회로 오류일 가능성이 큽니다.


- 회로 오류가 있는 경우 돌아가서 모든 연결이 올바른지 다시 확인하십시오.


그림입니다. 원본 그림의 이름: mem000021c00005.png 원본 그림의 크기: 가로 511pixel, 세로 329pixel 사진 찍은 날짜: 2017년 02월 24일 오후 9:59


다음으로 오른쪽 더듬이가 눌려지거나 장애물에 닿았을 때 프로펠러 칩이 감지하는지 확인하십시오.


- 오른쪽 더듬이를 눌러 3 핀 헤더의 앞쪽 포스트에 닿게 하십시오 (그림 2 참조).

- 터미널에 wL = 1 wR = 0이 표시되는지 확인하십시오. 오른쪽 위스커가 눌려 있음을 의미합니다.

- 올바르게 더듬이를 누르고 있는 동안 터미널에 wL = 1 wR = 0이 아닌 다른 것이 표시되면 회로 오류를 찾아 수정하십시오.

- 왼쪽 더듬이에 대해 반복하십시오. 터미널에서 wL = 0 wR = 1을 보길 원할 것입니다. 그런 식으로 표시되는지 확인하십시오. 그렇지 않으면 회로오류를 찾아 수정하십시오.

- 두 더듬이를 기둥에 대고 누르고 있으면 터미널에 wL = 0 wR = 0이 표시됩니다.


그림입니다. 원본 그림의 이름: mem000021c00006.png 원본 그림의 크기: 가로 524pixel, 세로 342pixel 사진 찍은 날짜: 2017년 02월 24일 오후 9:59


어떻게 동작하는가?

이 프로젝트는 터미널 클리어 스크린 블록부터 시작하여 피에조 스피커를 울리는 "리셋 표시기(reset indicator)"블록으로 이어집니다.


그 후, 프로그램은 repeat forever 루프로 들어갑니다. 루프 내부에서, 첫 번째 작업은 더듬이 회로 P7과 P8에 연결된 각 I / O 핀의 상태를 확인하는 것입니다. 각 상태의 값은 설정 변수(set variable) 블록에 저장되어 있습니다. P7 에 연결된 왼쪽 더듬이 wL 그리고 P8 에 연결된 오른쪽 더듬이 wR 입니다.


프로펠러 I / O 핀은 회로가 비활성 상태일 때, 즉 더듬이가 눌려지지 않을 때 1 또는 "하이(high)"신호를 읽습니다. 더듬이가 눌러져 회로가 활성화되면 프로펠러 I / O 핀은 0 또는 "로우(low)"신호를 읽습니다.


다음 4 개의 블록은 더듬이 모양의 상태를 표시합니다. 터미널 인쇄 문자(terminal print text) 블록은 터미널 프린트 매수(terminal print number) 블록으로 각 변수 및 그 값을 표시합니다. 이 블록 다음에는 일시 중지(pause) 150이 있으며, 이는 단말기의 데이터를 볼 수 있도록 실행반복(loop)을 느리게 만듭니다. terminal clear screen 블록은 루프를 통해 다음 실행에서 표시될 새로운 데이터를 표시할 수 있도록 화면을 지웁니다.


알고 계셨습니까?

각 로봇 더듬이는 10kΩ 풀업 저항이 있는 액티브 로우 회로에서 정상 개방 스위치를 형성합니다. 더듬이가 눌려지지 않은 비활성 상태 (왼쪽)에서 더듬이 모양 스위치가 열려 있습니다. 더듬이 와이어 상태는 3 핀 헤더 포스트에서 (GND) (0V)를 회로에서 떼어낸 것과 같습니다. 접지(GND)에서 P8까지 경로가 없습니다. 따라서 우리는 한 쌍의 저항 한쪽 끝이 3.3V이므로, 다른 쪽 끝에서 3.3V를 감지하여 높은 신호 (1)를 적용하도록 P8을 설정합니다.


활성 상태 (오른쪽)에서 와이어가 3 핀 헤더 포스트에 닿으면 눌러진 더듬이 스위치가 닫힙니다. 이제 P8은 220 Ω 저항, 3 핀 헤더, 더듬이, 장착 포스트 및 보드의 장착 구멍을 통해 GND (0V)에 연결됩니다. 입력으로 설정된 P8은 0V를 감지하므로 로우 신호 (0)를 적용합니다.

그림입니다. 원본 그림의 이름: mem000021c00007.png 원본 그림의 크기: 가로 535pixel, 세로 270pixel 사진 찍은 날짜: 2017년 03월 07일 오후 5:06


이 회로의 10 kΩ 저항을 풀업 저항이라고 부릅니다. 더듬이를 누르지 않으면 P8의 전압은 최대 3.3V까지 끌어당깁니다. 풀업 또는 풀다운 저항은 스위치 / 버튼 접촉이 이루어질 때 I / O 핀이 감지할 전압과 반대되는 전압을 인가합니다. 이를 사용하지 않으면 입력으로 설정된 I / O 핀이 안테나와 비슷해지므로 주변 전기장이 1 또는 0을 감지하는지 여부에 영향을 미치므로 프로젝트에 잘못된 데이터를 제공할 수 있습니다.

 

시도해 보세요!

현재 컴퓨터 터미널은 각 더듬이가 눌렸을 때 눈에 보이는 피드백을 제공합니다. 컴퓨터와 USB케이블을 분리하려는 로봇에게는 그다지 유용하지 않습니다! Propeller Activity Board에 내장된 P26 및 P27 LED 회로를 더듬이 표시등으로 사용합시다.

- Test ActivityBot whiskers 프로젝트의 사본을 새 이름으로 저장하십시오.

- 첫 번째 터미널 지우기 화면 블록을 제거하십시오.

- 반복 영원한 루프를 아래의 것으로 교체하십시오.


그림입니다. 원본 그림의 이름: mem000021c00008.png 원본 그림의 크기: 가로 282pixel, 세로 186pixel 사진 찍은 날짜: 2017년 03월 02일 오후 10:45


- 프로젝트를 실행하고 왼쪽 더듬이가 눌러졌을 때만 P26 LED가 켜지는지 확인하십시오.

 

당신 차례 !

- 오른쪽 더듬이가 눌러졌을 때만 P27 LED가 켜지도록 프로젝트를 수정하십시오.


3) 더듬이와 바퀴 응답


이제 브레드 보드 포스트 위로 더듬이를 누르고 있는 동안, 로봇을 후진하는 프로그램을 시도해봅시다.

- 브로클리프롭(BlocklyProp) 계정에 로그인하여 Whisker Wheel Response라는 새 프로젝트를 만듭니다.

- 보드의 전원스위치를 1로 설정하고 아래에 표시된 프로그램을 작성하십시오.


그림입니다. 원본 그림의 이름: mem000021c00009.png 원본 그림의 크기: 가로 392pixel, 세로 480pixel 사진 찍은 날짜: 2017년 04월 01일 오후 10:45


- 프로젝트를 저장하고 EEPROM로드 및 실행 버튼을 클릭하십시오.

- 로봇을 USB 케이블에서 분리하고 바닥에 놓습니다.

- 전원스위치를 2로 설정하십시오.

- 더듬이 중 하나를 접촉 기둥에 대고 누르십시오. 더듬이를 계속 누르고 있으면 로봇이 다시 후진해야 합니다.


어떻게 동작하는가?

처음 두 개의 블록은 이제 친숙하게 보일 수 있으며, 여기부터 모든 탐색 프로그램의 시작 부분에 있게 될 것입니다. 먼저, 주파수 출력(frequency out) 블록은 P4에 연결된 피에조 스피커에서 3000 Hz, 1 초 비프 음을 냅니다. 기억하십시오, 이것은 배터리 부족으로 프로그램이 재시작 되는지 여부를 알 수 있는 절전 표시기(brownout indicator)입니다. 두 번째는 로봇카 초기화(ActivityBot initialize) 블록입니다. 이 블록은 다른 Robot drive ... 블록 보다 먼저 프로그램 맨 위에 있어야합니다 .


나머지 코드는 repeat forever 루프 안에 있습니다. 다음에 두 개의 변수가 선언되며 각각은 체크 핀(check PIN) 블록이 첨부됩니다. 왼쪽 휠 변수는 P7에 연결된 왼쪽 더듬이 회로의 입력 상태를 저장하고 오른쪽 휠은 P8에 연결된 오른쪽 더듬이 회로의 입력 상태를 저장합니다. 이 더듬이 회로는 액티브 로우 출력을 제공합니다 - 더듬이가 눌려지면 해당 회로에 연결된 I / O 핀은 0 볼트를 감지하므로 PIN을 확인하면 0이 됩니다. 더듬이를 누르지 않으면 PIN은 1을 나타냅니다.


루프의 첫 번째 If ... do ... else 블록은 어떤 더듬이가 눌려졌는지 확인합니다. 부착된 if condition 블록은 "왼쪽 휠이 0 또는 오른쪽 휠이 0과 같으면 do ..."로 읽을 수 있습니다. 부울 비교 블록 조건은 or 로 설정합니다. 두 개의 비교 값 블록 내부에는 변수 ( 왼쪽 바퀴 또는 오른쪽 바퀴 )가 0 인지 여부를 개별적으로 확인합니다. 


어느쪽이든 더듬이가 눌려지면, If condition 이 참이 되고, if ... do로 둘러싸인 블록이 실행됩니다. 그것은 두 바퀴가 초당 -64 틱으로 회전하는 로봇 구동 속도(robot drive speed) 입니다. 이로 인해 로봇카가 후진합니다.


어떤 더듬이 변수도 0을 저장하지 않으면, 프로그램 실행은 if ... do로 묶인 블록을 건너뛰고 else로 묶인 블록으로 이동합니다. 거기서, 로봇 구동 속도가 0 오른쪽으로 0 블록이 두 바퀴가 회전을 멈추도록 합니다.


알고 계셨습니까?

먼저 검사하고, 수시로 검사하십시오! - 위의 repeat forever 루프에는 pause 블록이 없습니다. 이렇게 하면 루프를 매우 빠르게 실행하고, 센서를 확인하므로 사용중인 드라이브 속도 블록을 자주 업데이트할 수 있습니다. 이를 통해 로봇은 적절한 동작으로 센서 입력에 신속하게 응답할 수 있습니다. 센서로 주행할 때 명심해야 할 점입니다.


... 나를 막지 마! (and don’t block me) - 루프 가 종료 될 때까지 다른 프로세스를 진행하지 못하게 하는 코드를 blocking 이라고 합니다. blocking 이 루프 내부에 포함된 모든 코드 는 해당 루프를 느리게 만듭니다. "blocking 블록"의 예는 일시 중지(pause) 및 주파수 출력(frequency out) 입니다. 그러나 로봇 구동 속도(robot drive speed) 직후에 pause 또는 frequency out 블록을 배치하여 로봇이 큰 루프 내부에서 회피 조작을 수행하는 시간을 제어함으로써 이점을 활용할 수 있습니다  .

 

시도해 보세요!

여기에 주요 기능을 위해 수정된 루프가 있습니다. if ... else 문은 한 번에 하나의 더듬이를 밀면 한쪽 또는 다른 쪽으로 회전하게 하고, 두 개의 더듬이를 동시에 밀면 뒤쪽으로 후진하게 해주는 코드입니다 .


그림입니다. 원본 그림의 이름: mem000021c0000a.png 원본 그림의 크기: 가로 333pixel, 세로 431pixel 사진 찍은 날짜: 2017년 04월 01일 오후 11:04


- 프로젝트 복사본을 저장하고 Whisker Wheel Try This 이름으로 지정하십시오.

- 위와 일치하도록 repeat forever 루프를 업데이트 하십시오.

- 로봇의 전원 스위치를 위치 1에 놓습니다.

- 저장을 클릭 한 다음 EEPROM로드 및 실행을 클릭하십시오.

- 케이블을 분리하고 전원 스위치를 2 위치에 놓으십시오.

- 한 번에 하나씩 수염을 길게 누른 다음 한 번에 모두 길게 누릅니다.


로봇카는 더듬이가 눌려지면 회전해야 합니다. 두개의 더듬이 모두를 한꺼번에 누르면 뒤로 후진해야 합니다.


당신 차례 !

지금 당장, 당신이 두 개의 수염을 동시에 누르면, 피벗 회전으로 후진할 때 어색하게 흔들릴 것입니다. 고칠 수 있나요?

- 프로젝트의 다른 복사본을 저장하고 Whisker Wheel Your Turn와 같은 이름을 지정하십시오.

- 두 더듬이가 모두 눌려졌을 때 로봇카가 원활하게 후진하도록 프로젝트를 수정하지만, 더듬이를 개별적으로 누른 상태에서는 옆으로 회전하도록 수정하십시오.


4) 더듬이 센서로 주행하기


이제 로봇이 더듬이에 반응하도록 만드는 방법을 배웠으므로 이를 확장해 보겠습니다. 로봇카를 자유롭게 돌아다니고 더듬이를 사용하여 장애물을 피해 가십시오.


돌아다니게 주행하려면 로봇카가 무언가에 부딪힐 때까지 앞으로 나아갈 필요가 있습니다. 부딪히는 일이 일어나면, 뒤로 물러나 장애물에서 멀어지며 다시 앞으로 나아갈 필요가 있습니다.


로봇이 앞으로 나아갈 때 더듬이 감지신호를 반복적으로 점검해야 하는데, 점검과 점검 사이에 작은 지연시간이 있습니다. 이것이 장애가 된다는 것을 즉시 알 수 있습니다.


더듬이 주행 예제 코드

- 브로클리프롭(BlocklyProp) 계정에 로그인하고 브로클리프롭(BlocklyProp) 클라이언트를 실행하고 연결하십시오.

- 로봇카를 위한 새로운 Propeller C 프로젝트를 시작하십시오.

- 아래 표시된 프로젝트를 빌드하고 저장을 클릭하십시오.


그림입니다. 원본 그림의 이름: mem000021c0000b.png 원본 그림의 크기: 가로 301pixel, 세로 765pixel 사진 찍은 날짜: 2017년 04월 06일 오후 7:23


- 로봇카를 컴퓨터에 연결하고 전원 스위치를 1 위치에 놓습니다.

- 로드 및 실행 (코드를 EEPROM에 저장)을 클릭하십시오.

- 케이블을 분리하고 수염이 부딪치기에 충분한 장애물이 있는 지역에서 로봇을 땅바닥에 세웁니다.

- 전원 스위치를 2로 이동하는 동안 재설정 단추를 누르고 계십시오.

- 로밍(roam) 주행 동작을 관찰하십시오.

 

어떻게 동작하는가?

브라운 아웃 표시기(brownout indicator) 역할을 하는 익숙한 Frequency out 블록과  Robot ActivityBot initialize 블록 이후, 나머지 코드는 단일 repeat forever 루프 내에 있습니다.


먼저 왼쪽오른쪽 바퀴를 초당 64 틱으로 설정하는 Robot drive speed 블록이 제공됩니다. 이는 로봇카의 최고 제어 속도의 약 50 %입니다. 그 직후에 check PIN 블록이 왼쪽 및 오른쪽 더듬이 변수에 더듬이 회로의 입력 상태 값을 저장합니다. 그 직후에, if ... do ... elseif 는 장애물이 발견되었는지 확인하기 위해 변수를 평가합니다. 이 블록들 사이에 멈춤이 없으므로, 로봇카는 센서 입력에 매우 신속하게 반응할 수 있습니다.


if ... do ... elseif 블록은 먼저 왼쪽 더듬이가 장애물에 부딪쳐서 닫혀진 상태를 나타내는 0 값과 같은지 점검합니다. 이것이 사실이라면, pause 600 블록이 실행되는 동안 로봇 드라이브 속도 -64, -64 가 로봇카를 후진시킵니다. 그후 다음 단계 블록인 Robot drive speed 블록인 왼쪽 64오른쪽 -64 를 사용하여 동일한 속도 반대 방향으로 바퀴를 돌립니다. 이렇게하면 로봇카가 장애물을 감지한 쪽에서 오른쪽으로 회전하게 됩니다. 회전 동작은 pause (ms) 300 이 실행될 때까지 지속됩니다.


그러나 왼쪽 더듬이 = 0 이 거짓이면 그 동작을 건너뛰고, else...if 조건에서 오른쪽 더듬이 = 0 인지 확인합니다. 그럴 경우 오른쪽에 장애물이 감지된 것이고, 코드가 바로 아래에 로봇 드라이브 속도(robot drive speed)pause 블록을 실행하고, 이번에는 후진하고 왼쪽으로 회전하도록 왼쪽 –64오른쪽 64를 사용해서 오른쪽 장애물에서 멀어지도록 합니다.


어느 변수도 0이 아니라면 if..do..elseif 루프 내에서 회피 액션이 실행되지 않습니다. 이 코드는 repeat forever 루프의 최상단으로 돌아갑니다. 여기서 로봇 드라이브 속도 64, 64 는 더듬이 상태를 다시 확인하기 전에 로봇카를 앞으로 조금씩 앞으로 진행합니다.


알고 계셨습니까?

반복하기 - Merriam Webster 에 따르면, 반복의 정의 중 하나는 "일련의 작업을 반복하여 결과를 원하는 결과에 연속적으로 산출하는 절차"입니다. 반복적인 테스트와 튜닝은 로봇 어플리케이션을 개발하는데 없어서는 안될 부분입니다.

 

시도해 보세요!

예제 프로그램은 기본적으로 Robot drive speed 값인 64 (및 -64 )를 사용합니다. 그것은 로봇카가 인코더를 사용할 때 갈 수 있는 속도의 50 %입니다. 로봇 세트 가속(robot set acceleration)이 사용되지 않으므로 초당 600 틱의 기본값이 사용됩니다. 이러한 보통의 기본값은 잘 작동합니다. 기본 센서 탐색 루틴을 개발하는 동안 좋은 선택이므로 로봇카는 예기치 않게 질주하지 않습니다. 이제 더듬이 시스템이 동작하기 때문에 한 번에 조금씩 속도를 높이고 길을 따라 조종해 보십시오.

- 프로젝트의 복사본을 수염 로밍 시도로 저장하십시오.

- Robot drive speed 블록에 첨부된 숫자를 증가시켜서 (그리고 음수를 줄임으로써) 로봇카를 더 빨리 주행할 수 있도록 75 % 속도로 시도하십시오.

- 프로젝트를 저장하고 EEPROM에 로드한 다음 수정된 코드를 테스트합니다.


객체를 감지한 후 로봇카는 얼마나 멀리 후진합니까? 그리고 몇도까지 회전합니까?

- 로봇카가 불필요하게 멀리까지 후진하지 않고 여전히 90도 회전할 때까지 pause 블록의 값을 조정하고 시운전해보십시오.

- 이제 속도 값을 범위의 100 %로 높이고 변경 사항을 다시 테스트 해보십시오.

- 로봇카가 최고 속도로 주행할 때까지 테스트 드라이브 일시 중지 블록 값을 조정하지만, 여전히 원래 거리만큼 후진하고 객체를 감지한 후 90도 회전하도록 하세요.


당신 차례 !

로봇카의 속도가 증가할수록 응답 속도가 느려지는 것으로 나타났습니다. 가장 빠른 속도에서, 더듬이 모양은 로봇카가 후진으로 응답하기 이전에 벽을 치기에 충분할 정도로 구부러질 수 있습니다. 심지어 소켓에서 3 핀 헤더를 떨어져 나가게 해서 더듬이 스위치 접촉을 방해 할 수 있습니다. 문제의 원인이 뭐라고 생각합니까?

- 로봇 초기화 블록 아래에 로봇 세트 가속 블록을 추가하십시오.

- 로봇카가 장애물을 갑자기 부딪치지 않고 더듬이 누름에 반응할 수 있을 때까지 다른 가속도 설정값을 실습해보세요.

 

5) 초음파 센서로 추행하기


Ping))) 초음파 거리 센서를 사용하면 로봇카에서 장애물을 감지하고 그 거리를 측정할 수 있습니다. PING)) 센서는 눈과 비슷하게 보입니다. 입과 귀처럼 보입니다.


박쥐와 마찬가지로 PING)) 센서는 초음파가 짹짹 울리면 짹짹 울림을 듣고 신호음을 듣습니다. 프로펠러 마이크로 컨트롤러는 PING))) 센서를 트리거하고 리턴 신호를 받는 사이의 시간을 표시할 수 있습니다. 이 에코 리턴 시간은 객체까지의 거리를 계산하는데 사용될 수 있습니다.


이 기능은 주행 중에 장애물을 피하거나 움직이는 물체와의 거리를 일정하게 유지하는 등 다양한 로봇카 주행 전략을 가능하게 합니다.


이 실습에서는 PING)))))) 이 실행하는 것을 이용해서 다양한 대상과의 거리를 측정할 것입니다. PING))) 센서는 거리 측정을 위해 프로펠러에 전원, 접지 및 신호 연결을 필요로 합니다.


부품 목록

(1) PING))) 초음파 거리 센서 (아래 그림 참조)

(1) 2.2 k 옴 저항 (적색 적색)

(2) 점퍼 와이어

그림입니다. 원본 그림의 이름: mem000021c0000c.png 원본 그림의 크기: 가로 308pixel, 세로 202pixel 사진 찍은 날짜: 2013년 08월 30일 오후 8:57 


PING))) 센서 회로 구축

- 이전의 더듬이 회로는 제거하고 피에조 스피커 회로는 그대로 두십시오.

- 아래 그림과 같이 로봇카에 PING))) 센서 회로를 만드십시오.

- PING)))) 센서의 SIG 핀과 프로펠러 I / O 핀 (이 경우에는 P8) 사이에 2.2 kΩ 저항을 사용하십시오.


     그림입니다. 원본 그림의 이름: mem000021c0000d.png 원본 그림의 크기: 가로 578pixel, 세로 295pixel 사진 찍은 날짜: 2013년 09월 02일 오후 4:27


참고: PING))) 센서 및 서보 포트 - VIN에 연결하지 마십시오. PING))) 센서를 3 핀 연장 케이블이있는 서보 포트 (예 : P16 또는 P17)에 연결하려면 먼저 포트의 전원 점퍼를 5V로 설정해야합니다. 그렇지 않으면 센서가 손상될 수 있습니다.

각 서보 포트에는 프로펠러 I / O 핀과 직렬로 연결된 3.9 k 옴 저항이 포함되어 있으므로 브레드보드 회로에 대한 회로도에 표시된 2.2 k 옴 저항을 포함할 필요가 없습니다.    


PING))) 센서에 대해서

PING))) 센서는 매우 높은 음의 피치톤(짹짹)을 내 보낸 다음 박쥐처럼 에코를 듣습니다. 에코의 리턴 타임을 측정하고 대기 속의 사운드 속도를 사용하여 Propeller 마이크로 컨트롤러는 PING)) 센서와 최대 3.3m 떨어진 초음파음을 반사하는 물체 사이의 거리를 결정할 수 있습니다. 이것이 로봇카가 초음파 소리를 사용하여 주행하는 방법입니다.


반향음 기반 주행은 센서의 삑 소리를 효과적으로 반향할 수 있는 객체에서만 작동합니다. 작은 물체 또는 너무 멀리 떨어져 있는 물체는 충분한 소리를 반사하지 않습니다. 커튼이나 박제된 동물과 같은 부드러운 소재의 물건은 소리를 숨기고 반향음을 반사하지 않을 수 있습니다. 입사각으로 접근한 벽은 PING))) 센서로 되돌아오는 방향이 아닌 멀리 달아나는 방향으로 단순히 소리를 반사합니다. 단단한 표면을 가진 실린더, 볼 모양의 장애물 및 벽을 직접 마주 보게되면 초음파 소리가 잘 반사됩니다.


그림입니다. 원본 그림의 이름: mem000021c0000e.png 원본 그림의 크기: 가로 571pixel, 세로 303pixel 사진 찍은 날짜: 2013년 09월 02일 오후 6:17


공기 온도는 PING))) 센서의 거리 측정 정확도에 영향을 줄 수 있습니다. 이 현상이 발생하는 이유에 대해 자세히 알아보려면 사운드 속도 대 공기 온도에 대한 참고자료를 살펴보십시오.


PING))) 센서 테스트

이 프로그램은 브로클리프롭(BlocklyProp) 터미널에서 PING))) 거리 측정치를 표시합니다. PING))) 센서가 다양한 물체와 다양한 각도에서 벽을 감지할 수 있는지 테스트하는데 사용할 수 있습니다. 이것은 로봇카가 PING))) 센서로 할 수 있거나 할 수 없는 것에 대한 아이디어를 줄 것입니다.


그림입니다. 원본 그림의 이름: mem000021c0000f.png 원본 그림의 크기: 가로 482pixel, 세로 271pixel 사진 찍은 날짜: 2017년 02월 21일 오후 11:48


- 위에 표시된 프로그램을 빌드하십시오.

- Ping distance 블록을 설정하려면, 먼저 블록이 제공하는 값에 대해 인치 또는 cm (센티미터) 단위를 선택하십시오.

- 그런 다음 PIN 을 센서에 연결된 프로펠러 I / O 핀으로 설정하십시오.

- 터미널 인쇄 텍스트(terminal print text) 블록에 유닛 선택을 표시하십시오 !

- 프로젝트를 저장하십시오 !!

- Run Once (한 번 실행) 버튼을 클릭하고, 터미널이 열리면 거리가 표시되어야 합니다.

그림입니다. 원본 그림의 이름: mem000021c00010.png 원본 그림의 크기: 가로 257pixel, 세로 137pixel 사진 찍은 날짜: 2017년 02월 21일 오후 11:47


- 손, 컵, 볼까지의 거리를 측정 해보십시오. 모두 쉽게 감지할 수 있어야 합니다.

- 박제된 동물이나 구겨진 천 조각처럼 부드러운 것으로 거리를 측정해 보십시오.  PING))) 센서가 에코를 감지할 수 있습니까?

- 벽의 거리를 정면으로 측정해 보십시오.

- 다양한 각도로 접근하면서 벽까지의 거리를 측정 해보십시오. PING))) 센서는 90도 각도에서 얼마까지 객체를 계속 볼 수 있습니까?


어떻게 동작하는가?

PING))) 센서는 프로펠러 칩으로부터 시작 펄스라는 짧은 고 / 저 신호를 수신합니다. 그러면 센서가 초음파 클릭을 만들고 SIG 핀을 high로 설정합니다. 에코가 되돌아오면 SIG 핀을 low로 설정합니다. 그러면 프로펠러 칩은 PING)) 센서의 반향 시간에 해당하는 high 신호 지속 시간을 측정할 수 있습니다.


 그림입니다. 원본 그림의 이름: mem000021c00011.png 원본 그림의 크기: 가로 573pixel, 세로 242pixel 사진 찍은 날짜: 2013년 08월 30일 오후 11:52    


ping distance 블록은 에코 리턴 시간 측정을 거리로 변환하는 연산을 처리한다. 이 프로그램에서는 측정값을 표시하기 위해 Ping distance 블록을 terminal print number 블록에 꽂습니다. terminal print number 블록은 terminal print text 블록 바로 이어서 놓고, 표시값의 레이블 및 단위를 추가로 표시하는데 사용합니다. 이 두 블록은 pauseterminal clear screen 블록과 함께 repeat forever 블록 내에 있습니다. pause 블록은 부드러운 화면을 얻을 수 있을 만큼 루프를 느리게 반복합니다.


알고 계셨습니까?

소리는 헤르쯔 (Hz)로 측정됩니다. PING))) 센서는 인간의 청력보다 훨씬 높은 40kHz에서 삑 소리를 냅니다. 대부분의 젊은이들은 20Hz에서 20kHz 사이의 주파수를 들을 수 있으며 일부 박쥐는 100kHz까지 주파수를 들을 수 있습니다. 그래서, PING))) 센서의 삑 소리를 들을 수는 없지만 박쥐가 가장 가능성이 있습니다.


 

시도해 보세요!

보드에 피에조 스피커가 있기 때문에 터미널 대신 톤을 사용하여 PING))) 센서로 측정한 거리를 나타내 봅시다. 다음 프로그램은 블록의 값을 변수에 저장한 다음 측정된 거리를 피에조 스피커에서 재생할 수 있는 주파수 범위로 확장하기 위해 수학을 수행합니다.


- 새 프로젝트를 만들고 PingPiezo와 같은 이름을 지정하십시오.

- 아래에 표시된 프로젝트를 빌드하십시오.


그림입니다. 원본 그림의 이름: mem000021c00012.png 원본 그림의 크기: 가로 513pixel, 세로 155pixel 사진 찍은 날짜: 2017년 02월 23일 오후 11:49


- 로드 및 실행 버튼을 사용하여 로봇카를 프로그래밍하십시오.

- 로봇카를 컴퓨터에서 분리해서 손에 들고 똑바로 약 10 피트 떨어진 벽을 향하게 하십시오. 그런 다음 벽쪽으로 걷습니다. 삐 소리가 벽에 더 가까워질수록 고음이 들리는 것을 들을 수 있습니까?


당신 차례 !

위의 프로젝트를 자세히 살펴보십시오. 두 변수와 두 개의 상수를 사용하여 Hz 변수가 Distance 변수로 어떻게 제어되는지 볼 수 있습니까 ?

- 피에조 스피커가 이 코드를 사용하여 재생할 최고 주파수는 무엇입니까? 가장 낮은 주파수는 무엇입니까?

- Ping)))) 거리 측정을 위해 센티미터 대신 인치를 사용하지만 비슷한 범위의 주파수를 재생하는 프로젝트 사본을 만드십시오.


6) 초음파 센서로 로봇카 주행하기


이제 PING)) 센서로 센티미터 거리를 측정할 수 있고 어떤 종류의 물체인지 감지할 수 있으므로 센서의 입력과 서보 모터의 출력을 결합합시다.


우리의 목표는 로봇카가 주행하다가 PING))) 센서로 소리를 사용하여 물체를 피하는 것입니다. 이것은 로봇카가 객체를 감지하여 실제로 충돌할 필요가 없기 때문에 더듬이 스위치 탐색보다 개선된 방법입니다.


그러나 두 가지 차이점이 있습니다. 두 개의 더듬이 스위치가 있습니다. 더듬이를 사용하면 로봇카에서 장애물이 왼쪽이나 오른쪽에 있는지 여부를 알 수 있으며 반대 방향으로 회전할 수 있습니다. PING))) 센서는 거리 값을 반환하지만 장애물이 왼쪽 또는 오른쪽에 더 가까운지 여부를 나타내지는 않습니다.


객체가 20cm 이내에 오면 로봇카가 무작위로 좌회전 또는 우회전하는 테스트 코드부터 시작합시다. 일단 동작하고 조정되면, 로밍을 위한 블록을 추가할 것입니다.


그림입니다. 원본 그림의 이름: mem000021c00013.png 원본 그림의 크기: 가로 504pixel, 세로 293pixel 사진 찍은 날짜: 2013년 09월 01일 오후 10:07


무작위 회전 주행 테스트

이 예제 프로그램은 PING))) 측정 거리가 20cm 이하가 될 때까지 로봇카를 계속 유지합니다. 그런 다음 20cm 이상 측정할 때까지 제자리로 돌아갑니다. 이는 물체가 더 이상 보이지 않을 때까지 로봇이 돌아 왔음을 의미합니다.


- 브로클리프롭(BlocklyProp) 계정에서 Ping Detect and Turn라는 새로운 Propeller C 프로젝트를 만듭니다.

- 아래에 표시된 프로젝트를 빌드한 다음 저장을 클릭하십시오.


그림입니다. 원본 그림의 이름: mem000021c00014.png 원본 그림의 크기: 가로 492pixel, 세로 561pixel 사진 찍은 날짜: 2017년 04월 08일 오후 2:36


- 로봇을 컴퓨터에 연결하고 전원 스위치를 1로 설정하십시오.

- 로드 및 실행 (EEPROM에 코드 저장) 버튼을 클릭하십시오.

- 로봇을 프로그래밍 케이블에서 분리하고 땅에 놓은 다음 전원 스위치를 2로 설정하십시오.

- 로봇카 앞에서 손을 약 30cm (1ft) 떨어뜨린 다음 천천히 가까이 이동하십시오. 그러면 로봇카가 손에서 멀리 떨어져야 합니다.

- 방향을 바꾸기 위해 선택한 방향이 무작위임을 알 수 있도록 여러 번 시도해보십시오.

- 로봇카 앞에서 책이나 바인더를 열어보십시오. 더 큰 장애물이 없어질 때까지 로봇카가 더 오래 회전합니다.


어떻게 동작하는가?

이 코드는 로봇을 동작하기 때문에 P4의 브라운 아웃 인디케이터 피에조 스피커의 주파수 아웃 블록으로 시작합니다. 다음은 필요한 Robot ActivityBot initialize 블록입니다. robot set acceleration 블록은 출발에서 600 틱 / s2로 설정하는 것이 적당합니다.


나머지 코드는 repeat forever 루프에 있습니다. repeat while 루프로 시작합니다. while 조건은 compare values 블록이고, Ping distance 블록에 제공되는 값이 20보다 크거나 같은 지 검사합니다. 만약 응답이 참이면, 코드는 pause (ms) 5 블록을 실행하고 다시 핑센서를 검사합니다. 이 작업은 while 조건이 더 이상 유효하지 않을 때까지 코드 실행을 대기 상태로 유지하면서 계속 반복됩니다.


이 경우 코드 실행이 다음 블록으로 내려갑니다. set variable 블록은 random number 1 to 2 값과 같은 값으로 바꿉니다. 그것은 로봇카가 어떤 방향으로 돌아가는지 결정하기 위해 동전을 뒤집는 브로클리프롭(BlocklyProp) 방법입니다. "코인 플립"은 if ... do ... else 블록에서 확인합니다. 만약 turn = 1 이라면, robot drive speed left 64, right -64 블록이 실행되어서 오른쪽으로 로봇카가 회전하도록 합니다. 만약 turn = 1 이 참이 아니라면, else  다음 블록이 실행되고, robot drive speed left –64, right 64 블록이 실행되어서 로봇카가 왼쪽으로 회전합니다.


if ... then ... else 블록은 repeat while 루프로 이어집니다. 이번에 while 조건은 ping distance 측정값이 20보다 작은지 검사합니다. 코드 실행은 이것이 사실이라면 대기 모드로 유지됩니다. 이것은 PING))) 센서가 20보다 큰 측정 값을 보고할 때까지 로봇카가 회전운동을 계속할 수 있게 하여 장애물을 지나쳤습니다. 그런 다음 코드 실행이 로봇 드라이브 중지 블록으로 진행되어 로봇카가 종료됩니다.


마지막으로 코드 실행이 repeat forever 루프의 맨 위로 돌아오면 개체가 20cm보다 가까워 질 때까지 매 5ms마다 거리를 확인하고 PING을 확인합니다.


알고 계셨습니까?

중복 하위 시스템 – 더듬이 스위치가 터치에 의존하고 PING))) 센서는 초음파를 사용합니다. 당신이 눈치 챘을지도 모르는 것처럼, 각각은 장단점을 가지고 있습니다. 실제 제어 시스템에서는 서로 다른 물리적 특성에 의존하는 다양한 유형의 센서가 함께 사용되는 경우가 많습니다. 이렇게 하면 보다 다양한 조건에서 시스템의 안정성을 높일 수 있습니다. 위험이 낮은 곳에서는 여분의 하위 시스템이 한 쌍의 멜빵이 달린 벨트를 착용하는 것처럼 어리석게 보일 수 있습니다. 그러나 위험이 높은 곳에서는 중복된 서브시스템이 매우 중요합니다. 어떤 예를 생각해 볼 수 있습니까?

 

이것을 시도하십시오 - PING으로 로밍))))

위의 예제 코드는 두 블록만 추가하여 로봇카를 로밍할 수 있습니다. 현재 로봇카는 20cm 이내에 물체가 감지되지 않는 한 계속 움직입니다. 필요한 것은 20cm 이내에 물체가 감지되지 않으면 앞으로 나아갈 수 있는 블록입니다. 그리고 가까이에 있는 물체가 감지되면 방향 전환 조작을 수행하기 전에 앞으로의 주행을 멈춰야 합니다.


- Ping Roaming Turn Random으로 프로젝트 복사본을 저장하십시오.

- 첫 번째 반복 바로 위에 로봇 드라이브 속도 블록을 추가하십시오.

- 첫 번째 Repeat While ... 블록 바로 아래에 로봇 드라이브 정지 블록을 추가하십시오.


그림입니다. 원본 그림의 이름: mem000021c00015.png 원본 그림의 크기: 가로 500pixel, 세로 303pixel 사진 찍은 날짜: 2017년 04월 08일 오후 4:06


- 코드를 저장하고 로봇을 컴퓨터에 연결하고 전원 스위치를 1로 설정하십시오.

- 코드를 EEPROM에 로드하고 로봇을 분리한 다음 바닥에 놓습니다.

- 전원 스위치를 2로 설정한 상태에서 리셋 버튼을 누른상태로 두면 로봇카 로밍을 볼 수 있습니다!


당신 차례 !

- 쉽게 이동할 수 있는 보드 또는 상자로 미로를 구축하십시오. 벽을 높이 15cm, 간격 45cm로 만듭니다.

- 미로에서 로봇카를 로밍해보십시오.

- 미로를 더 잘 탐색 할 수 있도록 로봇카를 조정하십시오. 이는 속도를 늦추고, 가속도를 조정하고, 회전을 유발하는 PING))) 거리를 줄이는 것을 의미할 수도 있습니다.

- 가능한 한 많이 미로 통로를 좁히고 로봇카가 주행할 수 있을 정도로 넓게 남겨둡니다.

- 미로를 탐험하는 가장 간단한 초기 접근법은 각 벽에서 우회전하는 것입니다. (반드시 최선의 방법은 아니지만 확실한 것은 가장 간단합니다.) 장애물을 만났을 때 코드가 바뀌도록 코드를 수정하고 어떻게 진행되는지 보십시오!


7) 초음파 센서로 물체와의 거리 유지하기


장애물을 찾아 피하는 대신, 이 프로젝트는 로봇카를 목표로 삼습니다. 동일한 센서시스템이지만, 다른 코드를 사용합니다. 코드는 원하는 거리를 확인하고, 객체가 그 거리보다 멀리 떨어져 있으면 로봇카가 앞으로 이동합니다. 객체가 원하는 거리보다 가까운 경우, 로봇카는 뒤로 이동합니다. 객체의 거리가 원하는 거리와 같으면 로봇카의 위치가 유지됩니다.


그림입니다. 원본 그림의 이름: mem000021c00016.png 원본 그림의 크기: 가로 504pixel, 세로 334pixel 사진 찍은 날짜: 2013년 09월 01일 오후 10:40


움직이는 객체

이 예제는 로봇카가 자신과 그 앞에 있는 객체 사이의 거리가 32cm가 되도록 시도합니다. 어떤 물체도 감지되지 않으면 로봇은 물체가 발견될 때까지 앞으로 나아가고 32cm 거리를 유지합니다. 객체를 로봇카에서 멀리 당기면 앞으로 추월됩니다. 마찬가지로, 물체를 향해서 밀면 물체가 복원되어 32cm 거리로 복원됩니다.


- 브로클리프롭(BlocklyProp) 계정에서 Push Ping이라는 새로운 Propeller C 프로젝트를 만듭니다.

- 아래에 표시된 프로젝트를 빌드하고 저장하십시오.


그림입니다. 원본 그림의 이름: mem000021c00017.png 원본 그림의 크기: 가로 439pixel, 세로 374pixel 사진 찍은 날짜: 2017년 04월 09일 오후 2:20


- 로봇카를 컴퓨터에 연결하고 전원 스위치를 1로 설정하십시오.

- COM 포트를 설정하고 로드 및 실행 (EEPROM에 코드 저장)을 클릭하십시오.

- 컴퓨터에서 로봇카의 연결을 해제한 다음 전원 스위치를 2로 설정한 상태에서 재설정 버튼을 누르고 있습니다.

- 로봇카를 바닥에 놓고 손을 앞에 놓고 그대로 유지합니다. 귀하의 로봇카는 손에서 32cm로 이동해야 하며 그 거리를 유지해야 합니다.

- 로봇카를 향해 손을 움직여보십시오. 32cm 거리를 유지하려면 응답해야 합니다.


어떻게 동작하는가요?

이 프로그램은 distance, setPoint, errorVal, kp 및 speed 의 5가지 변수를 선언합니다.


* distance 는 로봇카 앞에 있는 객체에 측정된 거리를 저장합니다.

* setPoint 는 로봇카가 자신과 그 앞에 있는 객체 사이에서 유지하려고 시도해야 하는 목표거리를 저장합니다.

* errorVal 은 측정된 거리와 원하는 setPoint 거리 간의 차이를 저장합니다.

* kp 는 비례상수를 저장합니다. errorVal 는 setPoint 거리를 유지하는데 도움이 되는 속도에 대해 kp 로 곱할 수 있습니다.

* speed 는 kp x errorVal 의 결과를 저장합니다.


프로그램은 프로젝트 제목을 위한 주석 블록으로 시작하고 P4의 브라운 아웃 인디케이터 피에조 스피커에 대한 주파수 아웃 블록을 시작합니다.


Robot ActivityBot initialize 이후, 두 개의 블록이 로봇의 동작에 기여합니다. robot set acceleration 는 갑작스런 속도 변화를 완화하는데 도움이 되는 400 ticks / s2  로 설정됩니다. robot drive max speed 96 은 런타임 중에 부착된 속도 변수가 96을 초과하더라도 로봇 드라이브 속도 블록이 왼쪽오른쪽 입력을 +/- 96으로 씌우도록 합니다.


숫자 값이 첨부된 두 set variable 블록은 다음에 옵니다 : setPoint = 32kp = -10. 이 값은 런타임 중에 변경되지 않습니다.


나머지 코드는 repeat forever 블록 안에 있습니다. 이 루틴은 로봇카가 네 단계를 매우 빠르게 반복함으로써 자신과 대상 객체 사이의 거리를 유지하게 합니다.


1. Ping)))) distance in cm PIN 8 블록으로 측정된 거리를 구하십시오.

2. errorVal = setPoint – distance 를 사용하여 원하는 거리와 측정된 거리의 차이를 계산합니다.

3. speed = kp × errorVal 로 원하는 거리와 측정된 거리의 차이를 보정하는데 필요한 속도를 계산합니다.

4. 양쪽 바퀴를 계산된 속도로 구동하십시오(로봇 드라이브 최대 속도 96에서 제한).

 


알고 계셨습니까?

원하는 물리적 출력레벨을 유지하는 자동화된 시스템을 제어시스템이라고 합니다. 로봇카의 경우 유지된 레벨은 앞에 있는 개체와 로봇카 사이의 거리입니다. 많은 제어 시스템은 레벨을 유지하기 위해 피드백 루프를 사용합니다. 우리의 로봇카는 이에 대한 대표적인 예입니다. 측정된 거리는 시스템으로 피드백되고 다음 속도를 계산하기 위한 설정점과 비교되며, 이는 제어 루프라고 하는 과정에서 반복적으로 발생합니다.


엔지니어는 이 블록 다이어그램과 같은 그림을 사용하여 컨트롤 루프의 디자인을 검토하고 그것이 기술자 및 다른 엔지니어에게 어떻게 작용하는지 알려줍니다. 설정 점 (로봇카가 유지하려고하는 거리)이 32이고 측정된 거리가 38 인 경우 오류값이 있습니다. 이 오류 값은 설정 지점 - 측정 거리입니다. 32 - 38 = -6입니다. 이 오류는 루프에서 오류를 수정하는 속도인 출력의 비례 상수 ( kp )를 곱합니다. 속도(speed) = kp x 오류 값(errVal) 또는 60 = -10 x -6입니다.  


그림입니다. 원본 그림의 이름: mem000021c00018.png 원본 그림의 크기: 가로 600pixel, 세로 233pixel 사진 찍은 날짜: 2013년 09월 01일 오후 10:53


위 그림의 원을 합계 접합부 (덧셈 또는 뺄셈)라고 하며, 직사각형 블록은 다를 수 있는 연산을 지정합니다. 이 예에서 상위 1은 비례 상수로 오류를 곱하는 비례 제어 블록입니다. System 블록은 우리가 반드시 제어할 필요가 없는 것들을 나타냅니다. 이 예제에서 사용되지 않은 다른 일반적인 컨트롤 블록은 Integral (반복), Derivative (갑작스런 시스템 변경에 응답)에 대한 수정을 가능하게 합니다.

 

시도해 보세요!

거리 변화의 값이 변함에 따라 errorVal 과 speed 사이의 관계를 관찰하는 것이 좋습니다. 이를 위해 터미널을 사용할 수 있습니다.

그림입니다. 원본 그림의 이름: mem000021c00019.png 원본 그림의 크기: 가로 233pixel, 세로 199pixel 사진 찍은 날짜: 2017년 04월 09일 오후 3:09


- 중요 : 로봇카의 전원 스위치를 1로 설정하여 휠을 컴퓨터에 연결하기 전에 바퀴를 움직일 수 없도록 하십시오.

- 프로젝트 복사본을 저장하고 Ping Try Ping이라고 이름을 지정하십시오.

- terminal 블록과 pause 블록을 당신 프로젝트 repeat forever 루프 아래에 추가하십시오.


그림입니다. 원본 그림의 이름: mem000021c0001a.png 원본 그림의 크기: 가로 447pixel, 세로 261pixel 사진 찍은 날짜: 2017년 04월 09일 오후 3:10


- 프로그램을 저장하고 한 번 실행 버튼을 클릭하십시오.

- 로봇카 앞에 손을 대고 터미널 창의 값이 바뀌는 것을 보십시오.

- 속도가 96보다 커지도록 손을 충분히 움직일 수 있습니까? 충분히 닫혀 -96보다 작습니까? 이것은 로봇 최대 속도 블록의 유틸리티를 보여줍니다.

- 속도 = 0 되도록 올바른 위치에 손을 놓을 수 있습니까 ? errorVal 과 distance가 같아지려면 얼마입니까 ?


참고: 이 수정된 프로젝트는 탐색이 아닌 데이터를 보는 것입니다! 푸시 핑 (Ping) 으로 돌아가거나 탐색 활동으로 돌아가려면 터미널을 일시 중지하고 블록을 일시 중지하십시오.


당신 차례 !

여기에 실험할 가치가 많이 있습니다. 예를 들어 setPoint 변수를 32에서 20으로 변경하면 로봇카는 자신과 그 앞에 있는 객체 사이의 거리를 20cm로 유지하려고 시도합니다. kp 의 값은 더 작은 오차 거리에서 더 빨리 교정하려고 시도하거나 더 큰 오차 거리에서 보정하는 것을 더 느리게 만들 수 있습니다.


- setPoint 및 kp 값을 조정하여 성능에 어떤 변화가 있는지 확인합니다.

- 당신이 시도한 것과 로봇카가 어떻게 대응했는지 기록하십시오. setPoint 및 kp 의 어떤 값이 최적입니까?


당신이 robot set accleration의 값을 감소시키면, 그것은 변화를 완화하지만 그렇게 천천히 객체로 실행되는 응답의 원인이 될 수 있습니다. 그것을 증가시키면 갑작스럽게 반응합니다. 너무 크면 방향이 너무 빨리 바뀌어 브레드 보드의 Ping)) 센서가 빠질 수도 있습니다!


- 로봇 세트 가속 값을 아래로 조정하여 동작을 부드럽게 만들거나 위쪽으로 돌리면 갑작스러운 동작이 됩니다.

- 자신에게 가장 적합한 성능을 검색하면서 가치를 실험해 보십시오.

- 다시 시도한 내용과 로봇카의 성능이 어떻게 반응했는지 기록하십시오.


로봇 드라이브의 최대 속도를 높이면 로봇카가 후퇴하는 물체를 따라가는데 도움이 됩니까? 로봇 드라이브의 최대 속도를 줄이면 응답 속도가 느려질 수 있습니까?


- 로봇 드라이브의 최대 속도 설정을 시험하여 증가 및 감소의 효과를 확인하십시오.



이전 페이지로      다음 페이지로