Инсталиране на 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. Проекти, които позволяват да сглобите свой образ (yocto, 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 за едноплатен компютър

    Забележка. Местоположението на файловата система може да бъде видяно и с помощта на утилита parted.

  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
    Следните подписи бяха невалидни: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr)

    Тя е свързана с това, че срокът на валидност на ключа за подписване на пакетите е изтекъл. За актуализиране на ключовете въвеждаме:

    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. Настройваме права на достъп
    Тъй като сме в chroot и всъщност извършваме всички действия от името на суперпотребителя на системата, и 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
Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster