브로클리프롭 로봇카 프로그래밍
Link
Contents
브로클리프롭 로봇카 프로그래밍 실습 세부목차
※ 본 페이지의 내용은 패럴렉스(Learn.Parallax.com)사의 공식 홈페이지에서 제공되는 자료를 참고하여 작성되었습니다.
브로클리프롭(BlocklyProp) 프로그래밍 방법으로 프로펠러 로봇카를 이용하여 실습할 수 있습니다. 로봇카와 브로클리프롭(BlocklyProp) 비주얼 프로그래밍으로 로봇공학, 그래픽 프로그래밍, 전자 공학을 익혀 보십시오!
이 페이지에서는 로봇카를 움직이는 기초적인 방법들을 보여줍니다. 아래 내용을 통하여 서보 / 엔코더 시스템 미세조정, 최적의 성능을 위한 시스템 테스트 및 튜닝, 특정 거리를 운전하는 방법, 특정 속도로 운전하는 방법들에 대하여 배우기 바랍니다.
아래 세부 내용들을 살펴볼 수 있습니다.
1) 로봇카 인코더 연결 테스트
2) 로봇카 보정하기
3) 로봇카 주행 속도
4) 로봇카 회전하기
5) 로봇카 주행거리
로봇카 방향설정
여기서 우리는 로봇의 오른쪽과 왼쪽, 앞뒤를 설정합니다. 이 용어는 하얀 브레드 보드에 앉아있는 작은 사람의 관점에서, 각 포스트와 발에 손을 얹어 보드 가장자리를 매달아 놓은 것입니다.
이제 주행할 준비가 완료되었습니다!
이 테스트 프로그램은 각 인코더 센서가 휠 옆에 있는 스포크를 볼 수 있도록 합니다. 엔코더가 정상적으로 작동하면 프로펠러 보드의 내장 LED가 스포크를 감지할 때마다 켜지고 스포크 사이의 구멍이 지나면 꺼집니다.
- 브로클리프롭(BlocklyProp) 계정에 로그인하고 컴퓨터에서 BlocklyProp Client 를 실행하십시오.
- Test Encoders 라는 이름의 새 프로젝트를 만듭니다.
- 아래에 표시된 프로젝트를 빌드하십시오.
- 로봇의 전원 스위치를 위치 2로 돌립니다.
- 로드 및 실행 버튼을 클릭하십시오.
- 손으로 로봇카의 왼쪽 바퀴를 부드럽게 비트십시오. 이렇게 하면 휠을 돌릴 때 P26 LED가 켜지고 꺼집니다.
- 오른쪽 바퀴에 대해 반복하십시오. 오른쪽 바퀴를 돌리면 P27 LED가 켜지거나 꺼집니다.
만약 작동하지 않는 경우 ...
다음 몇 가지 증상과 원인일 수 있습니다.
* 왼쪽 휠을 돌리는 동안 P26 표시등이 꺼져 있습니다.
- 왼쪽 엔코더 케이블이 P14 서보 포트에 역으로 플러그될 수 있습니다.
- 20 k 저항 (적 - 흑색 - 주황색)은 P14 또는 3.3 V 소켓에서 접촉하지 않을 수 있습니다.
- 왼쪽 엔코더는 휠 스포크를 향하는 대신 센서가 섀시를 향하도록 장착될 수 있습니다.
* 오른쪽 바퀴를 돌리는 동안 P27 표시등이 꺼져 있습니다.
- 올바른 엔코더 케이블이 P15 서보 포트에 역으로 플러그될 수 있습니다.
- 20 k 저항 (적 - 흑색 - 주황색)은 P15 또는 3.3 V 소켓에서 접촉하지 않을 수 있습니다.
- 올바른 인코더는 휠 스포크를 향하는 대신 센서가 섀시를 향하도록 장착될 수 있습니다.
* 왼쪽 휠을 돌리는 동안 P26 표시등 대신 P27 표시등이 깜박입니다 (또는 그 반대).
- 인코더 케이블이 바뀌었습니다! P14 및 P15에 연결된 엔코더 케이블을 전환하십시오.
* 선회 중에는 P26 또는 P27 표시등이 켜져 있습니다.
- P14 또는 P15 소켓을 3.3V 소켓에 연결하는 저항이 너무 작습니다. 20 k-ohm 이어야합니다 (적 - 흑 - 주황색). 이 저항은 키트의 나머지 저항이 아니라 엔코더 부품이 있는 비닐봉지에 들어 있습니다.
* 인코더의 표시등은 항상 켜져 있거나 대부분의 시간 동안 켜져 있지만 때때로 깜박입니다.
- 인코더가 장착되어 센서가 바퀴 쐐기쪽으로 바깥쪽으로 향하지 않고 섀시쪽으로 안쪽을 향하게 됩니다. 언 마운트하고 서로 교환하여 바깥쪽으로 향하게 합니다.
- 브래킷 위치를 조정해야 할 수도 있습니다. 2013 년 10 월 이전에 제작된 키트의 경우 엔코더 브래킷은 쐐기 사이의 공간 대신 스포크 아래의 림을 보도록 정렬되지 않게 장착할 수 있습니다. 서보 케이스의 바닥면과 섀시 장착 구멍의 하단 가장자리 사이에 간격이 있으면 문제가 될 수 있습니다. 서보 스크류를 약간 풀고 다시 조이고 동시에 엔코더 브래킷과 서보를 서로 잡아 당겨 쉽게 교정할 수 있습니다.
* P26 및 P27 모두 테스트 도중 항상 켜져 있습니다.
- P14 & P15의 점퍼에 결함이 있거나 올바르게 연결되어 있지 않을 수 있습니다. 핀에 끝까지 눌러 졌는지, 금이 갔는지, 느슨한지 또는 손상되어 있지 않은지 확인하십시오. 점퍼가 손상된 경우 기술 지원 (support@parallax.com)에 연락하고 영향을 받는 헤더에 전원을 공급하지 마십시오!
두 인코더 모두 작동하는 경우
축하합니다! 로봇카를 보정할 차례입니다.
다른 예제 프로그램을 실행하기 전에 로봇카를 조정해야 합니다. 이것은 로봇 블록이 로봇카 인코더의 정보를 사용하여 거리와 속도를 측정하고 보정하는데 필요한 일회성 보정입니다. 아직 전기 케이블이 연결되지 않았다면 이전으로 돌아가서 완료하기 바랍니다.
코드 테스트
보정 코드는 모든 데이터를 수집하는 데 2 분 미만의 시간이 소요됩니다. 약 1m (3 피트 x 3 피트)의 부드럽고 장애물이 없는 바닥이 필요합니다. 보정 프로그램이 실행되는 동안 로봇카는 한 번에 한 바퀴만 회전하여 다양한 속도로 원을 그리며 이동합니다. 브래더보드 아래에 있는 P26 및 P27 표시등을 꺼서 완료될 때 알려줍니다.
중요! 이 단계를 위해서는 신선한 배터리를 사용하십시오!
- 브로클리프롭(BlocklyProp) 계정에 로그인하고 컴퓨터에서 BlocklyProp Client 를 실행하고 연결하십시오.
- 로봇카의 전원 스위치를 1 로 설정하고 USB 케이블을 통해 컴퓨터에 연결하십시오.
- Activity Board를 위한 새로운 Propeller C 프로젝트를 시작하십시오.
- 로봇 블록 메뉴로부터, ActivityBot calibrator 블록을 작업 공간에 놓으십시오.
- EEPROM 로드 및 실행 버튼을 클릭하십시오. ( 중요 :이 프로그램은 EEPROM에 있어야 합니다.)
- 프로그램 로드가 완료되면 P26 및 P27 표시등이 켜집니다. 전원이 켜지면 로봇의 전원을 끄십시오 (PWR 스위치를 0으로 돌리십시오).
- 로봇카를 프로그래밍 케이블에서 분리하고 장애물이 없고 부드러운 바닥 면적 1m² (3ft3x3ft)에 놓으십시오.
- 전원 스위치를 2로 설정하고 휠 스피드 데이터를 수집하는 동안 천천히 돌아 다닐 수 있는 공간을 제공하기 위해 뒤로 이동하십시오.
- P26 및 P27 표시등이 꺼질 때까지 그대로 두십시오 (약 2 분). 그 후에 보정이 완료되고 전원을 다시 끌 수 있습니다.
- 중요 : 로봇카로 실습하기 이전에 이 페이지에서 이 섹션을 완료하십시오.
참고: 동작하지 않으면 어떻게 될까요?
보정 프로그램을 시작할 때 로봇이 움직이지 않거나 전진 대신 처음부터 뒤로 이동하기 시작했거나 바로 시작하거나 멈추었을 경우 문제 해결 페이지로 이동하여 도움을 받으십시오.
보정을 다시 시작하거나 반복해야 하는 경우 어떻게 해야 합니까?
보정 과정을 다시 시작하려면 P26 및 P27 표시등이 켜져 있는 동안 언제든지 재설정 버튼을 누르십시오.
완전히 완료된 보정 프로세스를 반복하려면, 프로그램을 다시 로드하기 위해 브로클리프롭(BlocklyProp)을 사용해야 합니다. 그 이유는 프로그램이 두 번째로 실행될 수 없도록 프로그램의 끝부분을 수정하기 때문입니다. 이것은 다음에 전원을 켜서 새로운 프로그램을 로드할 때 로봇카가 다시 보정 프로세스를 실행하지 못하게 하려는 것입니다.
어떻게 동작하나요?
로봇카 캘리브레이션 블록은 다른 블록에 연결하기 위한 모든 드롭다운 설정 메뉴, 또는 소켓 또는 플러그를 가지고 있지 않습니다. 프로그램에서 다른 블록없이 자체적으로 사용하도록 되어 있으며 전체 보정 프로세스를 자동으로 처리합니다.
로봇카 캘리브레이션 블록은 전원을 꺼도 데이터를 보존할 수 있는 Activity board의 EEPROM 메모리에서 요구 속도와 측정 속도 데이터를 수집합니다. 이렇게 하면 로봇을 다시 켤 때마다 교정 데이터를 사용할 수 있습니다.
나중에 프로젝트에 특정 휠 속도를 설정하는 로봇 블록이 포함된 경우 기본 코드는 EEPROM의 보정 데이터를 사용하여 프로그램에서 요구하는 속도에 가까운 속도로 모터를 구동합니다. 그렇게 하면 코드에서 큰 수정할 필요가 없고, 작은 수정만으로 전체적인 정확도가 향상됩니다.
알고 계셨습니까?
인코더 틱 - 각 로봇카 인코더는 옆 바퀴의 32 스포크 링으로 적외선을 비춥니다. 빛이 스포크 사이를 통과하면 인코더는 프로펠러에 높은 신호를 보냅니다. 그것이 스포크에서 튀어 오르고 엔코더의 광 센서로 다시 반사되면, 프로펠러에 낮은 신호를 보냅니다. 신호가 하이에서 로우로 또는 로우에서 하이로 변할 때마다 Propeller 칩은 인코더 틱으로 카운트합니다. 인코더 증가라는 용어를 볼 수도 있습니다.
센싱 방향 - 프로펠러 칩은 서보가 움직이기 위해 사용하는 신호에 따라 서보가 회전하는 방향을 압니다. 인코더에서 필요한 것은 그것이 얼마나 빨리 돌고 있는지를 아는 것입니다. 일정 기간 동안 엔코더 틱을 계산하여 이를 수행합니다. 브로클리프롭(BlocklyProp) 블록은 이 모든 것을 추적하여 프로그램이 로봇에게 얼마나 멀리 또는 얼마나 빨리 갈지를 알려줄 필요가 있습니다.
보간 - 캘리브레이션 코드는 모터 구동 레벨에 대한 데이터 포인트 테이블과 바퀴가 돌린 실제 속도 테이블을 작성하고 Activity board의 EEPROM 메모리에 저장합니다. 다른 로봇 카테고리 블록은 이러한 데이터 포인트를 사용하여 특정 속도를 얻기 위해 휠을 얼마나 힘들게 움직이는지 파악합니다. 블록이 요청하는 속도가 두 데이터 포인트 사이에 있으면, C 라이브러리는 알려진 두 값 사이에서 가장 좋은 드라이브 값을 계산합니다. 예를 들어 테이블에 초 당 60과 80 인코더 틱에 대한 데이터 포인트가 있고 블록이 초당 70 틱을 요구하면 기본 라이브러리는 초당 60과 80 틱 수준의 절반 정도의 모터 드라이브 수준을 사용합니다.
시도해 보세요!
로봇카의 보정 데이터를 확인하고 로봇카의 서보, 엔코더 및 배터리 연결에 실수 또는 문제가 있는지 알려주는 블록이 있습니다. 이 테스트에서 보정이 완료되었다고 표시되면 로봇카에서 탐색 프로그램을 실행할 준비가 됩니다. 그렇지 않은 경우, 발견한 문제점을 알려줍니다. 그것을 찾아서 고친 후에 보정과 이 실습을 다시 실행하십시오. 로봇카는 보정이 완료되고 이 테스트를 통과할 때까지 주행 준비가 되지 않습니다!
- 로봇카의 전원 스위치를 0으로 설정하고 USB 케이블을 다시 연결하십시오.
- 새 프로젝트를 만들고 로봇카 디스플레이 보정(ActivityBot display calibration) 블록을 작업 영역으로 드래그하십시오.
- 전원 스위치를 다시 1로 설정한 다음 로드 및 실행 (EEPROM에 저장) 버튼을 클릭하십시오.
- 터미널 출력을 확인하십시오.
- 터미널 출력에 "... calibration completed successfully ..."라고 표시되면 서보 모터, 엔코더 및 전원이 모두 올바르게 연결되어 있으므로 Your Turn 섹션으로 건너 뛸 수 있습니다. 따라서 로봇카는 탐색 프로그램을 실행할 준비가 되었습니다.
- 터미널의 결과가 "... 하나 이상의 문제가 감지되었습니다"라고 말하면 서보, 인코더 또는 전원 연결에 실수가 있을 수 있음을 의미합니다.
(이 경우 아직 네비게이션 프로그램을 실행하기 위해 로봇카를 사용할 수 없습니다.)
- 터미널이 보고한 세부 사항을 적어 두십시오. 그런 다음 “로봇카 문제해결” 페이지에서 해당 세부 정보를 찾아 문제점 해결을 위해 제공되는 지침을 따르십시오.
- 첫 번째 문제를 찾아 고칠 때 보정 프로그램을 다시 실행하십시오 (위). 그런 다음 이 테스트를 다시 실행하십시오. "calibration completed successfully"메시지가 나타날 때까지 반복하십시오.
당신 차례 !
이제 로봇카가 보정되었으므로 간단한 테스트 프로그램을 실행하여 곧바로 운전할 시간입니다. 아래의 테스트 코드는 초당 64 엔코더 틱 / 초에서 5 초 동안 두 바퀴를 앞으로 돌립니다. 그러면 로봇카 롤이 약 1 미터 (3 피트) 앞으로 이동해야 합니다.
- 아래에 표시된 프로젝트를 빌드하십시오.
- 로봇카를 USB 케이블로 컴퓨터에 다시 연결하고 전원 스위치를 1로 설정하십시오.
- COM 포트를 설정한 다음 EEPROM로드 및 실행 버튼을 클릭하십시오.
- 프로그램로드가 완료되면 전원 스위치를 0으로 설정하고 USB 케이블을 분리합니다.
- 리셋 버튼을 누른 채로 전원 스위치를 2로 설정하고 단단하고 부드러운 바닥에 로봇을 내려 놓으십시오.
- 재설정 버튼을 놓고 로봇의 여행을 모니터링 하십시오.
로봇은 직선으로 약 1 미터 (3 피트) 앞으로 이동해야 합니다. 엔코더 피드백을 기반으로 로봇이 코스를 조정할 때 약간의 변화가 있을 수 있습니다.
어떻게 동작하는가요?
첫 번째 블록은 Robot initialize 이며 드롭다운 메뉴는 ActivityBot으로 설정됩니다. 이 블록을 다른 로봇 세트 또는 로봇 드라이브 ... 블록을 사용하는 모든 프로젝트의 시작 부분에 배치하십시오. 다음은 왼쪽 및 오른쪽 소켓에 숫자 값 64가 첨부된 로봇 드라이브 속도 블록입니다. 이렇게 하면 왼쪽 바퀴와 오른쪽 바퀴가 모두 초당 64 틱의 속도로 앞으로 회전합니다. pause 5000 블록은 5000 밀리 초 (5 초)동안 이 속도로 로봇카를 전진하게 할 수 있습니다. 그 다음, 두 번째 로봇 드라이브 속도 블록은 숫자 값 0을 사용하여 오른쪽 및 왼쪽 바퀴를 정지시킵니다. 다음 페이지에서 자세히 살펴보겠습니다.
참고: 작동하지 않으면 어떻게 될까요? 로봇이 앞으로 움직이지 않고 앞으로 움직이지 않거나 움직이지 않을 경우 문제 해결 페이지를 참조하십시오.
로봇 구동 속도 블록이 튜토리얼의 로봇카 프로젝트의 대부분에서 사용된다. 그것을 사용하는 가장 간단한 방법은 왼쪽과 오른쪽 필드에 숫자 값 블록을 첨부하는 것입니다. 각 숫자는 바퀴가 얼마나 빨리 회전해야 하는지를 초당 틱 단위로 나타냅니다. 틱은 휠 스포크가 지나갈 때 휠 엔코더에 의해 계산됩니다. 다음은 기억해야 할 몇 가지 요령입니다.
* 양수는 바퀴를 돌려서 로봇카를 앞으로 이동시킵니다.
* 음수는 바퀴를 돌려서 로봇카를 뒤로 이동시킵니다.
* 0은 바퀴를 움직이지 않게 만듭니다.
이 학습의 나머지 부분에서 휠 "방향"은 로봇카를 움직일 방향과 관련하여 양의 속도 값으로 전진을, 또는 음의 속도 값으로 후진을 가리킵니다.
케이스와 관련하여 개별 휠이 시계 방향 또는 반 시계 방향으로 회전하는 것을 의미하지는 않습니다.
속도 제어 예제
이 간단한 예에서는 로봇을 조금 앞으로 똑바로 주행시킨 다음 오른쪽으로 90도 회전합니다.
- 브로클리프롭(BlocklyProp) 계정에서 새로운 Propeller C 프로그램을 만들고 IR 로밍 이름을 지정하십시오.
- 아래에 표시된 프로젝트를 빌드하고 저장하십시오.
- 로봇카를 컴퓨터에 연결하고 전원 스위치를 1로 설정하십시오.
- COM 포트를 설정하고 로드 및 실행 (EEPROM에 코드 저장)을 클릭하십시오.
- 로봇을 분리하고 열린 공간의 바닥에 놓습니다.
- 전원 스위치를 2로 설정하면서 리셋 버튼을 길게 누릅니다.
당신의 로봇카는 앞으로 조금 앞으로 나아가고 오른쪽으로 약 90도 회전해야 합니다.
어떻게 동작하는가?
주석 블록은 프로젝트의 이름을 보유하고 있습니다. 다음으로, 주파수 출력 블록이 P4 피에조 스피커에서 신호음을 내어 프로그램이 실행되기 시작했음을 알려줍니다. 그런 다음 다른 로봇 탐색 블록을 사용하기 전에 필요한 Robot ActivityBot 초기화 블록이 옵니다. 이 세 블록은 로봇카를 움직이는 대부분의 프로그램 상단에 함께 나타납니다.
다음 5 개의 블록은 로봇카의 기동을 정의합니다.
* 로봇 구동 속도는 오른쪽 64, 좌측 64 블록 초당 64 틱의 속도로 정방향 회전
* pause (ms) 2,000 블록은 바퀴가 초당 64 틱으로 계속 회전하면서 프로그램 실행은 2000 ms (2초) 머물 수 있습니다. 따라서 각 바퀴는 2 초가 경과할 때까지 2 회전합니다.
* 로봇 구동 속도가 64, -64 오른쪽 왼쪽 블록 초당 64 틱의 속도로 두 바퀴 회전. 왼쪽 휠은 앞으로 돌지 만 음수 부호는 오른쪽 휠을 뒤로 돌립니다. 그러면 로봇카는 제자리에서 회전합니다.
* pause (ms) (350) 블록은 로봇카가 350 ms 동안 회전을 수행할 수 있습니다. 로봇카가 오른쪽으로 약 90도 회전할 수 있는 충분한 시간입니다.
* 로봇 구동 정지 블록은 회전하는 바퀴를 중지합니다. 이 블록이 없으면 로봇카는 일시 중지 블록 실행이 완료된 후에도 무기한으로 계속 돌아갑니다.
알고 계셨습니까?
속도 제한 강제 - 아무리 당신이 robot drive speed left 과 right 에 어떤 값을 첨부하더라도, 브로클리프롭(BlocklyProp)의 기초가 되는 C 코드에서 +/- 128 의 최대 값으로 사용됩니다. 최대 값을 낮추려면, Robot set max speed 블록을 프로젝트의 맨 위에 놓습니다. 이것은 왼쪽 및 오른쪽 값에 변수 또는 방정식을 첨부할 때 매우 유용할 수 있습니다.
롤링을 계속하십시오 - 로봇 드라이브 속도는 "set-in-and-forget-in" 블록이 아닙니다. 선택한 속도로 바퀴회전이 시작되고 코드 실행은 즉시 다음 블록으로 계속됩니다. 다른 로봇 드라이브 블록이 변경되거나 정지할 때까지 바퀴가 계속 그 속도로 회전하기 때문에 프로그램에서 그 사실을 잊어서는 안됩니다.
속도(speed) 대 속도(velocity) - 속도(velocity)는 속도(speed)와 비슷하지만 양수 (앞으로와 같이) 또는 음수 (뒤로와 같이) 일 수 있습니다. 속도(speed) 자체는 방향을 나타내는 부호가없는 속도입니다. 속도의 절대 값을 나타냅니다.
액셀러레이터 스텝 - 가속도는 시간 경과에 따른 속도 변화입니다. 로봇카의 동작이 갑작스러운 시작 및 정지로 너무 갑자기 변하는 것을 막기 위해 로봇 드라이브 속도 블록은 초당 600 틱 속도로 가속 및 감속하여 점차적으로 시작 및 정지합니다. 이 기본 속도는 로봇 세트 가속 블록을 사용하여 변경할 수 있습니다. 그러나 로봇이 가속 및 감속하는 데는 시간이 걸리므로이 설정을 변경하면 이동 거리가 변경될 수 있습니다.
작은 것들이 합쳐집니다 - 목표 거리를 넘어서거나 회전 각도가 부족한 경우와 같이 로봇카에서 수행하려는 작업과 실제로 수행되는 작업 사이에 약간의 차이가 있을 수 있습니다. 그러나 이러한 작은 실수가 차례로 발생하면 누적 효과가 눈에 띄게 커질 수 있습니다. 이를 종종 오류 전달이라고 합니다. 로봇 공학, 프로그래밍 및 엔지니어링에서 중요한 개념입니다. 그리고, 생각보다 빨리 일어날 수 있습니다!
시도해 보세요!
forward-then-turn 기동을 네 번 반복하면 로봇카가 정사각형으로 주행할 수 있습니다.
- 프로젝트 사본을 저장하고 드라이브 속도 시도 이름을 지정하십시오.
- Robot drive ... 그리고 pause 블록을 조건부 반복 루프에 넣고 코드를 수정하면 다음과 같습니다.
- 수정된 프로젝트를 저장 로드하고 테스트합니다. 로봇카는 정사각형 모양으로 움직여야합니다.
- 이제 모든 64를 96으로 변경해 보십시오. -64에서 -96으로 변경하십시오.
- 수정된 프로젝트를 다시 저장, 로드 및 테스트합니다. 무슨 일이 있었나요? 왜?
당신 차례 !
가장 빠른 주행 속도에서 가장 느린 가속도 설정은 주행 거리에 영향을 줄 수 있습니다.
- drive speeds 복사본을 저장하고, 시도해보세요. 당신 드라이브 속도로 지정하십시오.
- 휠 속도를 +/- 128로 증가시킵니다.
- 두 번째 pause (ms) 값을 200으로 줄인 다음 저장하고 시운전하십시오. 로봇카가 다시 사각형으로 움직여야 합니다. 만약 그렇지 않다면 두 번째 pause (ms) 값을 조정 하십시오.
- 반복 루프 바로 위의 Robot set acceleration for speed 블록을 추가하고 드롭다운 메뉴에서 100 ticks / s2 를 선택하십시오. (로봇카가 단단한 표면에서 주행하는 경우, 기동이 바뀌면서 약간 흔들리는 소리를 들었을 수 있습니다.)
- 다시 저장, 로드 및 시운전하십시오.
당신 사각형은 여전히 사각형인가요? 아마도 그렇지 않습니다. 당신의 로봇카가 사각형으로 닫혀지지 않고 출발점에서 빗나간다면, Robot set acceleration 블록 설정값을 600에서 100 ticks / s2 까지 감소시키면서 영향을 살펴보십시오. 이 설정값이 낮아지면 기동이 최고 속도에 도달하는데 더 오래 걸립니다. 따라서 로봇카는 높은 설정값으로 했을 때와 같은 시간 동안 회전하지 않습니다. 개별 모퉁이 회전에서는 눈에 띄지 않을 수 있지만 로봇카가 정사각형을 돌 때 누락된 각도가 누적됩니다. 이것은 오류 전파의 예입니다!
이전의 예제 프로그램은 로봇카의 바퀴를 동일한 속도로 움직였지만 반대 방향 (전방과 후방 중 하나)으로 움직여 로봇을 회전시켰습니다. 다른 휠 속도 / 방향 조합은 다른 종류의 회전 조작을 수행합니다. 터닝 기동은 크게 세 가지 범주로 나눌 수 있습니다.
(1) 점 회전
휠 속도는 동일하지만 속도가 반대이므로 로봇카의 중앙지점을 중심으로 회전합니다. 이것은 로봇을 단단한 장소에서 위치를 변경하지 않고 새로운 방향으로 향하게 하는데 적합합니다. 로봇카의 "차축" 중앙을 통과하는 펜을 상상해보십시오. 회전은 어떤 회전하는 곡선도 그리지 않습니다. 이 점에서 회전하면 점이 그냥 어두워집니다! 이것을 반지름이 0 인 호로 생각할 수 있습니다.
(2) 피벗 회전
한 바퀴는 앞이나 뒤로 돌면서 다른 바퀴는 여전히 움직입니다. 이제 원의 중심은 움직이지 않는 바퀴이며, 로봇카는 이 점에 대해 피벗합니다. 로봇 중앙을 지나는 가상의 펜은 로봇카의 휠베이스 반 정도가 약 106mm 인 반경으로 원을 그립니다.
(3) 호 회전
호가 있으면 두 바퀴가 선회하지만 속도는 다릅니다. 그들은 같은 방향이나 반대 방향으로 움직일 수 있습니다.
반대 방향 타이트 호 : 바퀴가 반대 방향으로 갈 경우, 우리의 가상 중심 펜에 의해 생성된 원호는 반지름이 0 (회전이 거의 같은 경우)과 53mm (한 바퀴 속도는 피벗 회전처럼 거의 0으로 설정됩니다.) 사이의 반경을 가집니다.
예제 코드
이 프로그램은 위에서 설명한 네 가지 유형의 순서를 통해 진행됩니다. 로봇카가 멈추고 각 유형의 턴 사이에서 신호음을 울리므로 블록과 기동 사이의 관계를 보다 쉽게 볼 수 있습니다.
- 브로클리프롭(BlocklyProp) 계정에서 새로운 Propeller C 프로그램을 만들고 IR 로밍 이름을 지정하십시오.
- 아래에 표시된 프로젝트를 빌드하고 저장하십시오.
- 로봇카를 컴퓨터에 연결하고 전원 스위치를 1로 설정하십시오.
- COM 포트를 설정하고 로드 및 실행 (EEPROM에 코드 저장)을 클릭하십시오.
- 로봇을 분리하고 열린 공간의 바닥에 놓습니다.
- 전원 스위치를 2로 설정하면 리셋 버튼을 길게 누릅니다.
어떻게 동작하나요?
필요한 로봇 초기화 블록 이후 나머지 코드는 각각 5 개의 블록으로 구성된 4 개의 섹션으로 나뉩니다.
1. 주파수 출력(frequency out) 블록은 새로운 기동 신호가 시작한다. 주파수 (Hz) 값은 매번 낮아지므로 이를 구분할 수 있습니다.
2. 주석(comment) 블록은 회전 유형을 알려줍니다.
3. 로봇 구동 속도(robot drive speed) 블록은 왼쪽과 오른쪽 바퀴 기동 속도를 설정한다.
4. pause (ms) 2000 블록은 2 초 동안 동작이 지속되도록 합니다.
5. 로봇 드라이브 정지(robot drive stop) 블록은 다음 섹션으로 이동하기 전에 현재의 기동을 끝냅니다.
알고 계셨습니까?
가변 속도 - 로봇 드라이브 속도 블록은 숫자 값으로 해석되는 왼쪽 또는 오른쪽 필드에 대한 블록을 허용합니다. 여기에는 변수와 방정식이 포함됩니다. 드라이브 속도에 변수를 사용하면 추가 블록없이 실행 중에 조작을 변경할 수 있습니다. 블록의 기본 C 코드 라이브러리는 자동으로 범위를 +/- 128로 제한한다는 것을 기억하십시오.
시도해 보세요!
다음 예제 프로젝트는 하나의 휠 속도를 일정하게 유지하면서 다른 변수를 점차 감소시킵니다. 그 전략이 어떻게 될지 예측할 수 있습니까?
- 새로운 프로펠러 C 프로그램을 만들고 이름을 Taking Turns Try This로 지정하십시오.
- 아래에 표시된 프로젝트를 빌드하고 저장하십시오.
- 로봇카를 컴퓨터에 연결하고 전원 스위치를 1로 설정하십시오.
- COM 포트를 설정하고 로드 및 실행 (EEPROM에 코드 저장)을 클릭하십시오.
- 로봇을 분리하고 열린 공간의 바닥에 놓습니다.
- 전원 스위치를 2로 설정하면 리셋 버튼을 길게 누릅니다.
로봇카가 예상했던대로 동작했습니까?
당신 차례 !
회전 기술을 철저히 이해하려면 Taking Turns 프로젝트의 복사본을 새 이름으로 만들고 다음 변형을 시도하십시오.
- 오른쪽으로 돌아서면서 좌회전하는 네 가지 유형의 기동을 모두 수행하십시오.
- 로봇이 뒤쪽으로 움직이면 네 가지 유형의 모든 기동을 수행합니다 (그러나 첫 번째 로봇은 어느 방향으로 후진합니까?).
- 네 개의 각 운동을 로봇카에서 한 바퀴 완전히 돌리거나 완전히 둥글게 만듭니다. 휴지기 시간은 어떻게 서로 비교합니까?
- 하나의 휠 속도가 64에서 128로 증가하도록 마지막 하나를 수정하십시오. 각 동작에 대해 로봇카가 단지 하나의 회전 또는 원을 완료하게 하려면 정지 시간에 무엇을 해야 합니까?
지금까지 학습에서, 드라이브 속도, 일시 정지 시간 및 가속도 설정이 모두 로봇카의 이동거리에 어떤 영향을 미치는지 보았습니다. 이러한 블록은 로봇이 센서 입력에 반응하여 움직여야하는 프로젝트에 유용하며 특정 거리는 중요하지 않습니다.
특정 거리가 중요한 프로젝트의 경우 로봇 드라이브 거리(robot drive distance) 블록을 사용하는 것이 훨씬 쉽습니다. 로봇카는 속도 또는 가속 설정에 관계없이 각 휠이 얼마나 멀리 회전해야 하는지 알려줍니다.
로봇 드라이브 거리(robot drive distance)의 기본 거리 단위는 틱(ticks) 입니다. (인치와 센티미터는 드롭다운 메뉴의 옵션이기도 하지만, 어떻게 작동하는지 설명하는데 도움이 되므로 지금은 틱에 초점을 맞출 것입니다.)
직선, 선회 및 엔코더 틱
"틱 (tick)"이라는 용어는 감지된 스포크에서 홀 검출로의 전환 또는 그 반대의 전환을 나타냅니다. 프로펠러 액티비티 휠에는 총 32 개의 스포크가 32 개 간격으로 64 개씩 있습니다. 바퀴가 1/64 회전하면 1 번째 턴 – 틱(tick)의 가치 - 은 3.25 mm를 움직인 것입니다. 바퀴가 64 틱이 되면 바퀴가 한 바퀴 완전히 회전하고 바퀴 원주 거리는 208 mm가 됩니다.
로봇카가 얼마나 멀리 뛰길 원하는지 알면 거리를 3.25mm (또는 0.325cm 또는 0.00325m)로 나누어 프로그램에서 로봇카가 이동하도록 지시해야하는 틱 수를 확인할 수 있습니다.
틱 = 거리 mm ÷ 3.25 mm / 틱
로봇카의 회전 선회 반경은 약 105.8mm입니다.
여전히 오른쪽 바퀴를 잡고 왼쪽 바퀴를 돌리면 2 × π × r 회전해야 합니다. 이 경우 r은 회전 반경이므로 2 × π × 105.8 mm ≒ 664.76 mm가 됩니다. 로봇카가 1/4 회전을 원한다면 664.76mm ÷ 4 = 166.2mm가됩니다. 휠 틱은 몇 개입니까? 166.2 mm ÷ 3.25 mm / tick = 51.14 ticks 약 51 ticks.
한 바퀴를 앞으로 26 틱 이동시키고 다른 한 띠를 뒤쪽으로 이동하면 25 틱이 되며, 여전히 1/4 씩 51 틱이 됩니다!
코드 테스트
이 테스트 코드는 로봇카를 앞으로 128 틱 이동시킨 다음 오른쪽으로 90도 기울어지도록 51 틱 1/4 회전을 합니다.
- 브로클리프롭(BlocklyProp) 계정에서 새로운 Propeller C 프로그램을 만들고 Drive Distance Ticks라는 이름을 지정하십시오.
- 아래에 표시된 프로젝트를 빌드하고 저장하십시오.
- 로봇카를 컴퓨터에 연결하고 전원 스위치를 1로 설정하십시오.
- COM 포트를 설정하고 로드 및 실행 (EEPROM에 코드 저장)을 클릭하십시오.
- 로봇을 분리하고 열린 공간의 바닥에 놓습니다.
- 전원 스위치를 2로 설정하면 리셋 버튼을 길게 누릅니다.
- 로봇카가 두 바퀴 회전, 정지 및 얼굴 오른쪽으로 앞으로 이동하는지 확인하십시오.
어떻게 동작하나요?
먼저 프로젝트 이름을 나타내는 주석 블록이 옵니다. 다음으로, P4의 피에조 스피커의 주파수 출력 블록은 배터리 부족으로 인한 브라운 아웃 표시기 역할을 합니다.
robot ActivityBot initialze 블록을 요청한 다음, 두 개의 Robot drive distance in ticks 블록이 있습니다.
첫 번째 로봇 드라이브 거리(robot drive distance)는 왼쪽 (128) 과 우측 (128) 으로 바퀴가 전진 운동을 하고, 전속 바퀴회전에 충분한 틱입니다. 따라서 총 주행 거리는 약 3.25 x 128 = 416 mm 또는 약 16 인치입니다.
두 번째 로봇 드라이브 거리(robot drive distance) 블록은 휠을 반대 방향으로 움직이기 위해 왼쪽 26 과 오른쪽 -25 를 사용합니다. 위에서 설명한 바와 같이, 이것은 51 개의 틱을 결합한 것으로, 로봇카 중심을 중심으로 약 1/4 회전 또는 90도 회전합니다.
두 번째 거리 블록 실행이 완료되면 로봇카를 계속 유지하기 위해 로봇 드라이브 정지 블록이 필요하지 않습니다.
참고: 로봇 구동 속도(robot drive speed)와 로봇 구동 거리(robot drive distance)는 함께 사용되지 않습니다! 만약 로봇카 주행에서 한가지 유형의 블록에서 다른 유형의 블록으로 전환하려면 두 개 블록 사이에 로봇 드라이브 정지 블록을 먼저 사용하십시오.
알고 계셨습니까?
멀리 떨어져있는 거리를 운전하십시오. - 로봇 드라이브 거리 블록은 멈추기 전에 목표 거리만큼 휠 회전을 완료해야 합니다. 모터는 다음 블록으로 코드 실행을 재개합니다. 그것은 블로킹(blocking) 블록인데, pause 및 frequency out 블록과 유사합니다. Robot drive distance 는 선택한 속도로 바퀴가 회전하기 시작하는 set-it-and-forget-it 블록이며, 코드 실행은 바로 다음 블록으로 진행됩니다. 한편 바퀴는 다른 로봇 드라이브 블록이 변경되거나 정지 할 때까지 그 속도로 계속 회전합니다.
로봇 드라이브 거리에 대한 속도 규칙 - 로봇 드라이브 거리 블록을 사용할 때 기본 속도는 초당 64 틱입니다. 로봇 설정 속도(robot set speed) 블록으로 기본값을 변경하세요!
로봇 드라이브 거리에 대한 가속 규칙 - 로봇 드라이브 거리 블록을 사용할 때 기본 가속도는 200 tick / s2 입니다. 이 기본값을 변경하려면 로봇 세트 가속(robot set acceleration) 블록을 사용하십시오. 그러나 가속도를 높이면 틱이 나타나지 않아 거리 정확도가 떨어질 수 있습니다. 특히 초당 64 틱 이하의 속도에서는 200 틱 / s2가 권장되지만 높은 값으로 실험 해보십시오. 물론 운전면과 로봇카에 물건이 들어 있는지에 따라 결과가 다를 수 있습니다. 그래서 실습하고 조정하십시오!
유닛 옵션 - 로봇 드라이브 거리 블록의 인치 및 센티미터 옵션은 로봇카와 함께 제공되는 휠에서만 작동합니다. 원주가 다른 휠을 사용하는 경우 틱당 이동 거리가 변경됩니다.
시도해 보세요!
로봇 드라이브 거리 블록의 한 가지 장점은 속도 또는 가속도를 변경하려는 경우 특정 거리를 유지하기 위해 pause 시간을 다시 조정할 필요가 없다는 것 입니다.
- 로봇 초기화 블록 바로 아래에 거리 블록에 로봇 설정 속도를 추가하고 숫자 값 128 블록을 첨부하십시오.
- 수정된 코드를 저장하고 로드하고 실행하십시오. 로봇카는 이전과 같은 방식으로 작동해야하지만 조금 더 활발하게 움직여야합니다.
- Robot set speed 블록 바로 아래에 거리 블록에 Robot set acceleration을 추가 하고 드롭다운 메뉴에서 100 ticks / s2 를 선택합니다.
- 수정된 코드를 저장하고 로드한 다음 다시 실행하십시오. 로봇카는 드롭다운 메뉴에서 제안하는대로 느리게 실행되지만 동일한 조작을 다시 수행해야합니다.
당신 차례 !
- 중간지점 미로를 만들고 처음부터 끝까지 탐색할 수 있는 프로그램을 작성하십시오. 마스킹 테이프 통로는 이 작업에 적합합니다.
아래에 코스의 예가 나와 있습니다. 이 특정 코스를 실행하려면 로봇카가 다음 manueuvers를 수행해야 합니다.
1. START에서 곧장 41.6cm 앞으로 X로 가십시오.
2. 오른쪽으로 45도 회전하고 다음 X로 41.6cm 이동합니다.
3. 90도 왼쪽으로 돌리고 31.2cm 가면 X가 완성됩니다.