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

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

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

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

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

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

스크린샷 2023-07-26 at 3.49.03 PM.png

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

장점

제한 사항

예시 상황

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

옵션 2: Forever 루프 사용

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

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

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

스크린샷 2023-07-26 at 4.07.00 PM.png

"옵션 2" VEXcode EXP 프로젝트 파일 >다운로드

옵션 2 코드에 대한 설명.

코드 조각

설명

ArmMotor 정지를 유지로 설정하고 ClawMotor 정지를 유지로 설정

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

스크린샷 2023-07-26 오후 4.07.59.png Labels.png가 포함된 EXP 컨트롤러

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

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

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

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

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

스크린샷 2023-07-26 at 4.09.52 PM.png

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

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

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

옵션 2 요약: Forever 루프 사용

장점

제한 사항

예시 상황

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

옵션 3: 이벤트 사용

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

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

스크린샷 2023-07-26 at 4.31.57 PM.png

"옵션 3" VEXcode EXP 프로젝트 파일 >다운로드

옵션 3 코드에 대한 설명.

코드 조각

설명

ArmMotor 정지를 유지로 설정하고 ClawMotor 정지를 유지로 설정

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

스크린샷 2023-07-26 at 4.33.05 PM.png Labels.png가 포함된 EXP 컨트롤러

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

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

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

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

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

스크린샷 2023-07-26 at 4.33.30 PM.png

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

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

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

옵션 3 요약: 이벤트 사용

장점

제한 사항

예시 상황

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

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

Last Updated: