Встановлення 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

Додати коментар або відгук