RViz2
RViz2 是 ROS 2 中標準的 3D Visualization Tool。它可以在同一個 3D Scene 中顯示 Sensor Data、Coordinate Frame、Robot Model、Map、Path,以及其他 ROS 2 Message。
概述
RViz2 可以協助你檢查機器人系統正在發布哪些資料,以及這些資料在空間中的位置與方向。
它常被用於開發、除錯、模擬與監控。
常見的 Display Type 包括:
- TF — 顯示 Coordinate Frame 與彼此之間的關係
- RobotModel — 顯示由 URDF 描述的 Robot Link 與 Joint
- PointCloud2 — 顯示 Depth Camera 或 LiDAR Point Cloud
- LaserScan — 顯示 2D Laser Scan Data
- Image — 顯示 Camera Image
- Map — 顯示 Occupancy Grid
- Path — 顯示規劃或錄製的 Trajectory
RViz2 本身只是 Visualization Tool。它不會自行產生 Sensor Data、Robot State 或 Transform;這些資料都必須由其他 ROS 2 Node 發布。
為什麼重要
許多 ROS 2 問題只看 Terminal Output 不容易理解,但透過視覺化通常能更快發現問題。
RViz2 可以快速協助找出:
- 缺少的 Transform
- Sensor Data 顯示在錯誤位置
- Robot Pose 異常
- Planning Result 與實體 Robot 狀態不一致
它特別適合搭配 TF2、URDF Robot Model,以及 Robotic Suite 中的 Mobility 與 Manipulation 範例一起使用。
核心概念
Fixed Frame
RViz2 會以指定的 Fixed Frame 作為基準,顯示所有資料。
常見選擇包括:
mapodombase_link
實際應該使用哪一個 Frame,取決於應用情境。
所選的 Fixed Frame 必須存在於目前的 TF Tree 中。
如果 RViz2 無法把輸入資料轉換到 Fixed Frame,對應的 Display 會顯示 Error,而且可能無法 Render。
你可以使用以下指令檢查 TF Tree:
ros2 run tf2_tools view_frames
或檢查特定 Transform:
ros2 run tf2_ros tf2_echo <source_frame> <target_frame>
更多內容請參考 TF2。
Displays
RViz2 使用 Display 來顯示不同類型的 ROS 2 Data。
每一種 Display 會依類型不同,訂閱 Topic、使用 TF Information,或讀取其他設定好的 Data Source。
例如:
- 加入 TF,檢查 Coordinate Frame。
- 加入 RobotModel,顯示以 URDF 建立的 Robot。
- 加入 PointCloud2,顯示 Point Cloud Data。
- 加入 LaserScan,顯示 2D LiDAR Scan。
- 加入 Image,查看 Camera Topic。
每個 Display 都有自己的 Property,例如 Topic Name、Queue Size、Style 與 Frame-related Setting。
實作步驟
1. 啟動 RViz2
ros2 run rviz2 rviz2

2. 選擇 Fixed Frame
在 Displays Panel 中:
- 展開 Global Options。
- 將 Fixed Frame 設定為 TF Tree 中已存在的 Frame,例如
base_link、odom或map。
如果不確定有哪些 Frame 可以使用,可以執行:
ros2 run tf2_tools view_frames
3. 加入 Display
在 Displays Panel 中點選 Add,並選擇需要的 Display Type。
例如,要檢查 TF Tree:
- 點選 Add。
- 選擇 TF。
- 確認 3D View 中有顯示 Frame Axis 與名稱。
若要查看 Camera 或其他 Sensor Topic,可以加入對應的 Image、LaserScan 或 PointCloud2 Display,並選擇正確的 Topic。
4. 顯示 Robot Model
若要顯示使用 URDF 描述的 Robot:
- 加入 RobotModel Display。
- 將 Description Source 設定成與目前 Robot Description 提供方式相符的來源。
- 確認所需的 TF Frame 都已經存在。
完整的 Robot Description 設定方式可參考 URDF Robot Model。
預期成果
RViz2 應該可以正常啟動,並顯示在 Displays Panel 中所選擇的資料。
對於基於 TF 的資料:
- 設定的 Fixed Frame 已存在。
- 需要 TF 的 Display 可以正常 Render,沒有 Transform Error。
- Robot Model 與 Sensor Data 出現在預期的位置。
對於基於 Topic 的 Display:
- 選擇的 Topic 已存在。
- Topic Message Type 是該 Display 支援的 Type。
- Publisher 執行期間,輸入資料會持續更新。
常用指令
# Start RViz2
ros2 run rviz2 rviz2
# Inspect available topics
ros2 topic list
# Inspect one topic and its publishers/subscribers
ros2 topic info <topic_name> -v
# Inspect TF
ros2 run tf2_tools view_frames
ros2 run tf2_ros tf2_echo <source_frame> <target_frame>
常見問題
- 3D View 中沒有顯示任何內容 — 確認所選的 Fixed Frame 已存在,並確認 Display 使用的是正確 Topic 或 Data Source。
- Display 顯示 TF Error — RViz2 無法將輸入資料轉換到 Fixed Frame。使用
tf2_echo或view_frames檢查 TF Tree。 - RobotModel 沒有顯示 — 確認 Robot Description Source、URDF 與 TF Tree 是否正確。可參考 URDF Robot Model。
- Sensor Data 顯示在錯誤位置 — 檢查 Message 的
frame_id,以及它到 Fixed Frame 之間的 Transform。 - Topic 已存在,但畫面沒有顯示資料 — 確認 Topic Type 是否與所選 RViz2 Display 相符,並檢查是否存在 QoS 或 TF 問題。可參考 Troubleshooting。
重點整理
- RViz2 用來顯示 ROS 2 Data,但本身不會產生這些資料。
- 每一個 3D Display 都會以設定的 Fixed Frame 作為參考基準。
- 對空間相關資料而言,TF 必須能把輸入資料所在的 Frame 連接到 Fixed Frame,才能正確 Render。
- TF、RobotModel、PointCloud2、LaserScan 與 Image 等 Display,可以從不同角度觀察正在執行中的 ROS 2 系統。
- RViz2 搭配 CLI Inspection Tool 與 TF Diagnostic Tool 使用時最有效率。
下一步
接著前往 rqt_graph,以圖形化方式查看 ROS 2 Node / Topic Graph;如果正在除錯空間位置或 Robot Model 問題,也可以重新查看 TF2 與 URDF Robot Model。