Niestandardowy kod kontrolera w VEXcode EXP

Korzystanie z kontrolera może ułatwić prowadzenie i przemieszczanie robota w celu wykonania zadania. Istnieją jednak ograniczenia w korzystaniu z programu Drive i w zależności od budowy robota lub wykonywanego zadania możesz potrzebować różnych elementów sterujących. Kodowanie kontrolera pozwala zoptymalizować kontroler, aby lepiej pasował do robota i wykonywanego zadania. Istnieje kilka sposobów kodowania kontrolera w VEXcode EXP. Każda z nich ma swoje zalety i ograniczenia, a niektóre metody są lepiej dostosowane do określonych sytuacji, w zależności od pożądanego rezultatu.

W tym artykule opisano trzy różne opcje niestandardowego kodowania kontrolera w VEXcode EXP. Każda metoda zostanie opisana wraz z jej zaletami, ograniczeniami i przykładowym przypadkiem użycia, który pomoże Ci wybrać metodę. Na potrzeby tego artykułu wszystkie pokazane przykłady kodu zostały utworzone dla Clawbota. Jednakże te same koncepcje można zastosować do wielu innych kompilacji znalezionych na builds.vex.comoraz kompilacji niestandardowych.

Opcja 1: Przypisywanie przycisków w konfiguracji urządzenia

Ta opcja jest świetna, jeśli używasz standardowej wersji, takiej jak BaseBot lub Clawbot, i chcesz szybko zacząć działać.

Ta opcja umożliwia przypisanie silników, układu napędowego lub grup silników do przycisków na kontrolerze w konfiguracji urządzenia. Aby uzyskać więcej informacji na temat przypisywania przycisków do kontrolera w konfiguracji urządzenia, zobacz ten artykuł.

Menu urządzeń VEXcode EXP z wyświetlonymi opcjami kontrolera. Diagram sterowania przyciskami pokazuje, że dwa joysticki sterują robotem w konfiguracji czołgu. Przyciski Up i Down sterują ArmMotorGroup, a przyciski osi R sterują ClawMotor.

Podsumowanie opcji 1: Przypisywanie przycisków w konfiguracji urządzenia

Zalety

Ograniczenia

Przykładowa sytuacja

  • Szybka konfiguracja bez konieczności kodowania
  • Najprostsza metoda
  • Łatwo regulowany
  • Można przypisać poszczególne silniki, standardowy układ napędowy i grupy silników do przycisków
  • Przypisanie przycisków jest ograniczone do liczby przycisków na kontrolerze
  • Układ napędowy nie może przekraczać 4 silników ani nie może być dostosowywany (obsługiwany jest tylko napęd standardowy, a nie napęd H, holonomic lub inny niestandardowy układ napędowy)
  • Manipulowanie standardową kompilacją, taką jak BaseBot, Clawbot, lub prosta modyfikacja tych standardowych kompilacji. Na przykład BaseBot z wlotem przymocowanym z przodu, sterowanym przez grupę silnikową.
  • Szybkie manipulowanie przyciskami odpowiadającymi różnym zachowaniom robota, bez konieczności kodowania

Opcja 2: Używanie pętli Forever

Jeśli używasz niestandardowej kompilacji zamiast standardowej kompilacji lub chcesz mieć więcej możliwości dostosowania swojego kontrolera, ta opcja jest dobra. Korzystanie z pętli Forever to świetne wprowadzenie do tworzenia niestandardowego kodu dla kontrolera.

Ta opcja umieszcza wszystkie warunki kontrolera i powiązanych z nim przycisków w pętli Forever. Zapewnia to większą elastyczność, szczególnie w przypadku niestandardowych projektów kompilacji, ale wymaga również pewnego doświadczenia w kodowaniu. Jednak przy korzystaniu z tej opcji należy wziąć pod uwagę długość i złożoność projektu. Im więcej warunków zostanie dodanych, tym dłuższy może być stos kodu. Oznacza to, że należy wykonać wiele bloków w określonej kolejności, a gdy jest ich dużo, może to spowolnić realizację projektu. Wolniejsze wykonanie projektu może spowodować opóźnienie pomiędzy naciśnięciem przycisków kontrolera a wyświetleniem zachowania robota.

Konkretny przykład pokazany poniżej to jeden ze sposobów użycia pętli Forever z robotem o niestandardowej konstrukcji (takim jak robot z niestandardowym układem napędowym) do kierowania robotem oraz manipulowania pazurami i ramionami w celu interakcji z obiektami.

Otwarto przestrzeń roboczą VEXcode EXP z projektem bloków Option 2. Projekt składa się ze stosu bloków i skonfigurowanych urządzeń. Z boku otwiera się menu Urządzenia, w którym znajdują się następujące urządzenia: ArmMotor na porcie 3, ClawMotor na porcie 4, Kontroler, LeftMotor na porcie 6 i RightMotor na porcie 10. Na koniec mamy stos bloków obsługujących dane wejściowe kontrolera. Stos odczytuje: Gdy uruchomiono, ustaw ArmMotor stopped na hold i ustaw ClawMotor stopped na hold. Reszta stosu znajduje się w pętli Forever. Odczytuje wartość Forever, ustawia prędkość lewego silnika na pozycję kontrolera 3 %, obraca lewy silnik do przodu, ustawia prędkość prawego silnika na pozycję kontrolera 2 % i obraca prawy silnik do przodu. Następnie, jeśli naciśnięto przycisk Controller Up, obróć ArmMotor w górę, w przeciwnym wypadku, jeśli naciśnięto przycisk Controller E Down, obróć ArmMotor w dół, w przeciwnym wypadku zatrzymaj ArmMotor. Na koniec, jeśli kontroler A nacisnął, rozkręć ClawMotor, w przeciwnym wypadku, jeśli kontroler B nacisnął, zamknij ClawMotor i zatrzymaj ClawMotor.

Pobierz plik projektu VEXcode EXP „Opcja 2” >

Wyjaśnienie kodu opcji 2.

Część kodu

Wyjaśnienie

Zbliżenie stosu bloków w projekcie EXP Option 2 VEXcode. Podświetlono dwa bloki, które znajdują się poza pętlą Forever stosu. Odczytują one „set ArmMotor stopped to hold” i „set ClawMotor stopped to hold”.

W tym przykładzie kodu użyto Clawbota. Kiedy przyciski kontrolera służą do podnoszenia i opuszczania ramienia, natychmiast po zwolnieniu przycisku ramię opadnie z powodu grawitacji. Ustawienie ramienia i pazura w pozycji „przytrzymaj” zapewni, że zarówno ramię, jak i pazur pozostaną na swoim miejscu nawet po zwolnieniu przycisków na kontrolerze.

Zbliżenie stosu bloków w projekcie EXP Option 2 VEXcode. Wewnątrz pętli Forever stosu wyróżniono cztery bloki. Odczytują „Forever”, ustawiają prędkość lewego silnika na pozycję kontrolera 3 %, obracają lewy silnik do przodu, ustawiają prędkość prawego silnika na pozycję kontrolera 2 % i obracają prawy silnik do przodu. Schemat kontrolera EXP z opisanymi przyciskami i joystickami. Widok z przodu kontrolera. Osie lewego joysticka oznaczone są jako 3 i 4. Środkowy przycisk lewego joysticka oznaczony jest jako L3. Dwa okrągłe przyciski znajdujące się pod lewym joystickiem są oznaczone jako Góra i Dół. Osie prawego joysticka są oznaczone jako 1 i 2. Środkowy przycisk prawego joysticka oznaczony jest jako R3. Dwa okrągłe przyciski pod prawym joystickiem są oznaczone literami A i B.

W tym przykładzie kodu użyto Clawbota. Kiedy przyciski kontrolera służą do podnoszenia i opuszczania ramienia, natychmiast po zwolnieniu przycisku ramię opadnie z powodu grawitacji. Ustawienie ramienia i pazura w pozycji „przytrzymaj” zapewni, że zarówno ramię, jak i pazur pozostaną na swoim miejscu nawet po zwolnieniu przycisków na kontrolerze.

Pętla Forever służy do ciągłego sprawdzania, które przyciski na kontrolerze są wciskane.

Bloki [Ustaw prędkość silnika] służą do ustawienia prędkości silnika zgodnie z bieżącym położeniem sterownika wzdłuż osi 2 i 3. Jest to równoznaczne z uruchomieniem samochodu. To niekoniecznie wprawia samochód w ruch, po prostu go ustawia.

Każda oś joysticka zwraca wartość z zakresu od -100 do +100, a po wyśrodkowaniu zwraca wartość zero. Oznacza to, że oś joysticka po naciśnięciu wynosi -100% do 100%. Im dalej w kierunku 100 lub -100 osie zostaną przesunięte, tym szybciej silnik będzie się obracał.

Blok [Spin] jest następnie używany do faktycznego poruszania silnikiem. Jest to równoznaczne z wciśnięciem gazu w samochodzie po ustawieniu kierunku. Dzięki temu każdy silnik może być sterowany przez jedną z czterech osi sterownika.

Zbliżenie stosu bloków w projekcie EXP Option 2 VEXcode. Blok if, else if, else jest podświetlony wewnątrz pętli Forever stosu. Jeśli naciśnięto przycisk Controller Up, należy obrócić ArmMotor w górę, jeśli naciśnięto przycisk Controller Down, należy obrócić ArmMotor w dół, a w przeciwnym wypadku zatrzymać ArmMotor.

W tym przykładzie kodu użyto Clawbota. Kiedy przyciski kontrolera służą do podnoszenia i opuszczania ramienia, natychmiast po zwolnieniu przycisku ramię opadnie z powodu grawitacji. Ustawienie ramienia i pazura w pozycji „przytrzymaj” zapewni, że zarówno ramię, jak i pazur pozostaną na swoim miejscu nawet po zwolnieniu przycisków na kontrolerze.

Blok [If then else if then else] służy do mapowania określonych zachowań na wciskane lub zwalniane przyciski na kontrolerze. W tej sekcji kodu ustawione warunki dotyczą naciśnięcia przycisków W górę lub W dół. Jeśli tak, wystąpią pewne zachowania, takie jak podnoszenie i opuszczanie ramion. Istnieje również druga część warunku, jeśli żaden przycisk nie zostanie naciśnięty, ramię przestanie się poruszać.

Zwróć uwagę, że następująca sekcja kodu w projekcie Claw ma to samo wyjaśnienie.

Podsumowanie opcji 2: Korzystanie z pętli Forever

Zalety

Ograniczenia

Przykładowa sytuacja

  • Może pomieścić niestandardowe konstrukcje, zwłaszcza układy napędowe z więcej niż 4 silnikami
  • Można przypisać wiele zachowań do jednego przycisku
  • Można przypisywać zachowania do różnych osi kontrolera (w przeciwieństwie do jedynych opcji Left Arcade, Right Arcade, Split Arcade i Tank Drive w konfiguracji urządzenia)
  • Wymaga pewnej wiedzy na temat kodowania (warunki warunkowe, pętle i znajomość przycisków/joysticków na kontrolerze)
  • Możliwość wolniejszej realizacji projektu lub opóźnienia w czasie reakcji przycisku. Ponieważ wszystkie polecenia są zawarte w jednej pętli Forever, wykonanie kodu może przebiegać powoli w zależności od ustawionych warunków i długości kodu.
  • Używanie kontrolera z robotem zbudowanym na zamówienie, szczególnie z niestandardowym układem napędowym
  • Gdy chcesz przypisać wiele zachowań do jednego przycisku. Na przykład, po naciśnięciu przycisku w górę, Claw może się otworzyć, pojechać do przodu, a następnie zamknąć wokół obiektu.

Opcja 3: Korzystanie z wydarzeń

Jeśli chcesz dużo dostosować swój kontroler, Korzystanie ze zdarzeń jest dla Ciebie najlepszą opcją. Jedno naciśnięcie przycisku może wywołać wiele zachowań robota, np. naciśnięcie przycisku w celu otwarcia pazura, podniesienia ramienia i przejechania do przodu na określoną odległość. Próba zakodowania wielu zachowań na przycisk w pętli Forever spowodowałaby dramatyczne spowolnienie realizacji projektu – użycie Zdarzeń pozwala zrobić to bardziej efektywnie.

Ta opcja wykorzystuje zdarzenia do rozbicia przepływu projektu. Przypomina to użycie pętli Forever, ale pozwala na lepszą organizację kodu, dzięki czemu wykonanie przycisku ma szybszy czas reakcji. Krótszy czas reakcji oznacza, że ​​nie zobaczysz opóźnienia pomiędzy naciśnięciem przycisków kontrolera a wyświetleniem zachowania robota. Ten przykład pokazuje te same zachowania, co w poprzednim projekcie, ale wykonano przy użyciu zdarzeń zamiast pętli Forever.

