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.
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.
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.
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):
Observera. Filsystemets plats kan också ses med hjälp av verktyget parted.
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.
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.
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:
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: