Skip to main content

컨트롤러: 탱크 드라이브 탐험 - 파이썬

교사 도구 상자 아이콘 교사 도구 상자 - 이 섹션의 목적

Tank Control 예제 프로젝트를 사용하면 학생들은 Controller를 사용하여 Clawbot을 제어할 수 있습니다. 학생들은 Clawbot의 각 모터의 속도를 제어하고 컨트롤러가 모터 기능을 제어할 수 있도록 left_motor.set_velocity(), right_motor.set_velocity(), left_motor.spin(), right_motor.spin(), left_motor_speed = controller_1.axis3.position(), and right_motor_speed = controller_1.axis2.position() 명령어의 매개변수를 조정해야 합니다.

해당 지침에 대한 자세한 내용을 보려면 VEXcode V5의 도움말 섹션을 방문하세요.

이 활동에서 학생들이 할 일은 다음과 같습니다.

  1. 탱크 제어 예제 프로젝트를 살펴보세요.
  2. while True 무한 루프구조의 사용법을 이해합니다.
  3. 로보 슬라롬 챌린지를 완료하세요!

교사 팁 아이콘 교사 팁

학생이 VEXcode V5를 처음 사용하는 경우 VEX 라이브러리에서 많은 유용한기사접근할 수 있습니다.

필요한 재료:
수량 필요한 재료
1

VEX V5 클래스룸 스타터 키트 (최신 펌웨어 포함)

1

VEXcode V5 (최신 버전, Windows, macOS)

1

엔지니어링 노트

1

탱크 제어 예제 프로젝트

2명 이상

장애물로 사용할 교실 개체

교사 팁 아이콘 교사 팁 - 자동완성 사용

자동완성은 VEXcode V5의 기능으로, 사용자가 입력하는 나머지 명령어를 예측해 줍니다. 학생들이 VEXcode V5로 작업할 때 Python 구문을 이해하는 데 도움이 되는 자동 완성 기능을 사용하도록 권장합니다. 명령어를 입력하기 시작하면 자동완성 기능이 나타날 수 있습니다. "위쪽" 및 "아래쪽" 키를 사용하여 원하는 이름을 선택한 다음 키보드의 "Tab" 또는 (Enter/Return) 키를 눌러 선택합니다. 이 기능에 대한 자세한 내용은 Python 문서확인하세요. 

왼쪽에 드라이브트레인 명령의 시작을 입력한 VEXcode V5와 오른쪽에 해당 명령에 대한 자동완성 옵션의 스크롤 가능 목록이 표시됩니다.

이 활동을 통해 컨트롤러를 프로그래밍하는 데 필요한 도구를 얻을 수 있습니다. 

  • 이 탐색에 사용될 VEXcode V5 Python 지침:
    • left_motor.set_velocity ()
    • right_motor.set_velocity ()
    • left_motor.spin ()
    • right_motor.spin ()
    • controller_1.axis2.position ()
    • controller_1.axis3.position ()
    • 참인 동안: 
    • wait (5, SECONDS)

해당 지침에 대한 자세한 내용을 보려면 VEXcode V5의 Python 도움말 섹션을 방문하세요. 

VEXcode V5는 도구 상자가 맨 왼쪽에 열려 있고 드라이브 도움말 명령이 맨 오른쪽에 열려 있습니다. 도움말은 명령의 정의와 사용 방법에 대한 정보를 보여줍니다.

1단계: 컨트롤러 프로그래밍을 시작하겠습니다.

  • 파일 및 예제 열기 를 선택합니다.
  • 빨간색 상자에 파일 메뉴가 열리고 예제가 열려 있는 VEXcode V5 도구 모음이 강조 표시됩니다. Open Examples는 New Blocks Project, New Text Project 및 Open 아래에 있는 네 번째 메뉴 항목입니다.
  • 다양한 예제 프로젝트를 스크롤합니다. 탱크 제어 예시 프로젝트를 선택합니다.

상단의 감지 필터 주위에 빨간색 상자가 있고 오른쪽 하단의 탱크 제어 예제 프로젝트 아이콘이 있는 VEXcode V5의 예제 프로젝트.

  • 탱크 제어 예제 프로젝트를 엽니다. 예시 프로젝트는 구동계와 컨트롤러를 구성합니다. 코드는 다음과 같습니다.
# VEX
가져오기에서 라이브러리 가져오기 *

# 프로젝트 코드 시작
# True: left_motor.set_velocity (controller_1.axis3.position (
), percent
    ) right_motor.set_velocity (controller_1.axis2.position ()
    , PERCENT) left_motor.spin (forward
    ) right_motor.spin (
    FORWARD)
    wait (5, MSEC)

엔지니어링 노트에서 다음을 수행합니다.

  1. Clawbot이 수행할 프로젝트를 예측합니다. 프로젝트가 컨트롤러를 활용한다는 사실보다 더 많은 것을 설명하십시오.
  2. 조이스틱은 로봇을 어떻게 움직일까요? Clawbot은 무엇을 하고 있나요?

교사 도구 상자 아이콘 교사 도구 상자 - 답변

  1. 이 프로젝트에서는 while True 무한 루프 구조를 활용하여 좌우 조이스틱의 위치가 어디에 있는지 지속적으로 확인합니다. 왼쪽(또는 오른쪽) 조이스틱을 위로 밀면 조이스틱을 얼마나 앞으로 밀지에 대한 속도가 설정됩니다. 
  2. 따라서 조이스틱을 앞으로 밀수록 속도가 더 빨리 설정되고 모터가 더 빨리 움직입니다. 조이스틱을 뒤로 밀어내는 것도 같은 아이디어입니다. 조이스틱을 뒤로 밀수록 모터가 더 빨리 후진합니다.
  • 프로젝트 이름을 TankControl로 지정합니다. Python TankControl 프로젝트를 저장, 다운로드하고 실행합니다.

VEXcode V5의 프로젝트 이름 대화 상자는 탱크 제어를 읽고 슬롯 1이 선택되었음을 보여줍니다.

  • 자세한 내용은 VEXcode V5에서 프로젝트 다운로드 및 실행 방법을 설명하는 튜토리얼 비디오를 참조하십시오.

튜토리얼 아이콘 주위에 빨간색 상자가 있는 VEXcode V5의 도구 모음. 도구 모음에는 왼쪽에서 오른쪽으로 V5 로고, 지구본 아이콘, 파일, 튜토리얼이 표시됩니다.

  • 엔지니어링 전자 필기장에서 프로젝트에 대한 설명을 확인하고 필요에 따라 수정할 메모를 추가하십시오.

2단계: 컨트롤러: 탱크 제어

교사 도구 상자 아이콘 교사 도구 상자 - while True 무한 루프 구조

이 단계에서는 while True 무한 루프 구조의 중요성에 대해 설명합니다. 여러분은 학급 전체로 정보를 검토해야 합니다. Clawbot과 Controller를 사용하여 동작을 모델링할 수 있으며, 시간이 허락한다면 학생들에게 while True 무한 루프 구조 없이 프로그램을 실행하게 할 수도 있습니다.

학생들이 while True 무한 루프를 이해하는 데 추가 도움이 필요하면 여기 클릭하세요.

While True 무한 루프 구조를 사용하면 어떤 이점이 있습니까?

여기에 while True 무한 루프 구조가 없는 우리의 프로젝트가 있습니다:

# VEX 가져오기에서
라이브러리 가져오기 *

# 프로젝트 코드 시작
# 모터를 컨트롤러 축 위치로 설정하는 메인 컨트롤러 루프 left_motor.set_velocity (

controller_1.axis3.position (), PERCENT) right_motor.set_velocity
(controller_1.axis2.position (), PERCENT) left_motor.spin
(FORWARD)
right_motor.spin (FORWARD)


이 프로그램이 실행되면 어떻게 될 것 같습니까? 그룹으로 토론합니다. 엔지니어링 노트에 예측을 적으십시오.

교사 도구 상자 아이콘 교사 도구 상자 - 구조 이해

while True 무한 루프가 없으면 프로젝트가 실행되자마자 각 모터의 속도 값이 설정되고, 프로젝트가 중지될 때까지 해당 값이 일정하게 유지됩니다. 즉, 조이스틱의 기본 위치가 축에서 0이기 때문에 조이스틱을 움직이지 않고 프로젝트를 실행하면 조이스틱을 움직이더라도 두 모터의 속도는 모두 0으로 유지됩니다.

마찬가지로, 왼쪽 조이스틱을 축 3을 따라 최대한 위로 움직인 후 그대로 유지한다고 가정해 보겠습니다. 위의 프로젝트를 실행하면 왼쪽 모터가 최대 속도로 움직이며, 조이스틱을 축 3을 따라 아래로 움직여도 해당 속도가 유지됩니다. 이는 Clawbot이 프로젝트가 실행되자마자 컨트롤러로부터 초기 명령을 받기 때문입니다. 그러나 루프가 없으면 해당 초기 값을 업데이트할 수 없습니다.

while True 무한 루프는 Clawbot에게 프로젝트 기간 동안 속도를 지속적으로 업데이트하고 실행하라고 지시합니다. 즉, 이 프로젝트에서 while True 무한 루프를 사용하면 조이스틱을 축 2 또는 3을 따라 움직여 각 모터의 속도를 변경할 수 있으며, 프로젝트를 중지하거나 Clawbot을 끌 때까지 Clawbot이 그에 따라 응답합니다.

# 라이브러리는 vex에서
가져옵니다. import *

# 프로젝트 코드 시작
# 모터를 컨트롤러 축 위치로 설정하는 메인 컨트롤러 루프
while True:
    left_motor.set_velocity(controller_1.axis3.position(), PERCENT)
    right_motor.set_velocity(controller_1.axis2.position(), PERCENT)
    left_motor.spin(FORWARD)
    right_motor.spin(FORWARD)
    wait(5, MSEC)

슬라럼 코스를 탐색하세요!

교사 도구 상자 아이콘 교사 도구 상자 - 활동 설정

학생들을 2~4명으로 구성된 소그룹으로 구성합니다. 한 명의 학생을 운전자로 지정해야 합니다. 운전자는 컨트롤러를 사용하여 클로봇을 조종하는 사람입니다.

학생들이 컨트롤러를 사용하여 각 "깃발" 바깥쪽을 따라 클로봇을 움직여 이 회전을 완료하도록 합니다. 클로봇의 경로는 깃발에 닿지 않도록 해야 하며 결승선을 통과할 수 있어야 합니다. 플래그는 교실에서 손쉽게 구할 수 있는 물건이나 물건(지우개, 테이프 롤, 티슈 상자)으로 만들 수 있으며, 클로봇을 작동하기 전에 설치할 수 있습니다.

시간이 허락한다면, 학생들에게 역할을 바꾸어 다른 학생들에게 클로봇을 운전해 볼 기회를 주세요. 각 운전자가 슬라롬을 얼마나 빨리 주행하는지 보는 방식으로 이를 그룹 내 또는 그룹 간의 경쟁으로 바꿀 수도 있습니다.

스노우보더가 눈 덮인 경사면에서 내리막길을 달리며 지그재그 패턴으로 배치된 일련의 빨간색과 파란색 게이트를 탐색하고 있습니다.

슬라럼은 참가자가 세트 플래그 또는 마커를 탐색해야 하는 코스입니다. 스키 슬라롬은 인기 있는 겨울 스포츠이며 동계 올림픽에 포함됩니다.
이제 컨트롤러가 페어링되고 Python 프로젝트가 다운로드되었으므로 컨트롤러를 사용하여 Clawbot을 움직일 준비가 되었습니다!

  • 교사로부터 슬라럼에서 깃발로 사용할 네 가지 교실 항목을 수집하십시오.
  • 슬라럼 다이어그램에 따라 기사님이 Clawbot을 탐색할 수 있도록 플래그를 설정하기 위해 협력합니다.
  • 탱크 제어 예제 프로젝트를 다운로드하십시오. 프로젝트를 다운로드하는 방법에 대한 질문이 있는 경우 프로젝트 다운로드 및 실행 튜토리얼을 확인하십시오.

상단에 '시작' 레이블이 있고 하단에 피니시 라인이 있는 스노우 슬라럼 코스의 일러스트입니다. 점선으로 된 지그재그 경로는 파란색과 빨간색 깃발을 번갈아 가며 엮습니다.

컨트롤러를 사용하여 각 "플래그" 의 외부를 따라 Clawbot을 이동합니다. 로봇의 경로가 깃발에 닿지 않도록 하고 결승선을 통과할 수 있도록 해야 합니다.

  • 프로젝트를 실행하고 Clawbot을 앞뒤로 구동하고 두 조이스틱을 사용하여 좌우로 돌립니다.
  • Clawbot이 과정을 완료하는 데 걸리는 시간입니다. 엔지니어링 노트에 시간을 기록합니다.
  • Slalom 코스를 통해 Clawbot을 얼마나 빨리 얻을 수 있습니까?
     

토론 아이콘 동기 부여 동기 부여 토론 - 활동에 대한 반성

질문: 클로봇이 예상대로 컨트롤러에 응답했나요?

A: 답변은 다양할 수 있습니다. 그러나 이 질문의 목적은 인지적 사고를 촉진하는 것입니다. 학생들은 실험을 하기 전에 행동을 예측하고, 결과를 기록하고, 반성하는 것으로 시작했습니다.

질문: 클로봇을 직선으로 앞뒤로 움직이는 데 가장 큰 어려움은 무엇입니까?

A: 답변은 다를 수 있지만 일반적인 답변은 Clawbot의 모터가 같은 방향과 속도로 움직이도록 하려면 두 조이스틱이 서로 동기화되어 움직여야 한다는 것입니다.

질문: while True 무한 루프를 사용하면 컨트롤러를 계속해서 사용하여 클로봇을 움직일 수 있습니까?

A: while True 무한 루프가 없다면 Clawbot은 프로젝트의 지침에 따라 결정된 동작을 한 번만 수행합니다. while True 무한 루프는 Clawbot에게 프로젝트 기간 동안 속도를 지속적으로 업데이트하고 실행하라고 지시합니다. 즉, while True 무한 루프를 사용하면 컨트롤러를 사용하여 클로봇을 무한정, 즉 배터리가 소진될 때까지 움직일 수 있습니다.