Atlas Robotics
ROS2 ToolsCơ bản

ros2 node — liệt kê và kiểm tra node đang chạy

Atlasbot · 17/8/2026 · 10 phút đọc

ros2 node — liệt kê và kiểm tra node đang chạy
ros2 node list và ros2 node info

Robot đang chạy nhưng không rõ node điều khiển động cơ có thực sự khởi động hay không, hay đã crash âm thầm — ros2 node là lệnh đầu tiên nên gõ trước khi đi sâu vào debug topic/service.

Khái niệm chính

ros2 node list

In ra tên đầy đủ (kèm namespace) của mọi node đang chạy trong cùng ROS_DOMAIN_ID. Không thấy tên node cần tìm trong danh sách này nghĩa là node đó chưa chạy hoặc đã crash — không cần đi tìm nguyên nhân ở đâu xa hơn.

ros2 node info /motor_node

Với một node cụ thể, lệnh này liệt kê đầy đủ:

  • Subscribers — topic node đang lắng nghe
  • Publishers — topic node đang phát ra
  • Service Servers/Clients — service node cung cấp/gọi
  • Action Servers/Clients — action tương tự

Tóm lại: ros2 node info là cách nhanh nhất để trả lời "node này thực sự đang kết nối với những gì" mà không cần đọc lại source code — hữu ích nhất khi debug một node của người khác hoặc một package đã lâu không đụng tới.

Nguyên lý hoạt động

$ ros2 node info /motor_node
/motor_node
  Subscribers:
    /cmd_vel: geometry_msgs/msg/Twist
  Publishers:
    /odom: nav_msgs/msg/Odometry
    /rosout: rcl_interfaces/msg/Log
  Service Servers:
    /motor_node/set_parameters: rcl_interfaces/srv/SetParameters
  Service Clients:

  Action Servers:

  Action Clients:

Đọc nhanh: node này nhận lệnh vận tốc qua /cmd_vel, phát odometry qua /odom. Nếu robot không di chuyển khi gửi lệnh, bước tiếp theo hợp lý là kiểm tra /cmd_vel có publisher nào thật sự gửi dữ liệu tới không — không phải đoán mò trong code.

Kiến thức kỹ thuật

Thông số

Một số cờ hữu ích thường bị bỏ qua khi mới dùng ros2 node:

CờTác dụng
--all (với list)Hiện cả các node "ẩn" (bắt đầu bằng _, thường do công cụ nội bộ tạo ra)
--spin-time NChờ N giây trước khi in kết quả, tránh bỏ sót node vừa khởi động chưa kịp discovery xong

Protocol

ros2 node list/info không tự quét mạng DDS mới hoàn toàn mỗi lần gọi — chúng thường truy vấn qua ros2 daemon, một tiến trình nền chạy sẵn để cache lại trạng thái ROS graph (danh sách node/topic hiện có), giúp các lệnh CLI phản hồi nhanh hơn thay vì phải chờ discovery lại từ đầu mỗi lần. Đây là lý do đôi khi kết quả ros2 node list "trễ" vài giây so với thực tế (VD: node vừa tắt vẫn còn xuất hiện) — lệnh ros2 daemon stop && ros2 daemon start buộc daemon quét lại từ đầu khi nghi ngờ kết quả không chính xác.

Ứng dụng thực tế

ros2 node là bước đầu tiên trong quy trình debug hệ thống có chủ đích, thường theo trình tự: (1) ros2 node list — xác nhận node cần tìm có đang chạy không; (2) ros2 node info — xác nhận node đã kết nối đúng topic/service mong đợi chưa; (3) mới đi tiếp vào ros2 topic echo/ros2 service call (2 công cụ ở các bài tiếp theo) để kiểm tra dữ liệu thực tế đang chảy qua các kết nối đó. Đi đúng thứ tự này tiết kiệm rất nhiều thời gian so với việc nhảy thẳng vào đọc code khi hệ thống "không hoạt động như mong đợi".

Ví dụ thực tế

$ ros2 node list --all
Output:
/motor_node
/lidar_driver
/_ros2cli_daemon_0_...    ← node ẩn do chính công cụ CLI tạo ra
/transform_listener_impl_... ← node ẩn do tf2 tạo ra nội bộ

Danh sách "node ẩn" này giải thích vì sao đôi khi số lượng node thực tế nhiều hơn những gì bạn tự viết — một số thư viện (như tf2_ros) tự tạo thêm node phụ trợ bên trong, --all giúp nhìn thấy đầy đủ bức tranh khi cần chẩn đoán chi tiết.

Lỗi thường gặp

  • Không thấy node dù chắc chắn đã chạy — kiểm tra ROS_DOMAIN_ID có khớp giữa terminal chạy node và terminal gõ ros2 node list hay không — 2 domain khác nhau sẽ không "thấy" nhau (xem bài DDS).
  • Kết quả cache cũ do daemon chưa cập nhật — như đã nói ở mục Protocol, thử ros2 daemon stop && ros2 daemon start nếu nghi ngờ danh sách không phản ánh đúng trạng thái thực tế.
  • Gọi ros2 node info ngay khi node vừa khởi động — discovery cần một khoảng thời gian ngắn để hoàn tất, gọi quá sớm có thể cho kết quả thiếu (VD: chưa thấy hết subscriber/publisher) — chờ vài giây rồi thử lại.
  • Nhầm lẫn node cùng tên ở namespace khác nhau — /robot1/motor_node và /robot2/motor_node là 2 node hoàn toàn khác nhau dù tên "cơ bản" giống nhau — luôn đọc kỹ namespace đầy đủ khi có nhiều robot/nhiều instance chạy chung mạng.

Kết luận

ros2 node là công cụ khởi đầu cho mọi phiên debug hệ thống ROS2 — trả lời nhanh câu hỏi "node có đang chạy không" và "nó đang kết nối với gì" trước khi đào sâu hơn vào dữ liệu thực tế. Bài tiếp theo trong chuyên mục nói về ros2 topic — công cụ để xem chính xác dữ liệu nào đang chảy qua các kết nối mà ros2 node info vừa liệt kê.

ros2 node — liệt kê và kiểm tra node đang chạy — Atlasbot