Pred dnevi sem se med delom na diplomski nalogi soočil s potrebo po izdelavi slike Ubuntuja za platformo z eno ploščo z že nameščenim ROS (Robot Operating System - robotski operacijski sistem). Skratka, diploma je namenjena upravljanju skupine robotov. Roboti so opremljeni z dvema kolesoma in tremi daljinomeri. Vse skupaj je nadzorovano iz ROS-a, ki teče na plošči ODROID-C2.
Robot Pikapolonica. Oprostite za slabo kakovost fotografije
Za namestitev ROS-a na vsakega robota posebej ni bilo ne časa ne želje, zato je bila potrebna sistemska slika z že nameščenim ROS-om. Po brskanju po internetu sem našel več pristopov, kako bi to lahko naredili.
Na splošno lahko vse najdene rešitve razdelimo v naslednje skupine.
Uporaba rešitev iz prve skupine se je zdela najenostavnejša in najbolj privlačna možnost, vendar mi nikoli ni uspelo ustvariti žive sistemske slike za ODROID. Tudi rešitve druge skupine mi niso ustrezale zaradi dokaj visokega vstopnega praga. Tudi ročna montaža po razpoložljivih tutorialih ni bila primerna, ker... Moja slika ni imela stisnjenega datotečnega sistema.
Posledično sem naletel na video o chrootu (chroot - spremeni koren, povezava do videoposnetka na koncu objave) in njegovih zmogljivosti, je bilo odločeno, da ga uporabimo. Nato bom opisal svoj poseben primer prilagajanja Ubuntuja za razvijalce robotike.
Vir podatkov:
Celoten postopek spreminjanja slike (razen zapisovanja na kartico SD s pomočjo balenaEtcher) je bil izveden v operacijskem sistemu Ubuntu 18.04.
Operacijski sistem, katerega sklop sem spremenil, je namizna različica Ubuntu 18.04.3 mate.
Stroj, na katerem naj bi sestavljen sistem deloval je ODROID-C2.
Določite particijo, na kateri se nahaja datotečni sistem
file <файл образа>
Iščemo particijo z datotečnim sistemom v formatu ext2, ext3 ali ext4. Potrebujemo naslov začetka odseka (na zaslonu je označen z rdečo):
Opomba. Lokacijo datotečnega sistema si lahko ogledate tudi s pomočjo pripomočka razdeljen.
Montaža slike
sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/
Razdelek, ki ga potrebujemo, se začne z blokom 264192 (vaše številke se lahko razlikujejo), velikost enega bloka je 512 bajtov, pomnožite jih, da dobite zamik v bajtih.
Pojdite v mapo z nameščenim sistemom in se zadržite v njej
cd mnt/
sudo chroot ~/livecd/mnt/ bin/sh
~/livecd/mnt — polna pot do imenika z nameščenim sistemom bin/sh - lupina (lahko se nadomesti tudi z bin/bash)
Zdaj lahko začnete nameščati potrebne pakete in aplikacije.
Namestitev ROS
Nameščal sem najnovejšo različico ROS (ROS Melodic) glede na uradna vadnica.
Posodabljanje seznama paketov
sudo apt-get update
Tukaj sem dobil napako:
Err:6 http://deb.odroid.in/c2 bionic InRelease
The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <[email protected]>
To je posledica dejstva, da je ključ za podpisovanje paketa potekel. Če želite posodobiti ključe, vnesite:
Nastavitev pravic dostopa
Ker smo prijavljeni in dejansko izvajamo vsa dejanja v imenu korena sistema, ki se sestavlja, bo ROS zagnan samo s pravicami superuporabnika.
Pri poskusu zagona roscore brez sudo se pojavi napaka:
Traceback (most recent call last): File "/opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/__init__.py", line 230, in main write_pid_file(options.pid_fn, options.core, options.port) File "/opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/__init__.py", line 106, in write_pid_file with open(pid_fn, "w") as f: IOError: [Errno 13] Permission denied: '/home/user/.ros/roscore-11311.pid'
Da preprečimo pojav napake, rekurzivno spremenimo pravice dostopa do domačega imenika uporabnika ROS. Za to vtipkamo: