Node
Node là đơn vị tính toán nhỏ nhất trong ROS 2: về bản chất là một tiến trình (process) có một cái tên duy nhất trong hệ thống, bên trong có thể khai báo publisher, subscription, timer, service, parameter...
Một chương trình robot phức tạp không viết thành một file khổng lồ, mà tách thành nhiều node nhỏ, mỗi node chịu trách nhiệm đúng một việc (đọc một cảm biến, chạy một thuật toán, điều khiển một cơ cấu chấp hành) — nhờ vậy có thể khởi động lại, thay thế hay gỡ lỗi từng phần mà không ảnh hưởng phần còn lại. Mọi code ROS 2 bạn viết, dù chỉ vài dòng, đều phải nằm trong một node.
Một node bên trong có gì?
Executor: một luồng, làm lần lượt
Mặc định, một node chạy các callback trên một luồng, lần lượt từng việc. Message đến nhanh hơn tốc độ xử lý sẽ phải xếp hàng. Kéo thanh trượt để thấy điều này.
Callback chậm làm mọi callback khác của cùng node bị trễ, không chỉ callback đó. Đừng để callback làm việc nặng hoặc chờ đợi lâu bên trong.
Đọc thông tin một node đang chạy
Lệnh ros2 node info liệt kê sáu nhóm. Mỗi nhóm là một kiểu giao tiếp mà node đó tham gia:
| Nhóm | Ý nghĩa |
|---|---|
| Subscribers | Topic node này nghe |
| Publishers | Topic node này phát, kèm kiểu message |
| Service Servers | Service node này cung cấp cho người khác gọi |
| Service Clients | Service node này gọi tới node khác |
| Action Servers | Tác vụ dài node này thực hiện (có feedback, hủy được) |
| Action Clients | Tác vụ dài node này giao cho node khác |
Thử ngay
Cần 2 terminal: một giữ node chạy, một để gõ lệnh xem (cả hai đã source install/setup.bash, xem Module 0).
# Terminal 1 — để chạy, đừng tắt
ros2 launch ros2_basics demo.launch.py
# Terminal 2
ros2 node list
ros2 node info /sensor_publisher
Node sensor_publisher trong Atlas có các publisher /sensor_data và các service describe_parameters, get_parameters... do chính ROS 2 tự tạo cho mọi node để quản lý parameter.