Atlas Robotics
Bài 3/9 · khoảng 8 phút

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ì?

PublisherĐẩy dữ liệu lên topic
SubscriptionNhận dữ liệu, gọi callback
TimerGọi hàm định kỳ
ExecutorVòng lặp lấy việc và chạy

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
SubscribersTopic node này nghe
PublishersTopic node này phát, kèm kiểu message
Service ServersService node này cung cấp cho người khác gọi
Service ClientsService node này gọi tới node khác
Action ServersTác vụ dài node này thực hiện (có feedback, hủy được)
Action ClientsTá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.