Niestandardowy kod kontrolera w VEXcode V5

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 V5. 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 V5. 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 Speedbot 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 V5 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ą konfiguracją, taką jak Speedbot, Clawbot, lub prosta modyfikacja tych standardowych kompilacji. Na przykład Speedbot z wlotem przymocowanym z przodu, sterowanym przez grupę silników.
  • 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 V5 z projektem bloków opcji 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: Controller1, ClawMotor na porcie 3, ArmMotor na porcie 8, LeftMotor na porcie 1 i RightMotor na porcie 10. W przestrzeni roboczej znajduje się 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ę 3 kontrolera 1 %, obraca lewy silnik do przodu, ustawia prędkość prawego silnika na pozycję 2 kontrolera 1 % i obraca prawy silnik do przodu. Następnie, jeśli naciśnięto przycisk Controller1 Up, obróć ArmMotor w górę, w przeciwnym wypadku, jeśli naciśnięto przycisk Controller1 Down, obróć ArmMotor w dół, w przeciwnym wypadku zatrzymaj ArmMotor. Na koniec, jeśli kontroler Controller1 A nacisnął, rozkręć silnik ClawMotor, w przeciwnym wypadku, jeśli kontroler Controller1 B nacisnął, rozkręć silnik ClawMotor i zatrzymaj go.

Pobierz plik projektu „Opcja 2” VEXcode V5 >

Wyjaśnienie kodu opcji 2.

Część kodu Wyjaśnienie
Zbliżenie stosu bloków w projekcie Option 2 VEXcode V5. 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 Option 2 VEXcode V5. Wewnątrz pętli Forever stosu wyróżniono cztery bloki. Odczytują Forever, ustawiają prędkość lewego silnika na kontroler 1 w pozycji 3 %, obracają lewy silnik do przodu, ustawiają prędkość prawego silnika na kontroler 1 w pozycji 2 % i obracają prawy silnik do przodu.

 

Kontroler V5 umożliwiający wizualizację układu przycisków.

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 Option 2 VEXcode V5. Blok if, else if, else jest podświetlony wewnątrz pętli Forever stosu. Jeśli naciśnięto Controller1 Up, należy obrócić ArmMotor w górę, jeśli naciśnięto Controller1 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: Controller1, ClawMotor na porcie 3, ArmMotor na porcie 8, LeftMotor na porcie 1 i RightMotor na porcie 10. W przestrzeni roboczej znajduje się 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 odczytuje: Gdy oś 3 kontrolera 1 zostanie zmieniona, ustaw prędkość lewego silnika na pozycję 3 kontrolera 1 %, a następnie obróć lewy silnik do przodu. Trzeci stos odczytuje: Gdy oś 2 kontrolera 1 zostanie zmieniona, ustaw prędkość prawego silnika RightMotor na pozycję kontrolera 1 2 %, a następnie obróć prawy silnik RightMotor do przodu. Czwarty stos zawiera informację: Gdy naciśnięty zostanie przycisk Controller1 w górę, obróć ArmMotor w górę. Piąty stos wyświetla komunikat: Gdy przycisk kontrolera 1 zostanie zwolniony, ArmMotor zostanie zatrzymany. Szósty stos odczytuje: Gdy naciśnięty zostanie przycisk kontrolera 1, obróć silnik ArmMotor w dół. Siódmy stos odczytuje: Gdy przycisk kontrolera 1 zostanie zwolniony, ArmMotor zostanie zatrzymany. Ósmy stos zawiera informację: Gdy naciśnięty zostanie przycisk A kontrolera 1, nastąpi otwarcie silnika ClawMotor. Dziewiąty stos zawiera informację: Gdy przycisk A kontrolera 1 zostanie zwolniony, zatrzymaj ClawMotor. Dziesiąty stos zawiera komunikat: Gdy naciśnięty zostanie przycisk B kontrolera 1, obróć silnik ClawMotor w położenie zamknięte. Jedenasty i ostatni stos zawiera komunikat: Gdy przycisk B kontrolera 1 zostanie zwolniony, ClawMotor zostanie zatrzymany.

Pobierz plik projektu „Opcja 3” VEXcode V5 >

Wyjaśnienie kodu opcji 3.

Część kodu Wyjaśnienie
Zbliżenie na stos bloków w projekcie Option 3 VEXcode V5. 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 dwóch stosów bloków w projekcie Option 3 VEXcode V5. Pierwszy stos odczytuje: Gdy oś 3 kontrolera 1 zostanie zmieniona, ustaw prędkość lewego silnika na pozycję kontrolera 1 3 %, a następnie obróć lewy silnik do przodu. Drugi stos odczytuje: Gdy oś 2 kontrolera 1 zostanie zmieniona, ustaw prędkość prawego silnika RightMotor na pozycję kontrolera 1 2 %, a następnie obróć prawy silnik RightMotor do przodu.

 

Kontroler V5 umożliwiający wizualizację układu przycisków.

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 Option 3 VEXcode V5. Pierwszy stos zawiera informację: Gdy naciśnięty zostanie przycisk „Up” na kontrolerze Controller1, obróć silnik ArmMotor w górę. Drugi stos odczytuje: Gdy przycisk Up kontrolera Controller1 zostanie zwolniony, ArmMotor zostanie zatrzymany. Trzeci stos odczytuje: Gdy naciśnięty zostanie przycisk kontrolera 1, obróć ArmMotor w dół. Czwarty stos odczytuje: Gdy przycisk kontrolera 1 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: