RViz 用户指南
目标: 了解 RViz
教程级别: 中级
预计耗时: 25 分钟
RViz 是 ROS(机器人操作系统)框架的 3D 可视化工具。
安装或构建 RViz
Section titled “安装或构建 RViz”按照你所使用操作系统的安装说明来安装 RViz。
首先记得 source 环境设置文件。
source /opt/ros/{DISTRO}/setup.bash然后启动可视化工具:
ros2 run rviz2 rviz2当 RViz 首次启动时,你会看到以下窗口:

中间的大面积黑色区域是 3D 视图,由于还没有任何内容可显示,所以是空的。 左侧是 Displays(显示)面板,列出了当前已加载的所有 Display,目前只有全局选项(Global Options)和一个 Grid(网格),稍后会详细说明。 右侧还有一些其他面板,下面会逐一介绍。
Displays(显示)
Section titled “Displays(显示)”Display 是在 3D 场景中绘制内容的对象。Displays 列表中提供了多种可用的 Display 类型, 例如点云(Point Cloud)、机器人状态(Robot State)等。
添加新的 Display
Section titled “添加新的 Display”要添加 Display,点击底部的 Add 按钮:
{/截图:Add 按钮/}
这将弹出新建 Display 的对话框:
{/截图:Add Display 对话框/}
顶部的列表列出了所有 Display 类型,每种类型对应一类可以可视化展示的数据。
中间的文本框会显示所选类型的描述信息。
此外,你需要为每个 Display 指定一个唯一的名称。
例如,如果机器人上有两个激光雷达,你可以创建两个 Laser Scan Display,分别命名为「Laser Base」和「Laser Head」。
Display 属性
Section titled “Display 属性”每个 Display 都有自己的属性列表。 例如:
{/截图:Display 属性/}
Display 状态
Section titled “Display 状态”每个 Display 都有自己的状态,用于帮助你判断一切是否正常。
状态可以是:OK、Warning、Error 或 Disabled。
状态通过 Display 标题栏的背景色来指示,
同时也可以在 Status 类别中查看(前提是 Display 已展开):
{/截图:Display 状态/}
Status 类别还可以展开以显示具体的状态信息。
不同 Display 提供的信息各不相同,但通常都很直观。
内置 Display 类型
Section titled “内置 Display 类型”| 名称 | 描述 | 使用的消息 |
|---|---|---|
| Axes | 显示一组坐标轴 | |
| Effort | 显示机器人每个旋转关节上的力矩(Effort) | sensor_msgs/msg/JointStates |
| Camera | 从相机视角创建新的渲染窗口,并将图像叠加在上面 | sensor_msgs/msg/Image, sensor_msgs/msg/CameraInfo |
| Grid | 沿平面显示 2D 或 3D 网格 | |
| Grid Cells | 绘制网格中的单元格,通常用于显示 navigation 导航栈代价地图中的障碍物 | nav_msgs/msg/GridCells |
| Image | 用 Image 创建新的渲染窗口。与 Camera Display 不同,此 Display 不使用 CameraInfo | sensor_msgs/msg/Image |
| InteractiveMarker | 显示来自一个或多个 Interactive Marker 服务器的 3D 对象,并允许鼠标与其交互 | visualization_msgs/msg/InteractiveMarker |
| Laser Scan | 显示激光扫描数据,具有不同的渲染模式、累积等选项 | sensor_msgs/msg/LaserScan |
| Map | 在地面上显示地图 | nav_msgs/msg/OccupancyGrid |
| Markers | 允许通过话题显示任意基本形状 | visualization_msgs/msg/Marker, visualization_msgs/msg/MarkerArray |
| Path | 显示来自 navigation 导航栈的路径 | nav_msgs/msg/Path |
| Point | 将一个点绘制为一个小球体 | geometry_msgs/msg/PointStamped |
| Pose | 将位姿绘制为箭头或坐标轴 | geometry_msgs/msg/PoseStamped |
| Pose Array | 绘制一簇箭头,位姿数组中的每个位姿对应一个箭头 | geometry_msgs/msg/PoseArray |
| Point Cloud(2) | 显示点云数据,支持不同的渲染模式、累积等选项 | sensor_msgs/msg/PointCloud, sensor_msgs/msg/PointCloud2 |
| Polygon | 以线条绘制多边形的轮廓 | geometry_msgs/msg/Polygon |
| Odometry | 随时间累积里程计位姿 | nav_msgs/msg/Odometry |
| Range | 用锥体显示声纳或红外测距传感器的测量范围(版本:Electric+) | sensor_msgs/msg/Range |
| RobotModel | 按照当前 TF 变换定义的位姿显示机器人的可视化模型 | |
| TF | 显示 tf2 变换层级 | |
| Wrench | 将力螺旋绘制为箭头(力)和箭头加圆圈(力矩) | geometry_msgs/msg/WrenchStamped |
| Twist | 将速度绘制为箭头(线速度)和箭头加圆圈(角速度) | geometry_msgs/msg/TwistStamped |
配置(Configurations)
Section titled “配置(Configurations)”不同的使用场景通常需要不同的 Display 配置。 例如,适用于完整 PR2 机器人的配置未必适用于测试小车。 因此,RViz 允许你加载和保存不同的配置。
一个配置包含:
- Display 及其属性
- 工具属性
- 3D 可视化的视点和设置
Views(视图)面板
Section titled “Views(视图)面板”RViz 中有多种相机类型可供选择。
{/截图:相机类型/}
不同相机类型对应不同的操控方式和投影方式(正交投影 vs. 透视投影)。
轨道相机(Orbital Camera,默认)
Section titled “轨道相机(Orbital Camera,默认)”轨道相机围绕一个焦点旋转,同时始终注视该焦点。 当你移动相机时,焦点显示为一个小圆盘:
{/截图:焦点显示/}
操作方式:
- 鼠标左键:点击并拖动以围绕焦点旋转。
- 鼠标中键:点击并拖动以在相机「向上」和「向右」方向所构成的平面内平移焦点。 移动的距离取决于焦点的位置——如果焦点上有物体且你恰好点中它,该物体会跟随鼠标移动。
- 鼠标右键:点击并拖动以放大/缩小焦点。 向上拖动放大,向下拖动缩小。
- 滚轮:放大/缩小焦点
FPS(第一人称)相机
Section titled “FPS(第一人称)相机”FPS 相机是第一人称视角相机,旋转方式就像你在转头观察四周一样。
操作方式:
- 鼠标左键:点击并拖动以旋转。 按住 Ctrl 并点击可拾取鼠标下方的对象并直接看向它。
- 鼠标中键:点击并拖动以在相机「向上」和「向右」方向所构成的平面内平移。
- 鼠标右键:点击并拖动以沿相机前向方向移动。 向上拖动前进,向下拖动后退。
- 滚轮:前进/后退。
俯视正交视图(Top-down Orthographic)
Section titled “俯视正交视图(Top-down Orthographic)”俯视正交相机始终沿 Z 轴向下看(在机器人坐标系中), 它是正交视图,意味着物体不会因为距离变远而变小。
操作方式:
- 鼠标左键:点击并拖动以围绕 Z 轴旋转。
- 鼠标中键:点击并拖动以沿 XY 平面移动相机。
- 鼠标右键:点击并拖动以缩放图像。
- 滚轮:缩放图像。
XY Orbit
Section titled “XY Orbit”与轨道相机相同,但焦点限制在 XY 平面上。
操作方式:
参见轨道相机。
第三人称跟随(Third Person Follower)
Section titled “第三人称跟随(Third Person Follower)”相机对目标坐标系保持恒定的视角。 与 XY Orbit 不同,当目标坐标系偏航(yaw)时,相机也会转动。 例如,当你对带拐角的走廊进行 3D 建图时,这可能会很方便。
操作方式:
参见轨道相机。
Views 面板还允许你创建不同的命名视图,这些视图会被保存并可以在它们之间切换。 一个视图由目标坐标系、相机类型和相机位姿组成。 你可以通过点击 Views 面板的 Save 按钮来保存视图。
{/截图:Views 面板/}
一个视图包含:
- 视图控制器类型
- 视图配置(位置、方向等;不同视图控制器类型可能不同)
- 目标坐标系(Target Frame)
视图按用户保存,不保存在配置文件中。
坐标系(Coordinate Frames)
Section titled “坐标系(Coordinate Frames)”RViz 使用 tf 变换系统将数据从其到达时的坐标系转换到全局参考坐标系。 在可视化工具中有两个坐标系需要了解:目标坐标系(Target Frame)和固定坐标系(Fixed Frame)。
固定坐标系(Fixed Frame)
Section titled “固定坐标系(Fixed Frame)”两者中更重要的是固定坐标系。
固定坐标系是用来表示 world 坐标系的参考坐标系。
通常是 map 或 world 或类似的名称,但也可以是你的里程计坐标系。
如果固定坐标系被错误地设置为机器人的基座之类的坐标系,那么机器人看到过的所有物体都会出现在机器人前方,位置以检测到它们时的机器人位置为参照。 为了获得正确的结果,固定坐标系不应相对于世界移动。
如果你更改了固定坐标系,当前显示的所有数据将被清除而不是重新变换。
目标坐标系(Target Frame)
Section titled “目标坐标系(Target Frame)”目标坐标系是相机视图的参考坐标系。 例如,如果你的目标坐标系是 map,你会看到机器人在地图上行驶。 如果你的目标坐标系是机器人基座,机器人会停在原地,而其他所有东西都会相对于它移动。
工具(Tools)
Section titled “工具(Tools)”可视化工具的工具栏上有许多可用工具。 以下章节将简要介绍这些工具。 你可以在 Help -> Show Help panel 菜单下找到更多信息。
{/截图:工具栏/}
Interact(交互)
Section titled “Interact(交互)”此工具允许你与可视化环境交互。 你可以点击对象,并根据其属性进行选择、移动等操作。
键盘快捷键:i
Move Camera(移动相机)
Section titled “Move Camera(移动相机)”Move Camera 工具是默认工具。
选中此工具并在 3D 视图中点击时,视点会根据你在 Views 面板中选择的选项和相机类型而变化。
更多信息请参见前面的 Views Panel 章节。
键盘快捷键:m
Select(选择)
Section titled “Select(选择)”Select 工具允许你选择 3D 视图中显示的项目。
它支持单点选择以及点击/拖拽框选。
你可以用 Shift 键添加到选择中,用 Ctrl 键从选择中移除。
如果你想在选择时移动相机而不切换回 Move Camera 工具,可以按住 Alt 键。
f 键会将相机聚焦到当前选择上。
{/截图:选择高亮/}
{/截图:选中状态/}
键盘快捷键:s
Focus Camera(聚焦相机)
Section titled “Focus Camera(聚焦相机)”Focus Camera 工具允许你选择可视化工具中的一个位置。 相机会通过改变朝向(而不是位置)来聚焦该点。
键盘快捷键:c
Measure(测量)
Section titled “Measure(测量)”使用测量工具可以测量可视化工具中两点之间的距离。 激活工具后的第一次点击设置起点,第二次点击设置终点。 测量距离将显示在 RViz 窗口底部。 但请注意,测量工具只对可视化工具中实际渲染的对象有效,你无法在空白空间使用它。
{/截图:测量工具/}
键盘快捷键:n
2D Pose Estimate(2D 位姿估计)
Section titled “2D Pose Estimate(2D 位姿估计)”此工具允许你设置初始位姿来初始化定位系统(通过 initialpose ROS 话题发送)。
点击地面上的某个位置并拖动以选择方向。
输出话题可以在 Tool Properties 面板中更改。
{/截图:设置位姿/}
此工具与 navigation 导航栈配合使用。
键盘快捷键:p
2D Nav Goal(2D 导航目标)
Section titled “2D Nav Goal(2D 导航目标)”此工具允许你设置一个目标,通过 goal_pose ROS 话题发送。
点击地面上的某个位置并拖动以选择方向。
输出话题可以在 Tool Properties 面板中更改。
此工具与 navigation 导航栈配合使用。
键盘快捷键:g
Publish Point(发布点)
Section titled “Publish Point(发布点)”Publish Point 工具允许你选择可视化工具中的一个对象,
工具会根据固定坐标系发布该点的坐标。
结果与测量工具一样显示在底部,同时也会发布到 clicked_point 话题上。
键盘快捷键:u
时间(Time)
Section titled “时间(Time)”Time 面板在仿真器中运行时最有用,你可以通过它查看已经过去了多少 ROS Time 和多少 Wall Clock(即真实)时间。
Time 面板还允许你重置可视化工具的内部时间状态,这会重置所有 Display 以及 tf 的内部数据缓存。
{/截图:Time 面板/}
如果你没有在仿真中运行,Time 面板基本无用。 在大多数情况下可以关闭它,你甚至可能不会察觉到,还能为 RViz 的其他部分腾出更多屏幕空间。