VEXcode V5 中的自訂控制器程式碼

使用控制器可以更輕鬆地驅動和移動機器人來完成任務。 但是,使用 Drive 程式有限制,並且根據您的機器人構造或手邊的任務,您可能需要不同的控制。 對控制器進行編碼可以讓您優化控制器,使其更好地適合您的機器人和手邊的任務。 在 VEXcode V5 中對控制器進行編碼有多種方法。 每種方法都有其優點和局限性,有些方法更適合某些情況,這取決於所需的結果。

本文將引導您了解在 VEXcode V5 中自訂控制器編碼的三種不同選項。 將描述每種方法及其優點、限制和範例用例,以幫助指導您選擇方法。 出於本文的目的,顯示的所有程式碼範例都是為 Clawbot 建立的。 然而,相同的概念可以應用於 builds.vex.com上找到的許多其他建置以及自訂建置。

選項 1:在設備配置中指派按鈕

當您使用標準版本(例如 Speedbot 或 Clawbot)並且希望快速啟動並運行時,此選項非常有用。

此選項可讓您將馬達、傳動系統或馬達組指派給設備配置中控制器上的按鈕。 有關如何在設備配置中將按鈕分配給控制器的更多信息, 請參閱本文

截圖 2023-07-27 12.37.20 PM.png

選項 1 的摘要:在設備配置中指派按鈕

優點

限制

範例情況

  • 快速設置,無需編碼
  • 最簡單的方法
  • 輕鬆調節
  • 可以將單一馬達、標準傳動系統和馬達組分配給按鈕
  • 按鈕分配僅限於控制器上的按鈕數量
  • 傳動系統不能超過 4 個馬達或可自訂(僅支援標準驅動器,不支援 H 驅動器、holonomic 或其他客製化傳動系統)
  • 操縱標準構建,例如 Speedbot、Clawbot,或對這些標準構建進行簡單修改。 例如,速度機器人的進氣口連接在前端,由馬達組控制。
  • 無需太多編碼即可快速操作與機器人上的不同行為相對應的按鈕

選項 2:使用永久循環

如果您使用自訂構建而不是標準構建,或者希望能夠在控制器中進行更多自定義,那麼此選項是一個不錯的選擇。 使用 Forever 迴圈是為控制器建立自訂程式碼的一個很好的介紹。

此選項將控制器及其關聯按鈕的所有條件置於永遠循環中。 這提供了更大的靈活性,特別是對於客製化建造設計,但也需要一些編碼經驗。 然而,使用此選項時的一個考慮因素是項目的長度和複雜性。 增加的條件越多,程式碼堆疊可能會變得越長。 這意味著多個區塊必須按順序執行,當區塊很多時,這會減慢專案執行速度。 較慢的項目執行可能會在按下控制器按鈕和查看機器人行為之間產生延遲。

下面顯示的具體範例是您可以將 Forever 循環與自訂設計機器人(例如具有自訂傳動系統的機器人)結合使用來驅動機器人並操縱爪子和手臂以便與物件互動的一種方法。

截圖 2023-07-27 12.51.23 PM.png

下載“選項2”VEXcode V5專案檔 >

選項 2 代碼的解釋。

程式碼片段

解釋

截圖 2023-07-27 12.53.38 PM.png

此程式碼範例使用了 Clawbot。 當使用控制器上的按鈕來升高和降低手臂時,一旦釋放按鈕,由於重力,手臂就會落回下方。 將手臂和爪子都設為「保持」將確保即使在釋放控制器上的按鈕後,手臂和爪子也將保持在原位。

截圖 2023-07-27 12.54.05 PM.png v5控制器.png

此程式碼範例使用了 Clawbot。 當使用控制器上的按鈕來升高和降低手臂時,一旦釋放按鈕,由於重力,手臂就會落回下方。 將手臂和爪子都設為「保持」將確保即使在釋放控制器上的按鈕後,手臂和爪子也將保持在原位。

使用 Forever 迴圈來連續檢查控制器上的哪些按鈕被按下。

[設定馬達速度] 塊用於將馬達速度設定為目前控制器沿 2 軸和 3 軸的位置。 這相當於將汽車設定為行駛狀態。 這並不一定會讓汽車移動,它只是讓它移動。

每個操縱桿軸傳回 -100 到 +100 之間的值,居中時傳回零值。 這意味著操縱桿軸在按下時等於 -100% 到 100%。 軸被推向 100 或 -100 越遠,馬達旋轉得越快。

然後使用 [Spin​​] 塊來實際移動馬達。 這相當於一旦方向確定後給汽車踩油門。 這允許每個馬達由四個控制器軸之一控制。

截圖 2023-07-27 12.54.40 PM.png

此程式碼範例使用了 Clawbot。 當使用控制器上的按鈕來升高和降低手臂時,一旦釋放按鈕,由於重力,手臂就會落回下方。 將手臂和爪子都設為「保持」將確保即使在釋放控制器上的按鈕後,手臂和爪子也將保持在原位。

[If then else if then else] 區塊用於將某些行為映射到控制器上按下或釋放的按鈕。 在這部分程式碼中,設定的條件是是否按下向上或向下按鈕。 如果是這樣,就會發生某些行為,例如手臂抬起和放下。 還有條件的 else 部分,如果沒有按下任何按鈕,手臂將停止移動。

請注意,Claw 專案中的以下程式碼部分遵循相同的解釋。

選項 2 的摘要:使用永久循環

優點

限制

範例情況

  • 可適應定制構建,尤其是具有 4 個以上電機的傳動系統
  • 可以將多種行為指派給單一按鈕
  • 行為可以分配給控制器上的不同軸(而不是設備配置中的“左街機”、“右街機”、“分割街機”和“坦克驅動器”的唯一選項)
  • 需要一定的編碼知識(條件、循環以及控制器上的按鈕/操縱桿的知識)
  • 項目執行速度可能較慢,或按鈕響應時間滯後。 由於所有命令都包含在單一 Forever 循環中,因此根據設定的條件和程式碼長度,程式碼執行可能會運行緩慢。
  • 將控制器與定制機器人一起使用,尤其是與非標準傳動系統一起使用
  • 當想要將多個行為指派給單一按鈕時。 例如,當按下向上按鈕時,爪子可以張開、向前移動,然後靠近物體。

選項 3:使用事件

如果您想要對控制器進行大量自訂,那麼使用事件是您的最佳選擇。 一鍵按下可以觸發機器人的多種行為,例如按下按鈕打開爪子、抬起手臂、前進設定距離。 嘗試在 Forever 循環中為每個按鈕編寫多個行為會導致專案執行速度顯著減慢 - 使用事件可以讓您更有效地做到這一點。

此選項使用事件來分解專案流程。 這類似於使用 Forever 循環,但允許程式碼更有組織性,以便按鈕執行具有更快的回應時間。 更快的反應時間意味著您在按下控制器按鈕和看到機器人行為之間不會出現延遲。 此範例顯示與上一個項目相同的行為,但使用事件而不是永遠循環完成。

截圖 2023-07-27 1.17.23 PM.png

下載“選項3”VEXcode V5專案檔 >

選項 3 代碼的解釋。

程式碼片段

解釋

截圖 2023-07-27 1.18.55 PM.png

此程式碼範例使用了 Clawbot。 當使用控制器上的按鈕來升高和降低手臂時,一旦釋放按鈕,由於重力,手臂就會落回下方。 將手臂和爪子都設為「保持」將確保即使在釋放控制器上的按鈕後,手臂和爪子也將保持在原位。

截圖 2023-07-27 1.19.06 PM.png v5控制器.png

此程式碼範例使用了 Clawbot。 當使用控制器上的按鈕來升高和降低手臂時,一旦釋放按鈕,由於重力,手臂就會落回下方。 將手臂和爪子都設為「保持」將確保即使在釋放控制器上的按鈕後,手臂和爪子也將保持在原位。

{When controller axis} 當使用操縱桿更改控制器上的四個軸之一時,事件區塊用於觸發某些行為。

[設定馬達速度] 塊用於將馬達速度設定為目前控制器沿 A 軸和 D 軸的位置。 這相當於將汽車設定為行駛狀態。 這並不一定會讓汽車移動,它只是讓它移動。

每個操縱桿軸傳回 -100 到 +100 之間的值,居中時傳回零值。 這意味著操縱桿軸在按下時等於 -100% 到 100%。 軸被推向 100 或 -100 越遠,馬達旋轉得越快。

然後使用 [Spin​​] 塊來實際移動馬達。 這相當於一旦方向確定後給汽車踩油門。 這允許每個馬達由四個控制器軸之一控制。

截圖 2023-07-27 1.19.20 PM.png

此程式碼範例使用了 Clawbot。 當使用控制器上的按鈕來升高和降低手臂時,一旦釋放按鈕,由於重力,手臂就會落回下方。 將手臂和爪子都設為「保持」將確保即使在釋放控制器上的按鈕後,手臂和爪子也將保持在原位。

{When controller axis} 事件區塊用於將某些行為對應到控制器上按下或釋放的按鈕。 在這部分程式碼中,設定的條件是是否按下向上或向下按鈕。 如果是這樣,就會發生某些行為,例如手臂抬起、放下或停止。

請注意,Claw 專案中的最後一段程式碼遵循相同的解釋。

選項 3 的總結:使用事件

優點

限制

範例情況

  • 可適應定制構建,尤其是具有 4 個以上電機的傳動系統
  • 可以將多種行為指派給單一按鈕
  • 行為可以分配給控制器上的不同軸(而不是設備配置中的“左街機”、“右街機”、“分割街機”和“坦克驅動器”的唯一選項)
  • 程式碼執行速度更快,因此按鈕響應速度更快(因為每個條件都是單獨呼叫的,而不是嵌入到單一程式碼堆疊中)
  • 需要最多的選項編碼知識(條件、循環、事件以及控制器上的按鈕/操縱桿的知識)
  • 將控制器與定制機器人一起使用,尤其是與非標準傳動系統一起使用
  • 當想要將多個行為分配給一個按鈕且沒有延遲。 例如,當按下向上按鈕時,爪子可以張開、向前移動,然後靠近物體。

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

Last Updated: