Installere ROS i et Ubuntu IMG-bilde for enkeltbrett

Innledning

Forleden, mens jeg jobbet med oppgaven min, ble jeg møtt med behovet for å lage et Ubuntu-bilde for en enkeltbordsplattform med ROS allerede installert (Robotoperativsystem - robotoperativsystem). Kort fortalt er diplomet viet til å administrere en gruppe roboter. Robotene er utstyrt med to hjul og tre avstandsmålere. Det hele styres fra ROS, som kjører på ODROID-C2-kortet.

Installere ROS i et Ubuntu IMG-bilde for enkeltbrett
Robot Ladybug. Beklager dårlig bildekvalitet

Det var verken tid eller ønske om å installere ROS på hver enkelt robot, og derfor var det behov for et systembilde med ROS allerede installert. Etter å ha surfet på Internett fant jeg flere tilnærminger til hvordan dette kunne gjøres.
Generelt kan alle løsninger som er funnet deles inn i følgende grupper.

  1. Programmer som lager et bilde fra et ferdiglaget og konfigurert system (Distroshare Ubuntu Imager, linux live kit, linux respin, systemback, etc.)
  2. Prosjekter som lar deg lage ditt eget bilde (yocto, linux fra bunnen av)
  3. Sette sammen bildet selv (live CD-tilpasning и russisk tilsvarendepluss artikkel om Habré)

Å bruke løsninger fra den første gruppen så ut til å være det enkleste og mest attraktive alternativet, men jeg klarte aldri å lage et live systembilde for ODROID. Løsningene til den andre gruppen passet heller ikke meg på grunn av den ganske høye inngangsterskelen. Manuell montering i henhold til de tilgjengelige veiledningene var heller ikke egnet, fordi... Bildet mitt hadde ikke et komprimert filsystem.
Som et resultat kom jeg over en video om chroot (chroot - endre rot, lenke til videoen på slutten av innlegget) og dens muligheter, ble det besluttet å bruke den. Deretter vil jeg beskrive mitt spesielle tilfelle med å tilpasse Ubuntu for robotikkutviklere.

Innledende data:

  • Hele bildemodifiseringsprosessen (bortsett fra skriving til SD-kortet ved hjelp av balenaEtcher) ble utført på Ubuntu 18.04-operativsystemet.
  • Operativsystemet hvis sammenstilling jeg modifiserte er Ubuntu 18.04.3 mate desktop-versjonen.
  • Maskinen som det sammensatte systemet skal fungere på er ODROID-C2.

Forbereder bildet

  1. Last ned Ubuntu-bildet for ODROID fra offisielle nettsted

  2. Pakker ut arkivet

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

  3. Lag en katalog der vi skal montere bildet

    mkdir mnt

  4. Bestem partisjonen som filsystemet er plassert på

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

    Vi ser etter en partisjon med filsystem i ext2, ext3 eller ext4 format. Vi trenger adressen til begynnelsen av delen (uthevet i rødt på skjermen):

    Installere ROS i et Ubuntu IMG-bilde for enkeltbrett

    Note. Plasseringen av filsystemet kan også sees ved hjelp av verktøyet skiltes.

  5. Montering av bildet

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

    Seksjonen vi trenger starter med blokk 264192 (numrene dine kan variere), størrelsen på en blokk er 512 byte, multipliser dem for å få innrykk i byte.

  6. Gå til mappen med det monterte systemet og heng ut i den

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

    ~/livecd/mnt — full bane til katalogen med det monterte systemet
    bin/sh - skall (kan også erstattes med bin/bash)
    Nå kan du begynne å installere de nødvendige pakkene og applikasjonene.

Installerer ROS

Jeg installerte den nyeste versjonen av ROS (ROS Melodic) iht offisiell opplæring.

  1. Oppdaterer listen over pakker

    sudo apt-get update

    Her fikk jeg feilen:

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

    Dette skyldes det faktum at pakkesigneringsnøkkelen har utløpt. For å oppdatere nøklene, skriv:

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

  2. Klargjør systemet for installasjon av 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. Installerer ROS
    Dessverre klarte jeg ikke å installere skrivebordsversjonen av ROS, så jeg installerte bare de grunnleggende pakkene:

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

    Merknad 1. Noen ganger oppstod det en feil under installasjonsprosessen:

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

    Det ble fikset ved å tømme cachen ved å bruke apt-verktøyet:

    sudo apt-get clean; sudo apt-get autoclean

    Merknad 2. Etter installasjon, kilde ved hjelp av kommandoen:

    source /opt/ros/melodic/setup.bash

    det vil ikke fungere, fordi Vi kjørte ikke bash, så det trenger IKKE å skrives inn i terminalen.

  4. Installere nødvendige avhengigheter

    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. Sette opp tilgangsrettigheter
    Siden vi er pålogget og faktisk utfører alle handlinger på vegne av roten til systemet som settes sammen, vil ROS kun bli lansert med superbrukerrettigheter.
    Når du prøver å kjøre roscore uten sudo, oppstår det en feil:

    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'

    For å forhindre at feilen oppstår, la oss rekursivt endre tilgangsrettighetene til ROS-brukerens hjemmekatalog. For å gjøre dette skriver vi:

    sudo rosdep fix-permissions

  6. Ytterligere installasjon av rviz- og rqt-pakkene

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

Siste finpuss

  1. Avslutt chroot:
    exit
  2. Demonter bildet
    cd ..
    sudo umount mnt/
  3. La oss pakke systembildet inn i et arkiv
    xz –ckv1 <файл образа>

Alle! Nå med hjelp balenaetcher du kan brenne systembildet til et SD-kort, sette det inn i ODROID-C2, og du vil ha Ubuntu med ROS installert!

referanser:

  • Denne videoen hjalp mye med hvordan du jukser i Linux og hvorfor du trenger det:



Kilde: www.habr.com

Legg til en kommentar