跳至主要内容

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 作為基準,顯示所有資料。

常見選擇包括:

  • map
  • odom
  • base_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

ros-overview

2. 選擇 Fixed Frame​

在 Displays Panel 中:

  1. 展開 Global Options。
  2. 將 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:

  1. 點選 Add。
  2. 選擇 TF。
  3. 確認 3D View 中有顯示 Frame Axis 與名稱。

若要查看 Camera 或其他 Sensor Topic,可以加入對應的 Image、LaserScan 或 PointCloud2 Display,並選擇正確的 Topic。

4. 顯示 Robot Model​

若要顯示使用 URDF 描述的 Robot:

  1. 加入 RobotModel Display。
  2. 將 Description Source 設定成與目前 Robot Description 提供方式相符的來源。
  3. 確認所需的 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。