RViz2 — công cụ trực quan hoá dữ liệu robot
Atlasbot · 17/8/2026 · 11 phút đọc
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ị:
| Display | Dùng để xem |
|---|---|
LaserScan | Dữ liệu quét LiDAR (/scan) |
TF | Toàn bộ cây hệ toạ độ, trực quan hoá quan hệ frame–frame |
Map | Bản đồ occupancy grid (/map) từ SLAM |
RobotModel | Mô 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) |
Odometry | Quỹ đạ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ế:
| Display | Dùng để xem |
|---|---|
PointCloud2 | Đám mây điểm 3D (LiDAR 3D, camera độ sâu) |
MarkerArray | Hình vẽ tuỳ chỉnh do code tự publish (vùng nguy hiểm, mục tiêu, debug hình học) |
InteractiveMarkers | Marker 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 noderobot_state_publisherchưa chạy — kiểm tra bằngros2 topic echo /robot_description --oncetrướ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ặcImageđộ 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.