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.

ROS diegimas Ubuntu IMG atvaizde, skirtame vienai plokštei
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.

  1. Programos, kurios sukuria vaizdą iš paruoštos ir sukonfigūruotos sistemos (Distroshare Ubuntu Imager, linux live rinkinys, Linux respin, systemback ir kt.)
  2. Projektai, leidžiantys susikurti savo įvaizdį (yocto, Linux nuo nulio)
  3. Vaizdo surinkimas pats (tiesioginis CD pritaikymas и Rusiškas atitikmuo, Pliusas straipsnis apie Habré)

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.

Vaizdo paruošimas

  1. Atsisiųskite Ubuntu vaizdą, skirtą ODROID, iš oficiali svetainė

  2. Archyvo išpakavimas

    unxz –kv <файл архива с образом>

  3. Sukurkite katalogą, kuriame montuosime vaizdą

    mkdir mnt

  4. Nustatykite skaidinį, kuriame yra failų sistema

    file <файл образа>

    Ieškome skaidinio su failų sistema ext2, ext3 arba ext4 formatu. Mums reikia skilties pradžios adreso (paryškintas raudonai ekrane):

    ROS diegimas Ubuntu IMG atvaizde, skirtame vienai plokštei

    Pastaba. Failų sistemos vietą taip pat galima peržiūrėti naudojant įrankį išsiskyrė.

  5. 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.

  6. 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.

  1. 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:

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AB19BAC9

  2. Sistemos paruošimas ROS diegimui

    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

    sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

    sudo apt update

  3. ROS diegimas
    Deja, man nepavyko įdiegti ROS darbalaukio versijos, todėl įdiegiau tik pagrindinius paketus:

    sudo apt install ros-melodic-ros-base
    apt search ros-melodic

    Pastaba 1. Diegimo proceso metu kartais įvyko klaida:

    dpkg: error: failed to write status database record about 'iputils-ping' to '/var/lib/dpkg/status': No space left on device

    Jis buvo ištaisytas išvalius talpyklą naudojant apt įrankį:

    sudo apt-get clean; sudo apt-get autoclean

    Pastaba 2. Įdiegę šaltinį naudodami komandą:

    source /opt/ros/melodic/setup.bash

    tai neveiks, nes Mes nepaleidome bash, todėl jo nereikia įvesti terminale.

  4. Reikiamų priklausomybių įdiegimas

    sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential

    sudo apt install python-rosdep

    sudo rosdep init
    rosdep update

  5. 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:

    sudo rosdep fix-permissions

  6. Papildomas rviz ir rqt paketų diegimas

    sudo apt-get install ros-melodic-rqt ros-melodic-rviz

Paskutiniai prisilietimai

  1. Išeiti iš chroot:
    exit
  2. Atjunkite vaizdą
    cd ..
    sudo umount mnt/
  3. Supakuosime sistemos vaizdą į archyvą
    xz –ckv1 <файл образа>

Viskas! Dabar su pagalba „balenaEtcher“ Galite įrašyti sistemos vaizdą į SD kortelę, įdėti jį į ODROID-C2 ir turėsite įdiegtą Ubuntu su ROS!

Nuorodos:

  • Šis vaizdo įrašas labai padėjo suprasti, kaip sukčiauti Linux sistemoje ir kodėl to reikia:



Šaltinis: www.habr.com

Добавить комментарий