Otwarto przestrzeń roboczą VEXcode EXP z projektem bloków Option 3. Projekt składa się z 11 małych stosów bloków i skonfigurowanych urządzeń. Z boku otwiera się menu Urządzenia, w którym znajdują się następujące urządzenia: ArmMotor na porcie 3, ClawMotor na porcie 4, Kontroler, LeftMotor na porcie 6 i RightMotor na porcie 10. Na koniec mamy 11 małych stosów bloków, które obsługują dane wejściowe Kontrolera. Pierwszy stos zawiera polecenie When started, set ArmMotor stopped to hold, a następnie set ClawMotor stopped to hold. Drugi stos wyświetla komunikat: Gdy oś kontrolera 3 zostanie zmieniona, ustaw prędkość lewego silnika na pozycję kontrolera 3 %, a następnie obróć lewy silnik do przodu. Trzeci stos odczytuje: Gdy oś kontrolera 2 zostanie zmieniona, ustaw prędkość prawego silnika (RightMotor) na pozycję kontrolera 2 (%), a następnie obróć prawy silnik (RightMotor) do przodu. Czwarty stos zawiera informację: Gdy naciśnięty zostanie przycisk kontrolera w górę, obróć ArmMotor w górę. Piąty stos zawiera komunikat: Gdy przycisk kontrolera w górę zostanie zwolniony, ArmMotor zostanie zatrzymany. Szósty stos zawiera napis: Gdy wciśnięty zostanie przycisk kontrolera, obróć ArmMotor w dół. Siódmy stos zawiera komunikat: Gdy przycisk kontrolera zostanie zwolniony, ArmMotor zostanie zatrzymany. Ósmy stos zawiera informację: Gdy naciśnięty zostanie przycisk A kontrolera, rozkręć silnik ClawMotor. Dziewiąty stos zawiera informację: Gdy przycisk kontrolera A zostanie zwolniony, ClawMotor zostanie zatrzymany. Dziesiąty stos zawiera napis: Gdy naciśnięty zostanie przycisk kontrolera B, obróć ClawMotor w położenie zamknięte. Jedenasty i ostatni stos zawiera komunikat: Gdy przycisk kontrolera B zostanie zwolniony, ClawMotor zostanie zatrzymany.

Pobierz plik projektu VEXcode EXP „Opcja 3” >

Wyjaśnienie kodu opcji 3.

Część kodu

Wyjaśnienie

Zbliżenie na stos bloków w projekcie EXP Option 3 VEXcode. Stos odczytuje: Gdy uruchomiono, ustaw ArmMotor stopped na hold, a następnie ustaw ClawMotor stopped na hold.

W tym przykładzie kodu użyto Clawbota. Kiedy przyciski kontrolera służą do podnoszenia i opuszczania ramienia, natychmiast po zwolnieniu przycisku ramię opadnie z powodu grawitacji. Ustawienie ramienia i pazura w pozycji „przytrzymaj” zapewni, że zarówno ramię, jak i pazur pozostaną na swoim miejscu nawet po zwolnieniu przycisków na kontrolerze.

Zbliżenie na dwa stosy bloków w projekcie EXP Option 3 VEXcode. Pierwszy stos wyświetla komunikat: Gdy oś kontrolera 3 zostanie zmieniona, ustaw prędkość lewego silnika na pozycję kontrolera 3 %, a następnie obróć lewy silnik do przodu. Drugi stos odczytuje: Gdy oś kontrolera 2 zostanie zmieniona, ustaw prędkość prawego silnika (RightMotor) na pozycję kontrolera 2 (%), a następnie obróć prawy silnik (RightMotor) do przodu. Schemat kontrolera EXP z opisanymi przyciskami i joystickami. Widok z przodu kontrolera. Osie lewego joysticka oznaczone są jako 3 i 4. Środkowy przycisk lewego joysticka oznaczony jest jako L3. Dwa okrągłe przyciski znajdujące się pod lewym joystickiem są oznaczone jako Góra i Dół. Osie prawego joysticka są oznaczone jako 1 i 2. Środkowy przycisk prawego joysticka oznaczony jest jako R3. Dwa okrągłe przyciski pod prawym joystickiem są oznaczone literami A i B.

