Table of contents
Trong phần này, mình sẽ giúp bạn hiểu các khái niệm cơ bản của ROS: Master, Node, Topic, Publisher, Subscriber và Service. Sau đó, bạn sẽ tự code những khái niệm này và hoàn thành package my_cam mà chúng ta đã tạo trong chương trước. Trước tiên , hãy bắt đầu với ROS Node.
ROS Master và Node
Để dễ hiểu khái niệm Node, hãy tưởng tượng ra một câu chuyện mà trong đó node của chúng ta là một Nhiếp Ảnh Gia mới bắt đầu làm việc cho một tạp chí. Vào ngày đầu tiên đi làm, anh ta chụp một số bức ảnh và thông báo cho Sếp của mình rằng anh sẽ để những bức ảnh này trên một chiếc Bàn ở giữa văn phòng. Ông Sếp cảm ơn anh ta vì đã thông báo.
Trong câu chuyện, ông Sếp đại diện cho ROS Master, thứ mà bạn luôn phải có khi sử dụng ROS. ROS Master cung cấp các dịch vụ đặt tên và đăng ký (naming and registration) cho các node còn lại trong hệ thống ROS. Nó theo dõi việc publish (truyền) và subscribe (nhận) của các node cũng như các topic và service (xem thêm bên dưới). ROS Master được gọi bằng lệnh roscore
. Chỉ có một ROS Master được phép chạy tại một thời điểm. Nếu bạn thử gọi 2 hoặc nhiều cái cùng một lúc, sẽ có báo lỗi. Nhiếp Ảnh Gia đại diện cho một ROS Node thực hiện một tác vụ nào đó (trong trường hợp này là lấy ảnh và đặt lên Bàn) và luôn phải đăng ký (register) với Master khi nó được khởi tạo cũng như Nhiếp Ảnh Gia luôn phải báo cáo với Sếp.
ROS Topic và Message
Các bức ảnh là ROS Message (có thể dịch là tin nhắn hoặc dữ liệu) và chúng thuộc loại sensor_msgs. Đó là lý do tại sao bạn phải bao gồm sensor_msgs khi tạo gói từ chương trước. Hành động để ảnh trên Bàn của Nhiếp Ảnh Gia được gọi là publish (truyền, xuất bản) trong ROS. Cái bàn đóng vai trò là một ROS Topic mà các Node khác có thể subscribe (nhận, đăng ký).
Subscribe là gì? Bây giờ hãy tưởng tượng có một người khác (tức là một Node khác) trong câu chuyện của chúng ta có tên là Người In Ấn. Anh chàng này muốn lấy ảnh từ cái Bàn và in chúng ra. Anh ta sẽ phải làm gì? Việc đầu tiên dĩ nhiên anh ta phải thông báo (notify) cho Sếp và sau đó nếu có ảnh trên Bàn, anh ta sẽ lấy và in chúng. Hành động lấy ảnh từ Bàn được gọi là Subscribe trong ROS.
Sau khi đã thông báo cho Sếp, cả Nhiếp Ảnh Gia và Người In Ấn đều biết về nhau và giờ họ chỉ việc trao/nhận ảnh cho nhau.
ROS Service
Ở phần trước, Nhiếp Ảnh Gia liên tục publish ảnh trong khi Người In Ấn liên tục subscribe những ảnh này. Người In Ấn nói bây giờ chỉ khi nào anh ta yêu cầu thì Nhiếp Ảnh Gia mới chụp ảnh và gửi cho anh ta. Việc request/reply (yêu cầu/phản hồi) này là ý tưởng cơ bản đằng sau ROS Service. Trong ví dụ này, sau khi cả hai đã register (tức là thông báo cho Sếp), Người In Ấn bây giờ đóng vai trò Client (khách) gửi yêu cầu đến Nhiếp Ảnh Gia người đóng vai trò Server (chủ). Sau khi nhận được yêu cầu, Nhiếp Ảnh Gia sẽ chụp ảnh và gửi cho Người In Ấn (thực ra Nhiếp Ảnh Gia vẫn chỉ để chúng trên Bàn như mọi khi).
Bạn vừa tìm hiểu tất cả các khái niệm cốt lõi của ROS. Tất nhiên, còn rất nhiều khái niệm nữa nhưng đối với người mới bắt đầu, đây đã là một bước khá dài rồi. Trong những phần tiếp theo, bạn sẽ học cách tự code các khái niệm này và chạy ứng dụng ROS đầu tiên của mình.
Tóm tắt
ROS Master cung cấp các dịch vụ đặt tên và đăng ký (naming and registration) cho các node còn lại trong hệ thống ROS. Nó theo dõi việc publish (truyền) và subscribe (nhận) của các node cũng như các topic và service.
ROS Node là một quá trình thực hiện tác vụ cụ thể. Các Node có thể giao tiếp Message (dữ liệu) với nhau bằng cách sử dụng publish/subscribe (truyền/nhận liên tục) hoặc Service (máy khách/máy chủ).
Trích dẫn
Ảnh bìa: http://wiki.ros.org/fuerte
Biểu tượng: https://www.flaticon.com/