Po kilku miesiącach czytania kodu Clojure i wielu prób z programowaniem w tym języku, nadal nie mogę nadziwić się fenomenowi składni i ideii języka który zainspirował Clojure, czyli LISP. Zasadniczo programowanie w Clojure jest pisaniem w LISPie z wygodnym ekosystemem, jaki ofertuje host wirtualnej maszyny Java. W tym wątku chaiłbym wspomnieć, czego można się nauczyć z książki "Clojure PACKT Akhil Wali" i dlaczego uważam, że ta literatura jest dobrym uzupełnieniem wiedzy o Clojure.
NIe każda książka zaczyna sie zakręconym - ale zrazem zwracającym uwagę na szczegóły - kodem. Ta książka wyjątkowo posiada bardziej ambityny wstępniak. Wspominam o tym, abyście się po kilku pierwszych stronach do niej nie zrazili, czy nie porzucili czytania. Faktycznie autor prezentuje coś praktycznego, ale moim zdaniem nie do tego służą pierwsze rozdziały książek.
Książka porusza i czytelnie opisuje aspekty takie jak:
praca z sekwencjami i wzorce stosowane w Clojure
orkiestracja w wielowątkowości i zrównoleglaniu zadań z przykładami
zrównoleglanie używające redukcji
metaprogramowanie z makrami
kompozycja elementów typu: transducers
wzmianka o teorii monad, funktorów, monoids, aplikowanie funktorów
wstęp do programowania logicznego na czytelnym przykładzie rozwiązanie Sudoku
taski asynchroniczne
wstęp do programowania reaktywnego
testowanie kodu
dobre / zalecane praktyki
Powyżej wymienione tematy są wytłumaczone dość jasno, każda linia jest skomentowana właściwie. Opisane są często fakty n.t. wewnętrznego działania Clojure i tricki, które za tym stoją. Jest to niewątpliwie ważne uzupełnienie wiedzy w tematyce języków funkcyjnych i implementacji wzorców funkcyjnych w Clojure w ramach wirtualnej maszyny JVM.
Jest jeszcze ostatnia myśl, która mi utwiła w pamięci i o której warto wspomnieć. Książka wyjątkowo gładko przenosi nas z jednego rozdziału do kolejnego. Byćmoże czytanie wcześniej n.t. Clojure w materiałach interenetowych spowodowało, że tak odbieram tą lekturę. Pomyślałem, że jest to wartość istotna, bo niewielu autorów książek przewija tematy w sposób płynny pomiędzy rozdziałami. Tak, polecam tą książkę o Clojure osobom zainteresowanym językiem programowania Clojure, który zyskał moim zdaniem godnego i wartościowego dialektu języka LISP
Jak powszechnie wiadomo, każdy nowy standard, framework lub sprzęt potrzebuje wygrzewania.
Np: język programowania Lua wygrzewa się w grach sieciowych tj. WOW jako język skryptowy. Skrypt w języku Lua miał swoje kilka minut jako potężny atak na reaktor jądrowy w Iranie. Są współcześnie projekty, które doceniają język Lua bardziej niżeli język Java. Zastanawiająy jest ten fakt powrotu na scenę tego 20-letniego języka programowania. Byćmoże dzięki możliwości bardzo łatwego osadzania Lua na innych platformach stał się on dość ciekawym kompromisem.
Tak się złożyło, że zainteresowali się nim autorzy projektu Mihini, który uznali, że jest to godny język do utworzenia API do komunikacji pomiędzy architekturami Open Hardware a światem zewnętrznym.
Oto główny nurt obrazujący cel projektu Mihini:
The Mihini project delivers an embedded runtime running on top of Linux, that exposes a high-level Lua API for building Machine-to-Machine applications.
Czyżby zabawa w amatorską automatykę np: bnudynków dopiero się rozpoczynała ... ;-)
Tak można obserwując rynek określić, bo minął równy rok, od publikacji przez Google projektu Droid@Home a nadal nowe standardy powstają i mają się dobrze. Można wybierać wśród ulubionych języków programowania: Java, JavaScript, Python, Lua.
Wracając do samego projektu Mihini chciałbym podkreślić, że mamy tutaj wsparcie dla najpopularniejszych i sensowych architektur Open Hardware t.j.:
Raspberry Pi
BeagleBone
Z niecierpliwością wyczekuje ciekawych aplikacji do pomiaru temperatury i innych robotycznych odkryć na tej platformie. Może przekona mnie to bardziej do użycia języka Lua w praktyce ;-)
Jak na razie doszukalem sie jednego zastosowania - pomiaru temperatury.
Zdajecie sobie sprawę z tego ilu adminów musi posiadać firma, aby serwery działały. Czasami warto zresetować myślenie o utrzymaniu infrastruktury i nie mnożyć stada adminów w firmie. Dlaczego ? - o tym właśnie jest ten wpis. Przychodzi nam na ratunek szereg rozwiązań zwanych automatyzacją IT.
W sumie istnieje przetestowane i rekomendowane przeze mnie rozwiązanie do zarządzania farmami serwerów, o którym wspominałem kilka lat temu. Nazywa się Puppet. W skrócie to synonim uproszczonej automatyzacji powtarzalnych czynności i procesów, który kojarzy się z szybkim wdrażaniem systemów i aplikacji w dziale infrastrukturyIT.
Warto wspomnieć, że automatyzacja w IT to nie tylko możliwość zdalnego zainstalowania softu, to również szereg zadań na każdym z etapów cyklu życia systemów:
wdrażanie (provisioning),
odkrywanie (discovery),
zarządzanie systemami i aplikacjami,
zarządzanie budowaniem i dystrybucją aplikacji,
zarządzanie wdrażaniem poprawek (patching),
audytowanie i śledzenie zgodności środowisk (audit)
Chciałbym się podzielić kilkoma cennymi i gotowymi materiałami z sieci, które warto znać, gdy podejmuje się decyzję o ułatwieniu życia działowi IT. Oto wartościowe materiały:
Konstrukcja robota i sposób jego programowania obejmuje szereg dokumentacji i procedur. Zebrałem kilka myśli na temat tych zagadnień. Nic, co jest przedstawione tutaj jest wprost niezbędne, ale możliwe, że zaciekawie tych, którzy chcą zbudować od zera robota. W tym wpisie zainspirowałem się materiałami z GitHub oraz licznymi forami na temat budowy robotów.
Jak zacząć z konstrukcją robota ?
Robot składa się z zestawu elementów mechanicznych oraz elektronicznych, które działają zgodnie z napisanym programem.
Niektóre elementy są wykonane na wymiarm do tego celu często wykorzystywany jest program QCad lub AutoCAD. Czasami wystarczający jest dla nas edytor wektorowy Inkscape, dlatego że jest prostszy w użyciu niżeli jakiekolwiek narzędzie CAD. Co ciekawe posiada też eksporty do GCODE, aby dokonać frezowania na podłączonej do komputera maszynie CNC.
Warto wesprzeć się wiedzą z zajęć praktyczno-technicznych na temat obsługi narzędzi ręcznych. Nie wszystko musimy wykonać na drukarce 3D lub na ploterze CNC. Jest to oczywiście udogodnienie dla każdego inżyniera, kiedy projekt przygotowany w oprogramowaniu CAD wygeneruje dla nas dokumentację produkcyjną CAM.
Mając dane dla obrabiarki numerycznej o wektorach cięcia lub wiercenia np: w formacie Gerber lub GCODE jesteśmy w stanie zlecić prace mechaniczne firmie zewnętrznej na wybranych wcześniej materiale (np: plexi, sklejka, aluminium, ). Dokłądność wykonanie mechanicznych części zostanie zagwarantowana przez firmę wykonującą frezowanie, cięcie, wiercenie. I tutaj dochodzimy do dość ważnego szczególu - jakość wykoniania części mechanicznych ma znaczenie.
Okazuje się bowiem, że każde przesunięcie, nieprecyzyjne wykonania w robotach np: jeżdżących stanowi problem w postaci poprawnej jazdy po linii prostej. Często też drgania z silników przenoszą się na obudowe i może się okazać, że np: przy zakręcaniu nasz robot niedeterministycznie jeżdżi lub montaż zasilania nie będzie właściwy. Z powyższych podowód często przed złożeniem fizycznych części robota musimy sprawdzić ich dopasowanie, precyzję i jakość. Często używam pilnika ew. papieru ściernego, aby obrobić delikatnie obudowę bazową robota i zapewnić sprawniejsze pasowanie składanych elementów, złącz, źrub oraz łożysk.
Oczywiście wiele projektów robotów raz z dokładnymi wzorami do frezowania jest dostępnych na licencji GPL lub Creative Commons, co wiele ułatwia ludziom, którzy chcą przeskoczyć fazę przygotowania mechanicznych podzespołów robota.
Modelownie robota w programie 3D
Od wielu lat projektanci robotów zyskują coraz więcej narzędzi do wsparcia ich pracy i czcęsto też pasji. Jedną z wielu aplikacji do projektowania robotów niewątpliwie jest mój ulubiony Blender. Możemy zamodelować robota w trzecch wymiarach, postawić go w świecie wirtualnym używając wbudowanego w Blendera silnika fizyki i spowodować, że będzie działał, głównie dzięki temu, że w Blenderze mamy możliwość programowania logiki, akcji w języku Python. Daje nam to niesamowite możliwość przetestowania naszego robota o fizycznych wymiarach i masie w piaskownicy (Sandbox) bez ruszania się od tego narzędzia projektowego. To co symulujemy sobie w programie 3D na pewno oszczędzi naszego czasu na wielokrotnyc próbach i błędach.
Metoda prób i błędów - rzeczywista ścieżka w innowacji
Uważam, że to jest najważniejsza część w procesie tworzenia robotów. Jest to naturalna metoda pracy w każdej innowacji, wynalazku i projekcie o dużym poziomie skomplikowania. Musisz posiadać determinację i wierzyć w swoje możliwości rozwoju w wielu dziedzinach: mechanika, konstrukcje, automatyka, elektronika, programowanie, algorytmika. Jest też taka opcja, że znajdziesz drużynę i razem wspólnie osiągniecie sukces w budownie robota i byćmoże wystartujecie w jednym z wielu konkursów robotycznych. Do tego momentu musisz wiedzieć, że każdy mały błąd i krok wstecz gwarantuje przy odpowiedniej determinacji duży sukcecs w przyszłości.
NIe wstydź się swojego robotycznego pająka
Często też mamy do czynienia z sytuacją, że robimy coś do szuflady. Jest to sytuacja dość niekorzystna, gdyż nie mamy okazji zestawić swojego dzieła z naturalnym krytycyzmem osoby spoza żyjącej w naszym mózgu wizji :-) Polecam Wam, aby oddać swoją zabawkę robotyczną na jedną godzinę dziecku porzyczyć do zabawy innemu koledze. Na pewno wnioski i spostrzeżenia będą na tyle istotne, że zainspiruje nas to do budowania kolejnej wersji naszego "pająka" - mam tutaj na myśli robota, któremu zwisają kable, nie do końca dokręconego, nie zupełnie skończonego, ale wykonanego własnymi rękami. I właśnie to się liczy najbardziej, że udało Wam się osiągnąć kolejny stopień wtajemniczenia i dajecie sobie radę z problemami technicznymi. Tak rodzą się inżynierowie :-)
Napędy, sterowniki silników i zasilanie
Każdy konstruując robota chciałby posiadać uniwersalny napęd oraz elektronikę do niego. Oczywiście nie jest to takie oczywiste, że każdy napęd w robocie można nazwać dedykowanym i tylko w robotach amatorskich możemy sobie ze względów edukacyjnych pozwolić na takie uproszczenia. Dlaczego tak jest, że napędy zależą od zastosowania robota? Otóż, każdy robot ma swoje przeznaczenie w przemysle, czy produkcji. Nie jesteśmy przez to w stanie wytworzyć uniwersalnego napędu o jednej ekstra małej masie, bo robot spawalniczy potrzebuje innego napędu oraz przyspieszenia niżeli robot jeżdżący po planecie Mars we własnym dedykowanym pojeżdzie. INnego typu napęd będzie miał robot latający np: drone niżeli robot mieszający produkty spożywcze. Każdy z powyższych przykładów posiada swoje specyficzne cechy napędu, a co za tym idzie specyficzne sterowniki.
Budując napęd amatorskiego robota możemy wybrać silnik: DC (z przekładnią, enkoderem lub bez nich), krokowy, serwomechanizm z obrotem 260 stopni. Ten wybór zależy od ceny i rozmiarów oczywiście, bo czasami budując microsumo lub minisumo musimy zwrócić szczegółną uwaŋ na wybór napędu i zasilania, gdyż w rozgrywkach sumo robotów mamy ograniczenia regulaminowe
Na szczęście budując prototyp prostego robota na rynku dla celów amatorskich mamy dostęp do wielu płytek sterowników silników DC oraz krokowych. Dodatkowo silniki są dostępne w tak wielu opcjach, że wybór jest bardzo elastyczny.
Myślę, że jest taka drobna rzecz, która nam zawsze przemyka przy budownie robotów jak grubość osi silnika. Wiele razy dzięsiąte części militetra w wyliczonym otworze i odpowiedniej osi silnika spowodowały w moich prototypach robotów, że koło jest zbyt słabo osadzone i wpada w wiracje. Następstwem tego są wibracje na kołach, czyli robot zjeżdża delikatnie z trasy. Oczywiście można to skorygować programowo i wręcz należy, ale jeśli uczymy się budowania robotów, to każda linika nadmiarowego kodu w pierwszych programach jest zbędna i szczególnie kiedy można jej uniknąć zapewniając dobre dopasowanie mechaniki :-)
Istotna pułapka to również prąd silnika oraz max. prąd sterownika, bo kiedy robot nasz zatrzymuje się na przeszkodzie i nie mamy obsługi pomiaru prądu na silnikach oprogramowanej, wówczas może dojść do przegrzania i przepalenia silników ew. sterowników. Uwaga! W warunkach domowych łatwo przez nieuwagę doprowadzić do pożaru, przed czym przestrzegam. Każdy sterownik napędu powinien posiadać zabezpieczenie prądowe i powinniśmy być świadomi mocy naszych silników oraz dostosować grubość przewodów do prądu przepływającego pezez nie, aby uniknąć wypadku.
Ważne również jest użycie akumulatorów lub baterii, których moc i masa jest dopasowania do naszej konstrukcji. Musicie uważać też na akumultory Li-Ion oraz Li-Po, bo ich niewłaśniwe użycie grozi wybuchem lub zagrożeniem dla Wazsego żdrowia. Dobierajcie baterie też do warunków np: nie wiele systemów zasiania akceptuje wodę lub wilgoć, co też warto uwzględnić
Co do softu ułatwiającego projektoranie zasilania i napędów to mamy kilka opcji w OPenSource, oto lista kilku.
Lista aplikacji dla elektroników:
Powyżej umieszczone programy wspierają nas w budowie elektroniki robota, nie tylko napędów, więc jak widać w świecie OpenSource mamy sporo gotowego softu dla projektów elektroniki w naszych robotach.
Zasadniczo nie mogę pominąć fraktu, czym zajmuje sie elektronika w robocie. Otóż jest to serce zasialania i sterownia robota, więc jest niezbędna i od jakości jej wykonania zależy powtarzalność zachowania robota, czyli gwarancja dobrej zabawy z naszym robotem.
O co chodzi w tej jakości ? Zasadniczo w tym, aby płytka PCB była wykonana dość praktycznie ew. stosujemy uniersalną płytką i gwarantujemy, że nie będzie zimnych lutów, czyli przerw w połączeniach lutowanychc. Dodatkowo warto zapewnić kondensator elektrolityczny przy każdym rozgałęzieniu zasilania, co zapewni filtrowanie skoków napięcia i zakłuceń, gdy nie mamy odrębnego zasilania do części napędowej i części cyfrowej. Bo zakładam, że posiadamy jedno źródło zasialani bez skomplikowanych konwerterów napięć.
Praktyczną opcją jest użycie Arduino
lub jego klonów z gotowymi sterownikami silników, które posiadają już wspomniane zabezpieczenia i nie musimy się tym przejmować.
Programowanie + mikrokontrolery jednoukładowe AVR z użyciem Arduino
Oczywiście implementując algorytmu działania naszego robota niezbędne jest dla nas środowisko. Oto mój sprawdzony w boju zestaw bibliotek, które pomagają mi na budowanie softu dla mikrokontrolerów jednoukładowych AVR i zapewniają kompilację bez posiadania dedykowanego środowiska.
Moje repozytorium na github.com z frameworkiem do zaabawy z AVR
Powyżej linkowany zestaw narzędzi uratował mnie, kiedy nie było jeszcze Arduino. Natomiast obecnie mamy świetnie rozwijający się projekt środowiska IDE do programowania mikrokontrolerów AVR, który ma szansę stac się wygodnym lkikalnym standardem i tego temu projektowi OpenSource życzę. Zachęcam Was do zgłębiana wiedzy o aplikacji Arduino oraz platformie Arduiono, gdyż jest to moim zdaniem najprostsze środowisko do nauki programowania sterowników robotów.
Społeczność Arduino IDE stale rozwija się i przybywają nowe bibliteki. Przykładem takiej biblioteki, którą przetestowałem mogę polecić do budoway amatorskiego robota jest pakiet Motor dla Arduino IDE, który pozwala nam na sterownie niezależnie dowolną ilośćią silników, poprzez sterownik fizyczny oparty o uład scalony L293.
Marcin Bielak, architekt i programista biznesowych aplikacji internetowych. Stawia od początku na wysoką jakość produktu. W programowaniu wykorzystuje: Open Source, Linux, Python, Golang, ECMAScript/JavaScript.