Skip to content

RViz 用户指南

目标: 了解 RViz

教程级别: 中级

预计耗时: 25 分钟

RViz 是 ROS(机器人操作系统)框架的 3D 可视化工具。

按照你所使用操作系统的安装说明来安装 RViz。

首先记得 source 环境设置文件。

Terminal window
source /opt/ros/{DISTRO}/setup.bash

然后启动可视化工具:

Terminal window
ros2 run rviz2 rviz2

当 RViz 首次启动时,你会看到以下窗口:

RViz 初始启动窗口

中间的大面积黑色区域是 3D 视图,由于还没有任何内容可显示,所以是空的。 左侧是 Displays(显示)面板,列出了当前已加载的所有 Display,目前只有全局选项(Global Options)和一个 Grid(网格),稍后会详细说明。 右侧还有一些其他面板,下面会逐一介绍。

Display 是在 3D 场景中绘制内容的对象。Displays 列表中提供了多种可用的 Display 类型, 例如点云(Point Cloud)、机器人状态(Robot State)等。

要添加 Display,点击底部的 Add 按钮:

{/截图:Add 按钮/}

这将弹出新建 Display 的对话框:

{/截图:Add Display 对话框/}

顶部的列表列出了所有 Display 类型,每种类型对应一类可以可视化展示的数据。 中间的文本框会显示所选类型的描述信息。 此外,你需要为每个 Display 指定一个唯一的名称。 例如,如果机器人上有两个激光雷达,你可以创建两个 Laser Scan Display,分别命名为「Laser Base」和「Laser Head」。

每个 Display 都有自己的属性列表。 例如:

{/截图:Display 属性/}

每个 Display 都有自己的状态,用于帮助你判断一切是否正常。 状态可以是:OK、Warning、Error 或 Disabled。 状态通过 Display 标题栏的背景色来指示, 同时也可以在 Status 类别中查看(前提是 Display 已展开):

{/截图:Display 状态/}

Status 类别还可以展开以显示具体的状态信息。 不同 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 不使用 CameraInfosensor_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

不同的使用场景通常需要不同的 Display 配置。 例如,适用于完整 PR2 机器人的配置未必适用于测试小车。 因此,RViz 允许你加载和保存不同的配置。

一个配置包含:

  • Display 及其属性
  • 工具属性
  • 3D 可视化的视点和设置

RViz 中有多种相机类型可供选择。

{/截图:相机类型/}

不同相机类型对应不同的操控方式和投影方式(正交投影 vs. 透视投影)。

轨道相机围绕一个焦点旋转,同时始终注视该焦点。 当你移动相机时,焦点显示为一个小圆盘:

{/截图:焦点显示/}

操作方式:

  • 鼠标左键:点击并拖动以围绕焦点旋转。
  • 鼠标中键:点击并拖动以在相机「向上」和「向右」方向所构成的平面内平移焦点。 移动的距离取决于焦点的位置——如果焦点上有物体且你恰好点中它,该物体会跟随鼠标移动。
  • 鼠标右键:点击并拖动以放大/缩小焦点。 向上拖动放大,向下拖动缩小。
  • 滚轮:放大/缩小焦点

FPS 相机是第一人称视角相机,旋转方式就像你在转头观察四周一样。

操作方式:

  • 鼠标左键:点击并拖动以旋转。 按住 Ctrl 并点击可拾取鼠标下方的对象并直接看向它。
  • 鼠标中键:点击并拖动以在相机「向上」和「向右」方向所构成的平面内平移。
  • 鼠标右键:点击并拖动以沿相机前向方向移动。 向上拖动前进,向下拖动后退。
  • 滚轮:前进/后退。

俯视正交视图(Top-down Orthographic)

Section titled “俯视正交视图(Top-down Orthographic)”

俯视正交相机始终沿 Z 轴向下看(在机器人坐标系中), 它是正交视图,意味着物体不会因为距离变远而变小。

操作方式:

  • 鼠标左键:点击并拖动以围绕 Z 轴旋转。
  • 鼠标中键:点击并拖动以沿 XY 平面移动相机。
  • 鼠标右键:点击并拖动以缩放图像。
  • 滚轮:缩放图像。

与轨道相机相同,但焦点限制在 XY 平面上。

操作方式:

参见轨道相机。

第三人称跟随(Third Person Follower)

Section titled “第三人称跟随(Third Person Follower)”

相机对目标坐标系保持恒定的视角。 与 XY Orbit 不同,当目标坐标系偏航(yaw)时,相机也会转动。 例如,当你对带拐角的走廊进行 3D 建图时,这可能会很方便。

操作方式:

参见轨道相机。

Views 面板还允许你创建不同的命名视图,这些视图会被保存并可以在它们之间切换。 一个视图由目标坐标系、相机类型和相机位姿组成。 你可以通过点击 Views 面板的 Save 按钮来保存视图。

{/截图:Views 面板/}

一个视图包含:

  • 视图控制器类型
  • 视图配置(位置、方向等;不同视图控制器类型可能不同)
  • 目标坐标系(Target Frame)

视图按用户保存,不保存在配置文件中。

RViz 使用 tf 变换系统将数据从其到达时的坐标系转换到全局参考坐标系。 在可视化工具中有两个坐标系需要了解:目标坐标系(Target Frame)和固定坐标系(Fixed Frame)。

两者中更重要的是固定坐标系。 固定坐标系是用来表示 world 坐标系的参考坐标系。 通常是 map 或 world 或类似的名称,但也可以是你的里程计坐标系。

如果固定坐标系被错误地设置为机器人的基座之类的坐标系,那么机器人看到过的所有物体都会出现在机器人前方,位置以检测到它们时的机器人位置为参照。 为了获得正确的结果,固定坐标系不应相对于世界移动。

如果你更改了固定坐标系,当前显示的所有数据将被清除而不是重新变换。

目标坐标系是相机视图的参考坐标系。 例如,如果你的目标坐标系是 map,你会看到机器人在地图上行驶。 如果你的目标坐标系是机器人基座,机器人会停在原地,而其他所有东西都会相对于它移动。

可视化工具的工具栏上有许多可用工具。 以下章节将简要介绍这些工具。 你可以在 Help -> Show Help panel 菜单下找到更多信息。

{/截图:工具栏/}

此工具允许你与可视化环境交互。 你可以点击对象,并根据其属性进行选择、移动等操作。

键盘快捷键:i

Move Camera 工具是默认工具。 选中此工具并在 3D 视图中点击时,视点会根据你在 Views 面板中选择的选项和相机类型而变化。 更多信息请参见前面的 Views Panel 章节。

键盘快捷键:m

Select 工具允许你选择 3D 视图中显示的项目。 它支持单点选择以及点击/拖拽框选。 你可以用 Shift 键添加到选择中,用 Ctrl 键从选择中移除。 如果你想在选择时移动相机而不切换回 Move Camera 工具,可以按住 Alt 键。 f 键会将相机聚焦到当前选择上。

{/截图:选择高亮/}

{/截图:选中状态/}

键盘快捷键:s

Focus Camera 工具允许你选择可视化工具中的一个位置。 相机会通过改变朝向(而不是位置)来聚焦该点。

键盘快捷键:c

使用测量工具可以测量可视化工具中两点之间的距离。 激活工具后的第一次点击设置起点,第二次点击设置终点。 测量距离将显示在 RViz 窗口底部。 但请注意,测量工具只对可视化工具中实际渲染的对象有效,你无法在空白空间使用它。

{/截图:测量工具/}

键盘快捷键:n

此工具允许你设置初始位姿来初始化定位系统(通过 initialpose ROS 话题发送)。 点击地面上的某个位置并拖动以选择方向。 输出话题可以在 Tool Properties 面板中更改。

{/截图:设置位姿/}

此工具与 navigation 导航栈配合使用。

键盘快捷键:p

此工具允许你设置一个目标,通过 goal_pose ROS 话题发送。 点击地面上的某个位置并拖动以选择方向。 输出话题可以在 Tool Properties 面板中更改。

此工具与 navigation 导航栈配合使用。

键盘快捷键:g

Publish Point 工具允许你选择可视化工具中的一个对象, 工具会根据固定坐标系发布该点的坐标。 结果与测量工具一样显示在底部,同时也会发布到 clicked_point 话题上。

键盘快捷键:u

Time 面板在仿真器中运行时最有用,你可以通过它查看已经过去了多少 ROS Time 和多少 Wall Clock(即真实)时间。 Time 面板还允许你重置可视化工具的内部时间状态,这会重置所有 Display 以及 tf 的内部数据缓存。

{/截图:Time 面板/}

如果你没有在仿真中运行,Time 面板基本无用。 在大多数情况下可以关闭它,你甚至可能不会察觉到,还能为 RViz 的其他部分腾出更多屏幕空间。