VEXcode IQ의 맞춤형 컨트롤러 코드

컨트롤러를 사용하면 로봇을 더 쉽게 운전하고 이동하여 작업을 완료할 수 있습니다. 그러나 드라이브 프로그램 사용에는 제한이 있으며, 로봇 빌드나 작업에 따라 다른 제어가 필요할 수 있습니다. 컨트롤러를 코딩하면 컨트롤러를 최적화하여 로봇과 현재 작업에 더 잘 맞도록 만들 수 있습니다. VEXcode IQ에서 컨트롤러를 코딩하는 방법에는 여러 가지가 있습니다. 각각에는 장점과 한계가 있으며, 일부 방법은 원하는 결과에 따라 특정 상황에 더 적합합니다.

이 문서에서는 VEXcode IQ에서 컨트롤러를 사용자 정의 코딩하기 위한 세 가지 옵션을 안내합니다. 각 방법은 장점, 제한 사항 및 방법 선택 시 도움이 되는 사용 사례 예시와 함께 설명됩니다. 이 기사의 목적에 따라 표시된 모든 코드 예제는 Clawbot용으로 작성되었습니다. 그러나 동일한 개념을 builds.vex.com에서 찾을 수 있는 수많은 다른 빌드와 사용자 정의 빌드에도 적용할 수 있습니다.

옵션 1: 장치 구성에서 버튼 할당

이 옵션은 BaseBot 또는 Clawbot과 같은 표준 빌드를 사용하고 빠르게 시작하고 실행하려는 경우 유용합니다.

이 옵션을 사용하면 장치 구성에서 컨트롤러의 버튼에 모터, 드라이브트레인 또는 모터 그룹을 할당할 수 있습니다. 장치 구성에서 컨트롤러에 버튼을 할당하는 방법에 대한 자세한 내용은 이 문서를 참조하세요.

컨트롤러 옵션이 표시된 VEXcode IQ 장치 메뉴입니다. 버튼 제어 다이어그램은 두 개의 조이스틱이 탱크 구동 구성으로 로봇을 구동한다는 것을 보여줍니다. E축 버튼은 ArmMotorGroup을 제어하고, R축 버튼은 ClawMotor를 제어합니다.

옵션 1 요약: 장치 구성에서 버튼 할당

장점

제한 사항

예시 상황

  • 코딩이 필요 없는 빠른 설정
  • 가장 간단한 방법
  • 쉽게 조절 가능
  • 개별 모터, 표준 드라이브트레인 및 모터 그룹을 버튼에 할당할 수 있습니다.
  • 버튼 할당은 컨트롤러의 버튼 수로 제한됩니다.
  • 드라이브트레인은 모터 4개를 초과하거나 맞춤화할 수 없습니다(표준 드라이브만 지원되며 H 드라이브, 홀로노믹 또는 기타 맞춤형 드라이브트레인은 지원되지 않음).
  • BaseBot, Clawbot과 같은 표준 빌드를 조작하거나 해당 표준 빌드를 간단히 수정합니다. 예를 들어 모터 그룹에 의해 제어되는 전면에 흡입구가 부착된 BaseBot이 있습니다.
  • 많은 코딩 없이 로봇의 다양한 동작에 해당하는 버튼을 신속하게 조작

옵션 2: Forever Loop 사용

표준 빌드 대신 사용자 정의 빌드를 사용하거나 컨트롤러에서 더 많은 사용자 정의를 원하는 경우 이 옵션이 좋습니다. Forever 루프를 사용하는 것은 컨트롤러에 대한 사용자 정의 코드를 생성하는 데 좋은 방법입니다.

이 옵션은 컨트롤러 및 관련 버튼에 대한 모든 조건을 Forever 루프에 배치합니다. 이는 특히 맞춤형 빌드 디자인에서 더 많은 유연성을 제공하지만 약간의 코딩 경험도 필요합니다. 그러나 이 옵션을 사용할 때 고려해야 할 한 가지는 프로젝트의 길이와 복잡성입니다. 추가되는 조건이 많을수록 코드 스택이 길어질 수 있습니다. 즉, 여러 블록을 순서대로 실행해야 하며, 블록이 많으면 프로젝트 실행 속도가 느려질 수 있습니다. 프로젝트 실행 속도가 느려지면 컨트롤러 버튼을 누르고 로봇 동작을 확인하는 사이에 지연이 발생할 수 있습니다.

아래에 표시된 구체적인 예는 맞춤형 디자인 로봇(예: 맞춤형 드라이브트레인이 있는 로봇)과 함께 Forever 루프를 사용하여 로봇을 구동하고 발톱과 팔을 조작하여 개체와 상호 작용할 수 있는 한 가지 방법입니다.

옵션 2 블록 프로젝트가 열린 VEXcode IQ 작업 공간입니다. 이 프로젝트에는 블록 스택이 있으며 장치가 구성되어 있습니다. 장치 메뉴가 옆으로 열리고 다음 장치가 나열됩니다: IQ 2세대 Brain, 포트 4의 ClawMotor, 포트 10의 ArmMotor, Controller, 포트 1의 LeftMotor, 포트 6의 RightMotor. 마지막으로 컨트롤러 입력을 처리하기 위한 블록 스택이 있습니다. 스택에는 '시작 시 ArmMotor 정지를 보류로 설정하고 ClawMotor 정지를 보류로 설정'이라고 적혀 있습니다. 나머지 스택은 Forever 루프에 포함되어 있습니다. Forever로 설정하고 LeftMotor 속도를 Controller A 위치 %로 설정한 다음 LeftMotor를 앞으로 돌리고 RightMotor 속도를 Controller D 위치 %로 설정한 다음 RightMotor를 앞으로 돌립니다. 다음으로, 컨트롤러 E 위쪽을 누르면 ArmMotor를 위로 돌리고, 컨트롤러 E 아래쪽을 누르면 ArmMotor를 아래로 돌리고, 그렇지 않으면 ArmMotor를 멈춥니다. 마지막으로, 컨트롤러 F 위쪽을 누르면 클로모터가 열리고, 컨트롤러 F 아래쪽을 누르면 클로모터가 닫히고, 그렇지 않으면 클로모터가 멈춥니다.

"옵션 2" VEXcode IQ(2세대) 프로젝트 파일 다운로드 >

참고: 1세대 Clawbot을 사용하는 경우 위 프로젝트에서 의도한 대로 작동하려면 장치 구성에서 암 모터를 반대로 바꿔야 합니다.

옵션 2 코드에 대한 설명.

코드 조각

설명

옵션 2 VEXcode IQ 프로젝트의 블록 스택을 확대해서 본 모습입니다. 두 개의 블록이 강조 표시되어 있으며 스택의 Forever 루프 밖에 있습니다. 이 블록들은 ArmMotor 중지를 보류로 설정하고 ClawMotor 중지를 보류로 설정합니다.

이 코드 예제에는 Clawbot이 사용되었습니다. 컨트롤러의 버튼을 사용하여 팔을 올리거나 내릴 때 버튼을 놓으면 중력으로 인해 팔이 다시 아래로 떨어집니다. 팔과 집게발을 모두 "고정"으로 설정하면 컨트롤러의 버튼을 놓은 후에도 팔과 집게발이 모두 제자리에 유지됩니다.

옵션 2 VEXcode IQ 프로젝트의 블록 스택을 확대해서 본 모습입니다. 스택의 Forever 루프 내부에 4개의 블록이 강조 표시되어 있습니다. Forever를 읽고 LeftMotor 속도를 Controller A 위치 %로 설정하고 LeftMotor를 앞으로 돌리고 RightMotor 속도를 Controller D 위치 %로 설정하고 RightMotor를 앞으로 돌립니다. 버튼과 조이스틱이 표시된 IQ(2세대) 컨트롤러의 다이어그램입니다. 이 사진은 컨트롤러의 정면에서 본 모습입니다. 왼쪽 조이스틱의 축은 A와 B로 표시됩니다. 왼쪽 조이스틱의 가운데 버튼은 L3으로 표시됩니다. 왼쪽 조이스틱 아래에 있는 두 개의 둥근 버튼에는 E Up과 E Down이라고 표시되어 있습니다. 오른쪽 조이스틱의 축은 C와 D로 표시됩니다. 오른쪽 조이스틱의 중앙 버튼은 R3로 표시됩니다. 오른쪽 조이스틱 아래에 있는 두 개의 둥근 버튼에는 F 위쪽과 F 아래쪽이라고 표시되어 있습니다.

이 코드 예제에는 Clawbot이 사용되었습니다. 컨트롤러의 버튼을 사용하여 팔을 올리거나 내릴 때 버튼을 놓으면 중력으로 인해 팔이 다시 아래로 떨어집니다. 팔과 집게발을 모두 "고정"으로 설정하면 컨트롤러의 버튼을 놓은 후에도 팔과 집게발이 모두 제자리에 유지됩니다.

컨트롤러에서 어떤 버튼이 눌려져 있는지 지속적으로 확인하기 위해 Forever 루프가 사용됩니다.

[모터 속도 설정] 블록은 A 및 D 축을 따라 현재 컨트롤러의 위치에 모터 속도를 설정하는 데 사용됩니다. 이는 자동차를 운전 중에 설정하는 것과 같습니다. 그것이 반드시 자동차를 움직이게 만드는 것은 아니며, 단지 설정만 해줄 뿐입니다.

각 조이스틱 축은 -100에서 +100 사이의 값을 반환하고 중앙에 있을 경우 0 값을 반환합니다. 그러면 조이스틱 축을 눌렀을 때 -100% ~ 100%가 됨을 의미합니다. 축이 100 또는 -100 쪽으로 더 멀리 밀릴수록 모터가 더 빠르게 회전합니다.

그런 다음 [Spin] 블록을 사용하여 실제로 모터를 움직입니다. 이는 방향이 설정된 후 자동차의 가스를 누르는 것과 같습니다. 이를 통해 각 모터는 4개의 컨트롤러 축 중 하나에 의해 제어될 수 있습니다.

옵션 2 VEXcode IQ 프로젝트의 블록 스택을 확대해서 본 모습입니다. 스택의 Forever 루프 내부에서 if, else if, else 블록이 강조 표시됩니다. 컨트롤러 E 위쪽을 누르면 ArmMotor가 위로 회전하고, 컨트롤러 E 아래쪽을 누르면 ArmMotor가 아래로 회전하고, 그렇지 않으면 ArmMotor가 멈춥니다.

이 코드 예제에는 Clawbot이 사용되었습니다. 컨트롤러의 버튼을 사용하여 팔을 올리거나 내릴 때 버튼을 놓으면 중력으로 인해 팔이 다시 아래로 떨어집니다. 팔과 집게발을 모두 "고정"으로 설정하면 컨트롤러의 버튼을 놓은 후에도 팔과 집게발이 모두 제자리에 유지됩니다.

[If then else if then else] 블록은 컨트롤러에서 누르거나 떼는 버튼에 특정 동작을 매핑하는 데 사용됩니다. 이 코드 섹션에서 설정된 조건은 E Up 또는 E Down 버튼을 누른 경우입니다. 그렇다면 팔을 올리거나 내리는 등 특정 행동이 발생하게 됩니다. 조건의 else 부분도 있는데, 어느 버튼도 누르지 않으면 팔이 움직이지 않도록 설정됩니다.

Claw 프로젝트의 다음 코드 섹션에도 동일한 설명이 따릅니다.

옵션 2 요약: Forever Loop 사용

장점

제한 사항

예시 상황

  • 맞춤형 빌드, 특히 모터가 4개 이상인 드라이브트레인을 수용할 수 있습니다.
  • 단일 버튼에 여러 동작을 할당할 수 있습니다.
  • 컨트롤러의 다양한 축에 동작을 할당할 수 있습니다(장치 구성에서 왼쪽 아케이드, 오른쪽 아케이드, 분할 아케이드 및 탱크 드라이브의 유일한 옵션과 반대).
  • 어느 정도의 코딩 지식이 필요합니다(조건문, 루프 및 컨트롤러의 버튼/조이스틱에 대한 지식).
  • 프로젝트 실행이 느려지거나 버튼 응답 시간이 지연될 가능성이 있습니다. 모든 명령이 단일 Forever 루프 내에 포함되어 있으므로 설정된 조건과 코드 길이에 따라 코드 실행이 느리게 실행될 수 있습니다.
  • 특히 비표준 구동계와 함께 맞춤형 제작 로봇과 함께 컨트롤러 사용
  • 단일 버튼에 여러 동작을 할당하려는 경우. 예를 들어, F 위쪽 버튼을 누르면 Claw가 열리고 앞으로 이동한 다음 물체 주위로 닫힐 수 있습니다.

옵션 3: 이벤트 사용

컨트롤러에 많은 사용자 정의를 원하는 경우 이벤트를 사용하는 것이 가장 좋은 옵션입니다. 버튼을 한 번 누르면 버튼을 눌러 발톱을 열고, 팔을 올리고, 설정된 거리만큼 앞으로 이동하는 등 여러 로봇 동작을 실행할 수 있습니다. Forever 루프 내에서 버튼당 여러 동작을 코딩하려고 하면 프로젝트 실행이 크게 느려질 수 있습니다. 이벤트를 사용하면 이 작업을 보다 효과적으로 수행할 수 있습니다.

이 옵션은 이벤트를 사용하여 프로젝트 흐름을 분할합니다. 이는 Forever 루프를 사용하는 것과 비슷하지만 코드를 더 체계적으로 구성할 수 있으므로 버튼 실행의 응답 시간이 더 빨라집니다. 응답 시간이 빠르다는 것은 컨트롤러 버튼을 누른 후 로봇 동작을 보는 사이에 지연이 발생하지 않는다는 것을 의미합니다. 이 예는 이전 프로젝트와 동일한 동작을 보여 주지만 Forever Loop 대신 이벤트를 사용하여 수행되었습니다.

옵션 3 블록 프로젝트가 열린 VEXcode IQ 작업 공간입니다. 이 프로젝트에는 11개의 작은 블록 스택이 있으며 장치가 구성되어 있습니다. 장치 메뉴가 옆으로 열리고 다음 장치가 나열됩니다: IQ 2세대 Brain, 포트 4의 ClawMotor, 포트 10의 ArmMotor, Controller, 포트 1의 LeftMotor, 포트 6의 RightMotor. 마지막으로 컨트롤러 입력을 처리하는 11개의 작은 블록 스택이 있습니다. 첫 번째 스택은 시작 시 ArmMotor 정지를 보류로 설정한 다음 ClawMotor 정지를 보류로 설정합니다. 두 번째 스택에는 컨트롤러 축 A가 변경되면 LeftMotor 속도를 컨트롤러 A 위치 %로 설정한 다음 LeftMotor를 앞으로 회전한다는 내용이 있습니다. 세 번째 스택에는 컨트롤러 D가 변경될 때 RightMotor 속도를 컨트롤러 D 위치 %로 설정한 다음 RightMotor를 앞으로 회전시킨다는 내용이 있습니다. 네 번째 스택에는 컨트롤러 버튼 E를 위로 누르면 ArmMotor가 위로 회전한다고 적혀 있습니다. 다섯 번째 스택에는 컨트롤러 버튼 E 위쪽을 놓으면 ArmMotor가 멈춘다고 적혀 있습니다. 여섯 번째 스택에는 컨트롤러 버튼 E를 아래로 누르면 ArmMotor가 아래로 회전한다고 적혀 있습니다. 일곱 번째 스택에는 컨트롤러 버튼 E를 놓으면 ArmMotor가 멈춘다는 내용이 있습니다. 여덟 번째 스택에는 컨트롤러 버튼 F를 위쪽으로 누르면 클로모터가 회전하여 열린다고 적혀 있습니다. 아홉 번째 스택에는 컨트롤러 버튼 F 위쪽을 놓으면 클로모터가 멈춘다는 내용이 적혀 있습니다. 10번째 스택에는 컨트롤러 버튼 F를 아래로 누르면 클로모터가 닫힙니다. 열한 번째이자 마지막 스택에는 컨트롤러 버튼 F를 놓으면 ClawMotor가 멈춘다고 적혀 있습니다.

"옵션 3" VEXcode IQ(2세대) 프로젝트 파일 다운로드 >

참고: 1세대 Clawbot을 사용하는 경우 위 프로젝트에서 의도한 대로 작동하려면 장치 구성에서 암 모터를 반대로 해야 합니다.

옵션 3 코드에 대한 설명.

코드 조각

설명

옵션 3 VEXcode IQ 프로젝트의 블록 스택 하나를 클로즈업으로 본 모습입니다. 스택에는 '시작 시 ArmMotor 정지를 보류로 설정한 다음 ClawMotor 정지를 보류로 설정합니다'라는 내용이 있습니다.

이 코드 예제에는 Clawbot이 사용되었습니다. 컨트롤러의 버튼을 사용하여 팔을 올리거나 내릴 때 버튼을 놓으면 중력으로 인해 팔이 다시 아래로 떨어집니다. 팔과 집게발을 모두 "고정"으로 설정하면 컨트롤러의 버튼을 놓은 후에도 팔과 집게발이 모두 제자리에 유지됩니다.

옵션 3 VEXcode IQ 프로젝트의 두 블록 스택을 클로즈업으로 본 모습입니다. 첫 번째 스택은 컨트롤러 축 A가 변경될 때 왼쪽 모터 속도를 컨트롤러 A 위치 %로 설정한 다음 왼쪽 모터를 앞으로 회전시킨다는 내용을 담고 있습니다. 두 번째 스택에는 컨트롤러 축 D가 변경되면 RightMotor 속도를 컨트롤러 D 위치 %로 설정한 다음 RightMotor를 앞으로 회전시킨다는 내용이 있습니다. 버튼과 조이스틱이 표시된 IQ(2세대) 컨트롤러의 다이어그램입니다. 이 사진은 컨트롤러의 정면에서 본 모습입니다. 왼쪽 조이스틱의 축은 A와 B로 표시됩니다. 왼쪽 조이스틱의 가운데 버튼은 L3으로 표시됩니다. 왼쪽 조이스틱 아래에 있는 두 개의 둥근 버튼에는 E Up과 E Down이라고 표시되어 있습니다. 오른쪽 조이스틱의 축은 C와 D로 표시됩니다. 오른쪽 조이스틱의 중앙 버튼은 R3로 표시됩니다. 오른쪽 조이스틱 아래에 있는 두 개의 둥근 버튼에는 F 위쪽과 F 아래쪽이라고 표시되어 있습니다.

이 코드 예제에는 Clawbot이 사용되었습니다. 컨트롤러의 버튼을 사용하여 팔을 올리거나 내릴 때 버튼을 놓으면 중력으로 인해 팔이 다시 아래로 떨어집니다. 팔과 집게발을 모두 "고정"으로 설정하면 컨트롤러의 버튼을 놓은 후에도 팔과 집게발이 모두 제자리에 유지됩니다.

{When controller axis} 이벤트 블록은 조이스틱을 사용하여 컨트롤러의 4개 축 중 하나가 변경될 때 특정 동작을 트리거하는 데 사용됩니다.

[모터 속도 설정] 블록은 A 및 D 축을 따라 현재 컨트롤러의 위치에 모터 속도를 설정하는 데 사용됩니다. 이는 자동차를 운전 중에 설정하는 것과 같습니다. 그것이 반드시 자동차를 움직이게 만드는 것은 아니며, 단지 설정만 해줄 뿐입니다.

각 조이스틱 축은 -100에서 +100 사이의 값을 반환하고 중앙에 있을 경우 0 값을 반환합니다. 그러면 조이스틱 축을 눌렀을 때 -100% ~ 100%가 됨을 의미합니다. 축이 100 또는 -100 쪽으로 더 멀리 밀릴수록 모터가 더 빠르게 회전합니다.

그런 다음 [Spin] 블록을 사용하여 실제로 모터를 움직입니다. 이는 방향이 설정된 후 자동차의 가스를 누르는 것과 같습니다. 이를 통해 각 모터는 4개의 컨트롤러 축 중 하나에 의해 제어될 수 있습니다.

옵션 3 VEXcode IQ 프로젝트의 블록 4개 스택을 클로즈업으로 찍은 사진입니다. 첫 번째 스택에는 컨트롤러 버튼 E를 위로 누르면 ArmMotor가 위로 회전한다고 적혀 있습니다. 두 번째 스택에는 컨트롤러 버튼 E를 놓으면 ArmMotor가 멈춘다고 적혀 있습니다. 세 번째 스택에는 컨트롤러 버튼 E를 아래로 누르면 ArmMotor가 아래로 회전한다고 적혀 있습니다. 네 번째 스택에는 컨트롤러 버튼 E를 놓으면 ArmMotor가 멈춘다고 적혀 있습니다.

이 코드 예제에는 Clawbot이 사용되었습니다. 컨트롤러의 버튼을 사용하여 팔을 올리거나 내릴 때 버튼을 놓으면 중력으로 인해 팔이 다시 아래로 떨어집니다. 팔과 집게발을 모두 "고정"으로 설정하면 컨트롤러의 버튼을 놓은 후에도 팔과 집게발이 모두 제자리에 유지됩니다.

{When controller axis} 이벤트 블록은 컨트롤러에서 누르거나 떼는 버튼에 특정 동작을 매핑하는 데 사용됩니다. 이 코드 섹션에서 설정된 조건은 E Up 또는 E Down 버튼을 누른 경우입니다. 그렇다면 팔을 올리거나 내리거나 멈추는 것과 같은 특정 행동이 발생합니다.

Claw 프로젝트의 마지막 코드 섹션에도 동일한 설명이 따릅니다.

옵션 3 요약: 이벤트 사용

장점

제한 사항

예시 상황

  • 맞춤형 빌드, 특히 모터가 4개 이상인 드라이브트레인을 수용할 수 있습니다.
  • 단일 버튼에 여러 동작을 할당할 수 있습니다.
  • 컨트롤러의 다양한 축에 동작을 할당할 수 있습니다(장치 구성에서 왼쪽 아케이드, 오른쪽 아케이드, 분할 아케이드 및 탱크 드라이브의 유일한 옵션과 반대).
  • 더 빠른 코드 실행 및 그에 따른 버튼 응답성(각 조건이 개별적으로 호출되고 하나의 단일 코드 스택에 포함되지 않음)
  • 옵션(조건부, 루프, 이벤트 및 컨트롤러의 버튼/조이스틱에 대한 지식)에 대한 대부분의 코딩 지식이 필요합니다.
  • 1세대 VEX IQ Brain을 사용하는 경우 프로젝트에 이벤트가 너무 많으면 Brain의 처리 제한으로 인해 프로젝트가 실행되지 않을 수 있습니다.
  • 특히 비표준 구동계와 함께 맞춤형 제작 로봇과 함께 컨트롤러 사용
  • 지연 없이 단일 버튼에 여러 동작을 할당하려는 경우. 예를 들어, F 위쪽 버튼을 누르면 Claw가 열리고 앞으로 이동한 다음 물체 주위로 닫힐 수 있습니다.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: