Forum LUGPol Strona Główna Forum LUGPol
www.lugpol.pl

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj

Poprzedni temat «» Następny temat
"Skuteczne programowanie LEGO MINDSTORMS."
Autor Wiadomość
KUKUS 
VIP


Wiek: 27
Dołączył: 25 Cze 2007
Wpisy: 852
Skąd: Kraków
Wysłany: 2014-10-05, 16:20   "Skuteczne programowanie LEGO MINDSTORMS."





Dane techniczne
Tytuł: „Skuteczne programowanie LEGO MINDSTORMS. Niezawodne techniki programowania dla zabawy i rywalizacji”
Autorzy: James J. Trobaugh, Mannie Lowe
Recenzent techniczny: Mark Edelman
Wydawnictwo: Apress
Kolorystyka: czarno-biała
Liczba stron: 220
Cena: 58,80 zł (pierwotnie), obecnie można dostać w okolicach 40 zł
Przekład: Jakub Niedźwiedź

Brickshelf | FlickR



Słowo wstępu
W połowie października na forum Lugpolu, Żbik otrzymał wiadomość od tajemniczego Redaktora X, który zaproponował forumowiczom możliwość zrecenzowania kilku pozycji książkowych, dotyczących różnych dziedzin naszego hobby. Jako, że nie było ustalonego konkretnego końcowego terminu recenzji, postanowiłem podjąć się tego zadania – cóż, w końcu popisałem już tyle recenzji zestawów, że miło by było tak dla odmiany zająć się czymś nowym – a recenzja powyższej książki dała właśnie taką sposobność, za którą dziękuję zarówno Redaktorowi X, jak i Żbikowi. Podziękowania należą się również 3domowi, baconowi oraz Darkowi Mrozowi za pomoc w korekcie tekstu (jeśli jeszcze kogoś nie wymieniłem, to byłbym wdzięczny za taką informację - zrobię odpowiednią korektę w tekście). No i forumowiczom za cierpliwość – w końcu rok to kawał czasu, ale wiadomo – życie idzie swoimi, czasami niezrozumiałymi ścieżkami, których opis pozwolę sobie podarować, wszak recenzja powinna być chyba bardziej konkretna aniżeli debata o podłożu filozoficznym…

Recenzję napisałem już w czerwcu, jednakże dopiero teraz zdecydowałem się ją opublikować. Miałem ambicję zrobić jeszcze stosowną wersję video, czy jakieś przykłady stworzone w oparciu o książkę, ale stwierdziłem, że chyba lepiej podzielić się tym, co już napisałem, a stosowne dodatki dograć później - no bo w końcu ile można czekać? Z drugiej jednak strony, taka roczna przerwa pozwoliła mi na inne, bardziej obiektywne spojrzenie na całość, dzięki czemu – mam nadzieję – czytelnik jakoś przebrnie przez moje wypociny aż do końca. Tym bardziej, że recenzje wcześniejszych książek nie napawały optymizmem … może w tym przypadku będzie inaczej?




Książka




Książka składa się z 220 stron. Okładka jest miła w dotyku. Grafika tła zrealizowana jest w ciemnej tonacji, co dodatkowo uwypukla jasne litery.

Przód, oprócz tytułu i nazwisk autorów posiada jeszcze ilustrację przedstawiającą kostkę NXT z czujnikami wraz z otaczającymi je programami w postaci graficznej. Tył to przede wszystkim garść informacji o samej książce, zachęcających potencjalnego klienta do nabycia oraz reklama innych pozycji, które zostały już opisane i obarczone odpowiednim komentarzem na forum.



Spis treści
Książka została podzielona na 14 rozdziałów, poprzedzonych wzmianką o autorze książki, recenzencie technicznym, podziękowaniami i ogólnym wprowadzeniem do tematyki programowania.


Główny target książki
Książka dedykowana jest głównie dla osób, które co-nieco wiedzą już o programowaniu NXT-G i chciałyby swoje umiejętności rozwinąć, ale myślę, że zupełni nowicjusze też skorzystają ze znajdujących się tu porad.

Meritum
Omówienie całego procesu programowania robota + praktyczne przykłady na podstawie doświadczenia zawodników.

Dodatki
Posiadacze wersji czaro-białej niniejszej książki mogą skorzystać z adresu umieszczonego w książce, prowadzącego do kolorowych rysunków. Załącznik zajmuje 9MB, co na dzisiejsze czasy jest całkowicie do zaakceptowania. Dużym plusem jest podzielenie obrazków na osobne foldery, odpowiadające konkretnym rozdziałom – dzięki temu wyszukiwanie powinno być dużo prostsze.



Rozdział 1: “Poznawanie oprogramowania NXT-G”
W tym rozdziale autorzy omawiają podstawy dotyczące programowania NXT-G (interfejs użytkownika), jak i samego robota Mindstorms (sposoby połączenia z komputerem). Jeżeli ktoś jest nowicjuszem, to myślę, że jak najbardziej może skorzystać z niniejszych wskazówek, osoba bardziej zaawansowana może przeglądnąć pobieżnie ten rozdział (w ramach przypomnienia) albo w ogóle go sobie podarować i iść dalej.

To, co mi się tutaj podoba to udana próba wytłumaczenia dość złożonych rzeczy (takich, jak podstawowe definicje czy istota działania całego środowiska NXT) przy użyciu klarownego języka – no bo w końcu zrozumienie problemu to klucz do jego rozwiązania. Ilustracje są nieodłącznym elementem w tego typu poradnika – co prawda niektóre z nich wymagają drobnych poprawek (podpisy są przesunięte):

ale wiadomo, o co chodzi (zawsze można też pobrać ilustracje bezpośrednio ze strony producenta – co prawda są po angielsku, ale nawet osoba nieobeznana z nim powinna sobie poradzić), wszystko omawiane jest krok po kroku – zupełnie tak, jak miało to miejsce w standardowym podręczniku do NXT. Co prawda, w rozdziale omawiane są podstawy podstaw, ale informowanie czytelnika o tym, co się bardziej, a co mniej opłaca pod kątem zawodów jest w moim przekonaniu dobre.

Zrzuty ekranów występujące w książce bazują na wersji NXT-G 2.1 (wersja edukacyjna), ale nie odbiegają one aż tak od wersji standardowej 2.0.



Rozdział 2: “Proces projektowania oprogramowania”
Rozdział poświęcony jest procesowi projektowania oprogramowania. Autor wyjaśnia nam, dlaczego jest on taki istotny.

Wstęp rozdziału jest co prawda dość ogólny, niemniej czytelnik już tutaj otrzymuje trochę strategicznych wskazówek, ułatwiających start w zawodach (aczkolwiek uważam, że przeciętnemu czytelnikowi również mogą się przydać).

Dowiadujemy się tu też o metodzie projektowania, przez informatyków nazywaną „projektowaniem iteracyjnym” – w dużym uproszczeniu chodzi o to, że tworzymy nasz kod, testujemy go, a następnie w oparciu o test poprawiamy go tyle razy, ile uznamy za stosowne, aby nasz kod działał jak najlepiej.

Dalsze części powyższego rozdziału w sposób bardziej szczegółowy skupiają się na kolejnych elementach, na których bazuje powyższa metoda, wykorzystywana przez zespół programujący robota. W dużym skrócie – na początku definiujemy problem, rozbijamy go na jak najmniejsze i najbardziej zrozumiałe części składowe, tworzymy pseudokod, by następnie przejść do tego, co tygryski lubią najbardziej – kodowania. Nie chciałbym przedstawić tu za dużo detali, ale w książce jest dokładnie wyjaśnione, dlaczego taka metoda ma przełożenie w praktyce, na co należy zwrócić uwagę, a czego nie należy robić. Opisany jest również bardzo ważny element, jakim jest praca zespołowa – na studiach uczyli nas, że praca w grupie daje lepsze rezultaty, niż gdyby każdy tworzył projekt osobno (np. duże projekty informatyczne mogłyby być kłopotliwe w realizacji) – jak widać ma to przełożenie na programowanie robotów Mindstorms.

Oprócz zwykłego tekstu, autor przedstawił konkretne przykłady na czytelnych rysunkach/pseudokodach, dzięki czemu osoba początkująca łatwiej zrozumie przesłanie autora:

Jeśli ktoś ma już pewne doświadczenie, ale chciałby sobie przypomnieć najistotniejsze informacje (np. po długiej przerwie chciałby znów wystartować w zawodach) – to dzięki rysunkom łatwiej mu będzie znaleźć odpowiedni fragment w książce. Zresztą, nie bez kozery mówi się, że 1 obraz znaczy więcej, niż 1000 słów (a należy pamiętać, że głównym odbiorcą książki są grupy biorące udział w zawodach, a są to w dużej mierze dzieci/nastolatkowie). Gdybym miał się czegoś bardzo przyczepić, to byłby brak spisu rysunków, umieszczonego pod koniec książki, co jednak w żaden sposób nie wpływa negatywnie na jej odbiór.

Jak do tej pory autor książki wydaje się pisać z sensem. Przechodzi od ogółu do szczegółu, dzięki czemu łatwiej jest zrozumieć, co tak naprawdę miał na myśli. Na pochwałę zasługuje również to, iż nie ma tu „lania wody”, a przedstawione są rzeczy istotne. Co prawda czasami przewijają się hasła rodem ze studiów informatycznych, ale nie ma ich znowu tak dużo, a jeśli już są, to podano je w „ludzki” sposób, skupiając się tylko na tym, co jest naprawdę ważne.



Rozdział 3: “Praca z grupą My Blocks”
Rozdział poświęcony jest „optymalizacji kodu i pracy” za pomocą grupy MyBlocks, umożliwiającej nam tworzenie niestandardowych bloków do wielokrotnego wykorzystania. Na podstawie tego rozdziału i zgromadzonej dotychczas wiedzy możemy powiedzieć, że powolutku przechodzimy od rzeczy bardziej ogólnych, do bardziej szczegółowych.

W dużym skrócie – rozdział zaczyna się od wstępu teoretycznego, wyjaśniającego nam zasadę działania mechanizmu MyBlocks. Teorię potwierdza praktyka, gdyż dostaliśmy sposobność stworzenia swojego pierwszego kodu w postaci konkretnego przykładu. Oczywiście, jego poziom zaawansowania dobrany jest w taki sposób, aby osoba początkująca z łatwością odnalazła się w nowej rzeczywistości. Bardziej rozbudowane kody możemy pobrać za darmo z sieci, ale żeby zrozumieć, w jaki sposób one działają, trzeba załapać podstawy – dzięki czemu łatwiej nam będzie połapać się w całości; ze swojego doświadczenia pamiętam, że gdy zbudowałem robota z dodatkowej instrukcji umieszczonej na stronie Lego, dość długo główkowałem nad tym, w jaki sposób działa przedstawiony tam algorytm.

W dalszej części rozdziału omówione jest tworzenie własnego bloku, jego edycja czy wykorzystanie. Nie zabrakło też kilku wskazówek dotyczących zmiennych, wykorzystywanych przez nasze bloki. Dodatkowo, aby czytelnik mógł lepiej pojąć zgromadzone dotychczas treści, autorzy pozwolili sobie na anty-przykład z wyjaśnieniem, co jest źle i jak należałoby to poprawić.

Kolejne akapity wiążą się z kopiowaniem bloków i naprawianiem bloków zepsutych. Rzecz niby banalna, a jednak nie przypominam sobie, żeby było coś na ten temat w standardowej książce dołączonej do NXT. Znajdziemy tu też krótki opis tego, w jaki sposób przenosić programy między komputerami.


W tej sekcji mam jedno zastrzeżenie – autor wspomina, że na rysunku grupa MyBlocks zaznaczona jest na niebiesko, jednakże problem polega na tym, że rysunek jest czarno-biały, dlatego wydaje mi się, że bardziej uniwersalnym określeniem byłoby napisanie, jaki kształt ma ów bloczek, albo który z przedstawionych na rysunku to ten właściwy.

Osoba, która po raz pierwszy w życiu ma do czynienia z PC-tem może mieć pewne trudności w tym rozdziale, ale nie są to znowu rzeczy, których nie można nadrobić. Choć mówiąc szczerze, główny target, do których skierowany jest ów podręcznik takowe umiejętności powinien posiadać, w końcu mówi się, iż każde nowe pokolenie lepiej przyswaja sobie nowinki technologiczne.

Na koniec taka dygresja - nie doszedłem jeszcze nawet do połowy książki, a już odnoszę wrażenie, jakoby moja wiedza dotycząca NXT wzrosła. Oczywiście nie są to jakieś trudne rzeczy, ale sporo udało mi się uporządkować/usystematyzować, a to chyba też ważne ;)



Rozdział 4: “Gdy coś pójdzie nie tak”
Rozdział ten poświęcony jest błędom w napisanych przez nas programach. Czytelnik dowiaduje się, w jaki sposób najwygodniej przegląda się złożone kody i w jaki sposób należy przeprowadzić testy, aby odnaleźć przyczynę błędu i ją poprawić. Dodatkowo autorzy poruszają też pewne aspekty natury psychologicznej, co może być przydatne zwłaszcza dla osób biorących udział w zawodach. Nie zabrakło też kilku praktycznych porad dla poprawnego funkcjonowania całego teamu.


Ponieważ w rozdziale autorzy wyjaśniają m.in. działanie funkcji do sprawdzania wartości czujników na kostce NXT, nie mogło zabraknąć stosownych zdjęć. Są one na tyle czytelne, że idzie się połapać w tym, o co chodzi, ale niektóre z nich są nieco rozmazane:

zapewne, gdyby jakiś grafik pobawił się w jakimś programie graficznym z progowaniem/wyostrzaniem, poprawiłoby to obrazek, jednocześnie ograniczając nieco ilość tuszu, potrzebnego do wydruku książki (choć nowe zdjęcie też mogłoby się przydać). Do reszty rysunków (przedstawiających kody itp.) nie mam większych zastrzeżeń.


W rozdziale omówione są też proste triki, przedstawiające, w jaki sposób można obejść standardowe ograniczenia wyświetlacza NXT za pomocą prostego programu (chodzi tu o wyświetlanie wielu różnych wartości jednocześnie).


Wydaje mi się, że bardzo dobrze, iż autorzy zdecydowali się poruszyć tematykę błędów w programach, bo rzeczywiście jest to istotny problem – piszesz kod, kompilujesz, chcesz uruchomić i nagle się coś wysypuje. Umiejętność znalezienia kłopotu i jego naprawienia jest bardzo cenna, nie tylko dla studenta piszącego program na zaliczenie, ale również dla człowieka programującego NXT. Oczywiście wiedza, którą tu otrzymamy nie jest nie wiadomo jak zaawansowana, ale chyba wystarczy do załapania najważniejszych podstaw.



Rozdział 5: “Przenoszenie danych”
Rozdział poświęcony jest danym, wykorzystywanym przez programy NXT. Dokładnie omówione zostały typy połączeń danych wraz z ich modyfikacjami, oraz objaśniona różnica między zmiennymi lokalnymi, a globalnymi. Nie zabrakło też kilku zdań dotyczących stałych. Umieszczenie czytelnych obrazków jest bardzo dobrą pomocą dydaktyczną.

Autorzy przedstawili kilka dodatkowych, ale jakże cennych uwag dla programistów pracujących w zespole. Uwagę zwróciłbym też na przykład omówionego krok po kroku programu do zliczania liczby naciśnięć czujnika – nie jest on trudny, ale w dobry sposób ilustruje, jak można wykorzystać dotychczasową wiedzę w celu zrobienia wydajnego kodu.



Rozdział 6: “Podejmowanie inteligentnych decyzji”
Rozdział poświęcony jest logice robota. Autorzy objaśniają działanie bloku switcha, m.in. poprzez prezentację przykładów konkretnych programów (wraz z instrukcją ich wykonania), jak np. program odpowiednio reagujący na zmianę kolorów, czy kod odpowiedzialny za zwalnianie robota w zależności od liczby napotkanych czarnych pasów.
Na dalszych stronach czytelnik dowiaduje się o połączeniach switcha ze zmiennymi, zagnieżdżonych switchach oraz o dość niedocenianych, ale użytecznych blokach – logic, compare i range.

Oprócz zwykłych zrzutów prezentujących omawiany kod, nie zabrakło tu też schematu blokowego, czy tabel logicznych, dzięki którym opisany tu materiał powinien być bardziej przejrzysty.



W rozdziale nie zabrakło też praktycznych wskazówek i uwag autorów dotyczących zawodów (przedstawiono m.in. faktyczne zadanie konkursowe, którego nie zrobił żaden z zespołów, a które wystarczyło rozwiązać za pomocą zwykłego switcha). Nie brak tu też ostrzeżeń przed częstymi pułapkami programistycznymi.



Rozdział 7: “Silniki i ruch”
Ze wszystkich, dotychczas przeczytanych przeze mnie rozdziałów, ten wydaje się najdłuższy, jednakże jego tematyka jest chyba jedną z najistotniejszych w całej książce. Mowa oczywiście o silnikach i poruszaniu się robota.

Czytelnik dowiaduje się, dlaczego poruszanie się robota po linii prostej nie jest wcale taką trywialną sprawą (jak mogłoby się początkowo wydawać) oraz o kilku rodzajach możliwych skrętów. Oczywiście, nie zabrakło też pouczających przykładów kodów, które z łatwością można wprowadzić do swojego programu, a następnie wgrać do robota - jak zwykle królują tu własne bloki. Znajdziemy też masę całkiem nowych pojęć, jak np. odometria czy skręcanie różnicowe.

W rozdziale omówiona jest także dokładna różnica, między blokami “motor” i “move” - zarówno w kontekście poruszania się po prostej, jak i obrotów. Ne zabrakło też informacji o niedocenionym bloku “reset motor”, który może mieć znaczenie np. na zawodach. Wytłumaczone są także konsekwencje korzystania z każdego bloku.

Osoby, które nie lubią matematyki, albo po prostu czują się niepewnie w tej dziedzinie, początkowo mogą przerazić obliczenia oraz wzory, choć oczywiście należy zdać sobie sprawę z tego, że zgromadzona tu wiedza nie ma na celu przerazić delikwenta, ale pomóc mu w rozwiązaniu problemu i zdobyciu dodatkowych punktów w zawodach. Autor książki doskonale zdaje sobie z tego sprawę i opisuje wszystko w sposób jak najbardziej zrozumiały, logicznie dochodząc do danego wzoru i tłumacząc, dlaczego tak, a nie inaczej. I tak np. przedstawiony jest wzór na obliczenie liczby obrotów (które musi wykonać silnik, aby pokonać daną odległość),na obrót robota ... nie zabrakło nawet takich rzeczy, jak współczynniki przełożenia.

Żeby całość można było lepiej zrozumieć, w rozdziale znajdziemy sporo czytelnych obrazków - zarówno konkretnych kodów (umożliwiających tworzenie własnych bloków), jak również schematów blokowych, czy wreszcie całych schematów wyjaśniających wzory.








Oczywiście nie byłbym sobą, gdybym choć trochę nie ponarzekał. Bo choć tekst jest napisany w sposób logiczny i zrozumiały, to niestety zdarzyło się kilka drobnych błędów.

Tłumaczenie kilku zdań nie do końca mi się podoba. W miejscu, w którym autor tłumaczy, jak obliczać przełożenie, widziałbym dodatkowy, stosowny rysunek z zębatkami - wydaje mi się, że dzięki niemu, czytelnikom (a zwłaszcza tym młodszym) łatwiej będzie zrozumieć tę problematykę.

Miejscami problematyczne mogą być też same czarno-białe rysunki, gdyż np. w 1 miejscu autor mówi o zaznaczeniu kilku bloków jak na rysunku xxx w celu stworzenia własnego bloku, jednakże na owej ilustracji nie widać tego zaznaczenia lub jest ono prawie niewidoczne (z pomocą idą dodatkowe materiały udostępnione przez wydawcę w postaci kolorowych rysunków). Zauważyłem też, że rysunki 7-5 i 7-6 są identyczne, mimo, że na rysunku 7-6 kilka bloków powinno być zaznaczonych, a tak niestety nie jest.

Pewną niedoróbką jest też tabelka - przed jedną z wartości zabrakło minusa. Oczywiście nie podejrzewam, żeby te błędy jakoś drastycznie uniemożliwiły dalszą pracę i że większość osób z łatwością sobie poradzi, ale być może wydawcy zależy też na znalezieniu jakiś błędów i poprawieniu ich w kolejnym wydaniu? ;)


Reasumując - wydaje mi się, że rozdział jest konkretny i można z niego naprawdę dużo wynieść. Pojawiają się nowe pojęcia i całkiem nowe problemy, ale wszystko jest wyjaśnione w sposób jak najprostszy.


Na koniec dodam, że przy recenzji mojego NXT 2.0, w pewnym miejscu musiałem go oprogramować. Program nie był jakiś ambitny, bowiem robot miał pojechać do przodu, obrócić się o 180 stopni i zawrócić. Pomimo, że użyłem dość dokładnych danych, robot nie obracał się idealnie tak, jakbym chciał:
https://www.youtube.com/watch?v=pyfLDewQmP8
(jakoś po 5 minucie; ostrzegam tylko, że filmik jest wiekowy i robiony z wykorzystaniem przestarzałego sprzętu)

Inna sprawa, że zamiast obracać silniki przez określony czas mogłem zdefiniować obrót przy użyciu stopni, bo pewnie zwiększyłoby to dokładność, choć z tego rozdziału dowiedziałem się o tym, że w przypadku oprogramowania silnika NXT trzeba brać pod uwagę pewien margines błędu, gdyż przekładnia znajdująca się wewnątrz silnika ma 6-8 stopni luzu.

Bardzo spodobały mi się też matematyczne wyjaśnienia, tłumaczące ruch robota i uwzględniające pewne czynniki zewnętrzne, jak również umieszczone tu kody - zwłaszcza ten, na wykrywanie zatrzymania silnika.



Rozdział 8: “Wykrywanie Światła”
Podobnie, jak miało to miejsce wcześniej, również i rozdział 8 należy do dłuższych z całej książki, ale tłumaczy on naprawdę ważną kwestię, jaką jest prawidłowe użycie czujników światła w programowanych przez nas robotach.


Tekst zaczyna się od charakterystyki samego czujnika - przedstawiona jest jego budowa oraz sposób działania i zaprogramowania go w NXT-G, oczywiście w sposób zrozumiały dla czytelnika. Czytelne obrazki znacznie ułatwiają przyswojenie tekstu, co może być bardzo przydatne do zrozumienia zarówno przez 9-latka, jak i osobę starszą:






W dalszej części autor wyjaśnia różnicę między światłem otoczenia, a światłem odbitym i tłumaczy, które z nich jest bardziej przydatne podczas zawodów. Omówiony jest też bardzo dokładnie proces kalibracji czujnika, dzięki któremu nasz robot będzie mógł wydajniej analizować informacje z danego środowiska i wykorzystać je w dalszym przetwarzaniu. Przedstawione są tu również różne odmiany kalibracji (blok NXT-G, plik lokalny) wraz ze szczegółowym opisaniem różnic wynikających z ich zastosowania. Nie zabrakło tu również stosownych przykładów programów - np. własnej przeglądarki do kalibracji, która działa efektywniej od przeglądarki wbudowanej standardowo w kostkę NXT.

Następne strony zajmują się problematyką wykrywania linii i podążania za nią przez robota. Tradycyjnie, znajdziemy tu trochę nowych, przykładowych kodów wraz ze szczegółową ich analizą (zarówno w formie tekstu, jak i dodatkowych rysunków, zdjęć czy tabelek).

I tak, czytelnik dowie się, jak powinien wyglądać kod odpowiedzialny za śledzenie, czy też wyrównywanie robota do badanej linii i jakie ewentualne konsekwencje mogą się wiązać z jego zastosowaniem. Autor zaznacza jednak, że to, co umieścił w książce nie wyczerpuje tematu, ale stanowi dobry punkt wyjścia i zachęca do eksperymentowania i zapoznawania się z bardziej złożonymi algorytmami.

Dodatkowo, aby całość lepiej zilustrować/nawiązać pewną więź z czytelnikiem, autor podaje przykłady z prawdziwych sytuacji, które zdarzyły się na zawodach, wyjaśniając dane zagadnienia. Ciekawostką mogą być tu skany plansz, użytych na prawdziwych zawodach:


Podobnie jak miało to miejsce dotychczas, również rozdział 8 posiada kilka całkiem nowych, technicznych określeń i definicji, jak np. regulator proporcjonalno-całkująco-różniczkujący PID (swoją drogą, kiedy widzę “PID”, to zawsze kojarzy mi się id procesu działającego na Linuxie ...). Powolutku stają się one trudniejsze w stosunku do tych poznanych wcześniej, ale dalsza lektura pozwala na ich zrozumienie.

Czytelnik może się dowiedzieć też różnych ciekawostek - np. że oprócz markowych czujników światła produkowanych przez Lego, na rynku można znaleźć również czujniki innych firm, które choć są kompatybilne z NXT, nie są dopuszczane do użycia w zawodach.

To, co mi się w tym, rozdziale szczególnie spodobało to to, że zaczynamy analizę od najprostszego, możliwego kodu i stopniowo go rozbudowujemy - znacznie poprawia to zrozumienie tematu. Również wskazówki dotyczące umieszczania czujników w robocie i ich kalibracji wydają się być cenne - podobnie, jak omówienie roli strategii w przypadku analizowania planszy z zadaniami przez naszego robota (może być to szczególnie cenna rada dla zawodników startujących w konkursie). No i do licha, w końcu będzie można pochwalić się czymś ciekawym przed znajomymi! :)

Czy doszukałem się jakichś błędów w tym rozdziale? Cóż, gdybym miał się bardzo przyczepić do czegoś, to prawdopodobnie byłoby to oznaczenie w tekście rysunku 8.6 zamiast 8.8, choć i tak nie wpływa to na jego zrozumienie.



Rozdział 9: “Dotyk i zderzanie”
Rozdział 9 jest dużo krótszy od dwóch wcześniejszych, co wcale nie oznacza, że poskąpiono tu wartościowych rzeczy. Główną, poruszoną tu tematyką są czujniki dotykowe - wyjaśniono zasadę ich działania, przedstawiono ich charakterystykę, jak również sposób ich praktycznego i optymalnego wykorzystania. Po raz kolejny nie zabrakło tu konkretnych przykładów (i anty-przykładów) zastosowań czujników dotykowych (do ustawiania i skrętu robota, zdalnego przycisku NXT czy ogranicznika i wskaźnika obecności obiektu), wraz z przykładowymi kodami (może nie są one jakoś super złożone, ale stanowią dobry punkt wyjściowy, aby samemu zacząć coś poprawiać). Czytelne ilustracje i rysunki znacznie upraszczają zrozumienie nowego materiału.

Oprócz tego, w rozdziale znajdziemy też nieco wskazówek dotyczących samych zawodów - zarówno od strony teoretycznej, jak i praktycznej - cóż, na zawodach liczy się każdy punkt, dlatego tego typu porady mogą być na wagę złota. To, co mnie w tej części najbardziej zaciekawiło, to definicja i praktyczne zastosowanie maszyny stanów:

pozwala ona lepiej zrozumieć działanie algorytmu, jak również może się przydać podczas samego konkursu (dodatkowe punkty). Autor zaznacza jednak, że nie jest to wiedza obowiązkowa, potrzebna do zaprogramowania robota (choć bez wątpienia może okazać się pomocna), a zgromadzone w książce materiały miały na celu jedynie zasygnalizowanie problemu - osoby bardziej zainteresowane tą tematyką mogą skorzystać z linków do 2 stron internetowych, podanych przez twórców tej książki (albo przeszukać samemu internet/encyklopedię itp.). Chociaż nie ukrywam, że miło znaleźć w książce pojęcia, które w mniejszym lub większym stopniu pojawiały się na studiach :)

Przykładem, który szczególnie spodobał mi się w tym rozdziale jest ogranicznik. Generalnie chodzi o to, że nie bazujemy tu na samym ruchu silnika (który zależy od początkowego położenia), co na czujnikach, dzięki którym dana operacja (np. podnoszenie obiektów) może być wykonywana w sposób bardziej uniwersalny przez robota. Oczywiście nie zabrakło też stosownego kodu programu wraz z jego dokładnym wyjaśnieniem.

Z dodatkowych rzeczy, o których warto wspomnieć - dowiedziałem się, że podobno można kupić rozdzielacze umożliwiające wykorzystanie większej liczby czujników w danym porcie, jednak nie jest to oryginalna część Lego.



Rozdział 10: “Widzenie ultradźwiękami”
Rozdział poświęcony jest czujnikom ultradźwiękowym. Oprócz zasady działania samego urządzenia, czytelnik pozna kilka wartościowych wskazówek, umożliwiających lepsze wykorzystanie sprzętu (porady dotyczące odczytywanych obiektów, jak i montażu samego czujnika). Oczywiście, nie zabrakło też konkretnych przykładów programów, wykorzystujących owe urządzenie (np. zdalna taśma miernicza), które możemy w prosty sposób wykorzystać do własnych celów i dokonać ewentualnych zmian. Czytelne rysunki/zdjęcia znacznie ułatwiają czytelnikowi wyobrażenie i zrozumienie różnych, poruszanych tutaj kwestii:





Podobnie, jak miało to miejsce do tej pory, nie zabrakło tu też dodatkowych wskazówek dla przyszłych zawodników oraz nawiązań do sytuacji z prawdziwych zawodów w odniesieniu do wykorzystania czujnika ultradźwiękowego.

To wszystko oczywiście jest bardzo ważne, ale w tym rozdziale najbardziej spodobał mi się wstęp do tematyki związanej z zawodami robotów sumo z Lego. Kurcze, przyznam się, że zawsze myślałem, że to jedno z cięższych zagadnień, a tu proszę - jest książka, jest i kod! Oczywiście, zapewne wiele rzeczy można by w nim zmienić/poprawić, ale myślę, że jako punkt wyjścia nada się idealnie. Co ciekawe, znajdziemy tu program zarówno dla robota z jednym czujnikiem ultradźwiękowym, jak i dla wersji wykorzystującym aż 3 czujniki. Naprawdę, muszę przyznać, że autor książki bardzo mile mnie tutaj zaskoczył.

Z ciekawości zerknąłem sobie, co też piszą w oryginalnym podręczniku do NXT a propos naszego czujnika i wynika z tego że, według książki czujnik odczytuje odległości obiektów znajdujących się w przedziale od 0-255 cm z dokładnością +/- 3 cm, podczas gdy według autora książki najbliżej położony obiekt nie może być w mniejszej odległości, niż 3 mm i w większej od 250 cm. Wiem, że kilka cm różnicy nie robi, ale po prostu zwróciło to moją uwagę.

Ok, żeby nie było, że tylko słodzę - 1 kod umieszczony w tym rozdziale jest tak rozbudowany, że nie idzie go doczytać; na szczęście wydawnictwo zwróciło na to uwagę i podało link do strony, gdzie można pobrać kod w lepszej jakości.



Rozdział 11: “Programowanie zaawansowane”
Z wiedzy zebranej w tej części książki zapewne najbardziej skorzystają zawodnicy, biorący udział w konkursach robotów, gdyż podstawowa wiedza, potrzebna do zaprogramowania NXT została przekazana we wcześniejszych rozdziałach ... chociaż wydaje mi się, że zwykli, “domowi składacze” też znajdą tu coś dla siebie. Rozdział zawiera trochę cennych wskazówek (programowanie, strategia) podpowiadających, w jaki sposób można uczknąć trochę dodatkowych punktów na zawodach. Nie zabrakło też wiedzy uzupełniającej dotychczasową, np. w zakresie używania własnych bloków czy maszyny stanów. Moją uwagę zwraca jeszcze fakt, iż całość została napisana w taki sposób, aby po dłuższej przerwie móc w prosty sposób powrócić do danego rozdziału, bez konieczności przypomnienia sobie całej, dotychczasowej wiedzy.

Ale to oczywiście nie wszystko. Autor opisuje ograniczenia języka NXT-G, próbując je jednocześnie częściowo zniwelować - już na samym początku dowiadujemy się, w jaki sposób możemy zasymulować tablicę danych, która jest gotowa do użycia w kodzie NXT. Oczywiście nie są to takie twory, jak tablice dynamiczne, ale ze “pseudo-statycznymi” też można co-nieco zrobić. W sumie, to naszła mnie taka myśl, że skoro targetem książki jest młodzież w wieku 9-16 lat, to tego typu przykłady są jak najbardziej na miejscu, bo nie tylko uczą rozwiązywania problemów, ale i logicznego myślenia.

Poza tablicami, czytelnik otrzyma tu kolejną porcję wartościowych kodów, takich jak sekwencer (program do uruchamiania podprogramów, dzięki któremu możemy obejść ograniczenia hardwareowe NXT). Żeby całość była lepiej zrozumiana, analiza rozpoczyna się na najprostszym, możliwym kodzie, aby z czasem obudowywać go dodatkową funkcjonalnością (np. zapis stanu programu do pliku i jego wczytywanie). Oczywiście autor zdaje sobie sprawę, że kody można zapisać za pomocą innych metod i być może wykorzystując pełniej moc obliczeniową robota, co jednak nie zmienia faktu, iż stanowi to dobry punkt wyjścia.

W trakcie studiowania powyższego rozdziału, czytelnik natrafi też na kolejne, być może całkiem nowe dla niego pojęcie, jakim jest wielozadaniowość z wywłaszczeniem. Zasadniczo chodzi o to, że w czasie wykonywania jakiegoś zadania może się pojawić sytuacja, kiedy trzeba będzie nagle wykonać coś innego, a dopiero potem powrócić do pierwotnego zadania - i to w zupełności tłumaczy, o co tu naprawdę chodzi. Oczywiście, dla lepszego zrozumienia nie zabrakło tu też stosownego kodu.


Pozwolę sobie zrobić kilka małych uwag. Podczas analizy kodu, służącego jako przykład do własnych bloków, autor analizuje blok reset, który rzekomo pojawił się już w rozdziale 3. Nie wiem czy to przez zmęczenie czy też nie, ale przewertowałem ten rozdział kilkukrotnie i nic tam nie znalazłem na temat tego bloku. Pamiętałem jednak, że rzeczywiście taka informacja już była podawana, nie pamiętałem tylko, gdzie o tym czytałem. Z pomocą przyszedł mi spis, znajdujący się z tyłu książki i po paru minutach szukania dowiedziałem się, że przecież mowa o tym bloku była w rozdziale 7!
A skoro jesteśmy już przy spisie, znajdującym się z tyłu książki, to wydaje mi się, że nie zaszkodziłoby, aby wszystkie pojęcia tu zgromadzone były posegregowane w sposób alfabetyczny. W tym momencie przyporządkowane są w powiązaniu do pewnych elementów:


jak np. czujników światła, czy silników, co jest z jednej strony dobre, bo umożliwia szybkie wyszukiwanie elementów powiązanych w jakiś sposób ze sobą, jednakże nie znając/pamiętając tych zależności wyszukiwanie może się nieco wydłużyć. Pomocny mógłby być też niezależny spis programów umieszczonych w książce.

Z kolei w innym miejscu, zamiast zrobić odwołanie do rysunku 11-8 lub 11-9, podany jest rysunek 11-5.



Rozdział 12: “Zarządzanie kodem”
Rozdział ten poświęcony jest tematyce zarządzania kodem. Autor tłumaczy, dlaczego jest to ważne pojęcie (zwłaszcza dla zawodników) i podaje kilka praktycznych sposobów, ułatwiających życie (wraz z przedstawieniem ich wad i zalet). Czytelnik dowiaduje się, na co należy szczególnie uważać, żeby wszystko poszło jak trzeba i żeby można się łatwo połapać, za co poszczególne pliki odpowiadają (nazewnictwo, komentarze itp.). Nie zabrakło też powtórzenia i rozszerzenia informacji o funkcji “Pack and Go”, o którym była już mowa w rozdziale 3. Czytelne obrazki to już standard i w sumie mógłbym już o nich nie pisać ...

Zawodnicy powinni być zadowoleni - autor podaje kolejne strategiczne wskazówki dotyczące zarządzania zespołem i napisanym przez nich kodem.

Z ciekawszych rzeczy, znajdujących się w tym rozdziale - autor opisuje, w jaki sposób korzystać z Dropboxa, czy windowsowskiej funkcji zamiany liter nośników (z własnego doświadczenia wiem, że jest to bardzo praktyczna umiejętność, gdyż niejednokrotnie napęd sam lubi zmieniać literę, co skutkuje problemami z otworzeniem niektórych projektów). Przy opisie USB autor podaje link do strony TechBrick, gdzie można się więcej dowiedzieć na temat archiwizacji danych.

W rozdziale nie ma większych błędów - tylko w kilku miejscach tłumacz źle odmienia wyraz “folder” - powinno być “folderu” zamiast “foldera”. W jednym miejscu zabrakło odpowiedniego przyimka. Na szczęście są to tylko mało istotne drobiazgi.



Rozdział 13: “Pułapki programistyczne”
W rozdziale omówione są częste pułapki, czyhające na nieostrożnych programistów NXT-G, do których zostały zaliczone m.in. domyślne parametry bloków, nieprawidłowe połączenia w przepływie danych czy nawet niedopasowanie projektu robota do istniejącego kodu. Nie zabrakło też stosownych anty-przykładów, ilustrujących omawianą tu problematykę, jak również sposobów ich rozwiązania; aby czytelnik mógł lepiej zrozumieć powagę opisywanych tu problemów, autor pozwolił sobie na krótkie przedstawienie rzeczywistych, analogicznych sytuacji, które kosztowały NASA fortunę (żeby było śmieszniej, nie były to jakieś bardzo poważne błędy, tylko błahostki!).

Podobnie, jak miało to miejsce wcześniej, również i tu otrzymamy nieco wskazówek dotyczących przyjmowanej strategii podczas zawodów - cóż, człowiek, który działa pod presją czasu, nie zawsze rozumuje logicznie - nawet w przypadku najprostszego kodu ...

W jednym z podrozdziałów tej części książki dowiadujemy się, że czasami powodem błędów robota może być zła eksploatacja kabli. Jest to bardzo słuszna uwaga i generalnie uważam, że bardzo dobrze, że o tym napisano, ale wydaje mi się, że można było tą tematykę nieco rozwinąć o odpowiedzi na takie pytania, jak np. istnienie tańszych odpowiedników oryginalnych kabli i ewentualnego miejsca ich nabycia.

Do czego mógłbym się przyczepić? Chyba tylko do tego, że w jednym z przykładów opisane były kolory bloków - niestety na obrazku w odcieniach szarości nie są one zbyt widoczne … Oczywiście czytając tekst dowiemy się wszystkiego, co jest potrzebne do zrozumienia.



Rozdział 14: “Porady i wskazówki”
Rozdział wypełniony jest rozmaitymi wskazówkami (dotyczącymi m.in. działania niektórych bloków, debbugowania czy nawigacji po programie), jak również informacjami uzupełniającymi i uporządkowującymi naszą dotychczasową wiedzę (własne bloki, komentowanie kodu). Nie zabrakło też kilku drobnych, ale ważnych porad dotyczących budowy robota - wszak źle zaprojektowanego NXT trudniej nam będzie dobrze zaprogramować (w końcu - sprzęt i programowanie idą w parze). Tradycyjnie, nie zabrakło konkretnych przykładów (i anty-przykładów wraz z ich objaśnieniem) kodów, nawiązujących tematycznie do poruszanych kwestii (np. przedstawione są 2 z pozoru identyczne kody, które zostały dokładnie omówione), czy porad taktycznych, z których mogą skorzystać zawodnicy w czasie konkursu.

Wszystkie omawiane w tym rozdziale problemy zostały zilustrowane czytelnymi obrazkami:






W trakcie czytania tej części książki możemy dowiedzieć się kilku nowych pojęć, takich jak przepływ programu i danych, które mają duże znaczenie przy debugowaniu i analizie kodu. Nowym terminem jest też wzorzec projektowy, znany informatykom, ale tu dostosowany do potrzeb NXT - i jak się okazuje, dość pomocny, bo ułatwiający tworzenie nowego kodu.

Pod sam koniec czytelnik dowiaduje się o możliwości aktualizacji oprogramowania (podano nawet stronę, z której można je pobrać).

To co mi się bardzo spodobało w tym rozdziale, to podrozdział “Nie odkrywajmy Ameryki”. Autor stwierdza, że dobrym pomysłem jest skorzystanie z udostępnianych w sieci kodów programów, jednocześnie informując czytelnika, iż w geście dobrych manier jest napisanie, kto jest oryginalnym autorem danego rozwiązania.

Czy miałbym jakieś uwagi do tego rozdziału? Cóż, obawiam się, że młodsi czytelnicy mogliby mieć problem ze zrozumieniem, o co chodzi w niektórych pojęciach.



Reklamy
Za indeksem, zawierającym wypunktowane najważniejsze pojęcia wraz z odpowiadającymi im stronami, na samym końcu książki znajduje się reklama innych książek, dostępnych od tego samego wydawnictwa:


… niektóre tytuły brzmią dziwnie znajomo ;)



Dodatek
Jest to moja pierwsza recenzja książki, dlatego musiałem opracować sposób działania ...

Początkowo, podczas czytania poszczególnych rozdziałów, równolegle zapisywałem najważniejsze rzeczy na komputerze, co niestety okazało się nieefektywne. Dużo lepszy okazał się system zapisywania pojęć na kartkach:


Następnie, po przeczytaniu każdego rozdziału zacząłem przeglądać swoje notatki, by następnie wybrać z nich najważniejsze rzeczy i umieścić je w stosownym dokumencie.
Na samym końcu trzeba było zapisać ilustracje pochodzące z książki, które miałyby znaleźć się w powyższej recenzji:




Podsumowanie

Bardzo cieszę się z faktu posiadania recenzowanej tu książki, gdyż dzięki niej mogłem się naprawdę sporo dowiedzieć. Należy mieć jednak na uwadze, że nie jestem jakimś super-zaawansowanym użytkownikiem NXT, więc być może osoby, które bardziej siedzą w temacie będą mieć inne zdanie na temat opisywanej tu pozycji, niemniej uważam, że jeśli ktoś ma dość małe doświadczenie w tych sprawach, a chciałby nauczyć się czegoś więcej od opisu instrukcji dołączonej do zestawu, to spokojnie może sięgnąć po powyższą lekturę. Dzięki niej łatwiej mu będzie przeglądać i wykorzystywać kody udostępnione w sieci, czy samemu napisać coś wartościowego - pamiętam, że wcześniej przed przeczytaniem tej książki analiza kodu blokowego zajmowała mi więcej czasu; teraz myślę, że poszłoby dużo prościej. No i nie ukrywam, że znalazłem tu trochę inspiracji dla przyszłych, własnych konstrukcji.

Słownictwo, jakie tu występuje jest na ogół zrozumiałe, a wszelkie niejasności są od razu wyjaśniane. Gdybym miał bardzo się przyczepić, to zwróciłbym uwagę na fakt, iż czasami rzeczowniki są źle odmieniane (jak np. w rozdziale 4), ale na szczęście są to pojedyncze przypadki – w końcu tłumacz też człowiek ;)

Jako osoba, która zdecydowała się pójść na kierunek związany z informatyką od razu zauważyłem nieco „informatyczny” sposób myślenia autorów, zarówno w przypadku projektowania czy konserwacji kodu, jak i użytych w książce pojęć (inżynieria oprogramowania, wzorce projektowe itd.). Czytając kolejne strony nie miałem wątpliwości, iż autorzy posiadają dużo praktycznej wiedzy, która wydaje się użyteczna. Na pochwałę zasługuje też fakt, iż wszelkie „informatyczne” definicje, które się pojawiają, są wyjaśnione w taki sposób, aby nawet 9-latek zrozumiał, o co chodzi. Czytelnik musi mieć jednak chociaż minimalne pojęcie o pracy z komputerem (że nie wspomnę o chociaż podstawowej znajomości języka angielskiego, choć akurat tłumacz zadbał o to, żeby wszystkie anglojęzyczne wyrazy były od razu tłumaczone na polski). Przed przystąpieniem do lektury warto zapoznać się ze standardowymi modelami, dostępnymi w instrukcji NXT.

Czy warto sięgnąć po tą książkę? Zdecydowanie tak! Oczywiście, niedoróbki się tutaj zdarzają, ale nie przeszkadza to w odbiorze całej lektury. Uważam, że książka ma zdecydowanie więcej zalet, niż wad i nie żałuję, że podjąłem się jej recenzji. Teoretycznie mogłem opisać tylko kilka pierwszych rozdziałów, albo przelecieć szybko po książce nie wgłębiając się zbytnio w przekazywaną przez nią treść, ale wydaje mi się, że obowiązkiem osoby recenzującej daną książkę jest jej dogłębne przeczytanie i wysnucie pewnych wniosków, które mogłyby okazać się przydatne dla czytelników (no i ewentualnie wydawnictwa, żeby mogło poprawić ewentualne błędy). Niestety wiąże się to z pewnymi opóźnieniami, ale wolę zrobić coś starając się bardziej, niż mniej.

Jest tyko jedno ALE.

Myślę, że jedyny problem może polegać na tym, że ponieważ wyszedł już nowy model NXT, a wersja 2.0, dla której dedykowany jest ów podręcznik została wycofana ze sprzedaży, prawdopodobnie spora część potencjalnych nabywców nie zdecyduje się na zakup powyższej lektury (choć przyznam się, że nie interesowałem się najnowszym modelem i nie wiem, jak wygląda jego oprogramowanie - być może co-nieco udałoby się do niego uczknąć z powyższej lektury? Zresztą, kody to jedno, ale książka zawiera też pewne schematy myślenia i rozwiązywania problemów, dość uniwersalnych dla posiadaczy różnych modeli robotów). Jeżeli jednak ktoś już posiada poczciwą “dwójkę” i chciałby się czegoś nauczyć, to w takim przypadku może sięgnąć po powyższą lekturę.
_________________
Galeria BS | Galeria FlickR
Ostatnio zmieniony przez KUKUS 2014-10-19, 23:00, w całości zmieniany 2 razy  
 
 
 
judam 


Wiek: 33
Dołączył: 09 Sie 2012
Wpisy: 399
Skąd: Wolsztyn
Wysłany: 2014-10-05, 19:32   

Choć nie czytałem Twojej recenzji ani książki to uważam że pozycja jest stracona we względu na starą wersję kostek a przede wszystkim programowania.
_________________
5% rabatu dla LugPolu w moim nowym sklepie JuDam Store.
https://www.bricklink.com/store.asp?p=judam
 
 
 
 
KUKUS 
VIP


Wiek: 27
Dołączył: 25 Cze 2007
Wpisy: 852
Skąd: Kraków
Wysłany: 2014-10-05, 20:17   

judam napisał/a:
Choć nie czytałem Twojej recenzji ani książki to uważam że pozycja jest stracona we względu na starą wersję kostek a przede wszystkim programowania.

Pod koniec swojego podsumowania doszedłem do podobnego wniosku. Chociaż, z drugiej strony - jeśli ktoś nabył NXT 2.0 i nie zamierza kupować nowszej wersji, to taka lektura może okazać się przydatna. Ja np. mam tylko starą, poczciwą dwójkę, więc książka okazała się mi przydatna.

Miałem jeszcze pisać, że cena 60 zł jest w obecnych warunkach wygórowana, ale okazuje się, że można ją dostać za 40 zł z groszami. Nie zdziwiłbym się, gdyby w przyszłości cena ta jeszcze bardziej spadła.
_________________
Galeria BS | Galeria FlickR
 
 
 
madlyR 

Wiek: 50
Dołączył: 15 Lut 2014
Wpisy: 30
Skąd: Gdańsk
Wysłany: 2014-10-05, 22:06   

W pierwszej chwili też pomyślałem, że to "odgrzewanie kotleta", ale po chwili zastanowienia jednak nie, niekoniecznie. Przede wszystkim w szkołach kwitnie robotyka, pojawiło się sporo firm uczących robotyki, które wynajmują szkoły. to przeważnie dotowane unijnie projekty i powstałe przed wydaniem EV3. bazują na NXT 2. Potencjalne grono odbiorców jest i wcale nie ubywa go. Po za tym na Allegro można w cenach 700-800 zł kupić używane NXT 2 i tutaj już można się zaczynać zastanawiać, czy dorzucić 300-400 zł do wersji EV3, czy może wystarczy wersja starsza.

IMHO w celach komercyjnych książka powinna przejść lekki lifting, dodanie 1-2 rozdziałów o EV3 i różnicach w nowszej wersji oprogramowania i... nagle książka nabiera nowszego kształtu, a liczba odbiorców zwiększa się.

Recenzja przyznam, że zachęciła mnie, do złożenia zamówienia na najbliższy prezent ;-). Przechwyci to oczywiście mój 9 letni syn i niech się chłop rozwija, a ojciec sam chętnie się dokształci, bo pomimo praktyki programistycznej, gdy przychodzi coś zrobić w tym niby intuicyjnym NXT-G, to brak praktyki wychodzi i ciągle coś "rozkminiam" ;-).

Jeśli mogę się przyczepić do recenzji, to wiem, że słowo "target" weszło do języka, ale zawsze mnie drażni, chociaż pracuję w branży, gdzie taki slang to norma. Można promować rodzime "grupa docelowa" ;-).

KUKUS napisał/a:
Na koniec dodam, że przy recenzji mojego NXT 2.0, w pewnym miejscu musiałem go oprogramować. Program nie był jakiś ambitny, bowiem robot miał pojechać do przodu, obrócić się o 180 stopni i zawrócić. Pomimo, że użyłem dość dokładnych danych, robot nie obracał się idealnie tak, jakbym chciał:
https://www.youtube.com/watch?v=pyfLDewQmP8
(jakoś po 5 minucie; ostrzegam tylko, że filmik jest wiekowy i robiony z wykorzystaniem przestarzałego sprzętu)

Inna sprawa, że zamiast obracać silniki przez określony czas mogłem zdefiniować obrót przy użyciu stopni, bo pewnie zwiększyłoby to dokładność, choć z tego rozdziału dowiedziałem się o tym, że w przypadku oprogramowania silnika NXT trzeba brać pod uwagę pewien margines błędu, gdyż przekładnia znajdująca się wewnątrz silnika ma 6-8 stopni luzu.


Ostatnio z synami chciałem zrobić na szybko zabawę w zaprogramowanie pojazdu gąsienicowego na dużych gąsienicach z twardego plastiku, który miał pokonać tor przeszkód z zakrętami pod kątem prostym. Linijka i kątomierz poszły w ruch i zaczęliśmy tablicować, o ile przesuwa się pojazd i o ile obraca przy zadanych kątach, czasach i obrotach. Jazda przód / tył powtarzalne i idealnie, skręty.... totalna klapa i porażka. Pomimo dywanu (na twardej podłodze jeszcze gorzej), w jednym kierunku potrafił skręcić o 70 stopni mniej, niż w drugim. Powtarzalności brak... Kombinowanie z mocą niewiele poprawiło. Cóż przyczepność, uślizgi i opory nie były funkcjami liniowymi :D. Zamiast prostej zabawy zrobił się tylko mętlik w głowach. Następnym razem wrócimy do klasycznych gumowych gąsienic lub kół.
 
 
 
Wyświetl wpisy z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich wpisów
Nie możesz usuwać swoich wpisów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

phpBB by przemo  
Strona wygenerowana w 0,117 sekundy. Zapytań do SQL: 10