RViz 用户指南

目标: 了解 RViz

教程级别: 中级

时间: 25 分钟

背景

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

安装或构建 rviz

按照适用于您的操作系统的 安装说明 安装 RViz。

启动

不要忘记获取安装文件。

source /opt/ros/rolling/setup.bash

然后启动可视化工具

ros2 run rviz2 rviz2

当 RViz 首次启动时,您将看到此窗口:

../../../../_images/initial_startup.png

中间的大黑色窗口是 3D 视图(因为什么都看不到所以是空的)。 左侧是显示列表,其中将显示您已加载的所有显示。 现在它只包含全局选项和网格,我们稍后会介绍。 右侧是其他一些面板,如下所述。

显示

显示是在 3D 世界中绘制某些东西的东西,并且可能在显示列表中有一些可用的选项。 例如点云、机器人状态等。

添加新显示

要添加显示,请单击底部的添加按钮:

../../../../_images/add-button.png

这将弹出新的显示对话框:

../../../../_images/add-display-dialog.png

顶部的列表包含显示类型。 类型详细说明了此显示将可视化哪种数据。 中间的文本框给出了所选显示类型的描述。 最后,您必须为显示指定一个唯一的名称。 例如,如果您的机器人上有两个激光扫描仪,您可以创建两个名为“激光底座”和“激光头”的“激光扫描”显示。

显示属性

每个显示器都有自己的属性列表。 例如:

../../../../_images/display-properties.png

显示状态

每个显示都有自己的状态,以帮助您了解一切是否正常。 状态可以是以下之一:“正常”、“警告”、“错误”或“已禁用”。 状态通过显示标题的背景颜色指示, 以及在显示展开时您可以查看的状态类别:

../../../../_images/display-status.png

“状态”类别也扩展以显示特定状态信息。

此信息对于不同的显示器是不同的,并且消息应该是不言自明的。

内置显示类型

Name

Description

Messages Used

Axes

Displays a set of Axes

Effort

Shows the effort being put into each revolute joint of a robot

sensor_msgs/msg/JointStates

Camera

Creates a new rendering window from the perspective of a camera, and overlays the image on top of it.

sensor_msgs/msg/Image, sensor_msgs/msg/CameraInfo

Grid

Displays a 2D or 3D grid along a plane

Grid Cells

Draws cells from a grid, usually obstacles from a costmap from the navigation stack.

nav_msgs/msg/GridCells

Image

Creates a new rendering window with an Image. Unlike the Camera display, this display does not use a CameraInfo

sensor_msgs/msg/Image

InteractiveMarker

Displays 3D objects from one or multiple Interactive Marker servers and allows mouse interaction with them

visualization_msgs/msg/InteractiveMarker

Laser Scan

Shows data from a laser scan, with different options for rendering modes, accumulation, etc.

sensor_msgs/msg/LaserScan

Map

Displays a map on the ground plane.

nav_msgs/msg/OccupancyGrid

Markers

Allows programmers to display arbitrary primitive shapes through a topic

visualization_msgs/msg/Marker, visualization_msgs/msg/MarkerArray

Path

Shows a path from the navigation stack.

nav_msgs/msg/Path

Point

Draws a point as a small sphere.

geometry_msgs/msg/PointStamped

Pose

Draws a pose as either an arrow or axes.

geometry_msgs/msg/PoseStamped

Pose Array

Draws a “cloud” of arrows, one for each pose in a pose array

geometry_msgs/msg/PoseArray

Point Cloud(2)

Shows data from a point cloud, with different options for rendering modes, accumulation, etc.

sensor_msgs/msg/PointCloud, sensor_msgs/msg/PointCloud2

Polygon

Draws the outline of a polygon as lines.

geometry_msgs/msg/Polygon

Odometry

Accumulates odometry poses from over time.

nav_msgs/msg/Odometry

Range

Displays cones representing range measurements from sonar or IR range sensors. Version: Electric+

sensor_msgs/msg/Range

RobotModel

Shows a visual representation of a robot in the correct pose (as defined by the current TF transforms).

TF

Displays the tf2 transform hierarchy.

Wrench

Draws a wrench as arrow (force) and arrow + circle (torque)

geometry_msgs/msg/WrenchStamped

Twist

Draws a twist as arrow (linear) and arrow + circle (angular)

geometry_msgs/msg/TwistStamped

配置

不同的显示器配置通常适用于可视化器的不同用途。 例如,对完整 PR2 有用的配置不一定对测试车有用。 为此,可视化器允许您加载和保存不同的配置。

配置包含:

  • 显示器 + 其属性

  • 工具属性

  • 3D 可视化的视点和设置

视图面板

可视化器中有多种不同类型的相机。

../../../../_images/camera-types.png

相机类型包括不同的相机控制方式和不同类型的投影(正交与透视)。

轨道摄像机(默认)

轨道摄像机只是围绕焦点旋转,同时始终注视该点。 移动摄像机时,焦点会显示为一个小圆盘:

../../../../_images/focal-point.png

控制:

  • 鼠标左键:单击并拖动以围绕焦点旋转。

  • 鼠标中键:单击并拖动以在由相机的上下矢量形成的平面中移动焦点。移动的距离取决于焦点——如果焦点上有一个物体,并且您单击它上面,它将停留在鼠标下方。

  • 鼠标右键:单击并拖动以放大/缩小焦点。向上拖动放大,向下拖动缩小。

  • 滚轮:放大/缩小焦点

FPS(第一人称)相机

FPS 相机是第一人称相机,因此它会像您用头看一样旋转。

控制:

  • 鼠标左键:单击并拖动以旋转。按住 Control 键单击以选择鼠标下方的物体并直接查看它。

  • 鼠标中键:单击并拖动以沿由相机的上下矢量形成的平面移动。

  • 鼠标右键:单击并拖动以沿相机的前向矢量移动。向上拖动向前移动,向下拖动向后移动。

  • 滚轮:向前/向后移动。

自上而下的正交

自上而下的正交相机始终沿 Z 轴向下看(在机器人框架中), 并且是正交视图,这意味着物体不会随着距离变远而变小。

控制:

  • 鼠标左键:单击并拖动以围绕 Z 轴旋转。

  • 鼠标中键:单击并拖动以沿 XY 平面移动相机。

  • 鼠标右键:单击并拖动以缩放图像。

  • 滚轮:缩放图像。

XY 轨道

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

控件:

参见轨道相机。

第三人称跟随者

相机保持朝向目标框架的恒定视角。 与 XY 轨道相反,如果目标框架偏航,相机就会转动。 例如,如果您正在对有角落的走廊进行 3D 映射,这可能会很方便。

控件:

参见轨道相机。

自定义视图

视图面板还允许您创建不同的命名视图,这些视图会被保存并可在它们之间切换。 视图由目标框架、相机类型和相机姿势组成。 您可以通过单击视图面板的“保存”按钮来保存视图。

../../../../_images/views.png

视图由以下部分组成:

  • 视图控制器类型

  • 视图配置(位置、方向等;可能因视图控制器类型而异。)

  • 目标框架

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

坐标框架

RViz 使用 tf 变换系统将数据从其到达的坐标框架转换为全局参考框架。

在可视化工具中,有两个坐标框架很重要,即目标框架和固定框架。

固定框架

这两个框架中更重要的是固定框架。 固定框架是用于表示“世界”框架的参考框架。 这通常是“地图”或“世界”或类似的东西,但也可以是您的里程表框架。

如果错误地将固定框架设置为机器人的底座,那么机器人曾经见过的所有物体都会出现在机器人前面,相对于检测到它们的机器人的位置。 为了获得正确的结果,固定框架不应相对于世界移动。

如果更改固定框架,则当前显示的所有数据都将被清除,而不是重新转换。

目标框架

目标框架是相机视图的参考框架。 例如,如果您的目标框架是地图,您将看到机器人在地图上行驶。 如果您的目标框架是机器人的底座,机器人将保持在同一位置,而其他一切都相对于它移动。

工具

可视化工具在工具栏上有许多您可以使用的工具。 以下部分将简要介绍这些工具。 您可以在帮助 -> 显示帮助面板下找到更多信息。

../../../../_images/tool.png

交互

此工具可让您与可视化环境进行交互。 您可以单击对象,并根据其属性简单地选择它们、移动它们等等。

键盘快捷键:“i”

移动相机

移动相机工具是默认工具。 选择该工具并单击 3D 视图内部时,视点会根据您在“视图”面板中选择的选项和相机类型而变化。有关更多信息,请参阅上一节“视图面板”。

键盘快捷键:“m”

选择

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

../../../../_images/selection_highlight.png ../../../../_images/selection_selected.png

键盘快捷键:s

对焦相机

对焦相机可让您在可视化工具中选择一个位置。 然后,相机将通过改变其方向(但不改变其位置)来对焦该点。

键盘快捷键:c

测量

使用测量工具,您可以测量可视化工具中两个点之间的距离。 激活工具后,第一次单击将设置测量的起点,第二次单击将设置测量的终点。 结果距离将显示在 RViz 窗口的底部。 但请注意,测量工具仅适用于可视化工具中实际渲染的对象,您不能在空白处使用它。

../../../../_images/measure.png

键盘快捷键:n

2D 姿势估计

此工具可让您设置初始姿势以播种定位系统(在 initialpose ROS 主题上发送)。 单击地面上的某个位置并拖动以选择方向。 可以在``工具属性``面板中更改输出主题。

../../../../_images/set_pose.png

此工具与 navigation 堆栈配合使用。

键盘快捷键:p

2D Nav 目标

此工具可让您设置在 goal_pose ROS 主题上发送的目标。 单击地面上的某个位置并拖动以选择方向。 可以在 Tool Properties 面板中更改输出主题。

此工具与 navigation 堆栈配合使用。

键盘快捷键:g

发布点

发布点工具可让您在可视化器中选择一个对象 并且该工具将根据框架发布该点的坐标。 结果像测量工具一样显示在底部,但也发布在 clicked_point 主题上。

键盘快捷键:u

时间

时间面板在模拟器中运行时非常有用,因为它可以让您看到 ROS 时间已经过去了多少,以及``挂钟``(又称真实时间)已经过去了多少。 时间面板还允许您重置可视化器的内部时间状态,这将重置所有显示以及 tf 的内部数据缓存。

../../../../_images/time.png

如果您没有在模拟中运行,时间面板几乎毫无用处。 在大多数情况下,它可以关闭,您可能甚至不会注意到(除了为 rviz 的其余部分提供更多的屏幕空间)。