في اليوم الآخر ، أثناء العمل على أطروحة ، واجهت الحاجة إلى إنشاء صورة Ubuntu لجهاز أحادي اللوحة مع تثبيت ROS بالفعل (نظام تشغيل الروبوت - نظام تشغيل الروبوتات). باختصار ، الدبلومة تدور حول إدارة مجموعة من الروبوتات. تم تجهيز الروبوتات بعجلتين وثلاثة أجهزة تحديد المدى. يتم التحكم في كل شيء من ROS ، والتي تدور على لوحة ODROID-C2.
روبوت الخنفساء. آسف لسوء جودة الصورة
لم يكن هناك وقت ولا رغبة في تثبيت ROS على كل روبوت على حدة ، وبالتالي كانت هناك حاجة إلى صورة نظام مع تثبيت ROS بالفعل. بعد أن تجولت في مساحات الإنترنت ، وجدت عدة طرق لكيفية القيام بذلك.
بشكل عام ، يمكن تقسيم جميع الحلول التي تم العثور عليها إلى المجموعات التالية.
بدا استخدام الحلول من المجموعة الأولى الخيار الأسهل والأكثر جاذبية ، لكنني لم أنجح في إنشاء صورة نظام حية لـ ODROID. لم تناسبني حلول المجموعة الثانية أيضًا بسبب عتبة الدخول المرتفعة إلى حد ما. لم يكن التجميع بمقابض وفقًا للدروس المتاحة مناسبًا أيضًا ، لأن. لم يكن لصورتي نظام ملفات مضغوط.
نتيجة لذلك ، صادفت مقطع فيديو حول chroot (الجذور - تغيير الجذر، رابط الفيديو في نهاية التدوينة) وإمكانياتها ، تقرر استخدامها. بعد ذلك ، سأصف حالتي الخاصة لتخصيص Ubuntu لمطوري الروبوتات.
خلفية:
تم إجراء عملية تعديل الصورة بأكملها (باستثناء الكتابة على بطاقة SD باستخدام balenaEtcher) على نظام التشغيل Ubuntu 18.04.
نظام التشغيل ، الذي تم تعديل التجميع منه - إصدار سطح المكتب Ubuntu 18.04.3 mate.
الجهاز الذي يجب أن يعمل عليه النظام المجمع هو ODROID-C2.
نحن نبحث عن قسم بنظام ملفات بتنسيق ext2 أو ext3 أو ext4. نحتاج إلى عنوان بداية القسم (مظلل باللون الأحمر على الشاشة):
ملاحظة. يمكن أيضًا عرض موقع نظام الملفات باستخدام الأداة المساعدة افترقنا.
تركيب الصورة
sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/
يبدأ القسم الذي نحتاجه بالكتلة 264192 (قد تختلف الأرقام الخاصة بك) ، وحجم الكتلة الواحدة هو 512 بايت ، ونضربها للحصول على المسافة البادئة بالبايت.
انتقل إلى المجلد الذي يحتوي على النظام المحمل وتجول فيه
cd mnt/
sudo chroot ~/livecd/mnt/ bin/sh
~ / livecd / mnt - المسار الكامل للدليل مع النظام المثبت بن / ش - قذيفة (يمكن استبدالها أيضًا بـ بن / باش)
الآن يمكنك بالفعل تثبيت الحزم والتطبيقات اللازمة.
إعداد حقوق الوصول
نظرًا لأننا متشابكون ، وفي الواقع ، فإننا نقوم بجميع الإجراءات نيابة عن جذر النظام الذي يتم تجميعه ، عندئذٍ لن تعمل ROS إلا بحقوق المستخدم المتميز.
عند محاولة تشغيل roscore بدون sudo ، يحدث خطأ:
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'
لتجنب الخطأ ، نقوم بتغيير حقوق الوصول بشكل متكرر إلى الدليل الرئيسي لمستخدم ROS. للقيام بذلك ، نكتب: