Introduktion
HĂ€romdagen, nĂ€r jag arbetade med min examen, stötte jag pĂ„ behovet av att skapa en bild av Ubuntu för en inbyggd dator med redan installerat ROS (Robot Operating System â operativsystemet för robotar). Kort sagt handlar min avhandling om att styra en grupp av robotar. Robotarna Ă€r utrustade med tvĂ„ hjul och tre avstĂ„ndsmĂ€tare. Allt styrs frĂ„n ROS, som körs pĂ„ ett ODROID-C2-kort.

Robot Ladybug. FörlÄt för dÄlig bildkvalitet.
Det fanns varken tid eller lust att installera ROS pÄ varje robot individuellt, vilket ledde till behovet av ett system med redan installerat ROS. Efter att ha surfat runt pÄ nÀtet hittade jag flera metoder för hur detta skulle kunna göras.
Ăvergripande kan alla hittade lösningar delas in i följande grupper.
- Program som skapar en bild av ett fÀrdigt och konfigurerat system (, , , systemback och flera andra)
- Projekt som gör det möjligt att skapa sin egen bild (, )
- Manuell bilduppbyggnad ( och , plus )
Att anvÀnda lösningar frÄn den första gruppen verkade vara det enklaste och mest attraktiva alternativet, men jag lyckades inte skapa en live-systembild för ODROID. Lösningar frÄn den andra gruppen passade mig inte heller pÄ grund av den ganska höga inlÀrningströskeln. Manuell uppbyggnad utifrÄn tillgÀngliga guider fungerade inte heller, eftersom min bild inte hade nÄgot komprimerat filsystem.
Till slut, efter att ha snubblat över en video om chroot (chroot â change root, lĂ€nk till videon i slutet av inlĂ€gget) och dess möjligheter, beslutades det att anvĂ€nda det. Jag kommer nu att beskriva mitt specifika fall av anpassning av Ubuntu för robotik utvecklare.
UtgÄngsdatan:
- Hela processen för att modifiera bilden (med undantag för skrivningen till SD-kortet med balenaEtcher) utfördes i operativsystemet Ubuntu 18.04.
- Operativsystemet som bilden modifierades av var â Ubuntu 18.04.3 mate desktop-version.
- Maskinen dĂ€r det sammanstĂ€llda systemet ska köras Ă€r â ODROID-C2.
Förberedelse av bilden
Ladda ner bilden av Ubuntu för ODROID frÄn
Packa upp arkivet
unxz âkvSkapa en katalog dĂ€r vi ska montera bilden
mkdir mntBestÀm partitionen dÀr filsystemet ligger
fileSök efter partition med filsystemet i formatet ext2, ext3 eller ext4. Vi behöver adressen till början av partitionen (markerad med rött i bilden):

Anteckning. Filstrukturens placering kan ocksÄ ses med hjÀlp av verktyget parted.Montera bilden
sudo mount -o loop,offset=$((264192*512)) mnt/Den del vi behöver börjar med block 264192 (dina siffror kan variera), storleken av ett block Àr 512 byte, vi multiplicerar dem för att fÄ förskjutningen i byte.
Vi gÄr till mappen med det monterade systemet och chrootar oss i den
cd mnt/ sudo chroot ~/livecd/mnt/ bin/sh~/livecd/mnt â fullstĂ€ndig vĂ€g till mappen med det monterade systemet
bin/sh â skal (kan ocksĂ„ bytas mot bin/bash)
Nu kan vi börja installera nödvÀndiga paket och applikationer.
Installera ROS
Jag installerade den senaste versionen av ROS (ROS Melodic) enligt .
Uppdatera paketlistan
sudo apt-get updateHĂ€r fick jag ett fel:
Err:6 http://deb.odroid.in/c2 bionic InRelease The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr)Det Àr relaterat till att signeringsnyckeln har gÄtt ut. För att uppdatera nycklarna skriver vi:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AB19BAC9Förbereder systemet för installationen 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 C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654sudo apt updateInstallerar ROS
TyvÀrr kunde jag inte installera desktopversionen av ROS, sÄ jag installerade bara grundpaketen:sudo apt install ros-melodic-ros-base apt search ros-melodicNot 1. I installationsprocessen uppstod ibland ett fel:
dpkg: error: failed to write status database record about 'iputils-ping' to '/var/lib/dpkg/status': No space left on deviceDet löstes genom att rensa apt-cache:
sudo apt-get clean; sudo apt-get autocleanNot 2. Efter installationen behöver vi kÀllkoden (source) med kommandot:
source /opt/ros/melodic/setup.bashkommer inte att fungera, eftersom vi inte har startat bash, sÄ det ska INTE skrivas i terminalen.
Installerar nödvÀndiga beroenden
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essentialsudo apt install python-rosdepsudo rosdep init rosdep updateStÀller in behörigheter
Eftersom vi har chrootat oss och faktiskt utför alla ÄtgÀrder under namnet root för det byggda systemet, kommer ROS ocksÄ att köras endast med superanvÀndarrÀttigheter.
Vid försök att 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 undvika fel Àndrar vi rekursivt accessrÀttigheterna till anvÀndarens hemkatalog ROS. För detta skriver vi in:
sudo rosdep fix-permissionsInstallerar paketen rviz och rqt
sudo apt-get install ros-melodic-rqt ros-melodic-rviz
Slutliga detaljer
- Klarar ut chroot:
exit - Avmonterar bilden
cd .. sudo umount mnt/ - Packar systemavbilden i ett arkiv
xz âckv1
DÄ! Nu kan man med hjÀlp av skriva systemavbilden pÄ SD-kortet, sÀtta in den i ODROID-C2, och du fÄr Ubuntu med installerat ROS!
LĂ€nkar:
- Det hÀr videoklippet hjÀlpte mycket att förstÄ varför man kör chroot i linux och vad det Àr bra för:

KĂ€lla: habr.com

