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.
Podsumowanie opcji 1: Przypisywanie przycisków w konfiguracji urządzenia
Zalety |
Ograniczenia |
Przykładowa sytuacja |
|
|
|
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.
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 |
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. |
|
|
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. |
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 |
|
|
|
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.
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 |
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. |
|
|
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. |
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 |
|
|
|