Installera ROS i en Ubuntu IMG-avbildning för enkelkort

Inledning

Häromdagen, när jag arbetade med mitt examensarbete, stod jag inför behovet av att skapa en Ubuntu-avbildning för en enkortsplattform med ROS redan installerat (Robotoperativsystem - robotoperativsystem). Kort sagt, diplomet ägnas åt att hantera en grupp robotar. Robotarna är utrustade med två hjul och tre avståndsmätare. Det hela styrs från ROS, som körs på ODROID-C2-kortet.

Installera ROS i en Ubuntu IMG-avbildning för enkelkort
Robot nyckelpiga. Ursäkta den dåliga bildkvaliteten

Det fanns varken tid eller lust att installera ROS på varje robot individuellt och därför fanns det ett behov av en systembild med ROS redan installerat. Efter att ha surfat på Internet hittade jag flera metoder för hur detta skulle kunna göras.
I allmänhet kan alla hittade lösningar delas in i följande grupper.

  1. Program som skapar en bild från ett färdigt och konfigurerat system (Distroshare Ubuntu Imager, linux live kit, linux respin, systemback, etc.)
  2. Projekt som låter dig skapa din egen bild (yocto, linux från början)
  3. Montera bilden själv (anpassning av live-CD и rysk motsvarighet, ett plus artikel om Habré)

Att använda lösningar från den första gruppen verkade vara det enklaste och mest attraktiva alternativet, men jag kunde aldrig skapa en live systembild för ODROID. Den andra gruppens lösningar passade inte heller mig på grund av den ganska höga inträdesgränsen. Manuell montering enligt de tillgängliga handledningarna var inte heller lämplig, eftersom... Min bild hade inget komprimerat filsystem.
Som ett resultat kom jag över en video om chroot (chroot - byt rot, länk till videon i slutet av inlägget) och dess möjligheter, beslutade man att använda den. Därefter kommer jag att beskriva mitt specifika fall av att anpassa Ubuntu för robotutvecklare.

Initial data:

  • Hela bildändringsprocessen (förutom att skriva till SD-kortet med balenaEtcher) utfördes på operativsystemet Ubuntu 18.04.
  • Operativsystemet vars sammansättning jag modifierade är Ubuntu 18.04.3 mate desktop version.
  • Maskinen som det sammansatta systemet ska fungera på är ODROID-C2.

Förbereder bilden

  1. Ladda ner Ubuntu-bilden för ODROID från officiell plats

  2. Packar upp arkivet

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

  3. Skapa en katalog där vi ska montera bilden

    mkdir mnt

  4. Bestäm partitionen där filsystemet finns

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

    Vi letar efter en partition med ett filsystem i ext2, ext3 eller ext4 format. Vi behöver adressen till början av avsnittet (markerat i rött på skärmen):

    Installera ROS i en Ubuntu IMG-avbildning för enkelkort

    Observera. Filsystemets plats kan också ses med hjälp av verktyget parted.

  5. Montering av bilden

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

    Sektionen vi behöver börjar med block 264192 (dina nummer kan skilja sig åt), storleken på ett block är 512 byte, multiplicera dem för att få indraget i byte.

  6. Gå till mappen med det monterade systemet och häng i den

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

    ~/livecd/mnt — fullständig sökväg till katalogen med det monterade systemet
    bin/sh - skal (kan även ersättas med bin/bash)
    Nu kan du börja installera de nödvändiga paketen och programmen.

Installerar ROS

Jag installerade den senaste versionen av ROS (ROS Melodic) enligt officiella handledning.

  1. Uppdaterar listan över paket

    sudo apt-get update

    Det är här jag fick felet:

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

    Detta beror på att paketsigneringsnyckeln har gått ut. För att uppdatera nycklarna, skriv:

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

  2. Förbereder systemet för installation 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. Installerar ROS
    Tyvärr kunde jag inte installera skrivbordsversionen av ROS, så jag installerade bara de grundläggande paketen:

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

    Not 1 Under installationsprocessen inträffade ibland ett fel:

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

    Det fixades genom att rensa cachen med hjälp av apt-verktyget:

    sudo apt-get clean; sudo apt-get autoclean

    Not 2 Efter installationen, källkod med kommandot:

    source /opt/ros/melodic/setup.bash

    det kommer inte att fungera, eftersom Vi körde inte bash, så det behöver INTE skrivas i terminalen.

  4. Installera nödvändiga beroenden

    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. Konfigurera åtkomsträttigheter
    Eftersom vi är inloggade och i själva verket utför alla åtgärder på uppdrag av roten av systemet som monteras, kommer ROS endast att startas med superanvändarrättigheter.
    När du försöker köra roscore utan sudo, uppstår ett fel:

    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'

    För att förhindra att felet uppstår, låt oss rekursivt ändra åtkomsträttigheterna till ROS-användarens hemkatalog. För att göra detta skriver vi:

    sudo rosdep fix-permissions

  6. Ytterligare installation av rviz- och rqt-paketen

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

Sista handen

  1. Avsluta chroot:
    exit
  2. Avmontera bilden
    cd ..
    sudo umount mnt/
  3. Låt oss packa systembilden i ett arkiv
    xz –ckv1 <файл образа>

Allt! Nu med hjälp balenaetcher du kan bränna systemavbildningen till ett SD-kort, sätta in den i ODROID-C2, så har du Ubuntu med ROS installerat!

Länkar:

  • Den här videon hjälpte mycket med hur man fuskar i Linux och varför du behöver det:



Källa: will.com

Lägg en kommentar