ROS không phải hệ điều hành mà là một bộ công cụ và quy ước để các chương trình robot nói chuyện với nhau. Phần này đi từ máy trắng tới chỗ chạy được thứ gì đó, và nêu rõ những chỗ người mới hay kẹt.
Chuẩn bị môi trường
Chọn phiên bản. Mỗi bản ROS 2 gắn với một phiên bản hệ điều hành cụ thể. Cài lệch phiên bản là nguyên nhân số một của việc không cài được, và không có cách vá dễ dàng.
Nguyên tắc. Chọn bản hỗ trợ dài hạn, và chọn đúng phiên bản hệ điều hành mà nó khuyến nghị. Đừng cố cài lên bản hệ điều hành mới hơn.
Cài trên máy thật hay máy ảo. Máy ảo tiện để thử nhưng gặp vấn đề với đồ hoạ ba chiều và với thiết bị cắm ngoài. Nếu định làm nghiêm túc thì cài máy thật hoặc khởi động kép.
Container. Cách tốt để tránh làm bẩn máy và để chia sẻ môi trường giống hệt nhau trong nhóm. Thêm một lớp phức tạp cho người mới, nhưng đáng học sớm.
Kiểm tra sau khi cài. Chạy hai chương trình mẫu nói chuyện với nhau. Nếu chúng thấy nhau thì môi trường đã đúng.
Nguồn tài liệu. Tài liệu chính thức là nơi bắt đầu. Hướng dẫn trên mạng thường viết cho phiên bản cũ và làm theo sẽ sai.
Cấu trúc không gian làm việc
Khái niệm. Không gian làm việc là một thư mục chứa mã nguồn các gói của bạn, cùng với thư mục chứa kết quả biên dịch.
Thư mục nguồn. Chứa các gói. Mỗi gói là một thư mục con có tệp mô tả riêng.
Biên dịch. Công cụ biên dịch quét thư mục nguồn, xác định thứ tự phụ thuộc, và dựng từng gói.
Nạp môi trường. Sau khi biên dịch phải nạp tệp môi trường thì hệ thống mới tìm thấy gói vừa dựng. Quên bước này là lỗi phổ biến nhất của người mới, và triệu chứng là báo không tìm thấy gói vừa tạo.
Nạp môi trường nào. Môi trường hệ thống trước, môi trường không gian làm việc sau. Thứ tự quan trọng.
Nhiều không gian làm việc chồng nhau. Có thể xếp lớp nhiều không gian, lớp trên ghi đè lớp dưới. Hữu ích nhưng gây bối rối khi không nhớ mình đang nạp cái gì.
Mẹo thực dụng. Khi có gì đó không tìm thấy, kiểm biến môi trường trước. Chín trên mười lần là vấn đề nạp môi trường chứ không phải lỗi mã.
Node, topic và cơ chế truyền thông
Node. Một chương trình làm một việc. Đọc cảm biến, tính toán, điều khiển động cơ.
Topic. Kênh dữ liệu có tên. Node phát ra topic, node khác đăng ký nhận. Bên phát không biết ai nhận.
Khi nào dùng topic. Dữ liệu chảy liên tục — ảnh, khoảng cách, vị trí, lệnh vận tốc.
Dịch vụ. Gọi và chờ trả lời. Dùng cho yêu cầu có kết quả cụ thể và nhanh.
Hành động. Yêu cầu mất thời gian, có báo tiến độ và huỷ được. Dùng cho việc như đi tới một điểm.
Tham số. Giá trị cấu hình đọc và sửa được lúc chạy.
Sai lầm phổ biến. Dùng topic cho việc cần trả lời. Node phát lệnh rồi không biết lệnh có được thực hiện không.
Công cụ kiểm tra. Có lệnh liệt kê node đang chạy, liệt kê topic, xem dữ liệu trên topic, và vẽ đồ thị kết nối. Học dùng chúng sớm — chúng trả lời được phần lớn câu hỏi khi có gì đó không chạy.
Những chỗ hay kẹt
Hai node không thấy nhau. Kiểm cùng một mạng, kiểm cùng mã miền, kiểm tường lửa. Với nhiều máy thì đây là vấn đề thường gặp nhất.
Đăng ký topic mà không nhận được gì. Thường do tên topic khác nhau, hoặc do cấu hình chất lượng dịch vụ không tương thích giữa bên phát và bên nhận. Cái sau khó phát hiện vì không có báo lỗi rõ ràng.
Biên dịch được nhưng không chạy được. Thường là thiếu khai báo trong tệp mô tả gói, hoặc quên nạp môi trường.
Chạy được trên máy mình mà không chạy trên máy khác. Phụ thuộc chưa khai báo đầy đủ. Kiểm bằng cách dựng trong container sạch.
Node chạy chậm bất thường. Có thể do truyền dữ liệu lớn qua mạng thay vì trong cùng tiến trình. Ảnh và đám mây điểm là thủ phạm thường gặp.
Thời gian không khớp. Khi có mô phỏng, cần dùng thời gian mô phỏng thay vì thời gian hệ thống. Quên đặt tham số này gây hành vi rất khó hiểu.
Cách gỡ chung. Chia nhỏ, chạy từng phần, xem dữ liệu ở từng bước. Đoán mò tốn nhiều thời gian hơn nhiều.
Lộ trình học hợp lý
Tuần đầu. Cài đặt, chạy ví dụ mẫu, hiểu node và topic, dùng thành thạo các lệnh kiểm tra.
Tuần hai. Viết node của mình — một node phát, một node nhận. Hiểu cấu trúc gói và quy trình biên dịch.
Tuần ba. Chạy mô phỏng một robot có sẵn. Điều khiển nó bằng bàn phím. Xem dữ liệu cảm biến.
Tuần bốn. Dùng công cụ hiển thị để xem dữ liệu ba chiều. Hiểu hệ toạ độ và cây biến đổi toạ độ — đây là khái niệm quan trọng và hay gây nhầm lẫn nhất.
Sau đó. Chọn một hướng cụ thể — điều hướng, thao tác, hoặc thị giác — và làm sâu vào đó.
Lời khuyên quan trọng. Đừng cố hiểu hết trước khi làm. ROS rất rộng và không ai dùng hết. Học phần cần cho việc đang làm.
Và có phần cứng thật sớm. Dù chỉ là một robot nhỏ. Mô phỏng không dạy được những gì xảy ra khi cảm biến nhiễu và động cơ không đúng như mong đợi.
Câu hỏi thường gặp
Nguyên nhân số một khiến không cài được ROS 2?
Cài lệch phiên bản — mỗi bản ROS 2 gắn với một phiên bản hệ điều hành cụ thể. Nên chọn bản hỗ trợ dài hạn và đúng phiên bản hệ điều hành nó khuyến nghị.
Lỗi phổ biến nhất của người mới là gì?
Quên nạp tệp môi trường sau khi biên dịch, nên hệ thống báo không tìm thấy gói vừa tạo. Khi có gì không tìm thấy, kiểm biến môi trường trước.
Vì sao đăng ký topic mà không nhận được dữ liệu?
Thường do tên topic khác nhau, hoặc cấu hình chất lượng dịch vụ không tương thích giữa bên phát và bên nhận — cái sau khó phát hiện vì không có báo lỗi rõ.
Lời khuyên quan trọng nhất khi học ROS?
Đừng cố hiểu hết trước khi làm — ROS rất rộng và không ai dùng hết. Học phần cần cho việc đang làm, và có phần cứng thật càng sớm càng tốt.
Đọc thêm trong Bảo trì & phụ tùng và Gỡ lỗi & chẩn đoán.