Installation af ROS i et Ubuntu IMG-billede til et enkelt bord
Indledning
Forleden dag, mens jeg arbejdede på mit speciale, stod jeg over for behovet for at oprette et Ubuntu-image til en singleboard-platform med ROS allerede installeret (Robot operativsystem - robot operativsystem). Kort sagt er diplomet viet til at lede en gruppe robotter. Robotterne er udstyret med to hjul og tre afstandsmålere. Det hele styres fra ROS, som kører på ODROID-C2 boardet.
Robot Mariehøne. Beklager den dårlige billedkvalitet
Der var hverken tid eller lyst til at installere ROS på hver enkelt robot, og derfor var der behov for et systembillede med allerede installeret ROS. Efter at have surfet på internettet fandt jeg flere tilgange til, hvordan dette kunne gøres.
Generelt kan alle fundne løsninger opdeles i følgende grupper.
At bruge løsninger fra den første gruppe syntes at være den enkleste og mest attraktive mulighed, men jeg var aldrig i stand til at skabe et live systembillede til ODROID. Løsningerne i den anden gruppe passede heller ikke mig på grund af den ret høje adgangstærskel. Manuel montering i henhold til de tilgængelige tutorials var heller ikke egnet, fordi... Mit billede havde ikke et komprimeret filsystem.
Som et resultat faldt jeg over en video om chroot (chroot - skift rod, link til videoen i slutningen af indlægget) og dens muligheder, blev det besluttet at bruge det. Dernæst vil jeg beskrive mit særlige tilfælde med at tilpasse Ubuntu til robotudviklere.
Indledende data:
Hele billedændringsprocessen (undtagen skrivning til SD-kortet ved hjælp af balenaEtcher) blev udført på Ubuntu 18.04-operativsystemet.
Operativsystemet, hvis assembly jeg ændrede, er Ubuntu 18.04.3 mate desktop version.
Maskinen, som det samlede system skal fungere på, er ODROID-C2.
Bestem den partition, hvor filsystemet er placeret
file <файл образа>
Vi leder efter en partition med et filsystem i ext2, ext3 eller ext4 format. Vi har brug for adressen på begyndelsen af afsnittet (fremhævet med rødt på skærmen):
Bemærk. Placeringen af filsystemet kan også ses ved hjælp af hjælpeprogrammet parted.
Montering af billedet
sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/
Sektionen vi skal bruge starter med blok 264192 (dine tal kan være forskellige), størrelsen af en blok er 512 bytes, gange dem for at få indrykningen i bytes.
Gå til mappen med det monterede system og hæng ud i den
cd mnt/
sudo chroot ~/livecd/mnt/ bin/sh
~/livecd/mnt — fuld sti til biblioteket med det monterede system bin/sh - skal (kan også erstattes med bin/bash)
Nu kan du begynde at installere de nødvendige pakker og programmer.
Installation af ROS
Jeg installerede den seneste version af ROS (ROS Melodic) iflg officiel tutorial.
Opdatering af listen over pakker
sudo apt-get update
Det er her jeg fik fejlen:
Err:6 http://deb.odroid.in/c2 bionic InRelease
The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <[email protected]>
Dette skyldes, at pakkesigneringsnøglen er udløbet. For at opdatere nøglerne skal du skrive:
Opsætning af adgangsrettigheder
Da vi er logget ind og faktisk udfører alle handlinger på vegne af roden af det system, der samles, vil ROS kun blive lanceret med superbrugerrettigheder.
Når du forsøger at køre roscore uden sudo, opstår der en fejl:
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 at forhindre fejlen i at opstå, lad os rekursivt ændre adgangsrettighederne til ROS-brugerens hjemmemappe. For at gøre dette skriver vi: