【ROS2】Rviz基础介绍
1. 机器人项目的基本构成模块
通过以前章节的学习,我们知道了一个机器人项目,大概需要很多模块,我们用一张图来清晰的描述这些所需的模块。
2. 什么是RViz?
RViz(ROS Visualization) 是 ROS/ROS 2 提供的一个可视化工具,用于可视化机器人状态、传感器数据、环境信息和机器人的运动轨迹等。RViz 在机器人开发中非常重要,作用主要包括:
- 1. 可视化传感器数据
- 激光雷达(LiDAR)的点云
- 摄像头图像、深度图
- IMU、GPS 等传感器数据 - 2. 可视化机器人状态和模型
- URDF/Xacro 机器人模型
- 机器人的关节状态(joint state)
- 机器人当前位姿(pose) - 3. 路径和规划可视化
- 导航路径、轨迹
- 动作规划(MoveIt2 规划轨迹) - 4. 调试和开发
- 可以查看 topic 数据,帮助验证传感器数据是否正确
- 可用于调试机器人算法、SLAM、导航、避障等模块
2.1 Rviz 启动 & 使用
$ source /opt/ros/humble/setup.bash
$ ros2 run rviz2 rviz2
# 指定配置文件
$ ros2 run rviz2 rviz2 -- -d ~/ros2_ws/src/my_robot/rviz/my_robot_view.rviz
# 或者
$ rviz2 -d ~/ros2_ws/src/my_robot/rviz/my_robot_view.rviz
当 RViz 第一次启动时,你会看到这个窗口:
中间的大黑窗口是 3D 视图(目前为空,因为没有可显示的内容)。左侧是 Displays 列表,会显示你加载的所有 Display。目前它只包含 全局选项 和一个 Grid 网格,稍后我们会讲到。右侧是其他一些面板,下面会详细说明。
根据前面章节的描述,我们使用Rviz 可以直接显示出URDF 中描述的机器人模型,其原理如下:
- RViz 订阅 /robot_description topic 或读取机器人模型参数
- 然后根据 URDF 渲染 3D 模型
然而,URDF 只描述机器人模型本身, 也就是说你只能在Rviz 中看到机器人基础模型,不能看到机器人在ROS 2 中的数据,例如:
- 激光雷达扫描(LaserScan)
- 点云数据(PointCloud2)
- 机器人路径轨迹(Path)
- 坐标系(TF)
又根据上面描述的Rviz 的一个主要功能是 可视化传感器数据。看来,我们之前了解的Rviz, 只是显示了它的模型,并没有关注其数据显示的部分。那么, 到底如何显示ROS 2 中的数据呢? 那就是Display!
3. 什么是Displays
在 RViz 中,Display 是一种可视化模块或组件,它负责在 3D 窗口中把 ROS 2 世界中的数据“画出来”。
- 每个 Display 对应 一种数据类型 或 一种可视化方式。
- 它会订阅 ROS 2 的 topic 或读取机器人状态,并将数据转换为图形显示。
- RViz 支持多种 Display,可以同时显示多个不同的数据。
3.1 Display 的工作原理
- 1. 订阅数据
- Display 会订阅 ROS 2 topic(如 /scan、/tf、/camera/image_raw 等)。
- 根据消息类型,它知道如何解析数据。
- 2. 渲染内容
- 将数据绘制在 3D 窗口中。
- 比如:
- LaserScan Display → 把激光雷达扫描点画出来
- PointCloud2 Display → 把点云数据渲染为 3D 点
- RobotModel Display → 根据 URDF 画出机器人模型
- 3. 提供可配置选项
- 每个 Display 都可以调整显示效果:
- 颜色、大小、透明度
- 数据更新频率
- 坐标系选择
- 这些选项都在 Displays 列表中可见并可编辑。
- 每个 Display 都可以调整显示效果:
3.2 Display 的类型举例
| Display 类型 | 数据来源 (订阅topic) | 可视化内容 | 用途 |
|---|---|---|---|
| RobotModel | /robot_description + /joint_states |
机器人模型 | 验证 URDF、关节动作 |
| LaserScan | /scan |
激光雷达扫描点 | 查看障碍物、调试雷达 |
| PointCloud2 | /velodyne_points |
点云数据 | 3D 环境建模 |
| Path | /planned_path |
路径轨迹 | 导航或运动规划可视化 |
| TF | /tf |
坐标系关系 | 检查机器人坐标系是否正确 |
3.3 添加一个新的Display
要添加一个 Display,请点击底部的 Add 按钮:
这会弹出 新建 Display 对话框:
顶部的列表显示 Display 类型。类型说明了该 Display 将可视化哪种数据。中间的文本框提供所选 Display 类型的描述。最后,你必须为 Display 设置一个 唯一名称。例如,如果你的机器人上有两个激光雷达,你可以创建两个 Laser Scan Display,分别命名为 “Laser Base” 和 “Laser Head”。
3.3.1 Display 属性
每个 Display 都有自己的一组属性列表。例如:
3.3.2 Display 状态
每个 Display 都有自己的状态,用来帮助你判断它当前是否正常工作。
状态可能是以下几种之一:OK(正常)、Warning(警告)、Error(错误) 或 Disabled(禁用)。
Display 的状态会通过 标题栏的背景颜色 来表示,同时在你展开该 Display 时,也可以在 Status(状态) 分类下看到详细信息。
“Status(状态)”分类还可以展开,以显示更具体的状态信息。
这些信息会因不同的 Display 而有所不同,通常从提示内容本身就能理解其含义。
3.3.3 配置
不同的 Display 配置在可视化工具的不同使用场景中往往会非常有用。
例如,适用于完整 PR2 机器人的配置,不一定适合用于测试小车。
因此,RViz 可视化工具允许你 加载和保存不同的配置,以便根据需要切换使用。
一个配置包含以下内容:
- Displays 及其属性
- 工具(Tool)的属性
- 3D 可视化的视角和相关设置
3.3.4 视图面板(Views Panel)
在 RViz(可视化工具)里,你可以用 不同的方式来观察 3D 场景,就像换不同的“摄像机”来看机器人和环境。
具体来说,RViz Views 提供了多种摄像头视角,来供你选用。
- 控制方式不同
- 有的摄像机让你环绕目标旋转查看(Orbit)
- 有的摄像机像第一人称视角一样,可以自由前后左右移动(FPS)
- 有的摄像机固定在上方俯视(Top-down)
- 投影方式不同
- 透视投影(Perspective):远的物体看起来小,近的物体看起来大,像我们平时用眼睛看到的效果
- 正交投影(Orthographic):远近不影响大小,物体尺寸固定,常用于工程图或精确测量
环绕摄像机(Orbital Camera,默认)
环绕摄像机会围绕一个焦点旋转,同时始终注视该焦点。当你移动摄像机时(3D界面),焦点会以一个小圆盘的形式显示出来。
操作方式:
- 左键:点击并拖动以围绕焦点旋转视角。
- 中键:点击并拖动以在摄像机的上向量和右向量所在的平面内移动焦点。移动的距离取决于焦点的位置——如果焦点上有物体,并且你点击在物体上,它会保持在鼠标下方。
- 右键:点击并拖动以对焦点进行放大或缩小。向上拖动放大,向下拖动缩小。
- 滚轮:对焦点进行放大或缩小。
第一人称(FPS, First-Person)摄像机
FPS 摄像机是一种第一人称视角的摄像机,它的旋转方式就像你用头在观察环境一样。
操作方式:
- 左键:点击并拖动以旋转视角。按住 Ctrl 再点击可以选择鼠标下的物体并直接注视它。
- 中键:点击并拖动以在摄像机的上向量和右向量所在的平面内移动。
- 右键:点击并拖动沿摄像机的前向向量移动。向上拖动向前移动,向下拖动向后移动。
- 滚轮:沿前向向量前后移动。
俯视正交摄像机(Top-down Orthographic)
俯视正交摄像机会始终沿 Z 轴(机器人坐标系中)向下观察,并使用正交投影,这意味着物体不会随着距离变远而变小。
操作方式:
- 左键:点击并拖动绕 Z 轴旋转。
- 中键:点击并拖动沿 XY 平面移动摄像机。
- 右键:点击并拖动缩放视图。
- 滚轮:缩放视图。
XY 环绕摄像机(XY Orbit)
与环绕摄像机相同,但焦点被限制在 XY 平面内。
操作方式:
- 参考 环绕摄像机(Orbital Camera) 的操作方式。
第三人称跟随摄像机(Third Person Follower)
该摄像机会始终保持对目标坐标系的固定观察角度。与 XY 环绕摄像机不同,当目标坐标系偏航(旋转)时,摄像机会随之转动。例如,如果你在对带有拐角的走廊进行 3D 建图,这种摄像机模式会非常有用。
操作方式:
- 参考 环绕摄像机(Orbital Camera) 的操作方式。
自定义视图(Custom Views)
视图面板还允许你创建不同的命名视图,这些视图可以保存并在它们之间切换。
一个视图包含以下内容:
- 目标坐标系(target frame)
- 摄像机类型(camera type)
- 摄像机姿态(camera pose)
你可以通过点击视图面板的 保存(Save) 按钮来保存当前视图。
一个视图包含以下内容: - 视图控制器类型(View controller type)
- 视图配置(View configuration):包括位置、朝向等;不同的视图控制器类型可能有不同的配置项
- 目标坐标系(Target Frame)
视图是按用户保存的,不会保存在配置文件中。
3.3.5 坐标系(Coordinate Frames)
RViz 使用 tf 变换系统,将数据从它所在的坐标系转换到全局参考坐标系。在可视化中,有两个重要的坐标系需要了解:目标坐标系(Target Frame) 和 固定坐标系(Fixed Frame)。
固定坐标系(The Fixed Frame)
这两个坐标系中更重要的是固定坐标系。
- 固定坐标系是用于表示世界坐标的参考系。
- 通常是
map、world或类似的全局坐标系,也可以是例如你的里程计坐标系(odometry frame)。
❗ 注意:
- 如果固定坐标系错误地设置为机器人底座(base),那么机器人曾经看到的所有物体都会显示在机器人前方,并以被检测时相对于机器人的位置显示。
- 为了得到正确的结果,固定坐标系 不应随世界移动。
- 如果你更改固定坐标系,当前显示的所有数据会被清空,而不是重新变换。
目标坐标系(The Target Frame)
目标坐标系是摄像机视角的参考坐标系。
- 例如,如果目标坐标系是
map,你会看到机器人在地图上移动。 - 如果目标坐标系是机器人的底座(base),机器人会保持在屏幕中央,而其他所有物体相对于它移动。
3.3.6 工具(Tools)
RViz 可视化工具栏中提供了多种工具可供使用。下面的章节将对这些工具进行简要介绍。
你也可以通过菜单 Help → Show Help panel 获取更多信息。
交互工具(Interact)
该工具允许你与可视化环境进行交互。
你可以点击对象,根据对象属性进行选择、移动等操作。
- 快捷键:
i
移动摄像机(Move Camera)
移动摄像机工具是默认工具。
当选择该工具并在 3D 视图中点击时,视角会根据你在 Views 面板 中选择的摄像机类型和选项进行变化。
- 快捷键:
m - 详细信息请参考前面 Views Panel 章节。
选择工具(Select)
选择工具允许你选中 3D 视图中显示的项目。
- 支持 单点选择 和 框选(点击并拖动)
- 按住 Shift 可以增加选中项
- 按住 Ctrl 可以从选中项中移除
- 若在选择时想移动摄像机而不切回 Move Camera 工具,可按住 Alt
- 按 f 键可以将摄像机焦点对准当前选中的对象


选择工具快捷键:s
聚焦摄像机(Focus Camera)
聚焦摄像机工具允许你在可视化界面中选择一个位置。
摄像机会旋转以注视该点,但不会改变自身的位置。
- 快捷键:
c
测量工具(Measure)
使用测量工具可以测量可视化界面中两点之间的距离。
- 激活工具后,第一次点击设置起点,第二次点击设置终点。
- 测量结果会显示在 RViz 窗口底部。
- 注意:测量工具只对实际渲染的对象有效,不能在空白区域使用。

快捷键:n
二维位姿估计(2D Pose Estimate)
该工具允许你为定位系统设置初始位姿(会发布到 initialpose ROS 话题)。
- 使用方法:在地面平面上点击一个位置,并拖动以选择朝向。
- 输出话题可以在 Tool Properties(工具属性) 面板中修改。

该工具适用于 导航栈(navigation stack)。
快捷键:p
2D Nav Goal(二维导航目标)
- 该工具允许你设置一个目标位姿,会发布到
goal_poseROS 话题。 - 使用方法:在地面平面上点击目标位置,并拖动以选择朝向。
- 输出话题可以在 Tool Properties(工具属性) 面板中修改。
- 该工具适用于 导航栈(navigation stack)。
- 快捷键:
g
Publish Point(发布点)
- 该工具允许你在可视化界面中选择一个对象,工具会根据所在坐标系发布该点的坐标。
- 测量结果会显示在 RViz 窗口底部(类似测量工具),同时发布到
clicked_point话题。 - 快捷键:
u
时间面板(Time)
- 时间面板主要在 仿真环境 中有用,它可以显示 ROS 时间 已经过了多久,以及 实际时间(Wall Clock,即真实时间) 已经过了多久。
- 时间面板还可以 重置可视化工具的内部时间状态,这会重置所有 Display 的显示以及 tf 的内部数据缓存。

如果不在仿真环境中运行,时间面板作用不大。大多数情况下可以关闭,不会影响 RViz 的其他功能,同时还能腾出更多屏幕空间。
4. 应用实例
如何把自己写的 URDF 模型在 RViz 中显示,并且让它能 关联对应的传感器/关节数据?这样机器人模型就能动起来或者显示传感器信息。我们可以分步骤来看:
4.1 在 RViz 中显示机器人模型
- 打开 RViz:
ros2 run rviz2 rviz2
- 添加 RobotModel Display:
- 点击左下角 Add → By display type → 选择 RobotModel → 点击 OK
- 配置 RobotModel 的数据来源:
-
Description Source:选择
/robot_description- 这个 topic 通常在启动 URDF 的 launch 文件里由
robot_state_publisher发布:
ros2 run robot_state_publisher robot_state_publisher my_robot.urdf - 这个 topic 通常在启动 URDF 的 launch 文件里由
-
4.2 让机器人关节可动(绑定关节状态数据)
- RobotModel 显示机器人的静态结构,如果想让关节动,需要 关节状态数据:
-
确保节点发布
/joint_states消息:sensor_msgs/msg/JointState- 包含关节名称、位置、速度、力矩等。
- 如果你有仿真环境或实际机器人,可以通过
joint_state_publisher发布:
ros2 run joint_state_publisher joint_state_publisher -
在 RobotModel Display 中,选择 Joint States Topic 为
/joint_states -
此时,URDF 模型就会根据关节状态动态移动。
-
4.3 关联传感器数据(如激光雷达、相机、点云)
- LaserScan
- Add → LaserScan → 设置 Topic 为
/scan
- Add → LaserScan → 设置 Topic 为
- PointCloud2
- Add → PointCloud2 → 设置 Topic 为
/velodyne_points
- Add → PointCloud2 → 设置 Topic 为
- Camera
- Add → Camera → 设置 Topic 为
/camera/image_raw
- Add → Camera → 设置 Topic 为
- TF
- Add → TF → 用于显示坐标系和连杆
⚠️ 关键点:你的 URDF 上面传感器的位置必须在 URDF 链路里定义好,且 robot_state_publisher 发布的 TF 正确。Display 会根据 TF 来定位传感器。
更多推荐



所有评论(0)