RViz 是机器人操作系统 (ROS) 框架的 3D 可视化工具。
RViz 用户指南
https://docs.ros.org/en/jazzy/Tutorials/Intermediate/RViz/RViz-User-Guide/RViz-User-Guide.html
构建自定义 RViz 显示器
https://docs.ros.org/en/jazzy/Tutorials/Intermediate/RViz/RViz-Custom-Display/RViz-Custom-Display.html
RViz 用户指南
目标:了解 RViz
教程级别:中级
时间:25 分钟
目录
背景
安装或构建 rviz
启动
显示
添加新显示
显示属性
显示状态
内置显示类型
配置
视图面板
轨道相机(默认)
FPS(第一人称视角)相机
自上而下正投影
XY 轨道
第三人称追随者
自定义视图
坐标系
固定框架
目标框架
工具
交互
移动相机
选择
聚焦相机
测量
2D 位姿估计
2D 导航目标
发布点
时间
背景
RViz 是机器人操作系统 (ROS) 框架的 3D 可视化工具。
安装或构建 rviz
请按照您的操作系统的安装说明安装 RViz。
启动
不要忘记获取设置文件。
source /opt/ros/jazzy/setup.bash
然后启动可视化工具
ros2 run rviz2 rviz2
当 RViz 第一次启动时,您将看到此窗口:
中间的大黑窗口是 3D 视图(因为没有任何东西所以是空的)。左边是显示列表,将显示您加载的任何显示。现在它只包含全局选项和一个网格,我们稍后会介绍。右边是其他一些面板,如下所述。
显示
显示器是指在 3D 世界中绘制某些内容的设备,并且可能在显示器列表中有一些可用选项。例如,点云、机器人状态等。
添加新显示器
要添加显示器,请单击底部的添加按钮:
这将弹出新的显示对话框:
顶部的列表包含显示类型。类型详细说明了此显示将可视化的数据类型。中间的文本框提供了所选显示类型的描述。最后,您必须为显示提供一个唯一的名称。例如,如果您的机器人上有两个激光扫描仪,您可能会创建两个名为“Laser Base”和“Laser Head”的 Laser Scan
显示。
显示属性
每个显示器都有自己的属性列表。例如:
显示状态
每个显示都有自己的状态,以帮助您了解一切是否正常。状态可以是: OK
、 Warning
、 Error
或 Disabled
。状态通过显示器标题的背景颜色以及在展开显示器时可以看到的状态类别来指示:
Status
类别还会扩展以显示特定的状态信息。此信息因不同显示器而异,消息应能自我解释。
内置显示类型
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 | 创建一个带有图像的新渲染窗口。与相机显示不同,此显示不使用 CameraInfo。 | Creates a new rendering window with an Image. Unlike the Camera display, this display does not use a CameraInfo | sensor_msgs/msg/Image |
InteractiveMarker | 显示来自一个或多个交互标记服务器的 3D 对象,并允许鼠标与它们进行交互 | 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 | 显示代表声纳或红外范围传感器的测量范围的圆锥。版本:Electric+ | Displays cones representing range measurements from sonar or IR range sensors. Version: Electric+ | sensor_msgs/msg/Range |
RobotModel | 显示机器人在正确位姿下的视觉表示(如当前 TF 变换所定义)。 | Shows a visual representation of a robot in the correct pose (as defined by the current TF transforms). | |
TF | 显示 tf2 变换层次结构。 | 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) |
配置
不同的显示配置通常对可视化工具的不同用途很有用。例如,对完整的 PR2 有用的配置不一定对测试车有用。为此,可视化工具允许您加载和保存不同的配置。
一个配置包含:
显示及其属性
工具属性
3D 可视化的视点和设置
视图面板
可视化工具中有多种不同类型的相机可供选择。
相机类型包括不同的控制相机方式和不同的投影类型(正投影与透视投影)。
轨道相机(默认)
轨道相机只是围绕一个焦点旋转,同时始终注视该点。移动相机时,焦点显示为一个小圆盘。
控件:
左键:点击并拖动以围绕焦点旋转。
中键:点击并拖动以移动由相机的上向量和右向量形成的平面中的焦点。移动的距离取决于焦点——如果焦点上有一个物体,并且你点击它,它将保持在你的鼠标下。
右键:点击并拖动以放大/缩小焦点。向上拖动放大,向下拖动缩小。
滚轮:放大/缩小焦点
第一人称视角 (FPS) 摄像机
FPS 相机是第一人称相机,所以它旋转时就像你用头在看一样。
控件:
左键:点击并拖动以旋转。按住 Ctrl 键并点击以选择鼠标下的对象并直接查看。
中键:点击并拖动以沿由相机的上向量和右向量形成的平面移动。
右键:点击并拖动以沿着相机的前向矢量移动。向上拖动前进,向下拖动后退。
滚轮:向前/向后移动。
自上而下正交
自上而下的正交相机始终沿着 Z 轴(在机器人框架中)向下看,并且是正交视图,这意味着物体随着距离的增加不会变小。
控件:
左键:点击并拖动以绕 Z 轴旋转。
中键:点击并拖动以沿 XY 平面移动相机。
右键:点击并拖动以缩放图像。
滚轮:放大图像。
XY 轨道
与轨道相机相同,焦点限制在 XY 平面。
控件:
查看轨道相机。
第三人称跟随者
摄像机保持对目标框架的恒定视角。与 XY 轨道相比,如果目标框架偏航,摄像机会转动。例如,如果您正在进行带有拐角的走廊的 3D 映射,这可能会很方便。
控件:
查看轨道相机。
第三人称跟随者
摄像机保持对目标框架的恒定视角。与 XY 轨道相比,如果目标框架偏航,摄像机会转动。例如,如果您正在进行带有拐角的走廊的 3D 映射,这可能会很方便。
控件:
查看轨道相机。
自定义视图
视图面板还允许您创建不同的命名视图,这些视图会被保存并可以在它们之间切换。一个视图由目标框架、相机类型和相机姿态组成。您可以通过点击视图面板的保存按钮来保存视图。
视图包括:
查看控制器类型
查看配置(位置、方向等;可能因每种视图控制器类型而异。)
目标框架
视图是按用户保存的,而不是在配置文件中。
坐标系
RViz 使用 tf 变换系统将数据从其到达的坐标系转换为全局参考系。在可视化工具中,有两个重要的坐标系需要了解,即目标坐标系和固定坐标系。
固定框架
两个框架中更重要的是固定框架。固定框架是用于表示 world
框架的参考框架。这通常是 map
,或 world
,或类似的东西,但也可以是,例如,你的里程计框架。
如果固定框架被错误地设置为机器人的基座,那么机器人曾经看到的所有物体都会出现在机器人前面,在它们被检测到的相对于机器人的位置。为了获得正确的结果,固定框架不应相对于世界移动。
如果更改固定框架,则当前显示的所有数据将被清除,而不是重新转换。
目标框架
目标框架是相机视图的参考框架。例如,如果您的目标框架是地图,您将看到机器人在地图上行驶。如果您的目标框架是机器人的底座,机器人将保持在同一位置,而其他所有物体相对于它移动。
工具
可视化工具有许多工具可以在工具栏上使用。以下部分将简要介绍这些工具。您可以在帮助 -> 显示帮助面板下找到更多信息。
键盘控制
切换工具
这些控制在所有模式下都有效,除了捕获所有按键的工具(选择工具)。
C:切换到焦点相机工具。
M:切换到移动相机工具。
N:切换到测量工具。
U:切换到发布点工具。
S:切换到选择工具。
G:切换到2D目标姿态工具。
P:切换到2D姿态估计工具。
控制视点
这些控制仅在使用移动相机和交互工具时有效。
F:将焦点移动到鼠标下的3D点。这并不适用于所有显示对象或所有计算机(目前)。
Z:跳回到查看原点,即默认视图位置。
此控制仅在使用选择工具时有效。
F:将焦点移动到当前选定对象的质心。
修改显示列表
Ctrl-N:添加显示
Ctrl-X:移除显示
Ctrl-R:重命名显示
文件操作
Ctrl-O:打开配置文件
Ctrl-S:保存到配置文件(打开文件选择器)
Ctrl-Q:退出RViz,首先将当前配置保存到
~/.rviz/display_config
。
鼠标控制
环绕视图控制器
在此视图中,视点始终对准焦点。你可以围绕该点移动(环绕它)或移动该点本身。
左键:拖动以围绕焦点旋转。
中键或Shift-左键:拖动以移动焦点。
滚轮:向上或向下滚动以放大或缩小焦点。
右键:向上或向下拖动以放大或缩小焦点。
Shift-右键:向上或向下拖动以向前或向后移动焦点。
XY环绕视图控制器
类似于环绕视图控制器,但焦点保持在Z=0(地面)平面上。
左键:拖动以围绕焦点旋转。
中键或Shift-左键:拖动以在地面平面上移动焦点。
滚轮:向上或向下滚动以放大或缩小焦点。
右键:向上或向下拖动以放大或缩小焦点。
FPS视图控制器
受第一人称射击游戏启发。拖动以指向你的头部。
左键:拖动旋转视点到拖动方向。
中键或Shift-左键:拖动以平移(平移)左右和上下。
滚轮:向上或向下滚动以向前或向后移动视点。
右键:向上或向下拖动以向前或向后移动视口。
俯视正交视图控制器
俯视正交视图。
左键:左右拖动旋转视图。
中键或Shift-左键:拖动以在XY平面上移动视点。
滚轮:向上或向下滚动以放大或缩小。
右键:向上或向下拖动以放大或缩小。
互动
此工具允许您与可视化环境进行交互。您可以点击对象,并根据其属性简单地选择它们、移动它们等。
键盘快捷键: i
移动相机
移动相机工具是默认工具。选择此工具后,单击 3D 视图内部,视点将根据您在 Views
面板中选择的选项和相机类型进行更改。有关更多信息,请参见上一节 Views Panel
。
键盘快捷键: m
选择
选择工具允许您选择在 3D 视图中显示的项目。它支持单点选择以及点击/拖动框选择。您可以使用 Shift 键添加到选择中,并使用 Ctrl 键从选择中删除。如果您想在选择时移动相机而不切换回移动相机工具,可以按住 Alt 键。 f
键将使相机聚焦于当前选择。
键盘快捷键: s
聚焦相机
聚焦相机允许您在可视化工具中选择一个位置。然后,相机将通过改变其方向而不是位置来聚焦该点。
键盘快捷键: c
测量
使用测量工具,您可以测量可视化器中两点之间的距离。激活工具后的第一次点击将设置测量的起点,第二次点击将设置测量的终点。测量结果将显示在 RViz 窗口的底部。但请注意,测量工具仅适用于可视化器中实际渲染的对象,不能在空白空间中使用。
键盘快捷键: n
2D 姿态估计
此工具允许您设置初始姿态以启动定位系统(发送到 initialpose
ROS 主题)。点击地面平面上的位置并拖动以选择方向。输出主题可以在 Tool Properties
面板中更改。
此工具与导航堆栈一起工作。
键盘快捷键: p
[INFO] [1720963859.745295495] [rviz2]: Setting estimate pose: Frame:map, Position(3.28002, 0.388191, 0), Orientation(0, 0, -0.934701, 0.355435) = Angle: -2.41483
2D 导航目标
此工具允许您在 goal_pose
ROS 主题上设置目标。点击地面平面上的位置并拖动以选择方向。输出主题可以在 Tool Properties
面板中更改。
此工具与导航堆栈一起工作。
键盘快捷键: g
[INFO] [1720963953.558775293] [rviz2]: Setting goal pose: Frame:map, Position(2.04239, -0.169836, 0), Orientation(0, 0, -0.769799, 0.638287) = Angle: -1.75705
发布点
发布点工具允许您在可视化工具中选择一个对象,该工具将根据框架发布该点的坐标。结果显示在底部,就像测量工具一样,但也会发布在 clicked_point
主题上。
键盘快捷键: u
时间
时间面板在模拟器中运行时最有用,因为它允许您查看已过去的 ROS 时间与已过去的 Wall Clock
(即实际)时间的对比。时间面板还允许您重置可视化工具的内部时间状态,这将重置所有显示以及 tf 的内部数据缓存。
如果你不是在模拟中运行,时间面板大多是无用的。在大多数情况下,它可以关闭,你可能甚至不会注意到(除了为 rviz 的其余部分腾出更多的屏幕空间)。