W tym przykładzie kodu użyto Clawbota. Kiedy przyciski kontrolera służą do podnoszenia i opuszczania ramienia, natychmiast po zwolnieniu przycisku ramię opadnie z powodu grawitacji. Ustawienie ramienia i pazura w pozycji „przytrzymaj” zapewni, że zarówno ramię, jak i pazur pozostaną na swoim miejscu nawet po zwolnieniu przycisków na kontrolerze.

{When controller axis} Bloki zdarzeń służą do wyzwalania określonych zachowań w przypadku zmiany jednej z czterech osi sterownika za pomocą joysticków.

Bloki [Ustaw prędkość silnika] służą do ustawienia prędkości silnika zgodnie z bieżącym położeniem sterownika wzdłuż osi A i D. Jest to równoznaczne z uruchomieniem samochodu. To niekoniecznie wprawia samochód w ruch, po prostu go ustawia.

Każda oś joysticka zwraca wartość z zakresu od -100 do +100, a po wyśrodkowaniu zwraca wartość zero. Oznacza to, że oś joysticka po naciśnięciu wynosi -100% do 100%. Im dalej w kierunku 100 lub -100 osie zostaną przesunięte, tym szybciej silnik będzie się obracał.

Blok [Spin] jest następnie używany do faktycznego poruszania silnikiem. Jest to równoznaczne z wciśnięciem gazu w samochodzie po ustawieniu kierunku. Dzięki temu każdy silnik może być sterowany przez jedną z czterech osi sterownika.

Zbliżenie na cztery stosy bloków w projekcie EXP Option 3 VEXcode. Pierwszy stos zawiera informację: Gdy naciśnięty zostanie przycisk kontrolera w górę, obróć ArmMotor w górę. Drugi stos zawiera komunikat: Gdy przycisk kontrolera w górę zostanie zwolniony, ArmMotor zostanie zatrzymany. Trzeci stos zawiera informację: Gdy przycisk kontrolera zostanie wciśnięty, obróć ArmMotor w dół. Czwarty stos zawiera informację: Gdy przycisk kontrolera zostanie zwolniony, ArmMotor zostanie zatrzymany.

W tym przykładzie kodu użyto Clawbota. Kiedy przyciski kontrolera służą do podnoszenia i opuszczania ramienia, natychmiast po zwolnieniu przycisku ramię opadnie z powodu grawitacji. Ustawienie ramienia i pazura w pozycji „przytrzymaj” zapewni, że zarówno ramię, jak i pazur pozostaną na swoim miejscu nawet po zwolnieniu przycisków na kontrolerze.

{When controller axis} Bloki zdarzeń służą do mapowania określonych zachowań na naciskane lub zwalniane przyciski na kontrolerze. W tej sekcji kodu ustawione warunki dotyczą naciśnięcia przycisków W górę lub W dół. Jeśli tak, wystąpią pewne zachowania, takie jak podnoszenie, opuszczanie lub zatrzymywanie ramienia.

Zwróć uwagę, że ostatnia sekcja kodu w projekcie Claw ma to samo wyjaśnienie.

Podsumowanie opcji 3: Korzystanie z wydarzeń

Zalety

Ograniczenia

Przykładowa sytuacja

  • Może pomieścić niestandardowe konstrukcje, zwłaszcza układy napędowe z więcej niż 4 silnikami
  • Można przypisać wiele zachowań do jednego przycisku
  • Można przypisywać zachowania do różnych osi kontrolera (w przeciwieństwie do jedynych opcji Left Arcade, Right Arcade, Split Arcade i Tank Drive w konfiguracji urządzenia)
  • Szybsze wykonanie kodu, a co za tym idzie, responsywność przycisku (ponieważ każdy warunek jest wywoływany osobno i nie jest osadzony w jednym stosie kodu)
  • Wymaga największej wiedzy na temat kodowania opcji (warunki warunkowe, pętle, zdarzenia i znajomość przycisków/joysticków na kontrolerze)
  • Używanie kontrolera z robotem zbudowanym na zamówienie, szczególnie z niestandardowym układem napędowym
  • Gdy chcesz przypisać wiele zachowań do jednego przycisku bez opóźnień. Na przykład, po naciśnięciu przycisku w górę, Claw może się otworzyć, pojechać do przodu, a następnie zamknąć wokół obiektu.

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

Last Updated: