VEXcode IQ의 사용자 지정 컨트롤러 코드

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

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

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

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

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

이미지10.png

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

장점

제한 사항

예시 상황

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

옵션 2: 영구 루프 사용

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

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

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

이미지4.png

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

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

옵션 2 코드 설명.

코드 조각

설명

이미지8.png

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

 
이미지6.png이미지1.png

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

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

[Set motor velocity] 블록은 모터 속도를 A 및 D 축을 따라 현재 컨트롤러의 위치로 설정하는 데 사용됩니다. 이는 차량을 주행 상태로 설정하는 것과 동일합니다. 그것은 반드시 자동차를 움직이게 하는 것이 아니라 단지 설정합니다.

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

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

 
이미지3.png

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

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

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


 

옵션 2 요약: Forever Loop 사용

장점

제한 사항

예시 상황

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

옵션 3: 이벤트 사용

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

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

이미지7.png

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

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

옵션 3 코드의 설명.

코드 조각

설명

이미지2.png

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

 
이미지9.png이미지1.png

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

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

[Set motor velocity] 블록은 모터 속도를 A 및 D 축을 따라 현재 컨트롤러의 위치로 설정하는 데 사용됩니다. 이는 차량을 주행 상태로 설정하는 것과 동일합니다. 그것은 반드시 자동차를 움직이게 하는 것이 아니라 단지 설정합니다.

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

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


 
이미지5.png

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

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

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


 

옵션 3 요약: 이벤트 사용

장점

제한 사항

예시 상황

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

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

Last Updated: