روز دیگر، در حالی که روی پایان نامه خود کار می کردم، با نیاز به ایجاد یک تصویر اوبونتو برای یک پلت فرم تک تخته با ROS از قبل نصب شده مواجه شدم (سیستم عامل ربات - سیستم عامل ربات). به طور خلاصه، این مدرک به مدیریت گروهی از روبات ها اختصاص دارد. این روبات ها به دو چرخ و سه فاصله یاب مجهز هستند. همه چیز از ROS کنترل می شود که روی برد ODROID-C2 اجرا می شود.
ربات لیدی باگ. با عرض پوزش بابت کیفیت پایین عکس
نه زمان و نه تمایلی برای نصب ROS روی هر ربات به صورت جداگانه وجود نداشت و بنابراین نیاز به یک تصویر سیستم با ROS از قبل نصب شده بود. پس از گشت و گذار در اینترنت، چندین روش برای انجام این کار پیدا کردم.
به طور کلی تمام راه حل های یافت شده را می توان به گروه های زیر تقسیم کرد.
استفاده از راه حل های گروه اول ساده ترین و جذاب ترین گزینه به نظر می رسید، اما من هرگز نتوانستم یک تصویر سیستمی زنده برای ODROID ایجاد کنم. راه حل های گروه دوم نیز به دلیل آستانه ورود نسبتاً بالا مناسب من نبود. مونتاژ دستی طبق آموزش های موجود نیز مناسب نبود، زیرا ... تصویر من فایل سیستم فشرده ای نداشت.
در نتیجه، با ویدیویی در مورد chroot مواجه شدم (chroot - تغییر ریشه، لینک ویدیو در انتهای پست) و قابلیت های آن، تصمیم گرفته شد از آن استفاده شود. در مرحله بعد، من مورد خاص خود را از سفارشی کردن اوبونتو برای توسعه دهندگان رباتیک شرح خواهم داد.
اطلاعات اولیه:
کل فرآیند اصلاح تصویر (به جز نوشتن روی کارت SD با استفاده از balenaEtcher) در سیستم عامل اوبونتو 18.04 انجام شد.
سیستم عاملی که اسمبلی آن را اصلاح کردم، نسخه دسکتاپ اوبونتو 18.04.3 میت است.
ماشینی که سیستم مونتاژ شده باید روی آن کار کند ODROID-C2 است.
یک دایرکتوری ایجاد کنید که در آن تصویر را نصب کنیم
mkdir mnt
پارتیشنی که فایل سیستم روی آن قرار دارد را تعیین کنید
file <файл образа>
ما به دنبال یک پارتیشن با فایل سیستم در فرمت های ext2، ext3 یا ext4 هستیم. ما به آدرس ابتدای بخش نیاز داریم (با رنگ قرمز روی صفحه برجسته شده است):
توجه داشته باشید. مکان فایل سیستم را می توان با استفاده از ابزار نیز مشاهده کرد جدا.
نصب تصویر
sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/
بخش مورد نیاز ما با بلوک 264192 شروع می شود (اعداد شما ممکن است متفاوت باشد)، اندازه یک بلوک 512 بایت است، آنها را ضرب کنید تا تورفتگی در بایت به دست آید.
به پوشه ای با سیستم نصب شده بروید و در آن پاتوق کنید
cd mnt/
sudo chroot ~/livecd/mnt/ bin/sh
~/livecd/mnt - مسیر کامل به دایرکتوری با سیستم نصب شده bin/sh - پوسته (همچنین قابل تعویض با bin/bash)
اکنون می توانید نصب بسته ها و برنامه های لازم را شروع کنید.
نصب ROS
من طبق آخرین نسخه ROS (ROS Melodic) نصب کردم آموزش رسمی.
به روز رسانی لیست بسته ها
sudo apt-get update
این جایی است که من خطا را دریافت کردم:
Err:6 http://deb.odroid.in/c2 bionic InRelease
The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <[email protected]>
این به این دلیل است که کلید امضای بسته منقضی شده است. برای به روز رسانی کلیدها، تایپ کنید:
تنظیم حقوق دسترسی
از آنجایی که ما وارد سیستم شدهایم و در واقع، همه اقدامات را از طرف ریشه سیستم در حال مونتاژ انجام میدهیم، 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 را تغییر دهیم. برای این کار تایپ می کنیم: