2. Nodes and Topics trong ROS
Cách sử dụng các Nodes và Topics trong ROS
Last updated
Cách sử dụng các Nodes và Topics trong ROS
Last updated
Một hệ thống ROS bao gồm rất nhiều nút (node) độc lập giao tiếp với nhau qua việc nhắn (publish) và nhận (subscibe) các tin nhắn (messages) thông qua một chủ đề nào đó (topic). Ví dụ, bạn có một con cảm biến siêu âm, và bạn viết một chương trình driver để tạo một ROS node siêu âm, node siêu âm này sẽ thực hiện gửi liên tục các messages mang nội dung là "giá trị đo được: 0.3 m" qua một topic là "/khoảng cách" đến một node khác tên là controller. Các thông số khoảng cách này có thể được sử dụng bởi bất kỳ số lượng các node khác, bao gồm bộ lọc, logger và các hệ thống cấp cao hơn như hướng dẫn, tìm đường, v.v.
Mỗi Node trong ROS phải chịu trách nhiệm cho một mục đích mô-đun duy nhất (ví dụ: một nút để điều khiển động cơ bánh xe, một nút để điều khiển công cụ tìm phạm vi laser, v.v.). Mỗi nút có thể gửi và nhận dữ liệu đến các nút khác thông qua Topic, Service, Action hoặc Parameters. Một hệ thống rô bốt đầy đủ bao gồm nhiều nút hoạt động cùng lúc. Trong ROS, một tệp thực thi duy nhất (chương trình C ++, chương trình Python, v.v.) có thể chứa một hoặc nhiều nút. Các bạn có thể tham khảo hình bên dưới để hiểu cách thức vận hành của các Nodes cơ bản trong ROS.
ROSMaster hoạt động như một máy chủ định danh cho các kết nối từ nút tới nút và giao tiếp thông báo. Khởi tạo ROSMaster bằng lệnh bên dưới.
Một Node đề cập đến đơn vị nhỏ nhất của bộ xử lý chạy trong ROS. Hãy coi nó như một chương trình thực thi. ROS khuyên bạn nên tạo một Node duy nhất cho mỗi mục đích và nên phát triển để dễ dàng sử dụng lại. Để chạy Node, chúng ta có thể sử dụng lệnh sau:
Trong ví dụ này chúng ta sẽ chạy ROS Node Turtlesim để hiểu khái niệm vận hành cơ bản của ROS. Đầu tiên ta khởi tạo turtlesim_node bằng dòng lệnh dưới đây:
Sau đó ta có thể điều khiển turtlesim bằng cách điều khiển bằng bàn phím, các bạn chạy dòng lệnh dưới đây:
Các bạn sẽ thấy turtlesim di chuyển khi bạn bấm các dấu mũi tên trên bàn phím ⬅️⬇️⬆️➡️. Video minh họa bên dưới:
Các turtlesim_node
và nút turtle_teleop_key
đang giao tiếp với nhau qua một ROS Topic. Turtle_teleop_key đang publish topic khi chúng ta nhấn phím, trong khi turtlesim
subscribe topic lúc chúng ta nhấn phím. Hãy sử dụng rqt_graph
để hiển thị các nút và chủ đề hiện đang chạy.
Chạy lệnh rqt_graph để hiển thị các node và topic đang chạy trên máy.
Công cụ rostopic cho phép bạn lấy thông tin về các chủ đề ROS. Bạn có thể sử dụng tùy chọn trợ giúp để lấy các lệnh khác trong rostopic.
Hoặc nhấn phím TAB sau khi lệnh rostopic in các lệnh có thể có:
Chúng ta hãy sử dụng một số các lệnh con (sub-commands) của chủ đề để kiểm tra turtlesim.
rostopic echo cho thấy dữ liệu xuất bản trên một chủ đề.
Chúng ta hãy nhìn vào lệnh dữ liệu vận tốc publish bởi nút turtle_teleop_key. Dữ liệu này được xuất bản trên topic /turtle1 /cmd_vel.
Bạn có lẽ sẽ không thấy bất cứ điều gì xảy ra vì không có dữ liệu đang được publish. Hãy làm cho turtle_teleop_key publish dữ liệu bằng cách nhấn các phím mũi tên. Hãy nhớ nếu con rùa không di chuyển, bạn cần phải chọn lại terminal turtle_teleop_key.
rostopic list
trả về một danh sách tất cả các chủ đề hiện đang đăng ký và xuất bản. Chúng ta hãy tìm ra các đối số cần trong danh sách lệnh. Trong một terminal chạy:
Cho rostopic list
dùng lựa chọn verbose. Các bạn sẽ thấy các topic hiện có hiện ra trên terminal.
Toàn bộ tài liệu được Robotlab.vn biên soạn vì mục đích giáo dục và đang trong quá trình hoàn thiện. Các bạn có thể tham gia các khóa học Online về lập trình robot, ROS tại địa chỉ: www.robotlab.vn
Nếu có sai sót các bạn hãy liên hệ qua địa chỉ email sau: robotlab.vn@gmail.com. Nếu bạn thấy nội dung này hữu ích với bạn xin bạn hãy like, share các bài viết này và thích trang: https://www.facebook.com/RobotLab.vn các bạn nhé. Mọi đóng góp của các bạn là động viên lớn đối với chúng tôi. Bản quyền bài viết thuộc về robotlab.vn mọi hành vi sao chép phải được sự cho phép của tác giả. Xin trân trọng cảm ơn.