Nikt nie jest idealny, nie miejmy złudzeń. Kochamy roboty i programowanie, lecz trudna prawda jest taka, że każdy z nich ma wady, które my, użytkownicy, musimy po prostu zaakceptować.

Nie inaczej jest przypadku aplikacji do programowania zestawu MINDSTORMS EV3, czyli EV3 Classroom.

Również to oprogramowanie ma kilka bugów, trudnych do obejścia zwłaszcza dla początkujących użytkowników MINDSTORMS EV3. Nasz zespół postanowił Wam pomóc i dokłanie przyjrzał się 5 częstym błędom, na które możecie trafić w EV3 Classroom, i znalazł proste rozwiązania.

W tym artykule skupiamy się wyłącznie na błędach aplikacji EV3 Classroom uruchomionej w trybie bloczków programistycznych (word blocks). Jeśli zastanawiacie się czym w ogóle jest EV3 Classroom, dla kogo i czego zostało stworzone, najpierw przeczytajcie nasz wcześniejszy artykuł.

Bloczki raportujące nie zawsze raportują

Gdy chcemy użyć w programie uprzednio określonej wartości jako danej wejściowej, stosujemy niezawodne bloczki raportujące, czasem nazywane też sprawozdawczymi. Zgodnie ze swoją nazwą, ten rodzaj bloczków raportuje pewną wartość, najczęściej w formie liczby. Można je łatwo rozpoznać po kształcie i funkcji – mają zaokrąglone boki i nie mogą samodzielnie tworzyć nowej linii skryptu. Jeżeli bloczek spełnia te dwa warunki, mamy do czynienia właśnie z bloczkiem raportującym. Szukajcie ich w kategoriach Variables (Zmienne), Sensors (Czujniki) i Motors (Silniki).

Niestety nie wszystkie bloczki raportujące w EV3 Classroom działają tak jak powinny. Czasem po umieszczeniu takiego bloczka w innym by dostarczyć dane wejściowe, bloczki raportujące… działają nieprawidłowo. I wywołują błędy.

Bug bloczków raportujących w EV3 Classroom

Spójrzmy na przykład powyżej. Bloczek degrees counted (naliczone stopnie) dostarcza informację o liczbie stopni, o którą obróciła się głowica silnika. Tutaj, bloczek degrees counted z silnika podłączonego do portu B jest wykorzystany jako dana wejściowa dla szybkości silnika A. Ten program nie będzie działał tak, jak powinien. Zamiast aktywować silnik A, ta linia kodu niespodziewanie uruchamia silnik B, mimo że nigdzie nie ma takiego polecenia.

Jak to naprawić?

Proste rozwiązanie: Zmienne

Chociaż bezpośrednie podejście zawodzi w przypadku części bloczków raportujących z aplikacji EV3 Classroom, to nie znaczy, że musimy przestać ich używać. Mamy uniwersalną metodę obejścia tego problemu, która uratuje każdy program.

Jeżeli umieszczenie bloczka raportującego bezpośrednio w skrypcie wywołuje błąd, najpierw przekaż dane z bloczka raportującego do zmiennej. Po prostu utwórz nową zmienną, ustaw jej wartość na wartość bloczka raportującego przy pomocy instrukcji set variable to (ustaw zmienną na), a potem w skrypcie użyj zmiennej zamiast bloczka raportującego. Kilka kroków więcej, ale ta metoda działa.

Oto jak można naprawić fragment skryptu, który omówiliśmy powyżej, przy pomocy metody ze zmienną.

Rozwiązanie buga bloczków raportujących EV3 Classroom

Kuriozalne wartości stopni na wyświetlaczu

Kolejny bug ma potencjał wywołać mały atak paniki, zwłaszcza jeśli należymy do licznej grupy użytkowników, którzy kiedykolwiek martwili się o awarię kostki EV3. Dobre wieści są takie, że problem nie jest taki straszny, gdy zrozumiemy co naprawdę się dzieje.

Podczas wyświetlania stopni obrotu głowicy silnika na ekranie kostki EV3 możecie po chwili zauważyć nieprawdopodobne liczby. Silnik nie wykona nawet jednego pełnego obrotu, lecz ekran będzie pokazywał zawrotne wartości, na przykład -450 albo 9000. Czyżby silnik niepostrzeżenie przekradł się do innego wymiaru?

Oczywiście jest to bug. Sprawdźmy z czego wynika.

Proste rozwiązanie: Porównaj z podglądem

Jakkolwiek przekroczenie granicy innego wymiaru byłoby porywające, te kolosalne liczby są przypuszczalnie spowodowane symbolem stopnia, który czasem pojawia się na ekranie w postaci jednego lub kilku dodatkowych zer.

Najprostszym sposobem na poradzenie sobie z tym błędem jest porównywanie odczytów wyświetlanych na kostce z tymi widocznymi w aplikacji EV3 Classroom w panelu podglądu Huba, w górnej części obszaru programowania.

Ten błąd wpływa wyłącznie na wyświetlanie wartości, dlatego w skrypcie możecie bezpiecznie wykorzystać bloczek degrees counted jako daną wejściową. Jego wartość będzie równa wartościom wyświetlanym w podglądzie Huba.

Podgląd huba kostki EV3

Możecie też posiłkować się poniższą tabelką.

Możliwe wartości na ekranie kostki EV3

Robot Turbina Wiatrowa RoboCamp z MINDSTORMS EV3

Innym sposobem na obejście tego buga jest wyświetlanie na ekranie kostki EV3 grafik (np. Progress / Dial) zamiast liczb.

Jednak jest to trudniejsze. Metoda wymaga wykorzystania działań matematycznych, takich jak dzielenie, mnożenie czy zaokrąglanie liczb, żeby dopasować odczyty z silnika do instrukcji warunkowych, których spełnienie wyświetla konkretną grafikę.

Jeśli chcecie wiedzieć jak osiągnąć taki efekt, zajrzyjcie na naszą platformę e-learningową i wybierzcie lekcję z Turbiną wiatrową programowaną w EV3 Classroom. Wszystko jest pokazane i wyjaśnione krok po kroku.

Problemy z połączeniem Bluetooth

Połączenie bezprzewodowe ma potencjał by inspirować i usprawniać naukę z robotami, pod warunkiem że działa. Przy programowaniu robotów MINDSTORMS EV3 w aplikacji EV3 Classroom niekoniecznie zawsze tak będzie.

Doświadczenia naszych testerów były różne. Niektórym udało się połączyć kostkę EV3 z nową aplikacją bez problemów i w rekordowym czasie, lecz byli w mniejszości. Większość testerów napotkała mniejsze lub większe problemy, takie jak wydłużony czas połączenia, albo niemożliwość połączenia się z aplikacją w ogóle, mimo wielu prób. Testy prowadziliśmy na różnych urządzeniach z różnymi systemami operacyjnymi, dlatego nie możemy wskazać jednej konkretnej przyczyny.

Na szczęście ostatecznie wszystkim udało się zaprogramować roboty. Jak?

Proste rozwiązanie: Przełącz się na kabel

Wszystko dzięki staremu jak świat trikowi znanemu wszystkim weteranom MINDSTORMS. Wystarczy podłączyć kostkę EV3 do komputera przy pomocy kabla USB.

Ten sposób zawsze działa. Co więcej, czasem jest nawet najszybszym sposobem łączenia robota z aplikacją do programowania, zwłaszcza w warunkach szkolnych.

Pamiętajcie, że robot nie musi być cały czas podłączony do komputera kablem, tylko na czas ładowania programu. Roboty EV3 mają opcję aktywowania programu bezpośrednio z kostki.

Inne rozwiązania: Jak przywrócić połączenie Bluetooth

Połączenie przez kabel USB działa zawsze, ale nie jest idealne. Dlatego poniżej zamieszczamy trzy możliwe sposoby opisujące jak przywrócić połączenie Bluetooth między kostką a komputerem.

  • Ponowne parowanie kostki. Czasem najprostsze rozwiązania są najlepsze. Jeżeli pracujesz na systemie Windows, najlepiej zacznij od ponownego sparowania kostki. Wejdź w Ustawienia Bluetooth i innych urządzeń, znajdź na liście kostkę EV3, wybierz ją i usuń. Potem sparuj kostkę ponownie i sprawdź czy połączenie Bluetooth działa.

  • Ustawienia Bluetooth kostki. Przyjrzyj się bliżej ustawieniom samej kostki. Po aktywowaniu kostki EV3 przejdź do zakładki Narzędzia (pierwsza od prawej) i znajdź pozycję "Bluetooth". Wybierz ją, a następnie aktywuj możliwość połączenia Bluetooth zaznaczając właśnie tę opcję. Chwilę potem kostka powinna automatycznie wysłać zapytanie o połączenie z najbliższym urządzeniem Bluetooth.

  • Aktualizacja oprogramowania. Jeśli prostsze rozwiązania zawiodą, można spróbować aktualizacji oprogramowania. Potrzebujesz komputera z Internetem oraz kostki EV3, podłączonej do niego kablem USB. Po aktywacji kostki przejdź do zakładki Narzędzia i wybierz Firmware update (Aktualizacja oprogramowania). Aby sprawdzić czy nowa aktualizacja jest dostępna, kliknij Check (Sprawdź) i wybierz najnowszą wersję oprogramowania z listy. Po wybraniu pliku kostka się zaktualizuje i uruchomi ponownie, a jeśli to było źródło problemu, połączenie Bluetooth zacznie działać.

Szwankujące połączenie Bluetooth może wynikać z różnych przyczyn, w tym również sprzętowych, dlatego przywrócenie go niekoniecznie jest łatwe. Niestety może się okazać, że żadne z powyższych rozwiązań nie zadziała i trzeba będzie wrócić do połączenia przy pomocy kabla USB.

Lekcje robotyki na MINDSTORMS EV3

Stoper ma problem z czasem

Która jest teraz godzina? Czas jest względny, przynajmniej według stopera z EV3 Classroom.

Jeśli napiszemy w EV3 Classroom program, który ma reagować po upływie dokładnie 5 sekund, możemy czekać całą wieczność. Reakcja może nigdy nie nadejść. Dzieje się tak prawdopodobnie dlatego, że stoper ma trudności z rozpoznaniem chwili gdy precyzyjnie 5 sekund, ani milisekunda więcej, ani milisekunda mniej, upływa w czasie rzeczywistym.

To myślenie absolutne nie pokrywa się z ludzkim postrzeganiem czasu, ale możemy dojść do porozumienia na poziomie skryptu.

Proste rozwiązanie: Użyj znaku większości

Skoro stoper ma problem z precyzyjnym określeniem wartości, ułatwmy mu zadanie. Zamiast bloczka równa się (=), wykorzystajmy bloczek większe niż (>) z kategorii Operators. Ta minimalna zmiana zwiększa pole manewru programu na tyle, żeby mógł zauważyć upływ czasu i zareagować.

Osiągniemy taki sam rezultat jaki chcieliśmy na samym początku z tą różnicą, że ten program rzeczywiście zadziała w EV3 Classroom.

Bug stoper w EV3 Classroom

Gdy Moje bloki rozpoznają tylko liczby

Na koniec weźmy pod lupę potężne i onieśmielające Moje bloki. Tworzenie własnego bloczka jest wspaniałą funkcją. Tym bardziej, że pozwala wypełnić lukę po niektórych bloczkach usuniętych w nowej wersji aplikacji.

Proces tworzenia bloczków jest teraz prostszy niż był kiedyś. Aby zrobić swój własny bloczek, należy najpierw zaprojektować jego kształt przy pomocy wejść (liczba, tekst, wartość logiczna) oraz etykiet, a następnie zdefiniować jego działanie tworząc skrypt z bloczków które już istnieją. Na koniec otrzymamy nowy bloczek, którego można użyć w programie.

Wadą tego systemu jest sposób określania portów. Silniki są domyślnie podłączane do portów oznaczonych literami, ale nie wszystkie wejścia akceptują litery jako prawidłowe wartości.

Definicja My Block w EV3 Classroom

Czy istnieje sposób na obejście tego problemu?

Ukryte wartości liczbowe bloczków raportujących

Tak! Widzicie, chociaż aplikacja do programowania pokazuje nam dane w różnych formatach, takich jak tekst, obrazy, kolory, to w głębi kodu wszystkie one są tak naprawdę liczbami. Na przykład kolory wykrywane przez czujnik kolorów są oznaczone w następujący sposób:

  • 0 = Brak koloru
  • 1 = Czarny
  • 2 = Niebieski
  • 3 = Zielony
  • 4 = Żółty
  • 5 = Czerwony
  • 6 = Biały
  • 7 = Brązowy

Liczb możemy też użyć do zaprogramowania przycisków kostki EV3. Na początek wskaż przycisk o który Ci chodzi:

  • 0 = Brak przycisku
  • 1 = Lewy przycisk
  • 2 = Środkowy przycisk
  • 3 = Prawy przycisk
  • 4 = Górny przycisk
  • 5 = Dolny przycisk

Potem zdecyduj czy powinien być...

  • 0 = Puszczony
  • 1 = Wciśnięty
  • 2 = Raz wciśnięty i puszczony

To tylko kilka przykładów wziętych z oficjalnych plików pomocy. Część takich informacji możecie znaleźć w dziale Help (Pomoc) aplikacji EV3 Classroom. Jeżeli chcecie dogłębnie zbadać temat, zajrzyjcie do oficjalnej i bardzo drobiazgowej pomocy LEGO® MINDSTORMS® EV3 (po angielsku). Albo przeczytajcie rozwiązanie poniżej.

Proste rozwiązanie: Nasza tabelka

Tą samą sztuczkę z liczbami można zastosować w Moich blokach do określenia portu silnika. Skoro nie można używać liter, wykorzystaj jedną z tych liczb!

Dane wejściowe dla portów w postaci liczbowej mają następujące wartości:

Porty oznaczone liczbami w EV3 Classroom

Skoro mowa o silnikach, czy znacie najłatwiejszy sposób na zmianę kierunku obrotu silnika?

Wystarczy dodać niepozorny znak minusa tuż przed liczbową wartością szybkości. Minus odwróci wybrany kierunek (np. zgodny z ruchem wskazówek zegara) i sprawi, że silnik będzie obracał się w drugą stronę (np. odwrotnie do ruchu wskazówek zegara). Uważajcie tylko ile minusów dodajecie, bo w EV3 Classroom dwa minusy oznaczają plus!

O autorach
Dominika Skrzypek
International Education Specialist
Miłośniczka robotów, kształcenia ustawicznego oraz języków – naturalnych, jak i sztucznych. Z wykształcenia pedagog i lingwistka zarazem, w zespole RoboCamp nadzoruje publikowane treści i odpowiada za przygotowanie anglojęzycznych nauczycieli do pierwszej lekcji robotyki.
Adrianna Zalewska
Konstruktor Robotów
Pasjonuje się technologią i robotami, nic zatem dziwnego, że została inżynierem mechatroniki - w dodatku z wyróżnieniem. W ekipie RoboCamp zajmuje stanowisko konstruktora robotów i współtworzy materiały do nauczania. Po godzinach pracuje nad projektami badawczymi, jak na przykład tworzenie robota we współpracy z Europejską Agencją Kosmiczną, oraz spełnia się jako instruktorka w harcerstwie.