Усталёўка ROS у IMG-выява Ubuntu для аднаплатніка

Увядзенне

На днях, працуючы над дыпломам, сутыкнуўся з неабходнасцю стварэння выявы Ubuntu для аднаплатніка з ужо ўсталяваным ROS (Robot Operating System – аперацыйная сістэма робатаў). Калі коратка, то дыплом прысвечаны кіраванню групай робатаў. Робаты абсталяваны двума коламі і трыма далямерамі. Кіруецца ўся гэтая справа з ROS, які круціцца на плаце ODROID-C2.

Усталёўка ROS у IMG-выява Ubuntu для аднаплатніка
Робат Ladybug. Сары за дрэнную якасць фота

Усталёўваць ROS на кожнага робата паасобку не было ні чакай, ні жаданні, у сувязі з чым паўстала запатрабаванне ў выяве сістэмы з ужо ўсталяваным ROS. Прагуляўшыся па прасторах інтэрнэту, знайшоў некалькі падыходаў да таго, як гэта можна было б зрабіць.
У цэлым усе знойдзеныя рашэнні можна разбіць на наступныя групы.

  1. Праграмы, якія ствараюць вобраз з гатовай і настроенай сістэмы (Distroshare Ubuntu Imager, linux live kit, linux respin, systemback і інш.)
  2. Праекты, якія дазваляюць сабраць свой вобраз (ёкта, linux from scratch)
  3. Зборка выявы ручкамі самому (liveCD customization и рускі аналаг, плюс артыкул на хабры)

Выкарыстанне рашэнняў з першай групы здавалася самым простым і прывабным варыянтам, аднак стварыць выяву live-сістэмы для ODROID у мяне так і не атрымалася. Рашэнні другой групы таксама мне не падышлі з-за дастатковага высокага парога ўваходжання. Зборка ручкамі па наяўных тутарыял таксама не падыходзіла, т.к. у маёй выяве не было сціснутай файлавай сістэмы.
У выніку натыкнуўшыся на відэа пра chroot (chroot - change root, спасылка на відэа ў канцы паста) і яго магчымасці, вырашана было выкарыстоўваць яго. Далей апішу свой прыватны выпадак кастамізацыі Ubuntu для распрацоўшчыкаў робататэхнікі.

Зыходныя дадзеныя:

  • Увесь працэс мадыфікацыі выявы (за выключэннем запісу на SD-карту з выкарыстаннем balenaEtcher) выконваўся ў аперацыйнай сістэме Ubuntu 18.04.
  • Аперацыйная сістэма, зборку якой мадыфікаваў - Ubuntu 18.04.3 mate desktop версія.
  • Машына, на якой павінна працаваць сабраная сістэма - ODROID-C2.

Падрыхтоўка выявы

  1. Спампоўваем вобраз Ubuntu для ODROID з афіцыйнага сайта

  2. Распакоўваем архіў

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

  3. Ствараем дырэкторыю, у якую будзем мантаваць вобраз

    mkdir mnt

  4. Вызначаем раздзел, на якім размяшчаецца файлавая сістэма

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

    Шукаем падзел з файлавай сістэмай у фармаце ext2, ext3 ці ext4. Нам патрэбен адрас пачатку часткі (вылучаны чырвоным на скрыне):

    Усталёўка ROS у IMG-выява Ubuntu для аднаплатніка

    Заўвага. Размяшчэнне файлавай сістэмы можна таксама паглядзець з дапамогай утыліты рассталіся.

  5. Мантаваны вобраз

    sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/

    Патрэбны нам раздзел пачынаецца з блока 264192 (у вас лічбы могуць адрознівацца), памер аднаго блока - 512 байт, перамнажаем іх, каб атрымаць водступ у байтах.

  6. Пераходзім у тэчку са змантаванай сістэмай і чэргумся ў ёй

    cd mnt/
    sudo chroot ~/livecd/mnt/ bin/sh

    ~/livecd/mnt - поўны шлях да дырэкторыі са змантаванай сістэмай
    bin/sh - абалонка (можна таксама замяніць на bin/bash)
    Цяпер можна ўжо займацца ўстаноўкай неабходных пакетаў і дадаткаў.

Ўстаноўка ROS

Я ставіў ROS апошняй версіі (ROS Melodic) па афіцыйнаму тутарыялу.

  1. Абнаўляем спіс пакетаў

    sudo apt-get update

    Тут у мяне ўзнікала памылка:

    Err:6 http://deb.odroid.in/c2 bionic InRelease
    The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <[email protected]>

    Яна звязана з тым, што тэрмін дзеяння ключа для подпісу пакетаў скончыўся. Для абнаўлення ключоў набіраем:

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

  2. Рыхтуем сістэму для ўстаноўкі ROS

    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
    Нажаль, мне не атрымалася паставіць desktop версію ROS, таму ўсталёўваў толькі базавыя пакеты:

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

    Заўвага 1. У працэсе ўстаноўкі часам узнікала памылка:

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

    Выпраўлялася з дапамогай ачысткі кэша ўтыліты apt:

    sudo apt-get clean; sudo apt-get autoclean

    Заўвага 2. Пасля ўсталёўкі прасорсіцца (source) камандай:

    source /opt/ros/melodic/setup.bash

    не атрымаецца, т.я. мы не запускалі bash, таму яе не трэба набіраць у тэрмінале.

  4. Усталёўваны неабходныя залежнасці

    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. Наладжваем правы доступу
    Паколькі мы закруціліся і, фактычна, выконваем усе дзеянні ад імя root збіранай сістэмы, то і ROS будзе запускацца толькі з правамі суперкарыстальніка.
    Пры спробе запусціць roscore без sudo узнікае памылка:

    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'

    Каб памылка не ўзнікала, рэкурсіўна зменім правы доступу да хатняга каталога карыстача ROS. Для гэтага набіраем:

    sudo rosdep fix-permissions

  6. Даўсталёўваем пакеты rviz і rqt

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

Фінальныя рыскі

  1. Выходзім з chroot:
    exit
  2. Размантаваны вобраз
    cd ..
    sudo umount mnt/
  3. Запакуем выяву сістэмы ў архіў
    xz –ckv1 <файл образа>

Усё! Цяпер з дапамогай balenaetcher можна запісаць выяву сістэмы на SD-карту, уставіць у ODROID-C2, і ў вас будзе Ubuntu з усталяваным ROS!

спасылкі:

  • З тым як чэрціся ў linux і для чаго гэта трэба вельмі дапамагло гэта відэа:



Крыніца: habr.com

Дадаць каментар