Atlas Robotics
ROS2 ToolsCơ bản

ros2 topic — xem, gửi và đo tốc độ dữ liệu topic

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

ros2 topic — xem, gửi và đo tốc độ dữ liệu topic
Các lệnh con của ros2 topic và mục đích từng lệnh

Khi hai node "đáng lẽ" phải nói chuyện với nhau qua topic nhưng không thấy hoạt động đúng, ros2 topic là nhóm lệnh trả lời được phần lớn câu hỏi: dữ liệu có tới không, tới bao nhiêu Hz, và giả lập dữ liệu để test node còn lại mà không cần chạy đủ cả hệ thống.

Khái niệm chính

LệnhMục đích
ros2 topic listLiệt kê mọi topic đang có
ros2 topic echo /cmd_velIn dữ liệu topic ra terminal theo thời gian thực
ros2 topic info /cmd_velXem kiểu message, số publisher/subscriber
ros2 topic hz /scanĐo tần số publish thực tế (Hz)
ros2 topic bw /scanĐo băng thông (bytes/giây) topic đang chiếm
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{...}"Publish thủ công một message

Nguyên lý hoạt động

Debug "robot không di chuyển" bằng ros2 topic — quy trình thực tế thường theo đúng thứ tự:

ros2 topic list | grep cmd_vel        # topic /cmd_vel có tồn tại không?
ros2 topic info /cmd_vel               # có publisher nào không?
ros2 topic echo /cmd_vel               # dữ liệu gửi tới có đúng như kỳ vọng?
ros2 topic hz /cmd_vel                 # tần số publish có quá thấp không?

Nếu ros2 topic echo không in ra gì dù đang gửi lệnh điều khiển, vấn đề nằm ở phía gửi. Nếu echo ra đúng dữ liệu nhưng robot vẫn đứng yên, vấn đề chuyển sang phía nhận — ros2 topic giúp khoanh vùng lỗi về đúng một phía trước khi mở code lên đọc.

Tóm lại: ros2 topic echo + ros2 topic hz là cặp lệnh dùng nhiều nhất trong debug hằng ngày — echo trả lời "có đúng dữ liệu không", hz trả lời "có đúng tốc độ không".

Publish thủ công để test node nhận:

ros2 topic pub /cmd_vel geometry_msgs/msg/Twist \
  "{linear: {x: 0.2}, angular: {z: 0.0}}" --rate 10

Lệnh này giả lập một publisher gửi lệnh "tiến thẳng 0.2 m/s" ở tần số 10Hz — hữu ích để test node nhận /cmd_vel mà không cần chạy cả hệ thống điều hướng phía trên.

Kiến thức kỹ thuật

Thông số

Một số cờ/lệnh con ít được biết tới nhưng rất hữu ích khi debug sâu hơn:

Cờ/lệnhTác dụng
ros2 topic echo /scan --onceChỉ in đúng 1 message rồi tự thoát, không chạy liên tục
ros2 topic echo /scan --qos-reliability best_effortÉp QoS phía echo để đọc được topic dù mặc định không tương thích — chỉ dùng để debug
ros2 topic find sensor_msgs/msg/LaserScanTìm mọi topic đang publish đúng kiểu message chỉ định
ros2 topic pub ... --onceChỉ gửi đúng 1 message rồi dừng (mặc định nếu không có --rate)

Ứng dụng thực tế

Kết hợp ros2 topic pub với việc ghi lại dữ liệu bằng ros2 bag (công cụ ở bài tiếp theo) tạo ra một quy trình kiểm thử hồi quy (regression test) hữu ích: ghi lại 1 chuỗi lệnh điều khiển đã biết là "chạy đúng" trước khi sửa code, sau khi sửa xong, phát lại đúng chuỗi lệnh đó và so sánh hành vi node có còn giống như trước hay không — cách này giúp phát hiện lỗi hồi quy (regression bug) mà không cần lúc nào cũng chạy đầy đủ cảm biến thật trên robot.

Ví dụ thực tế

$ ros2 topic echo /battery_status --once
Output:
voltage: 12.4
percentage: 0.85
temperature: 32.1
---
$ ros2 topic find sensor_msgs/msg/Image
Output:
/camera/color/image_raw
/camera/depth/image_raw

--once hữu ích khi chỉ cần kiểm tra nhanh giá trị hiện tại (VD: đọc mức pin) mà không muốn terminal in liên tục; find hữu ích khi cần biết hệ thống có bao nhiêu topic ảnh đang chạy mà không nhớ hết tên từng cái.

Lỗi thường gặp

  • Quên dừng ros2 topic pub --rate khi đã xong việc test — publisher thủ công này vẫn tiếp tục gửi lệnh, có thể xung đột với publisher thật của hệ thống điều hướng đang cùng gửi vào /cmd_vel, gây robot hành xử lẫn lộn giữa 2 nguồn lệnh khác nhau.
  • ros2 topic echo không in gì dù publisher đang chạy tốt — trước khi nghi ngờ publisher lỗi, kiểm tra khả năng QoS không tương thích (xem bài QoS) — dùng cờ --qos-reliability best_effort để loại trừ khả năng này khi debug.
  • Lỗi cú pháp YAML trong message truyền cho ros2 topic pub — thiếu dấu ngoặc nhọn/dấu hai chấm đúng cú pháp YAML gây lỗi parse khó đọc — với message phức tạp nhiều trường lồng nhau, nên viết ra file YAML riêng rồi dùng ros2 topic pub /cmd_vel geometry_msgs/msg/Twist -f file.yaml thay vì gõ trực tiếp trên dòng lệnh.
  • Dùng ros2 topic pub cho vòng điều khiển thời gian thực thực sự — công cụ này chỉ phù hợp để test/debug, không đảm bảo độ trễ hay độ tin cậy cần thiết cho vòng điều khiển sản xuất thực tế — logic điều khiển thật luôn phải nằm trong node được viết đúng cách, không dựa vào lệnh CLI.

Kết luận

ros2 topic là bộ công cụ trung tâm để debug giao tiếp giữa các node — cặp echo/hz trả lời câu hỏi "đúng dữ liệu, đúng tốc độ", còn pub cho phép cô lập và test từng node riêng lẻ. Luôn đi theo quy trình khoanh vùng lỗi (list → info → echo → hz) trước khi mở code. Bài tiếp theo trong chuyên mục nói về ros2 service — bộ công cụ tương đương dành cho giao tiếp request-response.

ros2 topic — xem, gửi và đo tốc độ dữ liệu topic — Atlasbot