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.
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.
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.
Maak een map waarin we de afbeelding zullen mounten
mkdir mnt
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):
Opmerking. De locatie van het bestandssysteem kan ook worden bekeken met behulp van het hulpprogramma gescheiden.
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.
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.
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:
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
Aanvullende installatie van de rviz- en rqt-pakketten