Memasang ROS dalam imej Ubuntu IMG untuk papan tunggal

Pengenalan

Pada hari yang lain, semasa mengerjakan tesis saya, saya berhadapan dengan keperluan untuk mencipta imej Ubuntu untuk platform papan tunggal dengan ROS telah dipasang (Sistem Operasi Robot - sistem pengendalian robot). Pendek kata, diploma itu dikhaskan untuk menguruskan sekumpulan robot. Robot tersebut dilengkapi dengan dua roda dan tiga pengintai. Semuanya dikawal daripada ROS, yang berjalan pada papan ODROID-C2.

Memasang ROS dalam imej Ubuntu IMG untuk papan tunggal
Robot Ladybug. Maaf atas kualiti foto yang kurang baik

Tiada masa atau keinginan untuk memasang ROS pada setiap robot secara individu, dan oleh itu terdapat keperluan untuk imej sistem dengan ROS telah dipasang. Selepas melayari Internet, saya menemui beberapa pendekatan bagaimana ini boleh dilakukan.
Secara umumnya, semua penyelesaian yang ditemui boleh dibahagikan kepada kumpulan berikut.

  1. Program yang mencipta imej daripada sistem siap sedia dan dikonfigurasikan (Distroshare Ubuntu Imager, kit langsung linux, linux respin, systemback, dsb.)
  2. Projek yang membolehkan anda mencipta imej anda sendiri (yocto, linux dari awal)
  3. Memasang imej sendiri (penyesuaian CD langsung ΠΈ setara dengan Rusia, tambahan artikel tentang HabrΓ©)

Menggunakan penyelesaian daripada kumpulan pertama nampaknya merupakan pilihan yang paling mudah dan paling menarik, tetapi saya tidak pernah dapat mencipta imej sistem langsung untuk ODROID. Penyelesaian kumpulan kedua juga tidak sesuai dengan saya kerana ambang kemasukan yang agak tinggi. Pemasangan manual mengikut tutorial yang ada juga tidak sesuai, kerana... Imej saya tidak mempunyai sistem fail termampat.
Hasilnya, saya terjumpa video tentang chroot (chroot - tukar akar, pautan ke video di penghujung siaran) dan keupayaannya, diputuskan untuk menggunakannya. Seterusnya, saya akan menerangkan kes khusus saya untuk menyesuaikan Ubuntu untuk pembangun robotik.

Data awal:

  • Keseluruhan proses pengubahsuaian imej (kecuali menulis ke kad SD menggunakan balenaEtcher) telah dilakukan pada sistem pengendalian Ubuntu 18.04.
  • Sistem pengendalian yang pemasangannya saya ubah suai ialah versi desktop pasangan Ubuntu 18.04.3.
  • Mesin di mana sistem yang dipasang harus berfungsi ialah ODROID-C2.

Menyediakan imej

  1. Muat turun imej Ubuntu untuk ODROID daripada laman rasmi

  2. Membongkar arkib

    unxz –kv <Ρ„Π°ΠΉΠ» Π°Ρ€Ρ…ΠΈΠ²Π° с ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ>

  3. Buat direktori di mana kami akan memasang imej

    mkdir mnt

  4. Tentukan partition di mana sistem fail terletak

    file <Ρ„Π°ΠΉΠ» ΠΎΠ±Ρ€Π°Π·Π°>

    Kami sedang mencari partition dengan sistem fail dalam format ext2, ext3 atau ext4. Kami memerlukan alamat permulaan bahagian (diserlahkan dengan warna merah pada skrin):

    Memasang ROS dalam imej Ubuntu IMG untuk papan tunggal

    Perhatian. Lokasi sistem fail juga boleh dilihat menggunakan utiliti berpisah.

  5. Memasang imej

    sudo mount -o loop,offset=$((264192*512)) <Ρ„Π°ΠΉΠ» с ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ> mnt/

    Bahagian yang kami perlukan bermula dengan blok 264192 (nombor anda mungkin berbeza), saiz satu blok ialah 512 bait, darabkannya untuk mendapatkan lekukan dalam bait.

  6. Pergi ke folder dengan sistem yang dipasang dan lepak di dalamnya

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

    ~/livecd/mnt β€” laluan penuh ke direktori dengan sistem yang dipasang
    tong/sh - shell (boleh juga diganti dengan tong/bash)
    Kini anda boleh mula memasang pakej dan aplikasi yang diperlukan.

Memasang ROS

Saya memasang versi terkini ROS (ROS Melodic) mengikut tutorial rasmi.

  1. Mengemas kini senarai pakej

    sudo apt-get update

    Di sinilah saya mendapat ralat:

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

    Ini disebabkan oleh fakta bahawa kunci tandatangan pakej telah tamat tempoh. Untuk mengemas kini kunci, taip:

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

  2. Menyediakan sistem untuk memasang 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. Memasang ROS
    Malangnya, saya tidak dapat memasang versi desktop ROS, jadi saya hanya memasang pakej asas:

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

    Catatan 1 Semasa proses pemasangan kadangkala ralat berlaku:

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

    Ia telah diperbaiki dengan mengosongkan cache menggunakan utiliti apt:

    sudo apt-get clean; sudo apt-get autoclean

    Catatan 2 Selepas pemasangan, sumber menggunakan arahan:

    source /opt/ros/melodic/setup.bash

    ia tidak akan berfungsi, kerana Kami tidak menjalankan bash, jadi ia TIDAK perlu ditaip dalam terminal.

  4. Memasang kebergantungan yang diperlukan

    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. Menyediakan hak akses
    Memandangkan kami telah log masuk dan, sebenarnya, melakukan semua tindakan bagi pihak akar sistem yang sedang dipasang, ROS hanya akan dilancarkan dengan hak superuser.
    Apabila cuba menjalankan roscore tanpa sudo, ralat berlaku:

    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'

    Untuk mengelakkan ralat daripada berlaku, mari tukar secara rekursif hak akses kepada direktori rumah pengguna ROS. Untuk melakukan ini, kami menaip:

    sudo rosdep fix-permissions

  6. Pemasangan tambahan pakej rviz dan rqt

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

Sentuhan akhir

  1. Keluar dari chroot:
    exit
  2. Nyahlekap imej
    cd ..
    sudo umount mnt/
  3. Mari bungkus imej sistem ke dalam arkib
    xz –ckv1 <Ρ„Π°ΠΉΠ» ΠΎΠ±Ρ€Π°Π·Π°>

Semua! Sekarang dengan bantuan balenaetcher anda boleh membakar imej sistem ke kad SD, memasukkannya ke dalam ODROID-C2, dan anda akan memasang Ubuntu dengan ROS!

Rujukan:

  • Video ini banyak membantu dengan cara menipu dalam Linux dan sebab anda memerlukannya:



Sumber: www.habr.com

Tambah komen