Dokumentacja projektu Capo¶
Niniejsza dokumentacja zawiera opis przygotowania robota do pracy w laboratorium.
Panda¶
Robot Panda, dostępny w laboratorium Robolab, posiada następujące komponenty:
- silniki Polulu obsługiwane przez sterowniki silników Roboclaw
- czujnik ruchu Ninedof
- skaner laserowy Hokuyo (opcjonalnie)
- dodatkowe elementy, np. servo silniki Maestro (opcjonalnie)
- komputer Pandaboard
- baterię, okablowanie, obudowę i napęd
Kolejne rozdziały opisują, jak zainstalować system operacyjny i przygotować robota do pracy w laboratorium.
Wymagania¶
Środowisko pracy¶
Informacja
Zakłada się, że wgranie systemu na kartę odbywa się z poziomu systemu Linux. Modyfikowanie karty możliwe jest tylko z wykorzystaniem systemu Linux. Modyfikowanie odbywać się może po zamontowaniu partycji systemowej, na której wykorzystywany jest system plików ext4
.
Informacja
Na potrzeby instalacji systemu na karcie, przygotowana została maszyna wirtualna RoboLab.
Wykorzystywane technologie i narzędzia¶
Do wykonania poniższej instrukcji wymagana jest znajomość:
- obsługi podstawowych poleceń w powłoce systemu Linux, jakimi są polecenia
cd
,ls
,tar
,gz
, etc. - obsługi edytora tekstu, jak na przykład
vim
czynano
- obsługi menadżera pakietów systemu Ubuntu
aptitude
lubapt-get
- obsługi aplikacji używanej do komunikacji z PandaBoard z wykorzystaniem portu komunikacji szeregowej
- obsługi zdalnej konsoli SSH i generowania kluczy SSH z wykorzystaniem Putty (windows) lub
ssh
(Linux)
W celu przeprowadzenia procesu instalacji systemu potrzebne są:
- karta SD o pojemności minimum 8 GB
- czytnik kart SD
- w przypadku posługiwania się maszyną wirtualną Robolab wymagany jest czytnik kart USB
- port szeregowy (instnieje możliwość instalacji bez użycia portu szeregowego)
- w przypadku posługiwania się maszyną wirtualną Robolab wymagany jest konwenter USB portu szeregowego
- płyta główna PandaBoard z zasilaczem prądu stałego o napięciu 5 V i natężeniu ok. 2.5 A
- router sieciowy z WiFi
- monitor z wejściem HDMI oraz klawiatura na USB lub kabel komunikacji szeregowej RS-232 DE-9 (opcjonalnie)
- stosowne przewody do komunikacji sieciowej
Ostrzeżenie
Zwróć uwagę na wersję PandaBoard, która jest opisana na etykiecie umieszczonej na spodzie płytki. Poniższa instrukcja opisuje instalację systemu na PandaBoard w wersji ES Rev B2 oraz ES Rev B3.
Przygotowanie do uruchomienia¶
Wgranie obrazu systemu na kartę¶
- Pobierz obraz Ubuntu Server 12.04 amrhf+omap4 dla PandaBoard ze strony Ubuntu.
Zobacz także
Więcej informacji na temat wsparcia Ubuntu dla płyt opartych o OMAP dostępne jest na stronie ARM/OMAP.
- Sprawdź sumy kontrolne md5 z dostępnymi na serwerze obrazów.
- Sprawdź czy karta SD jest w trybie do zapisu.
Informacja
Przełącznik zapisu powinien być przesunięty do góry, gdzie u góry karty znajdują są styki.
- Umieść kartę w czytniku kart komputera.
- Wywołaj jedno z poniższych zestawów poleceń:
gunzip -c ubuntu-12.04-preinstalled-server-armhf+omap4.img.gz | sudo dd bs=1M of=/dev/<device name>
sync
lub:
sudo sh -c 'zcat ubuntu-12.04-preinstalled-server-armhf+omap4.img.gz > /dev/<device name>'
sync
<device name
powinno być zastąpione nazwą urządzenia blokowego.
- Wyciągnij kartę z czytnika kart komputera.
- Umieść kartę w czytniku kart PandaBoard.
Instalacja i konfiguracja systemu¶
Instalację systemu można przeprowadzić na dwa sposoby:
Oficjalna metoda¶
Pierwsze uruchomienie instalacyjne¶
- Uruchom aplikację do pracy z portem szeregowym, np.
miniterm
lubminicom
.
Informacja
PandaBoard udostępnia port komunikacji szeregowej. Port pracuje z szybkością 115200bps.
- Podłącz PandaBoard do komputera posiadającego port komunikacji szeregowej.
- Uruchom płytkę PandaBoard.
Pierwsze ładowanie systemu spowoduje, że partycja z systemem rozszerzy się do wielkości karty. Nie należy przerywać uruchamiania systemu. Należy czekać do momentu, gdy jedna z diod na płytce będzie mrugała cyklicznie.
W trakcie pierwszego uruchamiania, w oknie aplikacji użytej do komunikacji z płytką, pojawiać się będą komunikaty o procesie instalacji.
(local) ➜ sudo miniterm.py -b 115200 -p /dev/ttyUSB3
--- Miniterm on /dev/ttyUSB3: 115200,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
U-Boot SPL 2011.12 (Apr 02 2012 - 18:13:04)
Texas Instruments OMAP4460 ES1.1
OMAP SD/MMC: 0
reading u-boot.img
reading u-boot.bin
mkimage signature not found - ih_magic = ea000014
Assuming u-boot.bin ..
reading u-boot.bin
U-Boot 2011.12 (Apr 02 2012 - 18:13:04)
CPU : OMAP4460 ES1.1
Board: OMAP4 Panda
I2C: ready
DRAM: 1 GiB
WARNING: Caches not enabled
MMC: OMAP SD/MMC: 0
Using default environment
In: serial
Out: serial
Err: serial
Net: No ethernet found.
checking for preEnv.txt
reading preEnv.txt
** Unable to read "preEnv.txt" from mmc 0:1 **
Hit any key to stop autoboot: 0
reading uEnv.txt
** Unable to read "uEnv.txt" from mmc 0:1 **
reading boot.scr
350 bytes read
Loaded script from boot.scr
Running bootscript from mmc0 ...
## Executing script at 82000000
reading uImage
4434784 bytes read
reading uInitrd
4314202 bytes read
## Booting kernel from Legacy Image at 80000000 ...
Image Name: Ubuntu Kernel
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 4434720 Bytes = 4.2 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 81600000 ...
Image Name: Ubuntu Initrd
Image Type: ARM Linux RAMDisk Image (gzip compressed)
Data Size: 4314138 Bytes = 4.1 MiB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Resizing root partition ...
Disk /dev/mmcblk0: 3790 cylinders, 128 heads, 32 sectors/track
Old situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/mmcblk0p1 * 32 147455 147424 c W95 FAT32 (LBA)
/dev/mmcblk0p2 147456 3104767 2957312 83 Linux
/dev/mmcblk0p3 0 - 0 0 Empty
/dev/mmcblk0p4 0 - 0 0 Empty
New situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/mmcblk0p1 * 32 147455 147424 c W95 FAT32 (LBA)
/dev/mmcblk0p2 147456 15523839 15376384 83 Linux
/dev/mmcblk0p3 0 - 0 0 Empty
/dev/mmcblk0p4 0 - 0 0 Empty
Successfully wrote the new partition table
Re-reading the partition table ...
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
Resizing root filesystem. Please wait, this will take a moment ...
Checking filesystem before resizing...
Resizing, please wait...
W trakcie pierwszego uruchomienia następuje rozszerzenie partycji systemowej do rozmiarów użytej karty.
Enabling serial console login
Setting up fstab
Setting up swap
Enabling oem-config
Writing flash-kernel configuration
Creating bootloader configuration
Rebooting into configuration session
[ 94.273376] Restarting system.
Drugie uruchomienie konfiguracyjne¶
Po pierwszym uruchomieniu, następuje drugie uruchomienie systemu z kreatorem konfiguracji.
U-Boot SPL 2011.12 (Apr 02 2012 - 18:13:04)
Texas Instruments OMAP4460 ES1.1
OMAP SD/MMC: 0
reading u-boot.img
reading u-boot.bin
mkimage signature not found - ih_magic = ea000014
Assuming u-boot.bin ..
reading u-boot.bin
U-Boot 2011.12 (Apr 02 2012 - 18:13:04)
CPU : OMAP4460 ES1.1
Board: OMAP4 Panda
I2C: ready
DRAM: 1 GiB
WARNING: Caches not enabled
MMC: OMAP SD/MMC: 0
Using default environment
In: serial
Out: serial
Err: serial
Net: No ethernet found.
checking for preEnv.txt
reading preEnv.txt
** Unable to read "preEnv.txt" from mmc 0:1 **
Hit any key to stop autoboot: 0
reading uEnv.txt
** Unable to read "uEnv.txt" from mmc 0:1 **
reading boot.scr
373 bytes read
Loaded script from boot.scr
Running bootscript from mmc0 ...
## Executing script at 82000000
reading uImage
4434784 bytes read
reading uInitrd
4314202 bytes read
## Booting kernel from Legacy Image at 80000000 ...
Image Name: Ubuntu Kernel
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 4434720 Bytes = 4.2 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 81600000 ...
Image Name: Ubuntu Initrd
Image Type: ARM Linux RAMDisk Image (gzip compressed)
Data Size: 4314138 Bytes = 4.1 MiB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
fsck from util-linux 2.20.1
/dev/mmcblk0p2: clean, 29269/961536 files, 1651666/7688192 blocks
* Starting system logging daemon [ OK ]
* Starting load fallback graphics devices [ OK ]
* Stopping load fallback graphics devices [ OK ]
...
Po załadowaniu systemu, pojawia się kreator konfiguracji systemu.
Pierwszym krokiem jest wybranie języka:
System Configuration
┌──────────────────────────┤ Select a language ├──────────────────────────┐
│ Choose the language to be used for the installation process. The │
│ selected language will also be the default language for the installed │
│ system. │
│ │
│ Language: │
│ │
│ Bulgarian - Български ↑ │
│ Catalan - Català ▒ │
│ Chinese (Simplified) - 中文(简体) ▮ │
│ Chinese (Traditional) - 中文(繁體) ▒ │
│ Croatian - Hrvatski ▒ │
│ Czech - Čeština ▒ │
│ Danish - Dansk ▒ │
│ Dutch - Nederlands ▒ │
│ English - English ↓ │
│ │
│ │
│ <Ok> <Cancel> │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Kolejnym krokiem jest wybranie kraju:
System Configuration
┌────────────────────────┤ Select your location ├─────────────────────────┐
│ The selected location will be used to set your time zone and also for │
│ example to help select the system locale. Normally this should be the │
│ country where you live. │
│ │
│ This is a shortlist of locations based on the language you selected. │
│ Choose "other" if your location is not listed. │
│ │
│ Country, territory or area: │
│ │
│ Nigeria ↑ │
│ Philippines ▒ │
│ Singapore ▒ │
│ South Africa ▮ │
│ United Kingdom ▒ │
│ United States ↓ │
│ │
│ │
│ <Ok> <Cancel> │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Wybierając other
, kolejnym krokiem jest wybranie kontynentu:
System Configuration
┌────────────────────────┤ Select your location ├─────────────────────────┐
│ The selected location will be used to set your time zone and also for │
│ example to help select the system locale. Normally this should be the │
│ country where you live. │
│ │
│ Select the continent or region to which your location belongs. │
│ │
│ Continent or region: │
│ │
│ Asia ↑ │
│ Atlantic Ocean ▒ │
│ Caribbean ▒ │
│ Central America ▒ │
│ Europe ▮ │
│ Indian Ocean ▒ │
│ North America ↓ │
│ │
│ │
│ <Ok> <Cancel> │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Wybierając Europe
, kolejnym krokiem jest ponowne wybranie kraju:
System Configuration
┌─────────────────────────┤ Select your location ├─────────────────────────┐
│ The selected location will be used to set your time zone and also for │
│ example to help select the system locale. Normally this should be the │
│ country where you live. │
│ │
│ Listed are locations for: Europe. Use the <Go Back> option to select a │
│ different continent or region if your location is not listed. │
│ │
│ Country, territory or area: │
│ │
│ Poland ↑ │
│ Portugal ▒ │
│ Romania ▒ │
│ Russian Federation ▮ │
│ San Marino ▒ │
│ Serbia ↓ │
│ │
│ │
│ <Ok> <Cancel> │
│ │
└──────────────────────────────────────────────────────────────────────────┘
Kolejnym krokiem jest wybranie ustawień lokalizacji:
System Configuration
┌──────────────────────────┤ Configure locales ├───────────────────────────┐
│ There is no locale defined for the combination of language and country │
│ you have selected. You can now select your preference from the locales │
│ available for the selected language. The locale that will be used is │
│ listed in the second column. │
│ │
│ Country to base default locale settings on: │
│ │
│ Ireland - en_IE.UTF-8 ↑ │
│ New Zealand - en_NZ.UTF-8 ▒ │
│ Nigeria - en_NG ▒ │
│ Philippines - en_PH.UTF-8 ▒ │
│ Singapore - en_SG.UTF-8 ▒ │
│ South Africa - en_ZA.UTF-8 ▮ │
│ United Kingdom - en_GB.UTF-8 ▒ │
│ United States - en_US.UTF-8 ↓ │
│ │
│ │
│ <Ok> <Cancel> │
│ │
└──────────────────────────────────────────────────────────────────────────┘
Kolejnym krokiem jest wybranie strefy czasowej:
System Configuration
┌───────────────────────────┤ Where are you? ├────────────────────────────┐
│ │
│ Based on your country, your time zone is Europe/Warsaw. │
│ │
│ If this is not correct, you may select from a full list of time zones │
│ instead. │
│ │
│ Is this time zone correct? │
│ │
│ <Yes> <No> │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Kolejnym krokiem jest ustawienie strefy czasowej zegara płytki:
System Configuration
┌────────────────────────────┤ Where are you? ├─────────────────────────────┐
│ │
│ System clocks are generally set to Coordinated Universal Time (UTC). The │
│ operating system uses your time zone to convert system time into local │
│ time. This is recommended unless you also use another operating system │
│ that expects the clock to be set to local time. │
│ │
│ Is the system clock set to UTC? │
│ │
│ <Yes> <No> │
│ │
└───────────────────────────────────────────────────────────────────────────┘
Kolejnym krokiem jest ustawienie pełnej nazwy użytkownika:
System Configuration
┌─────────────────────────────┤ Who are you? ├──────────────────────────────┐
│ A user account will be created for you to use instead of the root │
│ account for non-administrative activities. │
│ │
│ Please enter the real name of this user. This information will be used │
│ for instance as default origin for emails sent by this user as well as │
│ any program which displays or uses the user's real name. Your full name │
│ is a reasonable choice. │
│ │
│ Full name for the new user: │
│ │
│ _________________________________________________________________________ │
│ │
│ <Ok> <Cancel> │
│ │
└───────────────────────────────────────────────────────────────────────────┘
Kolejnym krokiem jest ustawienie nazwy użytkownika:
System Configuration
┌─────────────────────────────┤ Who are you? ├──────────────────────────────┐
│ Select a username for the new account. Your first name is a reasonable │
│ choice. The username should start with a lower-case letter, which can be │
│ followed by any combination of numbers and more lower-case letters. │
│ │
│ Username for your account: │
│ │
│ robolab__________________________________________________________________ │
│ │
│ <Ok> <Cancel> │
│ │
└───────────────────────────────────────────────────────────────────────────┘
Kolejnym krokiem jest ustawienie hasła dla nowego użytkownika:
System Configuration
┌─────────────────────────┤ Who are you? ├─────────────────────────┐
│ A good password will contain a mixture of letters, numbers and │
│ punctuation and should be changed at regular intervals. │
│ │
│ Choose a password for the new user: │
│ │
│ ________________________________________________________________ │
│ │
│ <Ok> <Cancel> │
│ │
└──────────────────────────────────────────────────────────────────┘
Następnym krokiem jego powtórzenie.
Kolejnym krokiem jest ustawienie domyślnego interfejsu sieciowego:
System Configuration
┌─────────────────────────┤ Network configuration ├─────────────────────────┐
│ Your system has multiple network interfaces. Choose the one to use as │
│ the primary network interface during the installation. If possible, the │
│ first connected network interface found has been selected. │
│ │
│ Primary network interface: │
│ │
│ eth0: Ethernet │
│ wlan0: Wireless ethernet (802.11x) │
│ │
│ │
│ <Ok> <Cancel> │
│ │
└───────────────────────────────────────────────────────────────────────────┘
Należy wybrać eth0
. Po wyborze nastąpi testowanie łącza przewodowego. Nie jest wymagane, by ono się zakończyło sukcesem:
System Configuration
┌─────────────────────────┤ Network configuration ├─────────────────────────┐
│ │
│ Network autoconfiguration failed │
│ │
│ Your network is probably not using the DHCP protocol. Alternatively, the │
│ DHCP server may be slow or some network hardware is not working │
│ properly. │
│ │
│ <Ok> │
│ │
└───────────────────────────────────────────────────────────────────────────┘
Jeśli nie zakończyło się ono sukcesem, to należy manualnie ustawić adres sieciowy:
System Configuration
┌─────────────────────────┤ Network configuration ├─────────────────────────┐
│ From here you can choose to retry DHCP network autoconfiguration (which │
│ may succeed if your DHCP server takes a long time to respond) or to │
│ configure the network manually. Some DHCP servers require a DHCP │
│ hostname to be sent by the client, so you can also choose to retry DHCP │
│ network autoconfiguration with a hostname that you provide. │
│ │
│ Network configuration method: │
│ │
│ Retry network autoconfiguration │
│ Retry network autoconfiguration with a DHCP hostname │
│ Configure network manually │
│ │
│ Do not configure the network at this time │
│ │
│ │
│ <Ok> <Cancel> │
│ │
└───────────────────────────────────────────────────────────────────────────┘
System Configuration
┌────────────────────────┤ Network configuration ├─────────────────────────┐
│ The IP address is unique to your computer and is either: │
│ │
│ * Four numbers separated by periods; or │
│ │
│ * Blocks of hexadecimal characters separated by colons (IPv6). │
│ │
│ You can also optionally specify a CIDR netmask. │
│ │
│ If you don't know what to use here, consult your network administrator. │
│ │
│ IP address: │
│ │
│ 192.168.1.50____________________________________________________________ │
│ │
│ <Ok> <Cancel> │
│ │
└──────────────────────────────────────────────────────────────────────────┘
System Configuration
┌───────────────────────┤ Network configuration ├───────────────────────┐
│ The netmask is used to determine which machines are local to your │
│ network. Consult your network administrator if you do not know the │
│ value. The netmask should be entered as four numbers separated by │
│ periods. │
│ │
│ Netmask: │
│ │
│ 255.255.255.0________________________________________________________ │
│ │
│ <Ok> <Cancel> │
│ │
└───────────────────────────────────────────────────────────────────────┘
System Configuration
┌────────────────────────┤ Network configuration ├─────────────────────────┐
│ The gateway is an IP address (four numbers separated by periods) that │
│ indicates the gateway router, also known as the default router. All │
│ traffic that goes outside your LAN (for instance, to the Internet) is │
│ sent through this router. In rare circumstances, you may have no │
│ router; in that case, you can leave this blank. If you don't know the │
│ proper answer to this question, consult your network administrator. │
│ │
│ Gateway: │
│ │
│ 192.168.1.1_____________________________________________________________ │
│ │
│ <Ok> <Cancel> │
│ │
└──────────────────────────────────────────────────────────────────────────┘
System Configuration
┌─────────────────────────┤ Network configuration ├─────────────────────────┐
│ The name servers are used to look up host names on the network. Please │
│ enter the IP addresses (not host names) of up to 3 name servers, │
│ separated by spaces. Do not use commas. The first name server in the │
│ list will be the first to be queried. If you don't want to use any name │
│ server, just leave this field blank. │
│ │
│ Name server addresses: │
│ │
│ 192.168.1.1______________________________________________________________ │
│ │
│ <Ok> <Cancel> │
│ │
└───────────────────────────────────────────────────────────────────────────┘
Ostrzeżenie
Powyższa konfiguracja powoduje przypisanie adresu 192.168.1.50
w sieci 192.168.1.0/24
do interfejsu sieci przewodowej znajdującego się na płytce. Dodatkowo, ustawiona jest brama domyślna o adresie 192.168.1.1
oraz serwer nazw DNS 192.168.1.1
. W twoim przypadku może być ona inna. Proszę, zwróć uwagę na adresację Twojej sieci.
Kolejnym krokiem jest ustawienie nazwy systemu oraz domeny:
System Configuration
┌─────────────────────────┤ Network configuration ├─────────────────────────┐
│ Please enter the hostname for this system. │
│ │
│ The hostname is a single word that identifies your system to the │
│ network. If you don't know what your hostname should be, consult your │
│ network administrator. If you are setting up your own home network, you │
│ can make something up here. │
│ │
│ Hostname: │
│ │
│ _________________________________________________________________________ │
│ │
│ <Ok> <Cancel> │
│ │
└───────────────────────────────────────────────────────────────────────────┘
System Configuration
┌─────────────────────────┤ Network configuration ├─────────────────────────┐
│ The domain name is the part of your Internet address to the right of │
│ your host name. It is often something that ends in .com, .net, .edu, or │
│ .org. If you are setting up a home network, you can make something up, │
│ but make sure you use the same domain name on all your computers. │
│ │
│ Domain name: │
│ │
│ _________________________________________________________________________ │
│ │
│ <Ok> <Cancel> │
│ │
└───────────────────────────────────────────────────────────────────────────┘
Kolejnym krokiem jest wybranie podstawowych funkcji systemu:
System Configuration
┌───────────────────────┤ Software selection ├────────────────────────┐
│ You can choose to install one or more of the following predefined │
│ collections of software. │
│ │
│ Choose software to install: │
│ │
│ [ ] Basic Ubuntu server │
│ [*] OpenSSH server │
│ [ ] DNS server │
│ [ ] LAMP server │
│ [ ] Mail server │
│ [ ] PostgreSQL database │
│ [ ] Print server │
│ [ ] Samba file server │
│ [ ] Tomcat Java server │
│ [ ] Virtual Machine host │
│ │
│ │
│ <Ok> <Cancel> │
│ │
└─────────────────────────────────────────────────────────────────────┘
Należy wybrać OpenSSH server
. Nastąpi instalacja serwera SSH, ustawienie dodatkowych parametrów oraz usunięcie zbędnych pakietów. Po zakończonym procesie, wyświetli się prośba o podanie nazwy użytkownika i hasło:
Ubuntu 12.04 LTS hostname ttyO2
hostname login: username
Password:
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-1412-omap4 armv7l)
* Documentation: https://help.ubuntu.com/
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
username@hostname:~$
Aktualizacja oprogramowania¶
Czyszczenie pozostałych pakietów¶
Po pierwszym uruchomieniu, należy wyczyścić pozostałe po instalacji pakiety poleceniem sudo aptitude install
:
username@hostname:~$ sudo aptitude install
The following packages will be REMOVED:
apt-clone{u} archdetect-deb{u} bc{u} bogl-bterm{u} btrfs-tools{u}
dmraid{u} dpkg-repack{u} kpartx{u} kpartx-boot{u} libdebconfclient0{u}
libdebian-installer4{u} libdmraid1.0.0.rc16{u} libicu48{u} os-prober{u}
python-pyicu{u} rdate{u} realpath{u} reiserfsprogs{u}
0 packages upgraded, 0 newly installed, 18 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 24.6 MB will be freed.
Do you want to continue? [Y/n/?] y
(Reading database ... 24784 files and directories currently installed.)
Removing apt-clone ...
Removing archdetect-deb ...
Removing bc ...
Removing bogl-bterm ...
Removing btrfs-tools ...
Removing dmraid ...
update-initramfs: deferring update (trigger activated)
Removing dpkg-repack ...
Removing kpartx-boot ...
update-initramfs: deferring update (trigger activated)
Removing kpartx ...
Removing libdebconfclient0 ...
Removing libdebian-installer4 ...
Removing libdmraid1.0.0.rc16 ...
Removing python-pyicu ...
Removing libicu48 ...
Removing os-prober ...
Removing rdate ...
Removing realpath ...
Removing reiserfsprogs ...
Processing triggers for man-db ...
Processing triggers for install-info ...
Processing triggers for initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-3.2.0-1412-omap4
Using u-boot partition: /dev/mmcblk0p1
Creating backups of boot files ... done.
Generating kernel u-boot image... done.
Generating Initramfs u-boot image... done.
Generating u-boot configuration from /boot/boot.script... done.
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Instalacja sieci bezprzewodowej¶
Do obsługi sieci bezprzewodowej należy zainstalować pakiet wpasupplicant
:
username@hostname:~$ sudo aptitude install wpasupplicant
The following NEW packages will be installed:
libpcsclite1{a} wpasupplicant
0 packages upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/432 kB of archives. After unpacking 950 kB will be used.
Do you want to continue? [Y/n/?] y
Selecting previously unselected package libpcsclite1.
(Reading database ... 24571 files and directories currently installed.)
Unpacking libpcsclite1 (from .../libpcsclite1_1.7.4-2ubuntu2_armhf.deb) ...
Selecting previously unselected package wpasupplicant.
Unpacking wpasupplicant (from .../wpasupplicant_0.7.3-6ubuntu2_armhf.deb) ...
Processing triggers for man-db ...
Setting up libpcsclite1 (1.7.4-2ubuntu2) ...
Setting up wpasupplicant (0.7.3-6ubuntu2) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Po instalacji pakietu wpasupplicant
, należy zmienić plik /etc/network/interfaces
:
sudo nano /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.50
netmask 255.255.255.0
auto wlan0
iface wlan0 inet dhcp
pre-up ifconfig wlan0 hw ether de:ad:be:ef:00:10
wpa-ssid "SSID"
wpa-psk "PSK"
Po zapisaniu zmian, wywołać polecenia sudo ifconfig eth0 down
i sudo ifup wlan0
. Następnie sprawdzić połączenie z siecią.
Informacja
W celu poprawnego działania sieci bezprzewodowej wymagane jest ustawienie adresu MAC kart bezprzewodowej.
Ostrzeżenie
Zwróć uwagę na fakt, że adresacja interfejsu sieci przewodowej została zmieniona, tak aby na dwóch interfejsach karty przewodowej i bezprzewodowej nie było takiej samej adresacji sieci.
Informacja
Powyższe ustawienia sieci bezprzewodowej dotyczą sieci bezprzewodowej robolab w laboratorium. Aktualne hasło do sieci robolab udostępnione jest w laboratorium, w ogłoszeniach znajdujących się w widocznym miejscu. Adresy przydzielane są w oparciu o adresy MAC urządzeń bezprzewodowych. W sieci laboratoryjnej prefiksem MAC jest de:ad:be:ef:00:**
. Ostatnie dwa znaki heksadecymalne określają przypisywany adres IP, według następującego schematu:
de:ad:be:ef:00:00 - 192.168.2.200
de:ad:be:ef:00:01 - 192.168.2.201
...
de:ad:be:ef:00:09 - 192.168.2.209
de:ad:be:ef:00:10 - 192.168.2.210
Aktualizacja systemu¶
Ostrzeżenie
Możliwe jest wykonanie aktualizacji do Ubuntu 14.04.1 LTS przy pomocy polecenia do-release-upgrade
. Ze względu na problemy w obsłudze sterowników dla urządzeń Ninedof oraz Roboclaw jest to niezalecane. Można pominąć poniższe kroki do kroku aktualizacji_ pakietów.
Informacja
Proces aktualizacji przy pomocy do-release-upgrade
może trwać kilka minut. Z wykorzystaniem screen możliwe jest odłączenie się od konsoli poprzez kombinacje klawiszy [Ctrl]+[a]
i [d]
. Ponownie podłączenie następuje poprzez wywołanie polecenia screen -r
.
Ostrzeżenie
Proszę monitorować stan aktualizacji. W trakcie aktualizacji pojawiać się będą pytania do akceptacji lub nie. Po zakończeniu procesu aktualizacji system zostanie uruchomiony ponownie, co wymaga potwierdzenia.
Zobacz także
Miejscem, gdzie znajdują się pakiety używane na PandaBoard jest repozytorium http://ports.ubuntu.com/pool/main/l/linux-ti-omap4/.
Po wykonaniu aktualizacji przy pomocy do-release-upgrade
, system nie wspiera poprawnie sieci bezprzewodowej. Należy dodać do repozytoriów apt repozytorium omap. Następnie wykonać aktualizację listy pakietów i instalację następujących pakietów:
aptitude install -y software-properties-common
add-apt-repository ppa:tiomap-dev/release
aptitude update
touch /boot/initrd.img-3.13.0-37-generic
aptitude install linux-headers-omap linux-image-omap linux-omap
Ostrzeżenie
Instalacja jądra systemu wymaga obecności plików w katalogu /boot/
. W razie ich braku, wystarczy stworzyć brakujący plik przy pomocy polecenia touch
.
- Wykonaj
reboot
.
Aktualizacja pakietów¶
Polecam wyłączyć opcję instalowania polecanych pakietów w aptitude:
- Uruchomić
aptitude
- Skrót klawiszowy
[Ctrl]+[t]
- Wybór menu
Options
→Preferences
- Odznaczyć
Install recommended packages automatically
- Wyłączyć aptitude przy pomocy
[Ctrl]+[q]
- Wykonaj aktualizację i instalację dodatkowych pakietów:
aptitude update
touch /boot/initrd.img-3.2.0-1455-omap4
aptitude full-upgrade
aptitude install -y
aptitude install -y wireless-crda wireless-regdb # dodatkowe pakiety do obsługi sieci bezprzewodowej
aptitude install -y htop psmisc mc unzip bash-completion cpufrequtils ntp # dodatkowe narzędzia
aptitude install -y byobu tmux
Ostrzeżenie
Instalacja jądra systemu wymaga obecności plików w katalogu /boot/
. W razie ich braku, wystarczy stworzyć brakujący plik przy pomocy polecenia touch
.
- Dodaj do pliku
/etc/rc.local
linijkęiw reg set PL
. - Wyłącz system przy pomocy polecenia
sudo poweroff
.
Aktualizacja bootloadera¶
Aby karta uruchamiała się na płytkach w wersji B3, należy pobrać ostatnią wersję bootloadera u-boot i manualnie go skompilować według poniższej instrukcji. Do wykonania tych poleceń wymagane jest zainstalowanie dodatkowego oprogramowania:
- make
- g++
- gcc
- u-boot-tools
- g++-arm-linux-gnueabihf
- gcc-arm-linux-gnueabihf
- binutils-arm-linux-gnueabihf
Polecenie do wywołania: apt-get install make g++ gcc u-boot-tools g++-arm-linux-gnueabihf gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabihf
. Dla niektórych systemów, wymagana jest zmiana wersji systemu. Dla systemu Debian, aktualna wersja testing
posiada wymienione pakiety.
$ wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2
[..]
$ tar xf u-boot-latest.tar.bz2
$ cd u-boot-*
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- omap4_panda_config
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/zconf.lex.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
[..]
$ cat <<EOF > boot.script
fatload mmc 0:1 0x80000000 uImage
setenv bootargs rw vram=32M fixrtc mem=1G@0x80000000 root=/dev/mmcblk0p2 console=ttyO2,115200n8 rootwait
bootm 0x80000000
EOF
$ mkimage -A arm -T script -C none -n "Boot Image" -d boot.script boot.scr
Image Name: Boot Image
Created: Fri Nov 20 17:48:09 2015
Image Type: ARM Linux Script (uncompressed)
Data Size: 164 Bytes = 0.16 kB = 0.00 MB
Load Address: 00000000
Entry Point: 00000000
Contents:
Image 0: 156 Bytes = 0.15 kB = 0.00 MB
$ mkimage -A arm -T script -C none -n "Boot Image" -d boot.script boot.scr
Wynikiem wykonania tych operacji będą pliki, które należy umieścić na pierwszej partycji zamontowanej karty:
boot.scr
boot.script
MLO
u-boot.bin
u-boot.img
Po podmianie tych plików, karta może być używana na obu typach płyt PandaBoard B2 i B3.
Post-konfiguracja¶
- Dodaj do
/etc/modules
wpis:
...
i2c-dev
- Zmień
/etc/init.d/cpufrequtils
:
...
GOVERNOR="performance"
...
- Zwróć uwagę na obecność skryptu
/etc/init.d/ondemand
. Należy go wyłączyć poprzezupdate-rc.d -f ondemand remove
.
Starsza metoda¶
Pierwsze uruchomienie instalacyjne¶
Pierwsze ładowanie systemu spowoduje, że partycja z systemem rozszerzy się do wielkości karty. Nie należy przerywać uruchamiania systemu. Należy czekać do momentu, gdy jedna z diod na płytce będzie mrugała cyklicznie.
Informacja
Jeśli posiadasz monitor z wejściem HDMI oraz klawiaturę lub port komunikacji szeregowej, dalszy proces instalacji możesz wykonać zgodnie z instrukacjami pojawiającymi się na ekranie (według oficjalnej metody). Jeśli nie posiadasz, możliwe jest dokończenie instalacji systemu według poniższej instrukcji.
- Włącz PandaBoard.
- Czekaj do momentu, gdy jedna z diod będzie mrugała cyklicznie.
- Wyłącz PandaBoard.
- Wyciągnij kartę z czytnika z PandaBoard.
- Umieść kartę w czytniku kart komputera.
Przygotowanie systemu do konfiguracji¶
- Zamontuj partycję systemową (drugą).
- Zmień plik odpowiedzialny za ustawienia sieci, znajdujący się na partycji systemowej, pod ścieżką
/etc/network/interfaces
.
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.2.50
netmask 255.255.255.0
gateway 192.168.2.1
dns-nameservers 8.8.8.8
Informacja
Powyższa konfiguracja powoduje przypisanie adresu 192.168.2.50
w sieci 192.168.2.0/24
do interfejsu sieci przewodowej znajdującego się na płytce. Dodatkowo, ustawiona jest brama domyślna o adresie 192.168.2.1
oraz serwer nazw DNS 8.8.8.8
.
Ostrzeżenie
Uwaga! Powyższa adresacja IPv4 stosowana jest w sieci w laboratorium. W twoim przypadku może być ona inna. Proszę, zwróć uwagę na adresację Twojej sieci.
Ostrzeżenie
Adresacja sieci 192.168.2.0/24
docelowo jest używana na interfejsie karty bezprzewodowej w laboratorium. Powyższa konfiguracja ulega zmianie w toku wykonywania tej instrukcji, w kroku aktualizacji ustawień sieciowych.
- Zmień plik znajdujący się na partycji systemowej, pod ścieżką
/etc/rc.local
.
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
apt-get install -y openssh-server
exit 0
Informacja
Powyższa konfiguracja spowoduje zainstalowanie serwera zdalnego dostępu SSH w trakcie uruchomienia systemu. Należy pamiętać, aby po pierwszym zalogowaniu usunąć linijkę apt-get...
z pliku /etc/rc.local
.
- Zmień plik odpowiedzialne za hasła, usuwając znaki
x
lub*
z pól odpowiedzialnych za hasło, w plikach znajdujących się na partycji systemowej/etc/passwd
i/etc/shadow
#-/etc/passwd
root::0:0:root:/root:/bin/bash
#-/etc/shadow
root::15454:0:99999:7:::
Informacja
Powyższe zmiany spowodują usunięcie hasła dla konta root
. Przy pierwszym logowaniu należy pamiętać o ustawieniu hasła dla administratora.
- Dodaj swój klucz publiczny SSH w
/root/.ssh/authorized_keys
ssh-rsa AAA... user@hostname
Informacja
Twój klucz publiczny SSH znajduje się w pliku ~/.ssh/id_rsa.pub
. Jeśli pliku nie posiadasz, oznacza to, że nie posiadasz klucza SSH. W celu wygenerowania klucza prywatnego i publicznego SSH należy wywołać polecenie ssh-keygen
.
- Odmontuj kartę z czytnika kart komputera.
- Wyciągnij kartę z czytnika kart komputera.
- Połącz płytkę, kablem sieciowym, z urządzeniem sieciowym (np. przełącznikiem) znajdującym się w sieci, w której znajduje się Twój komputer.
- Umieść kartę w czytniku kart PandaBoard.
- Uruchom PandaBoard.
Drugie uruchomienie konfiguracyjne¶
- Zaloguj się do systemu poprzez SSH:
ssh root@192.168.2.50
. - Ustaw hasło dla użytkownika
root
przy pomocypasswd root
. - Usuń linię
apt-get install -y openssh-server
z pliku/etc/rc.local
. - Ustaw nazwę systemu w plikach:
/etc/hostname
panda.robonet
/etc/hosts
127.0.0.1 localhost
127.0.1.1 panda panda.robonet
Ostrzeżenie
Należy przerwać konfigurację płytki z wykorzystaniem kreatora, który działa na konsoli (dostępnej przy instalacji z wykorzystaniem monitora i klawiatury lub portu komunikacji szeregowej).
- Wywołaj polecenie
fuser -k /var/cache/debconf/config.dat
do oporu. - Usuń pakiet
oem-config
(z wykorzystaniemaptitude
-aptitude purge oem-config
) oraz katalog/var/lib/oem-config
. - Zrestartuj system przy pomocy polecenia
reboot
.
Aktualizacja oprogramowania¶
Aktualizacja systemu¶
- Zainstaluj screen poprzez
aptitude install screen
. - Uruchom screen poprzez
screen
.
Ostrzeżenie
Możliwe jest wykonanie aktualizacji do Ubuntu 14.04.1 LTS przy pomocy polecenia do-release-upgrade
. Ze względu na problemy w obsłudze sterowników dla urządzeń Ninedof oraz Roboclaw jest to niezalecane. Można pominąć poniższe kroki do kroku aktualizacji pakietów.
Informacja
Proces aktualizacji przy pomocy do-release-upgrade
może trwać kilka minut. Z wykorzystaniem screen możliwe jest odłączenie się od konsoli poprzez kombinacje klawiszy [Ctrl]+[a]
i [d]
. Ponownie podłączenie następuje poprzez wywołanie polecenia screen -r
.
Ostrzeżenie
Proszę monitorować stan aktualizacji. W trakcie aktualizacji pojawiać się będą pytania do akceptacji lub nie. Po zakończeniu procesu aktualizacji system zostanie uruchomiony ponownie, co wymaga potwierdzenia.
Zobacz także
Miejscem, gdzie znajdują się pakiety używane na PandaBoard jest repozytorium http://ports.ubuntu.com/pool/main/l/linux-ti-omap4/.
Po wykonaniu aktualizacji przy pomocy do-release-upgrade
, system nie wspiera poprawnie sieci bezprzewodowej. Należy dodać do repozytoriów apt repozytorium omap. Następnie wykonać aktualizację listy pakietów i instalację następujących pakietów:
aptitude install -y software-properties-common
add-apt-repository ppa:tiomap-dev/release
aptitude update
touch /boot/initrd.img-3.13.0-37-generic
aptitude install linux-headers-omap linux-image-omap linux-omap
Ostrzeżenie
Instalacja jądra systemu wymaga obecności plików w katalogu /boot/
. W razie ich braku, wystarczy stworzyć brakujący plik przy pomocy polecenia touch
.
- Wykonaj
reboot
.
Aktualizacja pakietów¶
Polecam wyłączyć opcję instalowania polecanych pakietów w aptitude:
- Uruchomić
aptitude
- Skrót klawiszowy
[Ctrl]+[t]
- Wybór menu
Options
→Preferences
- Odznaczyć
Install recommended packages automatically
- Wyłączyć aptitude przy pomocy
[Ctrl]+[q]
- Wykonaj aktualizację i instalację dodatkowych pakietów:
aptitude update
touch /boot/initrd.img-3.2.0-1455-omap4
aptitude full-upgrade
aptitude install -y
aptitude install -y wpasupplicant wireless-crda wireless-regdb # do obsługi sieci bezprzewodowej
aptitude install -y htop psmisc mc unzip bash-completion cpufrequtils ntp # dodatkowe narzędzia
aptitude install -y byobu tmux
Ostrzeżenie
Instalacja jądra systemu wymaga obecności plików w katalogu /boot/
. W razie ich braku, wystarczy stworzyć brakujący plik przy pomocy polecenia touch
.
- Dodaj do pliku
/etc/rc.local
linijkęiw reg set PL
. - Zmień ustawienia sieci: do pliku
/etc/network/interfaces
dodaj ustawienia sieci bezprzewodowej:
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.50
netmask 255.255.255.0
auto wlan0
iface wlan0 inet dhcp
pre-up ifconfig wlan0 hw ether de:ad:be:ef:00:10
wpa-ssid "SSID"
wpa-psk "PSK"
Informacja
W celu poprawnego działania sieci bezprzewodowej wymagane jest ustawienie adresu MAC kart bezprzewodowej.
Ostrzeżenie
Zwróć uwagę na fakt, że adresacja interfejsu sieci przewodowej została zmieniona, tak aby na dwóch interfejsach karty przewodowej i bezprzewodowej nie było takiej samej adresacji sieci.
Informacja
Powyższe ustawienia sieci bezprzewodowej dotyczą sieci bezprzewodowej robolab w laboratorium. Aktualne hasło do sieci robolab udostępnione jest w laboratorium, w ogłoszeniach znajdujących się w widocznym miejscu. Adresy przydzielane są w oparciu o adresy MAC urządzeń bezprzewodowych. W sieci laboratoryjnej prefiksem MAC jest de:ad:be:ef:00:**
. Ostatnie dwa znaki heksadecymalne określają przypisywany adres IP, według następującego schematu:
de:ad:be:ef:00:00 - 192.168.2.200
de:ad:be:ef:00:01 - 192.168.2.201
...
de:ad:be:ef:00:09 - 192.168.2.209
de:ad:be:ef:00:10 - 192.168.2.210
- Zrestartuj system.
- Połącz się podając przydzielony przez router adres IP. Polecam sprawdzić przypisany adres IP poprzez interfejs administratora routera.
Aktualizacja bootloadera¶
Aby karta uruchamiała się na płytkach w wersji B3, należy pobrać ostatnią wersję bootloadera u-boot i manualnie go skompilować według poniższej instrukcji. Do wykonania tych poleceń wymagane jest zainstalowanie dodatkowego oprogramowania:
- make
- g++
- gcc
- u-boot-tools
- g++-arm-linux-gnueabihf
- gcc-arm-linux-gnueabihf
- binutils-arm-linux-gnueabihf
Polecenie do wywołania: apt-get install make g++ gcc u-boot-tools g++-arm-linux-gnueabihf gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabihf
. Dla niektórych systemów, wymagana jest zmiana wersji systemu. Dla systemu Debian, aktualna wersja testing
posiada wymienione pakiety.
$ wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2
[..]
$ tar xf u-boot-latest.tar.bz2
$ cd u-boot-*
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- omap4_panda_config
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/zconf.lex.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
[..]
$ cat <<EOF > boot.script
fatload mmc 0:1 0x80000000 uImage
setenv bootargs rw vram=32M fixrtc mem=1G@0x80000000 root=/dev/mmcblk0p2 console=ttyO2,115200n8 rootwait
bootm 0x80000000
EOF
$ mkimage -A arm -T script -C none -n "Boot Image" -d boot.script boot.scr
Image Name: Boot Image
Created: Fri Nov 20 17:48:09 2015
Image Type: ARM Linux Script (uncompressed)
Data Size: 164 Bytes = 0.16 kB = 0.00 MB
Load Address: 00000000
Entry Point: 00000000
Contents:
Image 0: 156 Bytes = 0.15 kB = 0.00 MB
$ mkimage -A arm -T script -C none -n "Boot Image" -d boot.script boot.scr
Wynikiem wykonania tych operacji będą pliki, które należy umieścić na pierwszej partycji zamontowanej karty:
boot.scr
boot.script
MLO
u-boot.bin
u-boot.img
Po podmianie tych plików, karta może być używana na obu typach płyt PandaBoard B2 i B3.
Post-konfiguracja¶
- Dodaj do
/etc/modules
wpis:
...
i2c-dev
- Zmień
/etc/init.d/cpufrequtils
:
...
GOVERNOR="performance"
...
- Zwróć uwagę na obecność skryptu
/etc/init.d/ondemand
. Należy go wyłączyć poprzezupdate-rc.d -f ondemand remove
.
Dodatkowe informacje¶
Więcej informacji na stronach:
Amber¶
Instalacja Amber zaczyna się od amber-erlang-mediator. Jest to projekt mediatora, który to dostarcza mechanizmu komunikacji pomiędzy poszczególnymi sterownikami oraz klientami.
W standardowym modelu zakłada się, że:
- istnieje jeden mediator
- używanych jest kilka sterowników, z których każdy komunikuje się z innym urządzeniem, nie ma sterowników duplikujących działanie
- podłączonych jest jeden lub wielu klientów, którzy korzystają jednocześnie z dostępnych na robocie urządzeń
Instalacja i uruchomienie¶
Przeprowadzenie instalacji odbyć można na dowolnym systemie linux.
Informacja
Funkcjonalności, jakie są dostarczane przez poszczególne sterowniki dostępne są tylko na robotach w laboratorium.
Przygotowanie środowiska¶
Instalacja dodatkowego oprogramowania¶
Informacja
W Ubuntu 12.04.5 LTS należy dodać dodatkowe repozytoria pozwalające na zainstalowanie wspieranej przez Amber wersji Erlang. Należy dodać do pliku /etc/apt/sources.list
:
deb http://packages.erlang-solutions.com/debian wheezy contrib
Po dodaniu wpisu należy wykonać aptitude update
. Jeśli wystąpią problemy z pobieraniem listy pakietów z powodu braku klucza, należy dodać klucz przy pomocy polecenia:
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com D208507CA14F4FCA
Do pracy z platformą Amber potrzebne są dodatkowe narzędzia. Należy zainstalować powyższe narzędzia z wykorzystaniem polecenia aptitude install
:
aptitude install -y git make
aptitude install -y esl-erlang
aptitude install -y g++ libcxxtools-dev liblog4cxx10-dev libboost-dev libboost-program-options-dev libboost-thread-dev libboost-system-dev
aptitude install -y protobuf-compiler libprotoc-dev
aptitude install -y python python-dev python-setuptools python-pip python-virtualenv
Modyfikacja plików konfiguracyjnych¶
- Dodać wpis do pliku
/etc/modules
(jeśli nie zostało wykonane):
...
i2c-dev
- Zmienić zawartość pliku
/etc/rc.local
:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
cpufreq-set -g performance
# Enable GPIO_136 and use it as output
echo 0x03 > /sys/kernel/debug/omap_mux/mcspi1_simo
echo 0x03 > /sys/kernel/debug/omap_mux/mcspi1_cs0
echo 0x03 > /sys/kernel/debug/omap_mux/mcspi1_cs2
# Export GPIO_136 to userspace
echo 136 > /sys/class/gpio/export
echo 137 > /sys/class/gpio/export
echo 139 > /sys/class/gpio/export
# Change pin direction to out
echo out > /sys/class/gpio/gpio136/direction
echo out > /sys/class/gpio/gpio137/direction
echo out > /sys/class/gpio/gpio139/direction
# Put it high
echo 1 > /sys/class/gpio/gpio136/value
echo 1 > /sys/class/gpio/gpio137/value
echo 1 > /sys/class/gpio/gpio139/value
# Permissions
chgrp dialout /sys/class/gpio/gpio136/*
chmod g+w /sys/class/gpio/gpio136/*
chgrp dialout /sys/class/gpio/gpio137/*
chmod g+w /sys/class/gpio/gpio137/*
chgrp dialout /sys/class/gpio/gpio139/*
chmod g+w /sys/class/gpio/gpio139/*
modprobe i2c-dev
chown root:dialout /dev/i2c*
chmod 660 /dev/i2c*
#su - panda -c "/home/panda/amber/amber-erlang-mediator/start_amber.sh"
exit 0
Utworzenie użytkownika¶
- Dodać użytkownika
panda
. - Dodać użytkownika
panda
do grupdialout
isudo
przy pomocy poleceniaadduser panda dialout; adduser panda sudo
.
Informacja
Plik odpowiedzialny za grupy użytkowników /etc/group
:
- Zalogować się na użytkownika
panda
:su - panda
. - Dodać swój klucz publiczny SSH do pliku
/home/panda/.ssh/authorized_keys
ssh-rsa AAA... user@hostname
Instalacja¶
Instalacje należy wykonywać jako użytkownik panda
w katalogu domowym użytkownia panda
: /home/panda
. Należy pobrać i zainstalować Amber wraz z dodatkami według poniższego skryptu:
mkdir -p ${HOME}/amber
pushd ${HOME}/amber
git clone https://github.com/project-capo/amber-cpp-drivers.git
pushd ${HOME}/amber/amber-cpp-drivers
make all
popd
git clone https://github.com/project-capo/amber-python-drivers.git
pushd ${HOME}/amber/amber-python-drivers
${HOME}/amber/amber-python-drivers/bin/install.sh
popd
git clone https://github.com/project-capo/amber-erlang-mediator.git
pushd ${HOME}/amber/amber-erlang-mediator
make all
popd
popd
Aktualizację platformy Amber z dodatkami można wykonać za pomocą poniższego skryptu, jako użytkownik panda
:
pushd ${HOME}/amber/amber-cpp-drivers
make clean
git pull
make all
popd
pushd ${HOME}/amber/amber-python-drivers
${HOME}/amber/amber-python-drivers/bin/uninstall.sh
git pull
${HOME}/amber/amber-python-drivers/bin/install.sh
popd
pushd ${HOME}/amber/amber-erlang-mediator
make clean
make allclean
git pull
make all
popd
Post-konfiguracja¶
- Odkomentować ostatnią linijkę w
/etc/rc.local
:
...
su - panda -c "/home/panda/amber/amber-erlang-mediator/start_amber.sh"
exit 0
- Skopiować przykładowy plik konfiguracyjny:
cp ${HOME}/amber/amber-erlang-mediator/apps/amber/priv/settings.config.example ${HOME}/amber/amber-erlang-mediator/apps/amber/priv/settings.config
Uruchomienie¶
- Uruchomić
${HOME}/amber/amber-erlang-mediator/start_amber.sh
Aby zakończyć pracę mediatora, należy wywołać polecenie killall heart
. Logi aplikacji znajdują się w ${HOME}/amber/amber-erlang-mediator/log*
.
Informacja
Możliwe jest uruchomienie w trybie deweloperskim. Jest to standardowe uruchomienie mediatora, z włączonymi przeglądaniem logów oraz zamknięciem mediatora, po przerwaniu przeglądania logów [Ctrl]+[c]
. Wywoływane jest przez polecenie ${HOME}/amber/amber-erlang-mediator/start_devel_amber.sh
.
Ustawienia¶
Mediator¶
Do uruchomienia mediatora, potrzeba skonfigurować sterowniki, które będą uruchomiane wraz z mediatorem. Przykładową konfigurację należy zaadaptować do swoich warunków i zapisać jako apps/amber/priv/settings.config
.
Informacja
Obecnie w pełni wspierane sterowniki są Roboclaw, Ninedof, Hokuyo oraz Location. Te należy odkomentować z pliku konfiguracyjnego mediatora znadującego się w apps/amber/priv/settings.config
.
Sterowniki¶
Sterownikami i ich konfiguracją zarządzają ich twórcy. Dostarczana jest wraz z sterownikami.
Klienci¶
Klientami i ich konfiguracją zarządzają ich twórcy. Dostarczana jest wraz z klientami.
Typy urządzeń¶
Obecnie obsługiwane są urządzenia:
- Ninedof - odczytywanie wartości z czujników ruchu: przyspieszeniomierza, żyroskopu, kompasu
- Roboclaw - sterowanie silnikami i odczytywanie aktualnej prędkości każdego silnika
- DriveSupport - sterowanie silnikami z wsparciem ze strony skanera laserowego oraz czujnika ruchu (zależne od Hokuyo i Ninedof)
- DriveToPoint - poruszanie się według określonej trasy z wykorzystaniem informacji o lokalizacji oraz otoczenia (zależne od Roboclaw lub DriveSupport oraz Location)
- Hokuyo - odczytywanie wartości odległości od otoczenia z skanera laserowego
- Location - dostarczanie informacji o lokalizacji robota z wykorzystanie skanera laserowego i algorytmu lokalizującego
- Maestro - obsługa sterownika servo motorów (np. wykorzystywanych w ramieniu)
Ninedof¶
Głównymi akcjami, które można wykonać przy pomocy czujnika są:
- jednorazowe odczytanie danych z przyspieszeniomierza, żyroskopu, kompasu
- ciągłe odczytywanie danych z czujników
Możliwe jest określenie, które dane będą odczytywane z czujnika. Możliwe jest ustalenie tego przy pojedynczym odebraniu danych z czujnika, jak i w ciągłym trybie.
Roboclaw¶
Głównymi akcjami, które można wykonać na silnikach są:
- ustawienie prędkości każdego z czterech silników
- odczytanie aktualnej prędkości z enkoderów z silników
Jednostką podawanych prędkości jest mm/s
.
DriveSupport¶
Identyczne operacje jak w przypadku Roboclaw. Klient pozostaje ten sam co w przypadku Roboclaw.
DriveToPoint¶
Operacje jakie są dostarczane z sterownikiem DriveToPoint są:
- ustawienie listy punktów do przebycia
- odczytanie listy punktów, jakie zostały osiągnięte
- odczytanie ostatnio osiągniętego punktu
- odczytanie listy punktów, jakie są do osiągnięcia
- odczytanie punktu, jaki ma zostać osiągnięty jako kolejny
Hokuyo¶
Głównymi akcjami, które można wykonać przy pomocy skanera laserowego są:
- jednorazowe odczytanie skanu otoczenia
- ciągłe odczytywanie skanów otoczenia
Skanem otoczenia jest zbiór danych, w których wartości kąta powiązane są wartościami odległości od otoczenia.
W przypadku odległości większej niż obsługiwana przez lasera (w przypadku Hokuyo: >5m), występuje wartości zero
. Przyjąć należy, że zero
nie jest odległości zerową. Budowa lasera i układów mierzących odległość nie dopuszcza odległości zerowej. Możliwa jest wartość bliska zerowej odległości.
Location¶
Główną akcją, jaką można wykonać przy pomocy tego sterownika jest uzyskanie informacji o lokalizacji robota na mapie pomieszczenia, w które robot się lokalizuje. Wymagane jest, by robot posiadał włączony skaner laserowy Hokuyo.
Sterowniki¶
Wspierane sterowniki¶
amber-cpp-drivers jest to projekt sterowników, napisanych w C/C++, które pozwalają na komunikację z urządzeniami umieszczonymi na robocie. Wspierane są:
- Ninedof - odczytywanie informacji z sensora umieszczonego na robocie, dostarczającego informacji z przyspieszeniomierza, żyroskopu oraz magnetometru
- Roboclaw - sterowanie silnikami robota
- Stargazer - obsługa lokalizacji w oparciu o kamerę oraz markery
- Location - programowa obsługa lokalizacji z wykorzystaniem algorytmu cząstek i analizy trakcji
- Maestro - servo-mechanizmy wykorzystywane w ramieniu
amber-python-drivers jest to projekt sterowników, napisanych w python, które pozwalają na komunikację z urządzeniami umieszczonymi na robocie. Wspierane są:
- Hokuyo - odczytywanie informacji z sensora umieszczonego na robocie, dostarczającego informacji o odległościach innych przeszkód od robota
- DriveSupport - osbługa sterowania silnikami ze wsparciem skanera laserowego oraz czujnika ruchu
- DriveToPoint - obsługa poruszania się według listy punktów
- Roboclaw - obsługa sterowania silnikami
Konfiguracja z mediatorem¶
Sterownik posiada przypisany typ urządzenia oraz numer urządzenia. Wartości te ustawiane są w konfiguracji Amber. Konfiguracja powinna być zapisana jako apps/amber/priv/settings.config
.
Konfiguracja jednego z sterowników:
{supervised_driver,
{driver,
{nazwa_sterownika}
},
{numer_typu_sterownika, numer_sterownika},
[
{cdriver, "ścieżka/do/sterownika"},
{config_file, "ścieżka/do/konfiguracji/sterownika"},
{log_config_file, "ścieżka/do/konfiguracji/dziennika/sterownika"}
]
}.
Ścieżki konfiguracji nie są wymagane, ważne jest podanie ścieżki do pliku wykonywalnego, który uruchomi sterownik.
Cechy sterownika¶
Sterownik jest:
- aplikacją uruchamianą na robocie
- app. komunikującą się z urządzeniem podłączonym do robota
- app. komunikującą się z mediatorem przez potoki powłoki systemu linux
Sterownik odpowiada za:
- ustawienie parametrów urządzenia
- wsparcie obsługi współbieżnego dostęp do urządzenia przez wiele klientów
- obserwowanie obecności klientów
- wysyłanie wiadomości dla klientów, którzy zarejestrowali się jako nasłuchujący na dany typ wiadomości
- odbieranie komunikatów, ich obsługę i odsyłanie wiadomości, jeśli to konieczne
Działanie¶
Ostrzeżenie
Poniższe zalecenia wynikają z postaci wspólnej wszystkich wiadomości przesyłanych między klientami a sterownikami. Stosowanie DriverMsg nie jest konieczne. Możliwe jest ustanowienie własnej postaci wiadomości, przy czym obecna postać sterowników i klientów nie wspiera własnej postaci wiadomości.
Sterownik powinien realizować funkcjonalności takie jak:
obsługę odbierania wiadomość typów:
- DATA - dane do przetworzenia przez sterownik, odebrane od klienta
- PING - zapytanie o działanie, realizowane przez mediator, obecnie nie używane, odpowiedzią na zapytanie jest odesłanie wiadomości typu PONG
- SUBSCRIBE i UNSUBSCRIBE - do rejestracji klienta nasłuchującego
- CLIENT_DIED - zgłoszenie klienta o zakończeniu pracy, w przypadku, gdy dany klient był zarejestrowanych jako słuchacz, należy postąpić z nim podobnie, jak w przypadku UNSUBSCRIBE
Dodatkowo, co jest zalecane, sterownik powinien przy poprawnym zamykaniu się, wysłać do mediatora komunikat typu DRIVER_DIED.
Oprócz obsługi wiadomości, sterownik powinien realizować:
- inicjalizację pracy z urządzeniem
- ustawienie określonych parametrów pracy
- buforowanie danych z urządzenia
- współbieżny dostęp do urządzenia
Przykład¶
Przykładem sterownika, który realizuje powyższe funkcjonalności jest DummyDriver. Sterowniki korzystają z części wspólnej.
Klienci¶
Wspierani klienci¶
amber-java-clients - jest to projekt dostarczają klientów, napisanych w Java, używanych przez korzystających z robota, w ich własnych aplikacjach, obsługiwane są:
- Ninedof
- Roboclaw
- Hokuyo
- Location
- Maestro
- DriveToPoint
amber-python-clients jest to projekt dostarczają klientów, napisanych w python, używanych przez korzystających z robota, w ich własnych aplikacjach, obsługiwane są:
- Ninedof
- Roboclaw
- Hokuyo
- Location
- DriveToPoint
Poniżej znajdziemy opis korzystania z klientów oraz możliwości ich dalszego rozszerzania.
Cechy klienta¶
Klient jest:
- biblioteką wykorzystywaną w aplikacji
- dostarczającą możliwości komunikacji z danymi sterownikami
- komunikującą się z mediatorem przez sieć
Klient odpowiada za:
- zestawienie połączenia z mediatorem, opartym na UDP
- wysyłanie wiadomości do mediatora z odpowiednimi wartościami typu i numeru urządzenia
- obsługę wiadomości przychodzących od mediatora
Przykład¶
Przykładem klienta, który realizuje powyższe funkcjonalności jest DummyClient. Klienci korzystają z części wspólnej.
Komunikacja¶
Uczestnicy¶
W komunikacji uczestniczą:
- jeden mediator
- jeden klient lub wielu klientów
- jeden sterownik lub wiele sterowników
Cechy mediatora:
odpowiada za przekazywanie komunikatów pomiędzy określonymi klientami i sterownikami
nie ingeruje w wiadomości, jakie są znane tylko sterownikom oraz klientom
obsługuje i przetwarza nagłówki wiadomości, w których
- uzupełnia informacje o numerach klientów
- wykorzystuje informacje o typie i numerze sterownika
Protokół¶
Sterownik komunikuje się z mediatorem przy pomocy potoków. Są to potoki standardowego wyjścia i wejścia. Wymagane jest, by sterownik na standardowym wejściu oczekiwał na dane, a na standardowe wyjście umieszczał dane.
Klient komunikuje się z mediatorem przy pomocy datagramowego połączenia sieciowego UDP
. Mediator nasłuchuje na dostępnych interfejsach systemu, na porcie 26233
.
Protokół komunikacji z mediatorem jest następujący:
- 2 bajty długości nagłówka wiadomości
- nagłówek wiadomości o zadanej długości
- 2 bajty długości wiadomości
- wiadomość o zadanej długości
Wartość długości powinna być przesyłana w porządku big-endian
, zgodna z sieciowymi warunkami przesyłania danych. Należy zwrócić uwagę na to, czyli wartości są singed
czy unsigned
. Ze względu na wykorzystywanie języka Java, przyjmuje się, że wartości bajtów są signed
.
Nagłówek oraz wiadomość są binarnymi ciągami znaków. Należy zwrócić uwagę na sposób komunikacji z mediatorem poprzez potoki. W przypadku używania języka python, należy ustawić działanie interpretera na binarne obsługiwanie wejścia i wyjścia. Możliwe jest to dzięki opcji -u
.
Do serializacji i deserializacji wykorzystywane jest Google Protobuf. Wymagane jest, by co najmniej nagłówek był zgodny z przyjętym w mediatorze. Wiadomości przesyłane przez mediator nie są sprawdzane i może to być dowolny ciąg znaków. Zaleca się, by to było zgodne z protobuf i postacią wiadomości przyjętą w projekcie. Aktualna postać nagłówka i podstawowej wiadomości dostępna jest project-capo/amber-common/drivermsg.proto.
Komunikaty¶
Wiadomości przesyłane między klientami a sterownikami składają się z:
nagłówka
DriverHdr
deviceType
- typie urządzeniadeviceID
- numerze urządzeniaclientIDs
- numerach klientów, którzy wysłali dany komunikat do sterownika
wiadomości
DriverMsg
type
- typie wiadomościsynNum
- numerze zapytania, nadanym przez klientaackNum
- numerze odpowiedzi, nadanym przez sterownik, odpowiadającym numerowisynNum
listenerNum
- numerze określający listener- dodatkowych pól (
extensions
)
Obecna numeracja typów sterowników DeviceType
:
- 0 - nieznany, nieużywany
- 1 - NineDof (czujnik ruchu)
- 2 - Roboclaw (silniki)
- 3 - Stargazer (położenie w oparciu o znaczniki)
- 4 - Hokuyo (laser)
- 5 - Dummy (testowy)
- 6 - Location (położenie w oparciu o skany z lasera i względne przemieszczenie)
- 7 - Maestro (servo)
- 8 - DriveToPoint (poruszanie się według zadanej listy punktów)
- 9 - CollisionAvoidance (nie używane)
- 10 - PidFollowTrajectory (poruszanie się wedłu linii)
Obecne typy wiadomości DriverMsg
:
- DATA - dane przesyłane i rozumiane przez sterownik i klienta
- PING - zapytanie mediatora o działanie sterownika czy klienta, obecnie nieużywane
- PONG - odpowiedź sterownika czy klienta, obecnie nie wymagana
- CLIENT_DIED - komunikat wysyłany przez klienta, przy poprawnym zamknięciu klienta
- DRIVER_DIED - komunikat wysyłany przez sterownik, przy poprawnym zamknięciu sterownika
- SUBSCRIBE - subskrypcja klienta nasłuchującego wiadomości
- UNSUBSCRIBE - zakończenie subskrypcji klienta