Skip to main content

3D

在3D场景中显示标记、实体、相机图像、网格、URDF模型等。

3d panel

支持的消息

3D面板可以可视化各种不同的消息。

要可视化一个主题,该主题上的消息必须符合以下列出的已知消息模式之一。

相机视场

场景相机的校准参数。

框架模式
ROS 1sensor_msgs/CameraInfo
ROS 2sensor_msgs/msg/CameraInfo
自定义foxglove.CameraCalibration

Grid

2D 彩色网格。

grid

框架模式
ROS 1nav_msgs/OccupancyGrid
ROS 2nav_msgs/msg/OccupancyGrid
自定义foxglove.Grid

foxglove.Grid 设置

字段描述
颜色模式选项之一:
平面:纯色
色彩图:预定义的色彩图
渐变:两个自定义颜色之间的平滑过渡
RGBA(独立字段):使用每个单元格的 redgreenbluealpha 字段中的嵌入颜色(见下文
平面颜色仅在“颜色模式”设置为“平面”时显示;每个单元格的颜色的十六进制代码
按颜色仅在“颜色模式”未设置为“平面”时显示;用于着色逻辑的消息中的数值字段
色彩图仅在“颜色模式”设置为“色彩图”时显示;“Turbo”(Google)或“Rainbow”(RViz);用于将“按颜色”字段值映射到颜色
不透明度仅在“颜色模式”设置为“色彩图”或“BGR(打包)”时显示;设置所有单元格的不透明度
最小值仅在“颜色模式”未设置为“平面”时显示;用于规范化传入网格的“按颜色”字段值的最小值
最大值仅在“颜色模式”未设置为“平面”时显示;用于规范化传入网格的“按颜色”字段值的最大值
框架锁定“开”表示网格锁定到其 frame_id 指定的框架,并且会随着该框架的变换而移动。“关”表示网格相对于固定框架,并且在首次显示后不会移动。
RGBA(独立字段)颜色模式

每个单元格可以包含四个独立字段中的颜色信息,分别命名为 redgreenbluealpha,可以是任何数值类型:

  • 浮点值 — 0–1 范围
  • 无符号整数值 — 最大可能范围(例如 UINT8 字段的 0–255)
  • 有符号整数值-maxmax(例如 INT8 字段的 −127 到 127;值为 −128 被视为与 −127 相同)
字段描述
颜色模式选项之一:
Costmap:预定义的 RViz 色彩图。无法进一步自定义设置。
自定义:使用以下设置自定义色彩图
最小颜色对应于最小单元格值(0)的颜色
最大颜色对应于最大单元格值(100)的颜色。请注意,值恰好为 100 的单元格显示为完全透明。
未知颜色对应于未知单元格值(−1)的颜色
备用颜色对应于超出 −1 到 100 范围的单元格值的颜色
框架锁定“开”表示网格锁定到其 frame_id 指定的框架,并且会随着该框架的变换而移动。“关”表示网格相对于固定框架,并且在首次显示后不会移动。

图像

在 3D 场景中显示图像,使用相应的相机视场消息。

框架模式
ROS 1sensor_msgs/Image
ROS 2sensor_msgs/msg/Image
ROS 1sensor_msgs/CompressedImage
ROS 2sensor_msgs/msg/CompressedImage
自定义foxglove.RawImage
自定义foxglove.CompressedImage

激光扫描

来自平面激光测距仪的单次扫描。

框架模式
ROS 1sensor_msgs/LaserScan
ROS 2sensor_msgs/msg/LaserScan
自定义foxglove.LaserScan

ROS 多边形

由一系列连接点组成的带时间戳的多边形。

框架模式
ROS 1geometry_msgs/PolygonStamped
ROS 2geometry_msgs/msg/PolygonStamped

ROS 标记

类似于场景实体,这些 Marker 消息描述了原始形状或网格。

框架模式
ROS 1visualization_msgs/Marker
ROS 2visualization_msgs/msg/Marker
ROS 1visualization_msgs/MarkerArray
ROS 2visualization_msgs/msg/MarkerArray

网格标记

具有 mesh_resource 字段的标记支持以下 URL 方案:

  • http(s)://
  • package://(仅限桌面应用)
  • file://(仅限桌面应用)

以及文件格式:

glTF (.glb)

这是首选格式,因为它在所有支持的文件类型中具有最佳性能。

二进制 glTF 文件将所有必需的资产捆绑到一个文件中,支持嵌入网格、压缩和 Foxglove 使用的相同基于物理的材质系统。因此,您的模型在 Foxglove 中的外观应与在其他 3D 程序中的外观相似。

STL (.stl)

STL 文件在 Foxglove 中得到了很好的支持,但缺乏 glTF 的一些可视化功能。STL 的主要优点是能够在硬件制造过程和机器人可视化工具之间共享相同的文件。

STL 是为 3D 打印和 CAD 应用设计的,不包括材质或网格层次结构。虽然它们可以用二进制编码表示,但 STL 文件通常用 ASCII 字符表示,这会导致文件更大。

COLLADA (.dae)

作为 glTF 的前身,COLLADA 具有类似的功能集。话虽如此,它确实有更大的基于 XML 的文件,没有压缩,并且有额外的处理开销。

在 RViz 中存在一个错误,其中忽略了 up-axis 元数据,导致许多 .dae 文件在 ROS 环境中的方向不正确。为了解决这个问题,3D 面板有一个 忽略 COLLADA <up_axis> 设置,可以在观察 <up-axis> 标签或像 RViz 一样忽略它之间切换。

Wavefront OBJ (.obj)

OBJ 是一种简单的 ASCII 格式,早于所有其他支持的格式。它具有较大的文件大小、不支持材质、不支持网格层次结构、没有压缩,并且有额外的处理开销。

材质支持作为单独的 .mtl 文件添加到 OBJ 格式中,但 Foxglove 不读取这些文件。

路径

命名坐标系中一系列带时间戳的姿态,表示物体在空间中的路径。

框架模式
ROS 1nav_msgs/Path
ROS 2nav_msgs/msg/Path
自定义foxglove.PosesInFrame

点云

N 维点的集合,可能包含法线、强度等信息的附加字段。

点云

框架模式
ROS 1sensor_msgs/PointCloud2
ROS 2sensor_msgs/msg/PointCloud2
自定义foxglove.PointCloud

设置

字段描述
点大小每个渲染点的大小
点形状每个渲染点的形状
衰减时间每个点保持渲染的时间(以秒为单位)
颜色模式选项之一:
平面:纯色
色彩图:预定义的色彩图
渐变:两个自定义颜色之间的平滑过渡
BGR(打包):仅限 sensor_msgs/PointCloud2;使用每个点的 rgb 字段中的嵌入颜色(见下文
BGRA(打包):仅限 sensor_msgs/PointCloud2;使用每个点的 rgba 字段中的嵌入颜色(见下文
RGBA(独立字段):仅限 foxglove.PointCloud;使用每个点的 redgreenbluealpha 字段中的嵌入颜色(见下文
平面颜色仅在“颜色模式”设置为“平面”时显示;每个点的颜色的十六进制代码
按颜色仅在“颜色模式”未设置为“平面”时显示;用于着色逻辑的消息中的数值字段;例如 xyz<distance>(坐标的 L2 范数)或自定义字段
色彩图仅在“颜色模式”设置为“色彩图”时显示;“Turbo”(Google)或“Rainbow”(RViz);用于将“按颜色”字段值映射到颜色
不透明度仅在“颜色模式”设置为“色彩图”或“BGR(打包)”时显示;设置所有点的不透明度
最小值仅在“颜色模式”未设置为“平面”时显示;用于规范化传入点云的“按颜色”字段值的最小值
最大值仅在“颜色模式”未设置为“平面”时显示;用于规范化传入点云的“按颜色”字段值的最大值
Stixel 视图将点可视化为从点的 z 位置延伸到 0 的 stixels

RGBA 颜色模式

当使用“BGR(打包)”、“BGRA(打包)”和“RGBA(独立字段)”颜色模式时,您的点云消息必须包含某些字段,以显示每个点的颜色信息。

RGBA(独立字段)

对于 foxglove.PointCloud 消息,每个点可以包含四个独立字段中的颜色信息,分别命名为 redgreenbluealpha,可以是任何数值类型:

  • 浮点值 — 0–1 范围
  • 无符号整数值 — 最大可能范围(例如 UINT8 字段的 0–255)
  • 有符号整数值-maxmax(例如 INT8 字段的 −127 到 127;值为 −128 被视为与 −127 相同)
BGR(打包)和 BGRA(打包)

对于 sensor_msgs/PointCloud2 消息,每个点可以在一个名为 rgbrgba 的字段中包含颜色信息:

  • 必须使用 sensor_msgs/PointField 中的 4 字节类型(推荐使用 UINT32,值为 6)
  • 每个红色、绿色、蓝色和 alpha 值由一个字节表示,范围为 0–255
  • 字节必须按 [0xBB, 0xGG, 0xRR, 0xAA] 顺序打包(即在小端序中 (0xAA << 24) | (0xRR << 16) | (0xGG << 8) | 0xBB)。此顺序与 RViz 兼容。

如果使用“BGR”模式,alpha 值仍然必须存在,但会被忽略。

姿态

命名坐标系中的姿态。

框架模式
ROS 1geometry_msgs/PoseArray
ROS 2geometry_msgs/msg/PoseArray
ROS 1geometry_msgs/PoseStamped
ROS 2geometry_msgs/msg/PoseStamped
自定义foxglove.PosesInFrame

场景实体

一组原始形状(立方体、球体、文本、网格、线条等),用于显示从基本边界框到复杂 3D 决策树或道路网络的任何内容。

场景实体必须包装在 SceneUpdate 消息中。

框架模式
自定义foxglove.SceneEntity
自定义foxglove.SceneUpdate

变换

3D 空间中两个参考框架之间的变换(平移和旋转)。

框架模式
ROS 1tf/tfMessage
ROS 1tf2_msgs/TFMessage
ROS 2tf2_msgs/msg/TFMessage
自定义foxglove.FrameTransform

Velodyne 扫描

来自 Velodyne ROS 驱动程序或 Foxglove 桌面应用程序的 Velodyne Lidar 扫描数据包的 Velodyne 连接

框架模式
ROS 1velodyne_msgs/VelodyneScan
ROS 2velodyne_msgs/msg/VelodyneScan

视频

在 3D 场景中显示压缩视频,使用相应的相机视场消息。

框架模式
自定义foxglove.CompressedVideo

设置

框架

选择您的 3D 场景的显示框架和跟随模式。

字段描述
显示框架配置渲染场景的坐标框架。

要渲染场景元素,您需要从其框架到所选显示框架的变换。如果其框架是显示框架,则不需要额外的变换。
跟随模式配置视口的跟随行为。
  • “姿态” - 跟随显示框架的位置和方向
  • “位置” - 仅跟随显示框架的位置
  • “固定” - 不更新视口

场景

配置通用渲染属性和视口属性。

字段描述
渲染统计在面板角落显示渲染性能统计信息
背景场景的背景颜色
标签比例渲染标签的比例
忽略 COLLADA <up_axis>忽略 COLLADA 文件中的 <up_axis> 标签
网格上轴加载没有方向信息的网格(STL、OBJ)时的“上”方向(“Y-up”,“Z-up”)
同步相机同步多个 3D 面板的相机状态

视图

配置相机设置。

字段描述
距离相机到视口中心的距离(即缩放级别)
透视在场景的 3D(“开”)和 2D(“关”)视图之间切换。2D 视图将相机朝向 z 轴向下。
目标从显示框架原点的平移偏移
Theta从显示框架原点的方位角偏移(以度为单位)
Phi从显示框架原点的极角偏移(以度为单位)
Y 轴视场垂直视场(以度为单位)
近剪裁平面距离
远剪裁平面距离
对数深度启用对数深度缓冲以获得更均匀的深度精度。可能会导致渲染伪影或性能下降。

对数深度与近/远平面设置的交互

对数深度 设置是相互关联的。当使用非常小的 值或较大的 值时,启用 对数深度 可能会减少视觉伪影。例如,在下面的视频中:

  • 左侧面板未使用对数深度,并且近剪裁平面为 1.0。网格渲染平滑,但靠近观察者的物体被剪裁。
  • 中间面板未使用对数深度,并且近剪裁平面为 0.01。观察者可以更接近物体而不被剪裁,但在多个网格之间出现渲染伪影(z-fighting)。
  • 右侧面板启用了新的对数深度设置。这通过为网格提供更多的深度精度来避免 z-fighting,同时仍允许近剪裁平面值为 0.01 以减少剪裁。

变换

机器人系统会生成许多描述其对周围世界观察的消息。这些消息可能存在于一个或多个坐标系中,或在机器人的不同部分上。

变换定义了在给定时间两个坐标系之间的空间关系。要将对象渲染到场景中,必须存在从对象的坐标系到显示框架的变换路径。

可视化变换框架以调试元素为何未按预期渲染的位置。

变换

历史记录

面板在变换历史记录存储中存储坐标系关系。每个坐标系最多存储 10,000 条变换消息,然后在新消息到达时开始删除最旧的消息。

预加载

3D 面板中的变换预加载通过将变换消息加载到内存中来确保场景的准确性。变换预加载可能会在预加载和搜索期间影响 3D 面板性能。您可以在 3D 面板设置中禁用预加载。但是,当禁用时,在涉及不频繁的坐标系的某些情况下,3D 面板可能无法正确渲染您的场景。

故障排除

在时间同步无法实现的实时源工作时,建议服务器根据 Foxglove Websocket 协议 发布其 Time。否则,如果服务器时间领先于可视化应用程序,3D 面板中的某些消息将立即显示,但坐标系状态可能会滞后,因为应用程序使用其墙上时间而不是服务器时间。

设置

字段描述
可编辑切换应用内变换框架的编辑。当“开启”时,您可以更新平移旋转值以调整变换框架,查看其对场景的影响,并调试如何调整机器人上的框架。当关闭时,将恢复到原始的平移和旋转值。
标签切换变换标签的显示。
轴比例变换轴的比例(显示为箭头标记)
线宽变换的线宽(显示为线标记)
线颜色变换的颜色(显示为线标记)
启用预加载从数据源预加载变换消息。

主题

列出包含支持的消息类型的主题,这些主题可以显示在场景中。切换各个主题。

每个主题提供设置以配置可视化在场景中的显示方式。

任何与支持的模式匹配的消息的主题都将显示在主题列表中。每种支持的格式都有特定的可视化设置。这些设置将显示在主题下。

使用顶级菜单切换所有主题。您可以通过点击主题名称旁边的眼睛图标来切换任何单个主题。

自定义图层

自定义图层允许您添加非数据源的可视化元素。

使用顶级菜单添加自定义图层。

添加网格

网格是具有固定大小和分割数的二维正方形。您可以创建任意数量的网格。网格可以相对于显示框架或任何其他变换框架进行渲染。

grid

使用网格图层设置更改框架、大小、颜色、分割数和网格的其他属性。

添加 URDF

如果您的数据源支持参数(即原生 ROS 1 或 ROS 2 连接)并且 /robot_description 参数设置为有效的 URDF XML,则会自动加载 URDF 机器人模型。

您可以使用自定义图层添加 URDF 模型。使用每个图层的菜单复制或删除自定义图层。

字段描述
来源URDF 的来源
  • URL – URL 到以下方案之一的源 URDF 文件:
    • http(s):// – 通过 HTTP(S) 连接
    • package:// – 包路径。仅在使用桌面应用程序或支持资产获取的实时连接(如 foxglove_bridge)时支持。
  • 文件路径 – 源 URDF 文件的绝对文件路径。仅在使用桌面应用程序时支持。
  • 参数 – 包含源 URDF 文件的参数。
  • 主题 – 包含源 URDF 文件的主题。
标签(可选)自定义图层在侧边栏中显示的标签。
框架前缀(可选)机器人的变换前缀。也常被称为 TF 前缀。
显示模式要显示的机器人链接几何体
  • 自动 – 默认为视觉几何体,但如果没有视觉几何体则回退到碰撞几何体
  • 视觉 – 视觉几何体
  • 碰撞 – 碰撞几何体
颜色URDF 模型的备用颜色,如果源中不包含颜色
使用 package:// URL 解析 URDF 资产

Foxglove 能够通过多种方式获取 package:// 引用的网格和其他资产:

  1. 使用桌面应用程序时,可以通过 ROS_PACKAGE_PATH 设置中指定的目录找到包来解析包路径
  2. 使用支持资产获取的实时连接(如 Foxglove Bridge)时,可以通过 websocket 连接获取资产
  3. 当 URDF 以 http(s) 或本地文件路径提供时,可以在 URL 或文件路径包含包名时解析包路径。考虑以下示例,其中包名 leo_description 包含在 URDF URL 中:
  • URDF URL: https://raw.githubusercontent.com/LeoRover/leo_common-ros2/humble/leo_description/urdf/leo.urdf.xacro
  • 资产 URL: package://leo_description/models/Rocker.dae
  • 解析后的资产 URL: https://raw.githubusercontent.com/LeoRover/leo_common-ros2/humble/leo_description/urdf/leo.urdf.xacro

发布

配置 3D 面板的点击发布行为。

字段描述
类型要发布的消息类型。
主题要发布消息的主题 – 仅在具有发布支持的 ROS 数据源 时可能。

用户交互

点击场景中的任何对象以在选定对象弹出窗口中显示其相关详细信息。

3d 面板点击标记

点击主题旁边的图标以在侧边栏中打开其设置或在新的原始消息面板中显示其消息。

选择一个对象将设置一个 $selected_id 变量为点击对象的 id 值(如果有)。对于ROS 标记场景实体,您还可以在点击时设置另一个变量。

右侧的面板控件可用于执行以下操作:

  • 选择 切换对象选择模式
  • 3D 在场景的 3D 和 2D 视图之间切换
  • 测量 测量两点之间的距离

快捷键

移动相机:

  • w – 向前移动相机
  • s – 向后移动相机
  • a – 向左移动相机
  • d – 向右移动相机
  • 滚动 – 放大和缩小
  • 拖动 – 平行于地面移动相机
  • 右键单击 + 水平拖动 – 围绕世界的 z 轴旋转相机
  • 右键单击 + 垂直拖动 – 围绕世界的 x 和 y 轴平移相机

性能故障排除

如果在与 3D 面板交互时遇到性能问题,可能是因为未启用硬件加速。硬件加速将通过在 GPU 而不是 CPU 上渲染显著提高性能。

如果您使用的是 Google Chrome,可以通过访问 chrome://gpu 并查看“WebGL”和/或“WebGL2”是否为“硬件加速”来检查是否启用了硬件图形加速。如果没有,请访问 chrome://settings,在设置中搜索 acceleration 并确保启用了“可用时使用图形加速”切换。如果在这些步骤之后您仍然看到 WebGL 在 chrome://gpu 中不是“硬件加速”,那么您可能需要调查启用 GPU 的特定平台步骤。

桌面应用程序使用基于 Chromium 的 Electron,应该在可用时自动使用硬件加速。如果您在这里看到问题,我们建议按照上述步骤查看 Chrome 中是否存在相同问题。如果是这样,很可能是由于相同原因影响了我们的应用程序。因此,我们建议首先在 Chrome 中解决问题,如果桌面应用程序在此之后仍然有问题,请告诉我们,我们会进行调查。

硬件加速可能被禁用的一些原因:

  • 您的图形驱动程序已过时或未安装,使 Chrome 无法使用它们。
  • 您的系统配置可能不支持 Chrome 中的硬件加速。解决此问题的一种方法是在 about://flags 中启用“覆盖软件渲染列表”,这可以允许 Chrome 在不受支持的系统上使用硬件加速。这可能会导致不稳定的 Chrome 体验,除非必要,否则不建议这样做。

如果在使用 foxglove.CompressedVideo 主题时遇到 3D 面板性能不佳的问题,请检查是否启用了视频加速。文档在这里

链接和资源