Cài đặt ROS trong image Ubuntu IMG cho bo mạch đơn
Giới thiệu
Hôm nọ, khi đang làm luận án, tôi gặp phải nhu cầu tạo hình ảnh Ubuntu cho nền tảng một bo mạch đã cài đặt ROS (Hệ Điều Hành Robot - hệ điều hành robot). Nói tóm lại, bằng tốt nghiệp được dành cho việc quản lý một nhóm robot. Các robot được trang bị hai bánh xe và ba máy đo khoảng cách. Toàn bộ mọi thứ được điều khiển từ ROS, chạy trên bo mạch ODROID-C2.
Robot bọ rùa. Xin lỗi vì chất lượng ảnh kém
Không có thời gian cũng như không muốn cài đặt ROS trên từng robot riêng lẻ và do đó cần có hình ảnh hệ thống đã được cài đặt ROS. Sau khi duyệt Internet, tôi tìm thấy một số cách tiếp cận để thực hiện việc này.
Nói chung, tất cả các giải pháp được tìm thấy có thể được chia thành các nhóm sau.
Sử dụng các giải pháp từ nhóm đầu tiên dường như là lựa chọn đơn giản và hấp dẫn nhất, nhưng tôi chưa bao giờ có thể tạo hình ảnh hệ thống trực tiếp cho ODROID. Các giải pháp của nhóm thứ hai cũng không phù hợp với tôi do ngưỡng đầu vào khá cao. Lắp ráp thủ công theo các hướng dẫn có sẵn cũng không phù hợp, vì... Hình ảnh của tôi không có hệ thống tệp nén.
Kết quả là tôi đã xem được một video về chroot (chroot - thay đổi gốc, link video ở cuối bài) và khả năng của nó nên quyết định sử dụng. Tiếp theo, tôi sẽ mô tả trường hợp cụ thể của tôi về việc tùy chỉnh Ubuntu cho các nhà phát triển robot.
Dữ liệu nguồn:
Toàn bộ quá trình sửa đổi hình ảnh (ngoại trừ việc ghi vào thẻ SD bằng balenaEtcher) được thực hiện trên hệ điều hành Ubuntu 18.04.
Hệ điều hành mà tôi đã sửa đổi bản lắp ráp là phiên bản máy tính để bàn Ubuntu 18.04.3.
Máy mà hệ thống lắp ráp sẽ hoạt động là ODROID-C2.
Tạo một thư mục trong đó chúng ta sẽ gắn kết hình ảnh
mkdir mnt
Xác định phân vùng chứa hệ thống tập tin
file <файл образа>
Chúng tôi đang tìm kiếm một phân vùng có hệ thống tệp ở định dạng ext2, ext3 hoặc ext4. Chúng ta cần địa chỉ đầu phần (được đánh dấu màu đỏ trên màn hình):
Lưu ý. Vị trí của hệ thống tập tin cũng có thể được xem bằng tiện ích chia tay.
Gắn hình ảnh
sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/
Phần chúng ta cần bắt đầu với khối 264192 (số của bạn có thể khác nhau), kích thước của một khối là 512 byte, nhân chúng để có được thụt lề theo byte.
Chuyển đến thư mục có hệ thống được gắn và chơi trong đó
cd mnt/
sudo chroot ~/livecd/mnt/ bin/sh
~/livecd/mnt - đường dẫn đầy đủ đến thư mục với hệ thống được gắn kết thùng/sh - vỏ (cũng có thể được thay thế bằng thùng/bash)
Bây giờ bạn có thể bắt đầu cài đặt các gói và ứng dụng cần thiết.
Thiết lập quyền truy cập
Vì chúng tôi đã đăng nhập và trên thực tế, thực hiện mọi hành động thay mặt cho thư mục gốc của hệ thống đang được lắp ráp nên ROS sẽ chỉ được khởi chạy với quyền siêu người dùng.
Khi cố chạy roscore mà không có sudo, sẽ xảy ra lỗi:
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'
Để tránh xảy ra lỗi, hãy thay đổi đệ quy quyền truy cập vào thư mục chính của người dùng ROS. Để làm điều này chúng ta gõ: