블록쌓기 프로그래밍

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

브로클리 로봇S3 – 3. 간단한 동작 모터블록으로

Contents

브로클리 로봇S3 실습 세부목차


1. 브로클리 로봇S3 시작하기

2. 브로클리 로봇S3 - 불빛과 소리

3. 브로클리 로봇S3 - 간단한 동작 모터블록으로

4. 브로클리 로봇S3 - 센서 주행하기

5. 브로클리 로봇S3 - 외부장치 확장


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


브로클리프롭(BlocklyProp) 프로그래밍 방법으로 Parallax사의 스크리블러3(Scribbler 3 : S3) 로봇을 교육활동에 사용할 수 있습니다. 로봇S3 에는 여러 가지 종류의 센서가 이미 내장되어 있어서, 초등학생들도 전자회로 구성의 어려움없이 로봇제어를 고급 수준까지 프로그래밍할 수 있는 특징이 있습니다.


브로클리프롭(BlocklyProp)에 익숙해지고 로봇S3의 LED를 실험해 보았다면, 운전을 시작하십시오! 모터 블록을 위한 Simple Motion에서, 학습내용은 로봇S3 를 움직이게 하는 블록을 소개합니다. 로봇을 운전할 수 있도록 프로그래밍하는 방법에는 여러 가지가 있습니다. 간단하게 시작한 다음 로봇의 동작을 보다 잘 제어할 수 있는 보다 복잡한 블록을 만들 것입니다. 


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

1) 운전 기본사항 - 블록운전 및 회전

2) 전진 및 후진 - 속도 블록 사용

3) 거리 이동 - 드라이브 거리 블록 사용

4) 다양한 회전과 호

5) 단순한 모양으로 주행하기

6) 예술적 도형으로 회전하기


이 페이지를 학습하기 이전에 “브로클리 로봇S3 시작하기” 과 “브로클리 로봇S3 - 불빛과 소리”를 먼저 살펴보아야 합니다.


1) 운전 기본사항 - 블록운전 및 회전


지금까지 재미있었지만, 로봇S3 이동을 시작할 준비가 되었습니다. 로봇S3 롤링을 얻는 가장 간단한 방법은 드라이브 블록을 사용하는 것입니다. 그것은 ACTIONS> MOTORS 범주에 있으며 다음과 같습니다 :

그림입니다. 원본 그림의 이름: mem000019d0611c.png 원본 그림의 크기: 가로 365pixel, 세로 47pixel 사진 찍은 날짜: 2016년 08월 29일 오후 4:49


이 하나의 블록에서, 위의 이미지내의 3 개 드롭다운 메뉴 (forward, straight 그리고 full) 중 하나를 선택해서 로봇S3 움직임의 중요한 측면을 제어할 수 있습니다. 각 메뉴를 클릭하면 필요한 옵션을 선택할 수 있도록 다양한 옵션이 나타납니다.


첫 번째 메뉴에서는 forward 또는 backward 방향으로 드라이브 설정할 수 있습니다.

그림입니다. 원본 그림의 이름: mem000019d00001.png 원본 그림의 크기: 가로 366pixel, 세로 86pixel 사진 찍은 날짜: 2016년 08월 29일 오후 6:39


두 번째 메뉴는 직진 주행으로 선택하거나 또는 곡선 경로(약간 왼쪽으로 또는 오른쪽으로 회전, 부드럽게 왼쪽으로 또는 오른쪽으로, 또는 급격하게 왼쪽으로 또는 오른쪽으로)로 주행하게 할 수 있습니다.

그림입니다. 원본 그림의 이름: mem000019d00002.png 원본 그림의 크기: 가로 371pixel, 세로 200pixel 사진 찍은 날짜: 2017년 07월 07일 오후 4:41


세 번째 메뉴에서는 로봇S3를 전체 (100 %), 빠르게 (75 %), 부드럽게 (50 %) 또는 느리게 (25 %) 이동할 속도를 선택할 수 있습니다. 이 속도는 주행 표면의 경사 및 질감에 따라 달라질 수 있는 로봇S3의 최대 속도에 대한 대략적인 백분율을 기준으로 합니다.

그림입니다. 원본 그림의 이름: mem000019d00003.png 원본 그림의 크기: 가로 408pixel, 세로 136pixel 사진 찍은 날짜: 2016년 08월 29일 오후 6:39


시도해 보세요!

- 위와 같은 drive 블록을 설정하십시오 – 전속력(full)으로 똑바로(straight) 전진(forward)하도록.

- 이제 프로그램을 실행하십시오 (로봇S3를 잡을 준비가 됨).


문제가 보이십니까? 귀하의 로봇S3는 전방으로 똑바로 전속력으로 멈추지않고 계속 움직입니다. 멈출 방법이 필요합니다!


알고 계셨습니까?

로봇S3는 차동 드라이브 시스템을 사용합니다. 즉, 각각 자체 모터가 있는 두 개의 구동 휠이 있어 서로 다른 속도와 방향으로 독립적으로 움직일 수 있습니다. 로봇S3에서 구동 바퀴는 로봇의 섀시 중앙선에 위치하고 후면에는 힘이 없는 꼬리 바퀴가 있습니다. 이 학습을 진행하면서 이런 기민한 설계를 이해하게 될 것입니다.


1. 드라이브 휠이 같은 속도로 앞으로 움직이면 로봇S3가 똑바로 앞으로 움직입니다 (드라이브를 뒤집어 로봇이 똑바로 뒤로 이동합니다).

2. 바퀴가 반대 방향으로 같은 속도로 회전하면 로봇이 시계 방향 또는 반 시계 방향으로 회전합니다. 이 경우 특별히 제작된 테일 휠이 드라이브 표면을 가로 질러 미끄러지므로 옆쪽으로 움직일 때 마찰이 거의 발생하지 않습니다.

3. 마지막으로 바퀴가 같은 방향으로 움직일 때 속도가 달라지면 로봇은 곡선 경로 또는 호를 따라 움직입니다.


이러한 개념을 이해하면 로봇S3 운동을 올바르게 프로그래밍하는데 도움이 됩니다. 머리 속에 시각화하기가 어렵다면 종이로 그려보십시오. 화살표를 사용하여 여기에 나열된 세 가지 상황에서 각 휠이 어느 방향으로 나아갈지를 보여줍니다.


구조를 위한 "운전정지 블록"

드라이브 블록 카테고리와 동일한 범주 아래에서 운전정지 블록을 찾을 수 있습니다.


- 그것을 프로그램에 추가하십시오. 그것은 다음과 같이 보일 것입니다.

그림입니다. 원본 그림의 이름: mem000019d00004.png 원본 그림의 크기: 가로 364pixel, 세로 67pixel 사진 찍은 날짜: 2017년 07월 07일 오후 5:11

- 운전정지 블록을 사용하여 프로그램을 구동하십시오.


로봇S3가 멈췄습니다. 맞습니까? 이는 로봇S3이 운전 명령을 받은지 불과 몇 밀리 초가 지난 후 운전정지 명령이 주어졌기 때문입니다. 원하는대로 로봇을 작동하게 하려면, 대기(wait) 블록이 하나 더 필요합니다. 


대기(wait) 블록은 CONTROL 카테고리에서 찾을 수 있습니다 :


이 블록의 기본 단위는 밀리 초입니다. 값은 내부 자주색 값 블록의 숫자를 변경하여 설정할 수 있습니다.


시도해 보세요!

- 브로클리프롭(BlocklyProp)에서 아래처럼 보이는 새로운 프로그램을 만듭니다. 그런 다음 로봇S3에서 실행하십시오.

그림입니다. 원본 그림의 이름: mem000019d00005.png 원본 그림의 크기: 가로 363pixel, 세로 104pixel 사진 찍은 날짜: 2016년 08월 29일 오후 7:43


잘 동작합니다! 이제 새로운 것을 시도해보십시오.


- 다음과 같은 프로그램을 작성한 다음 실행하십시오.

그림입니다. 원본 그림의 이름: mem000019d00006.png 원본 그림의 크기: 가로 365pixel, 세로 180pixel 사진 찍은 날짜: 2017년 05월 30일 오후 11:55


다른 방법으로 이를 수행하려면, 회전(rotation) 블록에 대해 배워봅시다. ACTIONS> MOTORS 카테고리에서 찾을 수 있습니다. 다음과 같이 보입니다.

그림입니다. 원본 그림의 이름: mem000019d00008.png 원본 그림의 크기: 가로 271pixel, 세로 30pixel 사진 찍은 날짜: 2017년 05월 30일 오후 11:59


회전(rotate) 블록은 회전 방향(시계방향 또는 반시계방향), 회전 각도(degrees to turn) 값, 회전 속도(rotation speed: full, a quick, a gentle, or a slow speed)을 설정할 수 있습니다. 회전 각도(degrees to turn) 메뉴는 원하는 각도로 쉽게 설정할 수 있도록 드롭다운 도구(또는 1에서 359 사이의 숫자를 입력할 수 있습니다.)로 제공됩니다. 아래에서 90 도로 설정된 것을 확인하십시오.

그림입니다. 원본 그림의 이름: mem000019d00007.png 원본 그림의 크기: 가로 280pixel, 세로 138pixel 사진 찍은 날짜: 2016년 08월 29일 오후 9:08



자, 좀 더 스타일을 가지고 앞뒤로 움직이는 프로그램을 작성해보십시오. 다음과 같은 모양이어야 합니다.

그림입니다. 원본 그림의 이름: mem000019d00009.png 원본 그림의 크기: 가로 352pixel, 세로 206pixel 사진 찍은 날짜: 2017년 05월 31일 오후 0:10


- 프로그램을 실행하십시오. 아래 gif 이미지와 같이 작동했습니까?

그림입니다. 원본 그림의 이름: mem000019d0000a.gif 원본 그림의 크기: 가로 320pixel, 세로 240pixel


 

당신 차례입니다.

위의 프로그램에서 로봇이 회전 블록에 도달하면, 로봇S3가 최고 속도에서 너무 빨리 멈추어서 꼬리 바퀴가 상하로 들리는 소리가 납니다.


- 위의 프로그램을 다시 작성하거나 설정을 변경하거나 블록을 추가하여 갑작스런 정지 및 회전을 제거하십시오.


당신이 무엇을 바꾸었습니까? 동작 했습니까? 저 꼬리바퀴 소리가 사라질 때까지 다른 아이디어를 시도하십시오. 무엇을 배웠습니까?


- 전속력으로 전진하고, 180도 회전하고, 느린 속도로 되돌아가서 긴시간이 지난다음 처음 출발한 지점에 도착하는 프로그램을 작성하시오. 어떤 느린 속도를 사용했습니까? 어떤 대기 시간을 사용했습니까?

- 전진하고, 느린속도로 급격히 우회전해서 멈추는 프로그램을 작성하시오. 로봇S3이 완전한 동그라미로 여행하기를 원한다면 운전정지 블록을 사용하기 전에 프로그램이 얼마나 오래 기다려야 합니까?



2) 전진 및 후진 - 속도 블록 사용


이제 로봇S3로 기본 주행을 시도했으므로 약간 더 복잡한 모션 명령으로 이동할 준비가 되었습니다. 먼저 ACTIONS> MOTORS 블록 카테고리에서 드라이브 속도 블록을 찾아보십시오.


로봇의 왼쪽과 오른쪽에 있는 두 개의 커다란 바퀴를 자세히 살펴보십시오. 이들 각각은 플라스틱 케이스 내부의 기어 모터에 부착됩니다. 후부의 꼬리 바퀴는 동력을 공급받지 않습니다. 그러나 그것은 로봇S3가 움직이고 있는지, 또는 멈추게 되었는지에 대해 감시할 수 있습니다.


드라이브 속도 블록은 당신이 입력할 수 있는 세 가지 매개 변수 (값)을 가집니다.

그림입니다. 원본 그림의 이름: mem000019d0000b.png 원본 그림의 크기: 가로 340pixel, 세로 362pixel 사진 찍은 날짜: 2017년 05월 31일 오후 2:22


왼쪽 모터 속도오른쪽 모터 속도 값은 백분율로 표시됩니다.

양의 속도 비율 ( 1 ~ 100 % )은 로봇S3을 앞으로 이동시킵니다.

음의 속도 비율 ( -100 % ~ -1 % )은 로봇을 반대 방향으로 이동시킵니다.

0 값을 사용하면 로봇이 멈추거나 (움직이는 경우) 멈추지 않고 (움직이지 않은 경우) 계속 유지됩니다.

기간(duration)은 밀리 초 단위로 설정됩니다. 밀리 초 (밀리 초 및 초에서, abreviation : ms)는 1 초의 1/1000 또는 10 ^ -3 또는 1/1000입니다. 따라서 duration 동안 입력된 1000ms 값은 길이가 1 초가 됩니다.


특정 duration 동안 오른쪽 모터 속도와 왼쪽 모터 속도를 동일한 값으로 설정하면, 로봇S3는 직선으로 전진 또는 후진합니다. 마루, 작은 장애물, 고르지 않은 경사면 또는 도중에 만나는 경사면 때문에 타일 바닥이나 카페트에서 방향에 작은 변화가 발생할 수 있습니다. 이러한 변화 또는 바퀴 미끄러짐은 의도한 목적지에 완벽하게 도착하지 못하게 방해합니다.


 

운동 물리학 (The Physics of Motion)

운동 물리학을 연구할 때, 이론과 실제 조건 사이에 약간의 차이가 있을 수 있다는 것을 종종 알게 됩니다. 이 아이디어의 한 예는 이론적인 계산을 할 때 마찰이나 공기 저항의 영향을 무시할 수 있지만 실제 사례를 보기 시작할 때 이러한 힘은 존재하고 무시할 수 없다는 것입니다.


로봇S3은 실제 세계에서 작동하므로 다른 속도와 다른 표면에서 움직이는 방식에 변화가 있습니다. 이것은 로봇S3의 모터가 다양한 속도, 전류, 내부 저항, 마찰의 변화, 시간 경과에 따른 기어 윤활의 변화조차도 반응하는 방식 때문입니다. 전술한 바와 같이, 상이한 경사 또는 불규칙한 운동 표면은 관찰된 운동에서의 변화를 유발할 수 있습니다.


분명히 말해서, 이것은 당신이 다른 속도와 다른 표면에서 운전할 때 로봇S3의 움직임에 현저한 차이가 있음을 의미합니다. 이러한 변화를 한계로 오해하지 마십시오. 로봇S3은 매우 정확한 거리와 방향을 움직일 수 있습니다. 이것은 향후 학습내용에서 발견 할 수 있는 것처럼 로봇S3의 움직임을 제어하는 몇 가지 방법이 다른 것보다 더 정확하다는 것을 의미합니다.


예를 살펴 보겠습니다.

거리 (d) = 속도 (r) x 시간 (t)


d = rt 방정식을 잘 알고 있을 것입니다. 이 방정식은 로봇이 이동하는 거리가 이동 속도와 이동 시간의 함수라는 것을 보여줍니다. 이 방정식에서 다양한 단위를 사용할 수 있지만 다음과 같이 단순하게 유지합니다.


거리(Distance) 미터 (m) - 미터법 단위는 종종 과학에서 표준으로 사용됩니다. 미터는 3.28 피트 또는 1 야드 이상입니다. 대부분의 하드웨어 상점에서 미터법 테이프를 찾을 수 있습니다.

속도는 초당 미터 (m / s)입니다. 이것은 속도로 1 초 동안 이동한 거리 (미터)입니다.

시간은 초입니다.


100 % 드라이브 속도에서 로봇S3은 약 0.18m / s로 움직이고 50 % 드라이브 속도는 약 0.09m / s 또는 약 절반 정도 빠릅니다. 5 초 동안 100 % 속도로 움직이는 로봇S3은 5 초 동안 50 % 속도로 움직이는 로봇S3 거리의 정확히 두 배 움직여야 합니다.


그림입니다. 원본 그림의 이름: mem000019d0000c.png 원본 그림의 크기: 가로 615pixel, 세로 258pixel 사진 찍은 날짜: 2016년 08월 19일 오후 6:24


다음 두 블록 모두 동일한 목적지에 도착하는 로봇S3을 가져옵니다. 이것은 이론적으로 일어날 일이지만 실제 현실 세계에서 작동합니다. 모터가 반응하는 방식, 주행면의 변형 또는 마찰이나 미끄러짐을 유발하는 기타 조건의 차이는 거의 사실입니다.

그림입니다. 원본 그림의 이름: mem000019d0000d.png 원본 그림의 크기: 가로 634pixel, 세로 137pixel 사진 찍은 날짜: 2017년 06월 03일 오후 3:10


아래의 d = rt 수식에 이 값을 넣으면 아래처럼 아이디어가 나타납니다.

그림입니다. 원본 그림의 이름: mem000019d0000e.png 원본 그림의 크기: 가로 431pixel, 세로 154pixel 사진 찍은 날짜: 2016년 08월 19일 오후 8:21


이 방정식에 따르면, 드라이브 속도 값이 50 %로 프로그래밍된 로봇S3은 100 % 드라이브 속도 값을 가진 로봇S3과 동일한 거리를 이동할 수 있으며 간단히 두 배 길이의 지속 시간 을 설정하면 됩니다. 이 자습서에서 더 나아가 이 프로세스를 시험해보고 발생할 수 있는 실제 변화를 관찰할 수 있습니다.


네비게이션 프로그램 예제로 생각할 것 : 속도가 느린 이동 로봇은 속도의 급격한 변화가 적기 때문에 빠르게 움직이는 로봇보다 더 정확하고 쉽게 제어할 수 있습니다.


알고 계셨습니까?

MSL 화성 과학 실험실 - 호기심 탐사선은 화성 탐사 5 학년입니다. 전력 수준, 지형지도, 미끄러짐 및 가시성을 포함한 변수를 기반으로 한 최대 지형 트래버스 속도는 자동 탐색을 사용하여 하루 200m (660ft)로 추정됩니다. 시간당 90 미터 (300 피트)까지 이동할 수 있지만 평균 속도는 시간당 30 미터 (98 피트)입니다.

출처 : https://en.wikipedia.org/wiki/Curiosity_(rover)


로봇S3은 최고 속도로 초당 0.18 미터, 즉 분당 10.8 미터 - 시간당 648 미터 (또는 2,125 피트)의 속도입니다. 통제된 속도로 움직이는 우리의 로봇S3은 화성 과학 실험실이 1 일 안에 커버하는 시간을 1 시간 안에 커버할 수 있습니다.


호기심 탐사선에 공평해지기 위해서는, 화성 표면은 우리의 가정이나 교실 바닥 또는 탁상보다 더 어려운 지형입니다. 물론 호기심 탐사선에는 Sharpie® 펜 포트가 없습니다!

 


시간 차단(blocking) 및 실시간 모터 명령하기

동작 속도 블록은 두 가지 방법으로 사용될 수 있습니다: duration 값이 있는 경우와 없는 경우. duration 값이 0보다 큰 값을 사용할 때 blocking 명령이 사용된 것으로 생각합니다. 이 사용됩니다 그것은 간주 차단 명령. 이는 지속 시간 값이 경과할 때까지 로봇S3이 다음 코드로 진행하지 않기 때문입니다.


duration 이 설정되지 않을 때(즉 기본값으로 남아 있을 때), 모터의 속도 및 방향은 영원히 또는 다른 블록으로 변경 될 때까지 유지됩니다. 이를 non-blocking 명령이라고 합니다.


예 : 지속 시간이 있는 모터 속도 (시간이 차단됨)

그림입니다. 원본 그림의 이름: mem000019d0000f.png 원본 그림의 크기: 가로 303pixel, 세로 210pixel 사진 찍은 날짜: 2017년 06월 05일 오후 3:51


이 프로그램을 실행하는데 약 4 초 (4000ms)가 소요됩니다. 로봇S3은 3/4 속도 (75 %)로 앞으로 이동하고 정지하고 시작 지점으로 돌아갑니다 (다시 돌아가며).

 

예 : 지속 시간이 없는 모터 속도 (차단되지 않은 시간)

그림입니다. 원본 그림의 이름: mem000019d00010.png 원본 그림의 크기: 가로 292pixel, 세로 211pixel 사진 찍은 날짜: 2017년 06월 05일 오후 4:00


이 프로그램은 로봇S3을 후진 이동시킵니다. 실제로 전진 모션 블록이 먼저 있음을 주목하십시오. 설정된 지속 시간이 없으므로 두 번째 블록 (후진 동작)에 의해 즉시 변경됩니다. 이후에는 아무 것도 없기 때문에, 후진 모션 블록은 영원히 계속 실행됩니다.


왜 non-blocked drive speed 명령 대신 blocked drive speed 명령을 한 번 사용합니까? 시간 차단(time blocking) 명령은 로봇S3의 펜 포트에서 Sharpie®를 사용하여 보다 정확한 모양을 그리거나, 로봇S3이 정확한 거리를 이동해야 하는 다른 활동에 유용합니다. 거리 명령에 대해서는 이후 내용에서 설명합니다.


로봇S3로 계속 작업하면서 어떤 운동 제어 방법이 특정 상황에서 가장 정확하게 작동하는지를 배우게 됩니다. 비 차단 운전(non-blocked drive) 명령은 로봇S3이 물리적 환경의 변화에 즉시 대응해야 하는 센서 기반 주행에 더 유용합니다. 예 : 적외선 센서로 빛 추적, 라인 추적 또는 물체 감지 및 회피. 


 

블로킹되지 않은 드라이브 속도 블록과 함께 대기(wait) 블록 사용

단일 프로그램은 일반적으로 여러 가지 방법으로 개발될 수 있으며 동일하거나 유사한 최종 결과를 가집니다. CONTROL 메뉴의 대기 블록은 non-blocked drive speed 블록과 함께 사용될 수 있고, 시간 duration을 갖는 drive speed 블록과 동일한 결과를 생성합니다.


그림입니다. 원본 그림의 이름: mem000019d00011.png 원본 그림의 크기: 가로 672pixel, 세로 387pixel 사진 찍은 날짜: 2017년 06월 05일 오후 5:39


오른쪽 프로그램에서 세 번째 드라이브 속도 블록을 발견했을 것 입니다. 이 블록은 로봇에게 멈추라고 알려주는데 필요합니다. 이전 튜토리얼에서 대기 블록은 일시 정지를 의미한다는 것을 배웠지만 그보다 조금 더 복잡합니다. 빛을 묘사해봅시다. 조명 스위치를 켜면 표시등이 켜집니다. 다음 명령을 기다리는 동안 이전 ON 명령을 계속 수행합니다. 그런 다음 스위치를 끄면 표시등이 꺼집니다. 다시 다음 명령을 기다리고 OFF 명령을 계속 수행합니다. 모터도 여전히 동작하고 있습니다. 세 번째 드라이브 속도 블록은 제 위치에 있으며 모터를 완전히 멈추기 위해 0으로 설정됩니다.



시도해 보세요!

로봇S3이 4000ms 동안 100 % 속도로 전진하고 50 % 속도로 시작점으로 후진하도록 프로그램하십시오. 로봇S3 주변을 테이프로 정사각형으로 만들어 프로그램을 테스트하고 출발점으로 돌아 왔는지 확인하십시오.


다음은 그 예입니다.

그림입니다. 원본 그림의 이름: mem000019d00012.png 원본 그림의 크기: 가로 303pixel, 세로 210pixel 사진 찍은 날짜: 2017년 06월 05일 오후 5:47


로봇S3은 어떻게 실행되었습니까? 그것이 시작된 정확한 지점으로 돌아왔습니까? 로봇S3을 정확한 위치로 되돌리려면 어떤 요소를 수정해야합니까? 그러나 로봇S3 드라이브를 정확한 위치로 앞뒤로 이동하려면 설정을 변경해야한다는 것을 기억하십시오. 위 공식이 적용됩니다.  거리 (d) = 속도 (r) x 시간 (t) . 정확히 1/2 속도 (100 % 및 50 %)를 사용하는 경우,  시간이 얼마나 정확히 두 배가 됩니까? 정확히 두 배의 시간 (4000 ms와 8000 ms)을 사용하면, 동일한 지점에서 시작하고 끝나기 위해 속도 설정은 정확히 어떤 식으로 변화해야 합니까?


알고 계셨습니까?

엔지니어, 프로그래머 및 로봇 공학자는 종종 노트북 (디지털 또는 종이)에 실험 및 / 또는 테스트, 디자인 또는 작동하는 방법을 기록합니다. 예를 들어, 많은 전자 공학 애호가들은 Forrest M. Mims III 의 훌륭한 노트북 시리즈를 알고 있습니다.

좋은 생각이며, 당신이 한 일, 일한 것, 하지 않은 것을 기억하는데 도움이 됩니다. 당신 자신의 일에 이 습관을 넣어보십시오.


마찰이나 다른 문제없이 완벽한 조건이 주어졌을 때 거리 (d) = 속도 (r) x 시간 (t) 은 항상 사실입니다. 우리의 조건이 완벽하지 않기 때문에 위의 Try 예제의 결과를 아래 차트와 같이 차트에 기록해 두십시오. 이것은 실제 결과와 이상이 얼마나 다른지에 대한 아이디어를 제공할 것입니다.


이 결과를 시도하십시오 - 100 %에서 4,000 밀리 초를 드라이브하고 50 % 속도로 시작 지점으로 돌아가십시오.

그림입니다. 원본 그림의 이름: mem000019d00013.png 원본 그림의 크기: 가로 573pixel, 세로 239pixel 사진 찍은 날짜: 2016년 12월 15일 오후 5:55


로봇S3은 0에서 100 % (정방향 이동 및 역방향 이동)속도 설정을 할 수 있지만, 현실적인 제한 사항이 있습니다. 25 %, 50 %, 75 % 및 100 % 드라이브 속도 간의 관계는 실제 세계에서 정확하게 비례하지 않습니다. 물론 100 % 속도 설정의 절반인 (특정 조건에 기반한) 속도 설정이 있습니다. 드라이브 속도 블록의 백분율 설정은 좋은 근사값이지만 근사값입니다. 즉, 로봇S3이 절반 속도로 작동해야하는 경우 환경에 맞게 속도 설정을 테스트해야 합니다.


참고 : 위에서 설명한 것처럼 로봇S3의 동작을 제어하는 보다 정확한 방법이 있으며 이러한 방법은 다른 학습내용에서 다뤄질 것임을 기억하십시오.


지금은 실습을 계속 해봅시다 ...


- 위의 프로그램을 수정하여 역순으로 실행하면 로봇이 결승선까지 후진하고 출발선으로 넘어갑니다. 이 예제에서 어떤 변형을 발견 했습니까? 정확한 시작 지점에 도달하기 위해 설정을 어떻게 변경했습니까? 시간, 속도 또는 둘 다를 변경했습니까? distance (d) = rate (r) x time (t) 이므로 모든 메소드가 동작해야 합니다.

- 동일한 작업을 수행하려면 위의 프로그램을 수정하되 차단되지 않은 (지속 시간은 0으로 설정 됨) 드라이브 속도 블록과 함께 대기 블록을 사용하십시오. 올바르게 작동 했습니까? 그렇지 않다면 무엇이 잘못되었는지 알아낼 수 있습니까? 힌트 : 두 번째 지연 후에 모터가 지속적으로 작동을 멈추라는 지시를 받아야한다는 예에 주목했습니까?

 

당신 차례 !

- 로봇S3을 약 2 미터 전진시키십시오. 작동 거리 ( t ) 를 계산하기 위해 작업한 거리 공식을 사용하십시오. 모터 속도 100 %에서 2m를 거리 ( d )로, 예상 속도 ( r )를 0.18m / s로 계산하십시오. 이러한 단위를 사용하면 시간이 초 단위가 되므로 ms로 변환해야 합니다. time blocked 및 non-blocked 방법을 모두 사용하면 어떻게 됩니까? 자신의 노트북에 결과를 기록하십시오.

- 위의 프로그램을 수정하여 동일한 시작점으로 25 % 속도로 뒤로 이동하십시오. 어떤 실제 세계의 변수가 있었습니까? 프로그램이 원하는대로 작동하도록 설정을 조정하거나 비틀 수 있습니다. 결과를 기록하십시오.

- 드라이브 속도를 왼쪽과 오른쪽의 서로 다른 전진 속도로 설정하면 어떻게 될 것이라고 생각하십니까? 한쪽을 앞으로 (양수)로 움직이고 한 번은 뒤로 (음수)로 움직이도록 설정하십시오. 하나의 모터 속도가 0 값으로 유지되고 다른 모터 속도가 양수 또는 음수 값으로 설정되면 어떻게 됩니까? 시도해보십시오!

- 시계 방향으로 로봇S3 회전을 할 수 있습니까? 반 시계 방향으로 돌리는 건 어떤가요? 위에서 테스트한 테이프를 사용하여 프로그래밍을 테스트하십시오!


3) 거리 이동 - 드라이브 거리 블록 사용


인코더 및 모터 기어

로봇S3은 내부의 엔코더 센서와 사전 프로그래밍된 로직을 갖추고 있어서 로봇을 프로그래밍할 때 정확하게 로봇진행을 유지합니다. 인코더가 없다면 모터 쌍이 독자적으로 정확히 일치하지 않으므로 로봇S3 이동을 직선으로 만들기가 어려울 수 있습니다.


인코더 센서는 로봇S3가 기동을 수행하면서 좌우 모터 속도를 조정하는데 사용하는 엔코더 틱 (아래에서 자세히 설명합니다)을 모니터링합니다. 이 센서는 로봇이 프로그램에 정의된대로 속도 및/또는 거리를 정확하게 일치시킬 수 있도록 합니다. 데스크톱과 같이 작업중인 표면이 평탄하면, 인코더가 로봇S3을 프로그래밍된 시작점으로 돌아가게 하고, 정확한 추측항법을 수행할 수 있도록 합니다.


알고 계셨습니까?

인코더는 동작 중에 동작 속도를 지속적으로 제어하고 측정할 수 있는 폐 루프 제어 시스템을 제공합니다. 로봇S3의 모터는 한쪽에는 기어박스가 있고 다른 쪽에는 광학 엔코더가 있습니다. 광학 인코더에는 적외선 슬롯 센서의 상태 변화로 카운트되는 4 개의 슬롯이 있습니다. 기어 감소의 경우, 휠의 전체 회전에는 507.4 개의 엔코더 전환 또는 엔코더 틱이 있습니다. 로봇S3의 내부 인코더는 모터 샤프트에 연결된 인쇄 회로 기판 (PCB)에 장착됩니다. 원하는 경우 신중하게 로봇S3을 열고 살펴보십시오. 그러나 제거한 모든 하드웨어를 저장해야만 작업이 완료될 때 셸을 제대로 봉인할 수 있습니다.


그림입니다. 원본 그림의 이름: mem000019d00014.png 원본 그림의 크기: 가로 218pixel, 세로 236pixel 사진 찍은 날짜: 2016년 08월 29일 오후 3:43그림입니다. 원본 그림의 이름: mem000019d00015.png 원본 그림의 크기: 가로 222pixel, 세로 235pixel 사진 찍은 날짜: 2016년 08월 29일 오후 3:43그림입니다. 원본 그림의 이름: mem000019d00016.png 원본 그림의 크기: 가로 199pixel, 세로 235pixel 사진 찍은 날짜: 2016년 08월 29일 오후 3:43


바퀴 둘레 및 인코더 계수

로봇S3은 완전한 바퀴 회전 (0.491 mm / count) 당 507.4 개의 엔코더 카운트를 가지고 있습니다. 바퀴의 직경은 3.15 "(80 mm)입니다.


그림입니다. 원본 그림의 이름: mem000019d00017.png 원본 그림의 크기: 가로 454pixel, 세로 210pixel 사진 찍은 날짜: 2016년 08월 25일 오후 4:52


원주 = pi * 직경 (C = πd)


바퀴가 한 바퀴 완전히 회전할 때 로봇S3의 이동 거리를 결정하려면 다음 공식을 사용하여 바퀴의 둘레를 결정하면 됩니다.


C = πd


이 방정식에서 " C "는 휠의 둘레를 나타내고 " d "는 휠의 직경을 나타냅니다. π 는 일반적으로 3.14159에 근사되는 수학 상수 파이(pi)입니다. 두 개의 유효 자릿수를 사용해서, 하나는 바퀴를 측정하여 얻은 것, C 는 다음과 같습니다. (미터법과 인치법)


C = (3.14) (3.15in)

C = 9.89in

또는

C = (3.14) (80 mm)

C = 251.2 mm

 


드라이브 거리 블록

드라이브 거리 블록은 정확한 거리를 로봇S3이 이동하도록 프로그램할 수 있습니다.

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


- 단위를 선택하십시오 : 밀리미터 (mm), 센티미터 (cm), 인치 (인치), 1/10 인치 (1/10 인치) 또는 엔코더 카운트.

- 왼쪽 모터 거리(left motor distance)와  오른쪽 모터 거리(right motor distance))에 대해 각 휠을 움직일 단위 숫자를 입력하십시오.

- 최고 속도 (1 ~ 100 %)를 입력하십시오. 거리가 각 모터에 대해 동일한 값일 때 두 바퀴에 최대 또는 최고 속도가 적용됩니다. 호 또는 곡선에 이 명령을 사용하는 경우 로봇S3은 가장 멀리 이동하는 휠에만 최고 속도를 적용합니다.


참고: (주의 사항) 로봇S3의 속도는 운전중인 표면의 경사 및 재질에 영향을 받습니다. 모션 계산에 대한 실제 제한 사항에 대한 알림이 필요하면 이전 학습내용을 다시 참조하십시오.


동작 거리 블록은 time blocked 명령입니다. 로봇S3은 다른 블록을 계속하기 전에 이 명령을 완료해야 합니다. 드라이브 속도 블록을 사용하는 것과 마찬가지로 대상에 도달하는데 필요한 시간은 선택한 속도의 함수입니다.


시간 (t) = 거리 (d) / 속도 (r)


특정 거리를 여행하는데 얼마나 걸립니까? 속도 및 시간과 함께 드라이브 속도 블록을 사용한 이전 학습 방정식 d = rt를 이용해서 거리 ( d )를 계산해도 됩니다. 다음 예에서는 거리 ( d )와 속도 ( r )를 가지며 시간 (t)에 대해 동일한 방정식을 풀 수 있습니다.

그림입니다. 원본 그림의 이름: mem000019d00019.png 원본 그림의 크기: 가로 70pixel, 세로 109pixel 사진 찍은 날짜: 2016년 08월 25일 오후 7:07

100 % 속도 ( r ) 에서 100cm 의 거리 ( d )로 이동하는 로봇S3 은 100 % 를 50 % 속도로 움직이는 로봇S3의 약 2 배의 길이 ( t )를 가져야 합니다.


거리 ( d ) = 100cm. 100cm = 1m (우리 방정식에서 사용하는 단위는 일관성이 있어야 함)을 명심하십시오. 

100 % 속도에서의 속도 ( r )는 약 0.18 m / s (미터 / 초)이고 50 % 속도는 약 0.09 m / s입니다.


그림입니다. 원본 그림의 이름: mem000019d0001a.png 원본 그림의 크기: 가로 689pixel, 세로 428pixel 사진 찍은 날짜: 2017년 06월 08일 오후 5:17


위에 나온 t = d / r 공식에 다음 값을 넣으면 이 점을 알 수 있습니다.

그림입니다. 원본 그림의 이름: mem000019d0001b.png 원본 그림의 크기: 가로 458pixel, 세로 193pixel 사진 찍은 날짜: 2016년 08월 25일 오후 7:46

절반 속도로 가면 최고 속도의 약 두 배 시간이 걸리지만 정확히 같은 장소에서 끝납니다.

 


시도해 보세요!

- 로봇S3을 100 % 속도로 1 미터 (1m 또는 100cm) 앞으로 이동시키고 50 % 속도로 1m (1m 또는 100cm) 뒤로 이동하도록 프로그램 하십시오. 전진하는 동안 LED는 녹색이고, 시작 지점까지 후진하는 동안 빨간색입니다.


블록이 다음과 같이 보일 수 있습니다.


그림입니다. 원본 그림의 이름: mem000019d0001c.png 원본 그림의 크기: 가로 294pixel, 세로 312pixel 사진 찍은 날짜: 2017년 06월 08일 오후 6:06


- 로봇S3이 두 가지 다른 방법으로 이 거리를 운전하는데 걸리는 시간을 결정하십시오. 먼저 총 시간을 계산하십시오.


총 시간 = t (제 1 구동 거리 블록) + t (제 2 구동 거리 블록)


첫 번째 드라이브 거리 블록의 경우 로봇S3이 100 % 속도로 1m 이동합니다.


시간 = 거리 / 속도

= (1m) / (0.18m / s)

시간 = 5.56s


두 번째 드라이브 거리 블록의 경우 로봇S3이 50 % 속도로 1m 이동합니다.


시간 = 거리 / 속도 

= (1m) / (0.09m / s)

시간 = 11.11s


총 시간 = 5.56 초 + 11.11 초 = 16.67 초


- 스톱워치 또는 타이머를 사용하여 계산된 시간이 거의 맞는지 확인하십시오. 위의 계산에서 예상했던 결과와 약간 다른 결과를 얻었습니까?

 


당신 차례 !

- 드라이브 거리 블록을 사용해서, 다음을 수행하는 프로그램을 작성하십시오:

- 3 개의 LED를 모두 황색으로 바꿉니다.

- 25 % 속도로 75cm 전진하십시오.

- 세 개의 LED를 모두 녹색으로 바꿉니다.

- 100 % 속도로 25cm 전진하십시오.

- 모든 LED를 빨간색으로 바꿉니다.

- 50 % 속도로 출발점까지 후진합니다.

- 위의 각 프로그램 요소에 대한 런타임을 계산하고 합산하십시오. 로봇이 달리기를 완료하는데 필요한 총 시간은 얼마입니까?


힌트 : 100 % 속도는 0.18m / s이고 50 % 속도는 0.09m / s입니다. 75 % 속도는 대략 50 %에서 100 % 사이입니다.

그림입니다. 원본 그림의 이름: mem000019d0001d.png 원본 그림의 크기: 가로 268pixel, 세로 79pixel 사진 찍은 날짜: 2016년 08월 25일 오후 9:41

힌트 : 또한 속도 (0 %)와 속도 (50 %)의 중간인 속도 (25 %)를 계산해야 합니다.


- 스톱워치 또는 타이머를 사용하여 위에서 계산한 내용을 확인하십시오. 

- 당신이 찾은 것이 당신의 예측과 동일합니까? 그 이유는 무엇인가요? 힌트 : 마지막 학습에서 실제 세계의 한계에 대해 배웠습니다.

- 거리를 위해 선택한 엔코더 카운트로 드라이브 거리 블록을 사용하여 다음을 수행하는 프로그램을 작성하십시오.

- 로봇S3을 전륜 원주와 동일한 거리만큼 전진시킵니다.

- 로봇S3을 휠 둘레의 두 배에 해당하는 거리만큼 앞으로 구동합니다.

- 드라이브 거리 명령 (mm 또는 엔코더 카운트)에서 사용할 수 있는 가장 작은 거리는 얼마입니까?


힌트 : "알고 계셨습니까?" 엔코더 카운트 / 틱에 대한 설명은 위의 섹션을 참조하십시오.



4) 다양한 회전과 호


둥근 섀시와 근접한 바퀴가 있는 로봇을 사용하면 확실한 이점이 있습니다. 라운드 로봇은 뛰어난 주행성을 제공합니다. 로봇S3이 의자 다리 또는 벽에 부딪쳤을 경우 탈출 경로를 찾기 위해 로봇S3이 회전할 수 있습니다. 사각형 모양의 로봇은 원형 로봇과 달리 모서리 장애물에 갖힐 수 있습니다. 또한 중심선에 대칭 구동 구성이 있는 로봇은 ZTR (zero-turn radius) 조정을 할 수 있습니다. 로봇S3은 펜 포트 (또는 화이트 보드에서 사용하기 위한 특정 건조 지우기 마커)에 배치된 Sharpie® 펜으로 낙서하거나 그릴 수 있기 때문에 두 가지 기능이 특히 중요합니다.


로봇S3의 다양한 회전 옵션을 살펴보겠습니다.


제로 턴 반경 (ZTR)

ZTR 회전은 두 드라이브 휠이 같은 시간 동안 같은 속도로 반대 방향으로 움직여야 합니다. 이러한 유형의 회전은 로봇S3이 시계 방향 또는 반 시계 방향으로 제자리에서 피봇되도록합니다. 속도와 시간이 결합되어 회전의 양을 제어합니다. 우리는 이후 실습에서 rotatedrive a turn 블록에 대해 이야기할 때 소개할 것입니다.


그림입니다. 원본 그림의 이름: mem000019d0001e.png 원본 그림의 크기: 가로 252pixel, 세로 257pixel 사진 찍은 날짜: 2016년 09월 06일 오후 5:00


한 바퀴 회전

한 바퀴를 제 위치에 고정시키고 다른 한 바퀴를 다른 방향으로 움직이는 것은 한 바퀴 회전입니다. 이 회전은 로봇S3 직경의 두 배와 동일한 외부 반경을 만듭니다. 보다 단단한 반경에서 회전을 하기 위해서는 두 번째 휠이 다른 속도로 반대 방향으로 회전하는데 사용됩니다 (반대 방향으로 동일한 속도가 0 턴 반경과 같습니다). 서로 다른 휠 속도와 지속 시간이 결합되어 반경의 회전 양과 크기를 제어합니다. 한 바퀴 회전은 “2) 전진 및 후진 - 속도 블록 사용”에서 먼저 소개했던 드라이브 속도 블록으로 가장 잘 만들 수 있습니다.


그림입니다. 원본 그림의 이름: mem000019d0001f.png 원본 그림의 크기: 가로 263pixel, 세로 208pixel 사진 찍은 날짜: 2016년 09월 06일 오후 5:16



광폭 반경 회전

두 바퀴를 서로 다른 속도로 전진 (또는 후진) 시키면 광폭 반경이 만들어집니다. 로봇S3은 앞뒤로 움직일 때 넓은 원호를 따라 움직입니다. 속도와 시간 값을 결합하여 호의 반경과 길이를 제어합니다. 로봇의 동작을 변경하기 위해 이 값을 조정하여 회전할 수 있습니다.

그림입니다. 원본 그림의 이름: mem000019d00020.png 원본 그림의 크기: 가로 212pixel, 세로 264pixel 사진 찍은 날짜: 2016년 09월 06일 오후 7:30


알고 계셨습니까?

로봇S3은 최초의 파란색 착색 낙서 로봇으로 시작한 Scribbler 로봇의 세 번째 버전입니다 ( 로봇S3 자습서의 브로클리프롭(BlocklyProp) 설정 로봇 비교 이미지 참조). 원래 Blue Scribbler에는 바퀴 이동을 정확하게 측정하는데 사용되는 휠 인코더가 없었으며 BASIC Stamp 2라는 단일 코어 프로세서가 사용되었습니다. BASIC Stamp 2는 한 번에 하나씩 만 수행할 수 있으므로 바퀴와 모니터 엔코더를 동시에 구동할 수 없습니다. 로봇S3은 여러 개의 동시 동작을 처리할 수 있는 프로펠러 멀티코어 마이크로 컨트롤러를 사용합니다.


원래의 Scribbler Robot에서 싱글 코어 프로세서의 기능이 제한되어 있어 정확한 직선 또는 곡선 경로로 운전하는 것이 어려웠습니다.


드라이브 블록을 사용하여 회전

drive 블록은 ACTIONS> MOTORS 카테고리에서 찾을 수 있습니다. “1) 운전 기본사항 - 블록운전 및 회전”에서 학습한대로, 여행 방향, 주행 경로 및 속도를 제어할 수 있습니다. 이것은 변경될 때까지 계속 실행되기 때문에 비 차단(non-blocking) 명령입니다.


주행 방향은 앞으로 또는 뒤로 이동합니다.

그림입니다. 원본 그림의 이름: mem000019d00021.png 원본 그림의 크기: 가로 371pixel, 세로 204pixel 사진 찍은 날짜: 2016년 09월 06일 오후 8:29


드라이브 블록의 방향 드롭다운 선택 사항은 다음과 같은 방식으로 한 개 또는 두 개의 휠 의 대략적인 방향을 조정합니다.


직선 : 두 바퀴가 선택한 속도의 100 %로 회전합니다 (직선 이동, 회전 없음).

약간 오른쪽 또는 왼쪽 : 내부 휠이 바깥 쪽 휠 속도의 75 %로 회전합니다 (광폭 반경)

부드럽게 오른쪽 또는 왼쪽으로 : 내부 휠이 바깥 쪽 휠 속도의 50 %로 회전합니다 (중간 반경 회전)

오른쪽 또는 왼쪽으로 예리하게 : 내부 휠은 바깥 쪽 휠 속도의 25 %로 회전합니다 (타이트한 반경 회전)


속도 드롭다운 선택은 대략적인 전체 속도 (직선 이동의 경우) 또는 바깥 쪽 바퀴의 속도 (오른쪽 또는 왼쪽 회전 또는 호)를 설정합니다.


최대(full) : 최고 속도의 100 %

빠른 속도(a quick) : 최대 속도의 75 %

온화한 속도(a gentle) : 전속력의 50 %

천천히(a slow) : 최대 속도의 25 %

그림입니다. 원본 그림의 이름: mem000019d00022.png 원본 그림의 크기: 가로 404pixel, 세로 134pixel 사진 찍은 날짜: 2016년 09월 06일 오후 8:46


전진(forward) 와 온화하게 전속우회전(gently to the right at full speed) 그 다음 출발지점으로 후진(backward) 그리고 온화하게 온화한속도우회전(gently to the right at a gentle)을 만드는 예제 프로그램을 살펴봅시다. (속도가 실제로 선형이 아니기 때문에, 각 방향으로 주행하는 거리에 차이가 있을 수 있습니다).


- 이 예제를 빌드하고 사용해보십시오.

그림입니다. 원본 그림의 이름: mem000019d00023.png 원본 그림의 크기: 가로 461pixel, 세로 155pixel 사진 찍은 날짜: 2017년 06월 08일 오후 7:16


드라이브 블록을 사용하여 특정 거리를 주행하는 것은 시간(대기 블록에 있음)과 속도의 함수입니다. 정밀한 엔코더 기반의 움직임은 드라이브 속도(drive speed) 및 드라이브 거리(drive distance) 와 같은 고급 블록에서만 사용할 수 있습니다.


회전 블록을 사용하는 제로 - 턴 반경(ZTR) 회전

rotate 블록은 (ACTIONS> MOTORS 카테고리에 위치) 제로 선회 반경 (ZTR) 회전을 제어합니다. 이 블록은 방향 ( 시계 방향 또는 시계 반대 방향 ), 회전 각도 (또는 수동으로 1에서 359 사이의 숫자도 입력 할 수 있음) 및 속도에 대한 드롭다운 메뉴를 결합합니다. 회전 블록은 아트 워크, 미로 해결에 사용하는 추측 항법 (dead-reckoning)에 유용합니다. 이 블록은 시간 차단 명령입니다 (완료 될 때까지 실행된 다음 로봇S3이 중지됩니다).

그림입니다. 원본 그림의 이름: mem000019d00024.png 원본 그림의 크기: 가로 280pixel, 세로 138pixel 사진 찍은 날짜: 2016년 08월 29일 오후 9:08


- 아래 예를 시도하십시오. 피드백의 경우 오른쪽 두 개의 LED를 녹색으로 설정하여 시계 방향으로 이동하고 왼쪽 두 개의 LED는 반 시계 방향으로 녹색으로 설정하십시오.

그림입니다. 원본 그림의 이름: mem000019d00025.png 원본 그림의 크기: 가로 327pixel, 세로 171pixel 사진 찍은 날짜: 2016년 09월 06일 오후 9:08


- 이 프로그램에 더 추가하십시오. 예를 들어, 다른 각도에서 다른 속도로 회전하거나 사용하는 조명 패턴을 수정합니다.

 


거리 기반 회전

ACTIONS > MOTORS 카테고리는 각 휠의 정확한 주행거리를 입력할 수 있는 블록을 포함합니다. 다음 drive distance 블록은 특히 반복적인 방식으로 입력 (광 레벨, 객체 감지)에 대한 응답으로 로봇이 회전하도록 하려는 센서 주행에 유용합니다. 예를 들어 주위의 광 레벨을 감지한 다음 감지된 빛의 양에 따라 특정 거리를 회전합니다. 기본 데모 프로그램 # 2를 실행하려고하면 로봇이 이미 이 작업을 수행한 것으로 볼 수 있습니다.


그림입니다. 원본 그림의 이름: mem000019d00026.png 원본 그림의 크기: 가로 256pixel, 세로 107pixel 사진 찍은 날짜: 2017년 06월 08일 오후 7:32



반경 기반 회전

ACTIONS> MOTORS 메뉴 drive a turn 블록은 number of degrees, radius value 그리고 top speed 를 사용자가 설정해서 로봇S3를 회전할 수 있습니다. 이 블록은 반경 값에 따라 제로 턴 반경(ZTR)과 아크턴(arc turn) 할 수 있습니다 (ZRT 턴의 경우 0으로 남겨두고 원호의 경우 0보다 큰 값을 입력하십시오).

그림입니다. 원본 그림의 이름: mem000019d00027.png 원본 그림의 크기: 가로 347pixel, 세로 107pixel 사진 찍은 날짜: 2017년 06월 08일 오후 7:37


알고 계셨습니까?

drive a turn 블록은 0, 90, 및 180도 위치에 로봇에 장착된 PING))) 센서 거리 측정치를 받아 저장하는 네비게이션 프로그램의 일부로 사용될 수 있습니다. 이렇게 하면 로봇S3이 주행할 때 가장 열린 영역을 찾을 수 있습니다. 나중에 자습서에서 배우게 될 것처럼 로봇에 내장된 적외선 센서는 최대 18" 떨어진 곳까지 물체의 존재를 감지하지만 장애물이 실제로 얼마나 멀리 있는지에 대한 피드백을 실제로 제공하지는 않습니다. PING))) 센서는 장애물을 감지하여 (초음파로) 최대 100cm 떨어진 곳에서 거리 측정을 할 수 있습니다.

그림입니다. 원본 그림의 이름: mem000019d00028.png 원본 그림의 크기: 가로 290pixel, 세로 231pixel 사진 찍은 날짜: 2016년 09월 06일 오후 10:07


시도해 보세요!

- 회전 블록을 사용하여 360도 동안 로봇S3을 제자리 (ZTR)로 회전시키는 브로클리프롭(BlocklyProp) 프로그램을 작성하십시오.

- 드라이브 속도 블록을 사용하여 한 바퀴 회전을 사용하여 로봇S3 360도 회전시키는 프로그램을 작성하십시오. 당신은 어떻게 회전의 양을 조절할 것입니까?

- 마지막으로, 시작한 지점에서 멈추어서 (원하는 반지름을 사용하여) 완전한 원으로 로봇S3을 조종하는 프로그램을 작성하십시오.


당신 차례 !

- 앞으로 뱀 모양의 경로를 따라 앞으로 전진하는 로봇S3을 조종하고, 가능한 한 시작한 곳 가까이로 후진해서 끝나는 프로그램을 작성하십시오.

그림입니다. 원본 그림의 이름: mem000019d00029.png 원본 그림의 크기: 가로 606pixel, 세로 137pixel 사진 찍은 날짜: 2016년 09월 06일 오후 10:26


5) 단순한 모양으로 주행하기


우리는 로봇S3가 매우 기동성있는 로봇이라는 것을 알고 있습니다. 로봇의 모양, 구동 휠 위치 및 구성을 통해 프로그래머는 미세하게 동작을 제어할 수 있습니다. 회전과 호를 다루기만 했으므로 간단한 모양을 만들기 위해 로봇을 프로그래밍하여 새로운 이해를 테스트에 적용해 봅시다.

 

(1) 브로클리프롭(BlocklyProp)을 사용하여 블록 또는 정사각형 만들기

데모 프로그램을 사용해 본 경우 데모 프로그램 # 7이 숫자 8에 글을 쓰고 일시 중지한 다음 사각형 모양의 경로를 만들었다는 것을 상기합니다. 브로클리프롭(BlocklyProp)에서 정사각형과 8 개의 프로그램을 작성하는 방법을 보여주고, 추가로 몇 가지 도전 과제를 추가합니다.


새 프로젝트를 시작하고 이 블록과 같은 브로클리프롭(BlocklyProp) 프로그램을 작성하십시오. 모든 블록은 익숙해야합니다.


그림입니다. 원본 그림의 이름: mem000019d0002a.png 원본 그림의 크기: 가로 385pixel, 세로 385pixel 사진 찍은 날짜: 2017년 06월 08일 오후 8:29


드라이브(drive) , 대기(wait) , 회전(rotate) 및 정지(stop driving) 블록을 이미 사용했습니다. 이들 및 이전에 사용된 다른 블록에 대해서는 더 이상 브로클리프롭(BlocklyProp) 작업 영역에서 해당 블록을 찾을 수 있는 위치에 대한 지침을 추가하지 않습니다. 어디서 찾을 수 있는지 기억이 안 나면 둘러보십시오! 모든 것이 어디에 있는지를 배우는 가장 좋은 방법입니다.


- 저장하고, 컴파일하고, EEPROM에 로드하고, 프로그램을 실행하십시오.


어떻게 동작했습니까? 문제가 있으면 블록을 확인하십시오. 사각형의 마지막 면이 실행된 후 로봇이 회전합니다. 이 90 ° 회전은 사각형을 "닫을" 필요는 없지만 로봇S3을 원래 위치와 방향으로 되돌립니다.


숙련된 프로그래머가 사용하는 오래된 표현이 있습니다 : "열심히 노력하십시오!" 이것은 가능한 한 적은 코드 (또는 블록)로 가능한 한 많이 코드를 작성해야 함을 의미합니다. 그렇다면 위에 작성한 코드를 어떻게 하면 훨씬 더 효율적으로 만들 수 있습니까? 이 프로그램은 2 초 동안 앞으로 움직이고 90 ° 회전합니다 - 4 번. 그 반복은 당신이 루프에 대해 생각하게 할 것입니다. 프로그램 루프를 사용하면 명령을 반복해서 쓰지 않고 반복적으로 프로세스를 수행할 수 있습니다. 하나의 블록을 추가하고 9 개의 블록을 삭제하여 코드를 편집하십시오.

그림입니다. 원본 그림의 이름: mem000019d0002b.png 원본 그림의 크기: 가로 424pixel, 세로 170pixel 사진 찍은 날짜: 2017년 06월 08일 오후 8:37


루프 (x 번) 블록을 추가하고 3 개의 드라이브 , 3 개의 대기 및 3 개의 회전 블록을 삭제해야합니다. 작업이 여유롭지 않은가요 - 프로그램 공간을 줄이면 더 간단하고 우아한 코드가 됩니다. 


이 블록을 실행하는 프로그래밍 언어는 C입니다. C로 읽거나 쓰는 방법을 모르는 경우에도이 최적화가 프로그램의 크기와 복잡성에 미치는 영향을 쉽게 볼 수 있습니다.


- 긴 프로그램을 위해 페이지의 오른쪽 상단 모서리에 있는 코드 단추를 클릭한 다음 축소된 코드를 다시 찾습니다. 이 문제를 테스트하려면 각 프로그램을 다시 빌드해야 할 수도 있습니다. 무엇을 알게 되었나요?



알고 계셨습니까?

기하학은 점, 선, 곡면 및 솔리드의 속성 및 관계와 관련된 수학의 한 부분입니다. 기하학은 사각형, 삼각형 및 원과 같은 기본 모양을 설명하고 측정하는데 도움이 됩니다. 각각은 선 및 / 또는 곡선을 결합하여 생성됩니다.


사각형은 4 개의 직각을 형성하는 끝과 끝이 연결된 4 개의 동일한 길이의 선입니다.

삼각형은 세 개의 연결된 선분으로 구성됩니다. 사각형과 달리 삼각형의 각도는 다양한 측정이 가능하며 항상 직각이 아닙니다. 삼각형 유형은 삼각형을 이루는 각도에 따라 이름이 지정됩니다.

원에는 직선이 없고 각도가 없습니다. 원을 이루는 모든 점들은 중앙 위치에서 동등한 거리에 있습니다. 우리의 숫자 8 모양은 연결된 서클 두 개입니다.


모양(shapes)은 고정된 크기와 모양이 아니라 모양을 구성하는 구성 요소 간의 관계를 설명함으로써 형성됩니다. 사각형은 크기에 관계없이 사각형입니다. 마찬가지로, 컴퓨터 프로그램은 프로세스의 단계 또는 부분 간의 관계를 정의합니다. 프로그램은 관계로 프로세스를 설명합니다. 패턴을 만드는 방법에 대한 코드입니다.


(2) 삼각형 만들기

똑같은 블록을 사용해 왔지만 매개 변수가 약간 다르면 삼각형을 만들 수 있습니다.


- 다음 프로그램을 만들고 시도해보십시오.

그림입니다. 원본 그림의 이름: mem000019d0002c.png 원본 그림의 크기: 가로 388pixel, 세로 298pixel 사진 찍은 날짜: 2017년 06월 08일 오후 8:49


이 삼각형 프로그램을 만들려면 하나의 설정을 변경하십시오. 회전 각도가 120 °로 변경되었습니다 (삼각형 내부에 60 ° 각도로 나타남). 4 대신 3 면만 코드를 반복했습니다. 마지막 회전은 로봇S3을 시작 지점으로 되돌립니다. 이것이 어떻게 단순화될 수 있는지를 보기 위해 많은 노력이나 상상력을 필요로 하지 않습니다. 이전과 마찬가지로 한 블록을 추가하고 여러 블록을 삭제합니다.


그림입니다. 원본 그림의 이름: mem000019d0002d.png 원본 그림의 크기: 가로 424pixel, 세로 170pixel 사진 찍은 날짜: 2017년 06월 08일 오후 8:52


루프 (X times) 블록은 drive, wait, 그리고 rotate 블록을 3회 반복합니다. 그리고 stop driving 블록으로 마칩니다.


모두 그림 여덟을 사랑한다.

옆쪽으로 8이 돌았다는 사실이 무한의 상징인 8 또는 ∞임을 알아보셨습니까? 약속대로 그림 8 패턴을 원하거나 원한다면 무한대로 움직여봅시다.


- 로봇S3용 블록 코드를 작성, 컴파일, EEPROM에 로드 및 실행하십시오.

그림입니다. 원본 그림의 이름: mem000019d0002e.png 원본 그림의 크기: 가로 447pixel, 세로 155pixel 사진 찍은 날짜: 2017년 06월 08일 오후 8:59


어떻게 동작했습니까? 대기 시간 설정은 시행 착오를 거쳐 8 (또는 ∞) 기호의 각 원의 주행 거리를 설정합니다. 덜 정확한 방법으로 주행 거리, 즉 시간을 제어하기 때문에 마일리지가 다를 수 있습니다.


시도해 보세요!

- 사각형에 대한 브로클리프롭(BlocklyProp) 프로그램을 작성하십시오. 다음에는, 사용하는 drive speed 및 drive a turn 블록이 ACTIONS > MOTORS 카테고리에 있습니다. 각 블록을 4 번 사용하십시오.


그림입니다. 원본 그림의 이름: mem000019d0002f.png 원본 그림의 크기: 가로 339pixel, 세로 210pixel 사진 찍은 날짜: 2017년 06월 08일 오후 9:05


- CONTROL 범주에 있는 루프 블록을 사용하여 프로그램을 단순화하고 루프를 4 번 반복하도록 설정하십시오.

- 동일한 블록을 사용하여 삼각형에 대한 프로그램을 작성하십시오. 첫째, 루프 블록 을 사용하지 않고 블록을 다시 사용하십시오.


당신 차례

- rotate 블록을 사용해서 그림 8 을 추적하는 프로그램을 작성하시오. 그렇지만 반바퀴는 시계방향으로 주행하고, 나머지 반바퀴는 반시계방향으로 주행하시오. 시작한 지점으로 되돌아오면 8이 완성됩니다. 여기 루프를 사용할 수 있습니까?

그림입니다. 원본 그림의 이름: mem000019d00030.png 원본 그림의 크기: 가로 508pixel, 세로 230pixel 사진 찍은 날짜: 2016년 09월 07일 오후 11:03


rotate 블록을 사용하여 똑같은 것을 4 번 시도한 다음 프로그램을 단순화하는 방법을 찾으십시오. 무엇을 찾았습니까?



6) 예술적 도형으로 회전하기


쇼의 별 (The star of the show)

로봇S3을 단순한 형태의 패턴으로 운전하는 방법을 배웠으면 이러한 모양을 예술 작품으로 변형할 수 있습니다.

상당히 복잡한 모양, 즉 다섯 꼭지점을 갖는 별로 시작해 봅시다.


- 새 프로젝트를 시작하고 아래에 표시된 브로클리프롭(BlocklyProp) 코드를 함께 스냅합니다. 별을 그리기위한 브로클리프롭(BlocklyProp) 프로그램입니다.

그림입니다. 원본 그림의 이름: mem000019d00031.png 원본 그림의 크기: 가로 431pixel, 세로 181pixel 사진 찍은 날짜: 2017년 07월 10일 오후 9:15


- 저장하고, 컴파일하고, EEPROM에 로드하고, 프로그램을 실행하십시오.


루프 (X times) 블록은 당신이 별 모양을 만들어, 5 개 직선 라인 및 5 각도 회전을 반복할 수 있습니다. 별의 줄 길이는 대기 블록의 시간 매개 변수에 의해 결정됩니다. 대기 시간이 길수록 별이 커집니다. 더 크거나 작은 별이 필요한 경우 이 값을 변경할 수 있습니다. rotate 블록은 드롭 다운 원에서 각도를 선택하고 값을 입력함으로써 각도를 설정할 수 있기 때문에 시용됩니다. 프로그램이 끝나면 운전 정지 블록이 로봇S3 정지를 멈추게 할 것입니다.


이 프로그램을 다시 시도해보십시오. 이번에 로봇S3을 펜 포트에 Sharpie®가 있는 포스터 보드에 놓으십시오. 호환되는 건조 지우기 마커를 사용하여 화이트 보드에 놓을 수도 있습니다. 화이트 보드에 Sharpie를 사용하지 않도록 하십시오!


- 이제 파란색 재설정 버튼을 누르고 로봇이 별 모양 낙서하는 것을 지켜보십시오.

그림입니다. 원본 그림의 이름: mem000019d00032.png 원본 그림의 크기: 가로 125pixel, 세로 142pixel 사진 찍은 날짜: 2016년 09월 21일 오후 6:53

그럼, 우리는 그 이상한 144 ° 각도를 어디서 얻었습니까? 왼쪽의 스케치를 보세요. 360 ° 원을 5로 나누면 점선 사이의 각도가 72 °임을 알 수 있습니다.


점의 선들 사이의 각도는 72 ° 또는 36 °의 절반입니다. 로봇S3이 별의 선 끝 (지점의 끝)에 도달하면 180도 회전하여 점의 각도를 뺀 것입니다. 회전 각도는 180 ° - 36 ° = 144 ° 입니다.


이것이 명확해질 때까지 이 스케치를 연구하거나 이 모양 뒤에 있는 수학에 대한 더 많은 자료를 찾으려면 "5 점 별"을 검색하십시오.


이제 아래 표시된 코드를 작성해보십시오. 당신이 블록을 조립할 때, 그것이 무엇을 할 것인지를 알아낼 수 있는지 보십시오!


그림입니다. 원본 그림의 이름: mem000019d00033.png 원본 그림의 크기: 가로 423pixel, 세로 412pixel 사진 찍은 날짜: 2017년 06월 08일 오후 6:48


위의 코드에서 첫 번째 rotate by radius 블록의 회전 값은 -72 ° 입니다. 시계 방향 회전은 양수 값으로 쓰여지고 음수 값은 시계 반대 방향으로 회전합니다. 이것은 백분율 속도 값이 전진의 경우 positve이고 후진의 경우 negative가 되는 것과 비슷합니다. 양수 반경 값과 음수 반경 값을 사용하는 것과 다른 점은 무엇입니까? 실험을 하고 알아보십시오.


시도해 보세요

우리가 시도한 두 번째 스타 프로그램으로 실험해 봅시다 (위).


- 그것을 복제하거나 다른 이름으로 저장, 이름을 Curved Star로 변경하십시오.

- 이제 다음과 같이 변경하십시오. 이번에는 드라이브 블록 대신 드라이브 거리 블록을 사용합니다. 이 코드를 조합하면 모든 설정을 연구할 수 있습니다.

그림입니다. 원본 그림의 이름: mem000019d00034.png 원본 그림의 크기: 가로 384pixel, 세로 493pixel 사진 찍은 날짜: 2017년 06월 08일 오후 7:00


참고: 이 블록의 값은 처음 두 프로그램에서 원래 144 ° 였습니다. 이 값을 143 ° 로 변경하면 로봇S3이 약간 더 나은 그림을 만들 수 있습니다. 모든 로봇S3 단위는 고유하므로 이 값을 다른 값으로 설정하면 이 자습서 프로그램을 실행할 때 더 나은 결과를 얻을 수 있습니다. 예제를 사용하여 로봇과 가장 잘 맞는 것이 무엇인지 알아내는 것은 사용자의 몫입니다. 이 시행 착오 접근법은 종종 프로그램 최적화라고 합니다.


- 저장하고, 컴파일하고, EEPROM에 로드하고, 펜 포트의 마커를 사용하여 프로그램을 실행하십시오. 이번에는 무엇을 낙서했습니까?


이 예제 프로그램에서 블록의 목적을 발견하는 가장 좋은 방법은 이를 제거한 다음 수정된 프로그램이 어떻게 로봇S3를 동작하게 하는지 확인하는 것입니다. 예를 들어, 이 코드의 끝에있는 운전 정지 블록이 필요합니까?


- 해당 블록을 제거하여 프로그램을 변경하고 직접 살펴보십시오.


이 자습서의 모든 프로그램에서 필요합니까? 그렇지 않은 경우 왜 포함될 수 있으며 필수이유는 어디에 있습니까? 이미 완료한 Motors Blocks 자습서로 Simple Motion을 검토하여 사용 이유에 대한 메모리를 새로 고칩니다. 이제 Curved Star 프로그램을 약간 수정하십시오.


- 프로그램을 복제하거나 다른 이름으로 저장 - Vari Different Star로 이름을 바꿉니다.

- 이제 다음과 같이 변경하십시오. 이 코드를 조합하면 각 설정을 연구할 수 있습니다.


여기서 MATH 범주의 두 블록, 즉 수학 연산 블록과 숫자 값 블록을 사용합니다. 그들이 무엇을 할지 예측할 수 있습니까?


그림입니다. 원본 그림의 이름: mem000019d00035.png 원본 그림의 크기: 가로 490pixel, 세로 489pixel 사진 찍은 날짜: 2017년 06월 08일 오후 7:12


첫 번째 수학 연산 블록은 원래 73 ° 회전 값에 2 ° 를 추가합니다. 다음 수학 연산 블록 은 143 ° 회전 값에서 2 ° 를 뺍니다.


- 저장하고, 컴파일하고, EEPROM에 로드하고, 펜 포트의 마커를 사용하여 프로그램을 실행하십시오.


우리의 오디션은 정말로 별 모양을 예술로 바꾸는 것입니다! 그렇게 생각하지 않나요?


당신 차례 !

- 나만의 스타 디자인을 만들어보세요. 처음부터 시작하여 프로그램에 블록을 추가하기 전에 각 동작을 생각해보십시오.


무엇이 바뀌었으며 무엇을 배웠습니까? 계속 실험하십시오. 영감은 종종 우연히 또는 당신이 그것을 가장 기대하지 않을 때 나타납니다.



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