ROS diegimas Ubuntu IMG atvaizde, skirtame vienai plokštei
įvedimas
Kitą dieną, dirbdamas savo baigiamąjį darbą, susidūriau su būtinybe sukurti Ubuntu vaizdą vienos plokštės platformai su jau įdiegta ROS (Robot Operating System – roboto operacinė sistema). Trumpai tariant, diplomas skirtas valdyti robotų grupę. Robotai aprūpinti dviem ratais ir trimis tolimačiais. Visa tai valdoma iš ROS, kuri veikia ODROID-C2 plokštėje.
Robotas Ladybug. Atsiprašome už prastą nuotraukų kokybę
Nebuvo nei laiko, nei noro diegti ROS kiekvienam robotui atskirai, todėl atsirado poreikis sistemos atvaizdui su jau įdiegtu ROS. Naršydamas internete radau keletą būdų, kaip tai būtų galima padaryti.
Apskritai visus rastus sprendimus galima suskirstyti į tokias grupes.
Naudoti pirmosios grupės sprendimus atrodė paprasčiausias ir patraukliausias variantas, tačiau man niekada nepavyko sukurti tiesioginio ODROID sistemos vaizdo. Antros grupės sprendimai man irgi netiko dėl gana aukšto įstojimo slenksčio. Rankinis surinkimas pagal turimas pamokas taip pat netiko, nes... Mano paveikslėlyje nebuvo suspaustos failų sistemos.
Dėl to aš aptikau vaizdo įrašą apie chroot (chroot – pakeisti šaknį, nuoroda į vaizdo įrašą įrašo pabaigoje) ir jo galimybes, buvo nuspręsta juo pasinaudoti. Toliau aprašysiu savo konkretų Ubuntu pritaikymo robotikos kūrėjams atvejį.
Pradiniai duomenys:
Visas vaizdo modifikavimo procesas (išskyrus įrašymą į SD kortelę naudojant balenaEtcher) buvo atliktas Ubuntu 18.04 operacinėje sistemoje.
Operacinė sistema, kurios komplektaciją pakeičiau, yra Ubuntu 18.04.3 mate darbalaukio versija.
Mašina, kurioje turėtų veikti surinkta sistema, yra ODROID-C2.
Ieškome skaidinio su failų sistema ext2, ext3 arba ext4 formatu. Mums reikia skilties pradžios adreso (paryškintas raudonai ekrane):
Pastaba. Failų sistemos vietą taip pat galima peržiūrėti naudojant įrankį išsiskyrė.
Vaizdo montavimas
sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/
Mums reikalinga sekcija prasideda bloku 264192 (jūsų skaičiai gali skirtis), vieno bloko dydis yra 512 baitų, padauginkite juos, kad gautumėte įtrauką baitais.
Eikite į aplanką su įdiegta sistema ir praleiskite laiką jame
cd mnt/
sudo chroot ~/livecd/mnt/ bin/sh
~/livecd/mnt — visas kelias į katalogą su prijungta sistema bin/sh - apvalkalas (taip pat gali būti pakeistas šiukšliadėžė/bash)
Dabar galite pradėti diegti reikiamus paketus ir programas.
ROS diegimas
Įdiegiau naujausią ROS versiją (ROS Melodic) pagal oficiali pamoka.
Atnaujinamas paketų sąrašas
sudo apt-get update
Čia aš gavau klaidą:
Err:6 http://deb.odroid.in/c2 bionic InRelease
The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <[email protected]>
Taip yra dėl to, kad pasibaigė paketo pasirašymo rakto galiojimo laikas. Norėdami atnaujinti raktus, įveskite:
Prieigos teisių nustatymas
Kadangi esame prisijungę ir iš tikrųjų atliekame visus veiksmus surenkamos sistemos šaknies vardu, ROS bus paleistas tik su supervartotojo teisėmis.
Bandant paleisti roscore be sudo, įvyksta klaida:
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'
Kad klaida nepasikartotų, rekursyviai pakeiskime prieigos prie ROS vartotojo namų katalogo teises. Norėdami tai padaryti, įvedame: