Atlas Robotics
ROS2 ToolsCơ bản

RViz2 — công cụ trực quan hoá dữ liệu robot

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

RViz2 — công cụ trực quan hoá dữ liệu robot
Các thành phần chính của giao diện RViz2

Các bài trước dùng ros2 topic echo để xem dữ liệu dạng số — nhưng "robot có đang đứng đúng vị trí trên bản đồ không" hay "đám mây điểm LiDAR có khớp với tường thật không" là câu hỏi chỉ trả lời được bằng hình ảnh. RViz2 là công cụ 3D chính thức của ROS2 để trực quan hoá mọi loại dữ liệu robot cùng lúc.

Khái niệm chính

rviz2

Việc đầu tiên sau khi mở RViz2 luôn là chọn Fixed Frame (góc trên bên trái, panel Global Options) — đây là hệ toạ độ tham chiếu mà mọi dữ liệu khác được vẽ so với nó. Chọn sai Fixed Frame (ví dụ chọn base_link thay vì map hay odom) khiến bản đồ/quỹ đạo trông như đang "quay quanh" robot một cách vô lý, dù dữ liệu gốc hoàn toàn đúng.

Tóm lại: Trước khi nghi ngờ dữ liệu sai, luôn kiểm tra Fixed Frame trước — phần lớn cảnh "robot vẽ linh tinh trong RViz2" của người mới là do chọn nhầm Fixed Frame, không phải lỗi thuật toán.

Nguyên lý hoạt động

Thêm Display cho từng loại dữ liệu — nút Add ở panel Displays (trái) mở danh sách loại hiển thị:

DisplayDùng để xem
LaserScanDữ liệu quét LiDAR (/scan)
TFToàn bộ cây hệ toạ độ, trực quan hoá quan hệ frame–frame
MapBản đồ occupancy grid (/map) từ SLAM
RobotModelMô hình 3D robot theo URDF, di chuyển đúng theo TF thật
PathĐường đi đã lập kế hoạch (/plan từ Nav2)
OdometryQuỹ đạo đã đi qua, dựng từ /odom

Cách nhanh hơn "Add theo loại": tab By topic liệt kê sẵn các topic đang publish, chọn thẳng topic cần xem — RViz2 tự suy ra loại Display phù hợp.

Debug TF bằng RViz2: thêm Display TF là cách nhanh nhất phát hiện lỗi cấu hình hệ toạ độ — một frame "trôi" lơ lửng không nối với cây TF chính, hoặc hai frame chồng lên nhau sai vị trí, đều hiện rõ bằng mắt thường ngay khi bật Display này, nhanh hơn nhiều so với đọc ros2 topic echo /tf dạng số thô.

Kiến thức kỹ thuật

Thông số

Ngoài các Display cơ bản đã nêu, một số loại nâng cao hay dùng trong dự án AMR/SLAM thực tế:

DisplayDùng để xem
PointCloud2Đám mây điểm 3D (LiDAR 3D, camera độ sâu)
MarkerArrayHình vẽ tuỳ chỉnh do code tự publish (vùng nguy hiểm, mục tiêu, debug hình học)
InteractiveMarkersMarker tương tác được (kéo/thả), dùng trong công cụ chỉnh sửa quỹ đạo tay máy

Ứng dụng thực tế

Thanh công cụ RViz2 có nút 2D Nav Goal — click chuột chọn 1 điểm và hướng trên màn hình sẽ tự động publish 1 goal NavigateToPose (đúng action đã học ở chuyên mục ROS2 Communication) tới Nav2, tương đương hoàn toàn với việc gõ tay ros2 action send_goal nhưng trực quan hơn nhiều cho việc test nhanh trong lúc phát triển — đây là lý do RViz2 gần như luôn mở song song với robot thật trong giai đoạn phát triển Nav2, đóng vai trò vừa giám sát vừa là giao diện điều khiển thử nghiệm.

Ví dụ thực tế

Lưu cấu hình để dùng lại — RViz2 cho phép lưu toàn bộ layout (Displays đã thêm, Fixed Frame, góc nhìn camera) ra file .rviz (File → Save Config As). Launch file của một package robot thường tự mở kèm sẵn file .rviz riêng:

Node(
    package="rviz2",
    executable="rviz2",
    arguments=["-d", "/path/to/nav2_default_view.rviz"],
)
Kết quả: mỗi lần bringup, RViz2 mở lên đã có sẵn:
- Fixed Frame = "map"
- Display LaserScan, Map, RobotModel, TF, Path đã bật sẵn
- Góc nhìn camera đã căn đúng theo robot

Nhờ vậy mỗi lần bringup không cần tự thêm lại từng Display bằng tay — RViz2 mở lên đã đúng sẵn góc nhìn và các lớp dữ liệu cần thiết cho việc giám sát Nav2/SLAM.

Lỗi thường gặp

  • Display không hiện dữ liệu do QoS không tương thích — giống lỗi đã học ở bài QoS, mỗi Display trong RViz2 có tuỳ chọn override QoS riêng (trong panel bên trái, mở rộng mục Topic của Display đó) — thử đổi Reliability sang Best Effort nếu Display "trống trơn" dù topic chắc chắn đang có dữ liệu.
  • RobotModel không hiện gì — thường do topic /robot_description (chứa nội dung URDF) chưa được publish, hoặc node robot_state_publisher chưa chạy — kiểm tra bằng ros2 topic echo /robot_description --once trước khi nghi ngờ cấu hình Display sai.
  • RViz2 giật/lag khi bật nhiều Display dữ liệu nặng cùng lúc — nhiều PointCloud2 độ phân giải cao hoặc Image độ phân giải lớn cùng hiển thị có thể khiến RViz2 tự "ngốn" tài nguyên đồ hoạ đáng kể — tắt bớt Display không cần thiết khi chỉ đang tập trung debug 1 vấn đề cụ thể.
  • Chạy RViz2 qua SSH mà không bật chuyển tiếp X11 — RViz2 là ứng dụng đồ hoạ, chạy qua SSH thường cần ssh -X (X11 forwarding) hoặc VNC — chạy trực tiếp qua SSH thường (không -X) sẽ báo lỗi không mở được cửa sổ hiển thị.

Kết luận

RViz2 chuyển dữ liệu số thô của ROS2 thành hình ảnh trực quan — công cụ không thể thiếu khi debug TF, SLAM, và Nav2, đồng thời còn là giao diện điều khiển thử nghiệm qua nút "2D Nav Goal". Luôn kiểm tra Fixed Frame đầu tiên khi thấy dữ liệu hiển thị "vô lý". Đây cũng là bài cuối cùng của chuyên mục ROS2 Tools — kết hợp với các công cụ node/topic/service/action/param/bag đã học, đủ bộ công cụ debug hoàn chỉnh cho bất kỳ hệ thống ROS2 nào. Chuyên mục tiếp theo, ROS2 nâng cao, đi sâu vào các kỹ thuật tối ưu hiệu năng và kiến trúc node phức tạp hơn.

RViz2 — công cụ trực quan hoá dữ liệu robot — Atlasbot