Инсталация на 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
    За съжаление, не успях да инсталирам десктоп версията на ROS, затова инсталирах само основните пакети:

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

    Забележка 1. По време на инсталацията понякога възникваше грешка:

    dpkg: грешка: не успя да запише запис за статуса на 'iputils-ping' в '/var/lib/dpkg/status': Няма място на устройството

    Тя се оправя с помощта на почистване на кеша на утилитата 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!

Връзки:

  • С темата за chroot в linux и защо е необходимо много ми помогна това видео:

Възпроизведи видео


Източник: habr.com
Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster