Niestandardowy kod kontrolera w VEXcode IQ

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 sterownika w VEXcode IQ. 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 IQ. 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 te same koncepcje można zastosować do wielu innych kompilacji dostępnych na builds.vex.comi kompilacji niestandardowych.

Opcja 1: Przypisanie 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, zapoznaj się z tym artykułem.

Kontroler VEX IQ

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: Korzystanie z pętli wiecznej

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.

Obraz przedstawiający użycie pętli wiecznej

Pobierz plik projektu „Opcja 2” VEXcode IQ (2. generacji) >

Uwaga: Jeśli używasz Clawbota pierwszej generacji, silnik ramienia będzie musiał zostać odwrócony w konfiguracji urządzenia, aby działał zgodnie z zamierzeniami w powyższym projekcie.

Wyjaśnienie kodu Opcji 2.

Kawałek kodu

Wyjaśnienie

Ustaw zatrzymanie ArmMotor na wstrzymanie i ustaw zatrzymanie ClawMotor na wstrzymanie

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.

Ustawianie prędkości i wirowania silnika Kontroler VEX IQ ze schematem 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 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.

Instrukcja warunkowa, jeśli zostanie naciśnięty kontroler E Up

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 E w górę i E 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 wiecznej

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 F w górę, Claw może się otworzyć, pojechać do przodu, a następnie zamknąć wokół obiektu.

Opcja 3: Korzystanie ze zdarzeń

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.

Używanie zdarzeń zamiast pętli wiecznej

Pobierz plik projektu „Opcja 3” VEXcode IQ (2. generacji) >

Uwaga: jeśli używasz Clawbota pierwszej generacji, silnik ramienia będzie musiał zostać odwrócony w konfiguracji urządzenia, aby działał zgodnie z zamierzeniami w powyższym projekcie.

Wyjaśnienie kodu Opcji 3.

Kawałek kodu

Wyjaśnienie

Ustaw zatrzymanie ArmMotor na wstrzymanie i ustaw zatrzymanie ClawMotor na wstrzymanie

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.

Ustaw prędkość lewego silnika na pozycję % kontrolera i obróć lewy silnik do przodu Kontroler VEX IQ ze schematem 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.

Kiedy przyciski kontrolera służą do podnoszenia i opuszczania ramienia, natychmiast po zwolnieniu przycisku ramię opadnie z powodu grawitacji.

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 E w górę i E 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 ze zdarzeń

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)
  • Jeśli korzystasz z VEX IQ Brain pierwszej generacji, zbyt wiele zdarzeń w projekcie może spowodować, że projekt nie zostanie uruchomiony ze względu na ograniczenia przetwarzania Brain.
  • 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 F 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: