ROS installeren in een Ubuntu IMG-image voor single-board

Introductie

Onlangs, terwijl ik aan mijn proefschrift werkte, werd ik geconfronteerd met de noodzaak om een ​​Ubuntu-image te maken voor een single-board platform waarop ROS al was geïnstalleerd (Robotbesturingssysteem - robotbesturingssysteem). Kortom, het diploma staat in het teken van het aansturen van een groep robots. De robots zijn uitgerust met twee wielen en drie afstandsmeters. Het geheel wordt bestuurd vanuit ROS, dat draait op het ODROID-C2-bord.

ROS installeren in een Ubuntu IMG-image voor single-board
Robotlieveheersbeestje. Sorry voor de slechte fotokwaliteit

Er was geen tijd of wens om ROS op elke robot afzonderlijk te installeren, en daarom was er behoefte aan een systeemimage waarop ROS al was geïnstalleerd. Nadat ik op internet had rondgekeken, vond ik verschillende manieren waarop dit kon worden gedaan.
Over het algemeen kunnen alle gevonden oplossingen in de volgende groepen worden verdeeld.

  1. Programma's die een image maken van een kant-en-klaar en geconfigureerd systeem (Distroshare Ubuntu Imager, Linux livekit, Linux resp, systeemback, enz.)
  2. Projecten waarmee u uw eigen afbeelding kunt maken (yocto, Linux helemaal opnieuw)
  3. Zelf de afbeelding samenstellen (live-cd-aanpassing и Russisch equivalentplus artikel over Habré)

Het gebruik van oplossingen uit de eerste groep leek de eenvoudigste en meest aantrekkelijke optie, maar het lukte me nooit om een ​​live systeemimage voor ODROID te maken. Ook de oplossingen van de tweede groep bevielen mij niet vanwege de vrij hoge instapdrempel. Handmatige montage volgens de beschikbare tutorials was ook niet geschikt, omdat... Mijn afbeelding had geen gecomprimeerd bestandssysteem.
Als resultaat kwam ik een video tegen over chroot (chroot - verander de root, link naar de video aan het einde van het bericht) en de mogelijkheden ervan, werd besloten om het te gebruiken. Vervolgens zal ik mijn specifieke geval beschrijven van het aanpassen van Ubuntu voor robotica-ontwikkelaars.

Initiële data:

  • Het volledige beeldwijzigingsproces (behalve het schrijven naar de SD-kaart met balenaEtcher) werd uitgevoerd op het Ubuntu 18.04-besturingssysteem.
  • Het besturingssysteem waarvan ik de assemblage heb aangepast, is de Ubuntu 18.04.3 mate desktopversie.
  • De machine waarop het samengestelde systeem zou moeten werken is ODROID-C2.

Het beeld voorbereiden

  1. Download de Ubuntu-image voor ODROID van officiële website

  2. Het archief uitpakken

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

  3. Maak een map waarin we de afbeelding zullen mounten

    mkdir mnt

  4. Bepaal de partitie waarop het bestandssysteem zich bevindt

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

    We zijn op zoek naar een partitie met een bestandssysteem in ext2-, ext3- of ext4-formaat. We hebben het adres van het begin van de sectie nodig (rood gemarkeerd op het scherm):

    ROS installeren in een Ubuntu IMG-image voor single-board

    Opmerking. De locatie van het bestandssysteem kan ook worden bekeken met behulp van het hulpprogramma gescheiden.

  5. Het beeld monteren

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

    De sectie die we nodig hebben begint met blok 264192 (uw cijfers kunnen verschillen), de grootte van één blok is 512 bytes, vermenigvuldig ze om de inspringing in bytes te krijgen.

  6. Ga naar de map met het aangekoppelde systeem en hang daarin rond

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

    ~/livecd/mnt — volledig pad naar de map met het gekoppelde systeem
    bak/sch - schaal (kan ook worden vervangen door bak/bash)
    Nu kunt u beginnen met het installeren van de benodigde pakketten en applicaties.

ROOS installeren

Ik heb de nieuwste versie van ROS (ROS Melodic) geïnstalleerd volgens officiële tutorial.

  1. De lijst met pakketten bijwerken

    sudo apt-get update

    Hier kreeg ik de fout:

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

    Dit komt door het feit dat de pakketondertekeningssleutel is verlopen. Om de sleutels bij te werken, typt u:

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

  2. Het systeem voorbereiden op het installeren van 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. ROOS installeren
    Helaas kon ik de desktopversie van ROS niet installeren, dus heb ik alleen de basispakketten geïnstalleerd:

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

    Opmerking 1. Tijdens het installatieproces trad er soms een fout op:

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

    Het probleem werd opgelost door de cache te wissen met behulp van het hulpprogramma apt:

    sudo apt-get clean; sudo apt-get autoclean

    Opmerking 2. Na de installatie kunt u broncode gebruiken met de opdracht:

    source /opt/ros/melodic/setup.bash

    het zal niet werken, omdat We hebben bash niet uitgevoerd, dus het hoeft NIET in de terminal te worden getypt.

  4. Het installeren van de benodigde afhankelijkheden

    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. Toegangsrechten instellen
    Omdat we zijn ingelogd en feitelijk alle acties uitvoeren namens de root van het systeem dat wordt samengesteld, wordt ROS alleen gestart met superuser-rechten.
    Wanneer u roscore probeert uit te voeren zonder sudo, treedt er een fout op:

    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'

    Om te voorkomen dat de fout optreedt, gaan we recursief de toegangsrechten tot de homedirectory van de ROS-gebruiker wijzigen. Om dit te doen typen we:

    sudo rosdep fix-permissions

  6. Aanvullende installatie van de rviz- en rqt-pakketten

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

Laatste hand

  1. Sluit de chroot af:
    exit
  2. Ontkoppel de afbeelding
    cd ..
    sudo umount mnt/
  3. Laten we de systeemimage in een archief plaatsen
    xz –ckv1 <файл образа>

Alle! Nu met de hulp balenaetcher je kunt de systeemimage op een SD-kaart branden, deze in ODROID-C2 plaatsen en je hebt Ubuntu met ROS geïnstalleerd!

referenties:

  • Deze video heeft veel geholpen met hoe je vals kunt spelen in Linux en waarom je het nodig hebt:



Bron: www.habr.com

Voeg een reactie