Tematem tej części jest podstawowa konfiguracja naszej platformy. Aby jeździć na rowerze trzeba dobrze przygotować bicykl i to jest właśnie część poświęcona smarowaniu łańcuchów i pompowaniu kół, tyle że w robotyce.
Zaczniemy od rozpakowania Jetsona z pudełka, a zakończymy na ustawieniu wygodnego dostępu do niego z poziomu komputera domowego.
Układ jest dostarczony z wgranym do pamięci flash systemem operacyjnym Linux4Tegra (L4T), który jest specjalnie skonfigurowaną dystrybucją Ubuntu w wersji 14.04. Wynika z tego, że tuż po wypakowaniu z pudełka powinniśmy być w stanie go włączyć.
Jedynym problemem jest fakt, że standardowa zawartość pudełka obejmuje wtyczkę zasilacza obowiązującą na rynku amerykańskim, dlatego przed pierwszym użyciem należy albo wybrać się do pobliskiego sklepu elektronicznego, albo użyć kabla z komputera stacjonarnego.
Podstawowa konfiguracja wymagana do wygodnej pracy z układem (przynajmniej do czasu ustawienia dostępu ssh)
Jesteśmy gotowi do włączenia komputera. Do celów demonstracyjnych proponuję na początek podłączyć monitor poprzez interfejs HDMI, myszkę, klawiaturę, ethernet oraz oczywiście zasilanie.
Taka konfiguracja pozwoli nam lepiej poznać co dostajemy razem z płytką. Po podłączeniu zasilania system wstaje do powłoki tekstowej linuxa i możemy się zalogować jako:
użytkownik: ubuntu
hasło: ubuntu
Mamy teraz dwie opcje przystosowania urządzenia do wygodnej pracy. Pierwsza z nich obejmuje pracę na fabrycznie wgranym systemie z jądrem w wersji R19 – zaletą tego rozwiązania jest natychmiastowa gotowość do pracy, zaś wadą brak wgranych narzędzi programistycznych.
Druga opcja polega na wgraniu najnowszej wersji systemu wraz z wszystkimi najważniejszymi narzędziami programistycznymi, co będzie się wiązało z dodatkową godziną poświęconą płytce, jednak zysk jest oczywisty i to jest droga, którą proponuję podążyć.
Opcja pierwsza - L4T R19
Na obecnym etapie L4T nie ma zainstalowanych sterowników karty graficznej. Dlatego, aby w pełni cieszyć się powłoką graficzną należy odpalić przygotowany przez firmę NVidia skrypt poprzez:
$ cd ~/NVIDIA-INSTALLER
$ sudo ./installer.sh
$ sudo reboot
Powyższy skrypt instaluje odpowiednią wersję biblioteki libglx.so i wraz z każdą próbą aktualizacji pakietów systemu będzie on nadpisywany. Aby temu zapobiec należy poinformować apt-get by zatrzymał uaktualnianie tego pakietu poprzez wydanie komendy:
ubuntu@tegra-ubuntu:~$ sudo apt-mark hold xserver-xorg-core
Instalacja zajmuje kilka sekund, a po restarcie można cieszyć się powłoką graficzną!
Jetson TK1 z bliska.
Opcja druga - L4T R21
Aby nie pozostawać w tyle za wciąż rozwijanym oprogramowaniem należy sprawdzić wersję systemu poprzez komendę:
Co oznacza, że posiadana przez nas wersja kernela to R19 i można ją uaktualnić do wersji R21. Aby to zrobić można albo dokonać operacja przeprogramowania płytki Jetson, albo przeprowadzić instalację toolkitu o nazwie JetPack, który jest paczką zbiorczą najważniejszych narzędzi przydatnych do programowania na naszej platformie:
zestaw narzędzi CUDA dla urządzenia HOST (komputer PC),
zestaw narzędzi CUDA 6.0 dla układu Jetson TK1,
OpenCV4Tegra, czyli biblioteka OpenCV przystosowana dla układu Jetson,
cuDNN, czyli biblioteka do Deep Learning'u na GPU,
VisionWorks, czyli zbiór bibliotek do przetwarzania obrazu na GPU.
Chcemy mieć możliwość programowania równoległego na płytce, zdecydujemy się więc na uaktualnienie jądra systemu przez instalację tego pakietu.
Aby tego dokonać potrzebujemy dostęp do innego komputera z systemem linux (będziemy go nazywać hostem), do którego podłączamy układ Jetson za pomocą przejściówki microUSB/USB.
Następnie instalacja pakietu będzie przebiegać z poziomu urządzenia typu host. Na początku ściągamy najnowszą wersję pakietu JetPack (podczas pisania artykułu była to wersja 2.0). Sama instalacja jest bardzo prosta i wystarczy ściągniętemu plikowi nadać prawa wykonywania poprzez komendę (w przypadku mojego komputera):
Następnie można uruchomić skrypt i postępować wedle wskazówek instalatora graficznego – warto wybrać opcję instalacji dedykowanej (custom), by samemu mieć możliwość wybrania, które elementy pakietu zostaną zainstalowane na płytce.
Aplikacja będzie wymagała kilkukrotnej interwencji w postaci wpisania hasła oraz zaakceptowania regulaminów, więc najlepiej jest zrobić sobie herbatę i nie odchodzić od komputera.
Uwaga!
Proces instalacji powoduje dodanie w hoście pakietów z architektury armhf potrzebnych do kompilacji skrośnej!
Będzie się to przejawiać tym, że po instalacji JetPacka na komputerze PC uaktualnienie pakietów będzie mogło skutkować błędem podobnym do następującego:
Blad http://ftp.agh.edu.pl trusty-updates /main armhf Packages Not Found [IP: 149.156.96.11 80]
Aby się upewnić, że dodana została obca architektura można wywołać polecenie:
Aby usunąć niepotrzebną już architekturę armhf należy po pierwsze odinstalować wszystkie pakiety obcej architektury. Można tego dokonać poprzez polecenie:
Pierwszą czynnością, jaką należy zrobić to zainstalować paczkę o nazwie "bash-completion" oraz "command-not-found". Życie użytkownika linuxa bez możliwości uzupełniania składni byłoby nic nie wartą egzystencją...
Zrobione! Możemy teraz pełnoprawnie używać linuxa na naszym Jetsonie! Na koniec warto jeszcze dobrze ustawić wszystkie zmienne środowiskowe związanych z ustawieniami regionalnymi:
Docelowo Jetson ma spełniać rolę sterownika robota mobilnego, dlatego warto zadbać o połączenie WiFi. Z tej strony wyczytałem, że najlepszym wyborem będzie karta Intel DB WIRELESS-AC 7260 2x2 AC+BT HMC. Trochę boli fakt, że kosztuje ona ponad 100 złotych.
Dodatkowo, aby w pełni wykorzystać jej potencjał należy dokupić anteny (oraz najprawdopodobniej kabel-przejściówkę ze złącza typu u.fl na rp-sma), co będzie kosztować ponad 200 złotych. Pocieszam się faktem, że docelowo chcę by robot był wystarczająco mobilny, by mógł pojeździć po kilku pomieszczeniach nie tracąc sygnału z routerem.
Zdjęcie karty Intel 7260 wraz z kablem/przejściówką u.fl <->rp-sma i antenkami.
Karta nie ma domyślnie wgranych sterowników w L4T (kernel jest okrojony w celu przyspieszenia działania), jednak instalacja jest prosta. Na początku podłączamy kartę i włączamy system, po czym sprawdzamy komunikaty startowe systemu związane ze sterownikami kart sieciowych Intel:
Możemy się cieszyć nowym urządzeniem sieciowym: wlan0. Spróbujmy w takim razie sprawdzić dostępne sieci:
ubuntu@tegra-ubuntu:~$ sudo nmcli dev wifi
Brak dostępnych sieci! Jest to oczywiście wina braku anteny, o której opowiadałem na początku rozdziału, dlatego należy podłączyć antenki i ponownie wyszukać dostępne sieci WiFi.
SSID BSSID MODE FREQ RATE SIGNAL SECURITY ACTIVE
'szarlotka' 74:DA:38:17:1F:AA Infrastructure 2412 MHz 54 MB/s 85 WPA2 no
'wang' 4E:B5:7D:70:DA:8B Infrastructure 2462 MHz 54 MB/s 55 WPA2 no
'DIRECT-SECLX-6260 Series' 32:CD:A7:91:A8:EB Infrastructure 2437 MHz 54 MB/s 40 WPA2 no
'Livebox-FCD9' D0:15:4A:F0:FC:D9 Infrastructure 2462 MHz 54 MB/s 17 WPA WPA2 no
'StaryMokotow3' 00:4F:62:1F:07:13 Infrastructure 2427 MHz 54 MB/s 44 WPA2 no
'013A' 6C:70:9F:E9:24:DA Infrastructure 2437 MHz 54 MB/s 25 WPA WPA2 no
'ACP_309' 58:6D:8F:38:20:E9 Infrastructure 2412 MHz 54 MB/s 22 WPA WPA2 no
'pwwifi2' 00:1D:E5:4D:31:85 Infrastructure 2462 MHz 54 MB/s 22 WPA2 Enterprise no
'AMX' 00:1D:E5:4D:31:86 Infrastructure 2462 MHz 54 MB/s 22 WPA no
'TP-LINK_Norbert' 00:25:86:D8:25:24 Infrastructure 2437 MHz 54 MB/s 40 WEP no
'konferencja' 00:1D:E5:4D:31:83 Infrastructure 2462 MHz 54 MB/s 24 WEP no
Spróbujemy się teraz połączyć z siecią o nazwie szarlotka o haśle zbitasmietana:
ubuntu@tegra-ubuntu:~$ sudo nmcli dev wifi connect szarlotka password zbitasmietana
Sprawdzamy poprawność połaczenia:
ubuntu@tegra-ubuntu:~$ iwconfig wlan0
wlan0 IEEE 802.11abgn ESSID:"szarlotka"
Mode:Managed Frequency:2.437 GHz Access Point: 88:1F:A1:32:8B:7A
Bit Rate=108 Mb/s Tx-Power=0 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:on
Link Quality=70/70 Signal level=-40 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:48 Missed beacon:0
Teraz możemy się cieszyć skonfigurowaną siecią WiFi. Nie musimy się martwić o połączenie. Przy następnym starcie systemu network manager sam próbuje znaleźć zapamiętane sieci WiFi i się do nich podłączyć.
Zestawiony układ wraz z zainstalowaną kartą WiFi Intel 7260.
Wygodny zdalny dostęp do Jetson TK1
W ramach tej sekcji omówimy kilka zabiegów usprawniających zdalny dostęp do komputera. Nie znajdziemy tutaj nic robotycznego, tylko czyste sztuczki informatyczne.
Pierwsza rzecz, to ustawienie przydzielania stałego IP dla Jetsona w routerze. W tym celu należy zalogować się do routera i w zakładce DHCP > Address Reservation wypełnić odpowiednie dane pamiętając, że adres mac karty sieciowej można sprawdzić poprzez polecenie ifconfig w części HWaddr. Następnie już na komputerze PC, z którego będziemy łączyć się z Jetsonem możemy edytować plik /etc/hosts, wedle schematu:
127.0.0.1 localhost
127.0.1.1 monster
192.168.0.120 raspberrypi
192.168.0.111 atom
192.168.0.103 laptop
192.168.0.106 jetson
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Mój komputer nazywa się monster (co widać było już wcześniej). Mam dodane 4 komputery (raspberrypi, atom, laptop, jetson). Dzięki temu, zamiast pamiętać IP komputerka będziemy mogli używać przy łączeniu się przez ssh nazwy, która coś dla nas znaczy - w tym przypadku jetson.
Należy zauważyć, że każdy połączony do naszego routera może bez problemu znaleźć IP naszego komputerka, więc zalogowanie do niego to formalność.
Nawet jeżeli zmieniliśmy hasło użytkownika, to opieranie pewności bezpieczeństwa naszego komputerka o trudność złamania hasła użytkownika jest lekkomyślnością (lub naiwnością), dlatego proponuję wyłączyć możliwość logowania przez ssh z wykorzystaniem hasła.
Lepiej włączyć logowanie kluczem ssh. W tym celu edytujemy plik /etc/ssh/sshd_config w Jetsonie zmieniając wartość dwóch linijek (ewentualnie odkomentowując je):
PasswordAuthentication yes
UsePAM yes
Teraz należy wygenerować klucz ssh na naszej maszynie PC. Można to zrealizować poleceniem:
daniel@monster:~$ ssh-keygen -t dsa
Jeżeli już został wygenerowany klucz to kopiujemy zawartość pliku ~/.ssh/id_dsa.pub z maszyny PC do naszego komputerka do pliku ~/.ssh/authorized_keys. Voil'a! Teraz już nikt nie połączy sie z robotem bez Twojego zezwolenia!
To jeszcze nie wszystko - aby zmaksymalizować przyjemność łączenia się z robotem (będziemy to robić setki razy!) można na komputerze PC dodać do pliku ~/.bashrc kilka aliasów:
alias ssh-x='ssh -Y -C -o CompressionLevel=9 -c arcfour,blowfish-cbc'
alias jetson='ssh ubuntu@jetson'
alias jetsonX='ssh-x ubuntu@jetson'
Dzięki czemu wpisując w terminalu polecenie jetson połączymy się z naszym komputerkiem po ssh w zwykłym trybie, zaś wpisując jetsonX połączymy się w trybie przekazywania aplikacji w trybie graficznych (można wygodnie odpalić qtcreator!).
Wygodniej już się nie da - nic tylko łączyć się zdalnie z naszym komputerkiem!
Gotowe przygotowane stanowisko do dalszej pracy.
Podsumowanie
Udało nam się przygotować platformę Jetson TK1 do dalszej pracy. Nie było to skomplikowane, jednak wymagało pewnych nieoczywistych operacji, których szukanie zabrało mi sporo czasu. Mam nadzieję, że zaoszczędzicie dzięki nim odrobinę swojego, który będziecie mogli wykorzystać tam, gdzie się o wiele bardziej przyda, czyli w części trzeciej.
Dołącz do 30 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY na bazie Arduino i Raspberry Pi.
To nie koniec, sprawdź również
Przeczytaj powiązane artykuły oraz aktualnie popularne wpisy lub losuj inny artykuł »
Dołącz do 30 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY z Arduino i RPi.
Trwa ładowanie komentarzy...