0. 简介

之前作者已经讲了《ROS1可视化利器—-Webviz》,然后就有读者问,ROS2有没有可以使用的可视化工具呢,答案是肯定的,除了plotjuggler这种ROS1和ROS2通用的可视化利器,还有一种全平台通用的软件FoxgloveStudio,Github开源链接为https://github.com/foxglove/studio

1. FoxgloveStudio 说明

对于FoxgloveStudio这个程序来说,其可以支持基本上ROS原生的全部内容,同时它可以在浏览器中使用,也可作为Linux、Windows和macOS上的桌面应用程序使用。Foxglove项目是webviz项目的一个延伸,这个项目的logo产权是归Cruise的,但是同样是开源的。

Foxglove和Webviz这两个有着很多共通之处,比如说:都是基于Web技术。都是可以在web Browser中做机器人Topic的3D展示。WebViz和Foxglove Studio都是可以免费使用所有功能的,而且是源代码开放,任何人都可以使用它,或者向它贡献代码。并且都支持一套模块化设计的Panel,可以适应于某种特定的机器人场景,对特定的机器人数据进行解析和展示。

如果说ROS1可以选择Webviz和Foxglove Studio的话,那ROS2只能选择Foxglove Studio。当你第一次加载应用程序时,你会看到一个介绍性的对话框,有 “打开数据源 “选项和 “帮助 “资源。在随后的应用程序加载中,你也将能够重新连接到你最近在 “Recents “列表中选择的数据源。

而如何安装的问题,官网也提供了快速的安装通道https://foxglove.dev/download,比如说,我们的Ubuntu环境只需要使用
下载正确的软件包 然后运行

sudo apt install ./foxglove-studio-*.deb

用以下方法安装未来的更新

sudo apt update && sudo apt install foxglove-studio

2. Foxglove Studio——打开

Foxglove Studio可以通过多种来源检查数据—包括实时和记录数据、ROS和非ROS连接,以及本地和远程记录数据文件。

一旦你加载或连接到一个数据包,在应用程序侧边栏中打开数据源标签,以查看你当前数据包的细节。

  • 录制的设备、开始/结束时间、持续时间
  • 主题名称、模式名称、信息计数和发布率
  • 当从Foxglove数据平台流传数据产生的事件
  • 再次打开对话框以切换到不同的数据包
  • 查看你的主题信息

    所有预先记录的数据源(即ROS 1、ROS 2、MCAP和PX4 ULog文件),无论它们是在本地加载还是从远程URL加载,都将被预先加载到Foxglove Studio。这意味着你可以一次性将整个文件过程中的数据可视化并进行分析

3. Foxglove Studio——ROS1

在讲解ROS2之前,我们先来看一下Foxglove Studio的ROS1的使用.Foxglove Studio可以加载本地和远程的ROS 1(.bag)文件,或使用Rosbridge(WebSockets)或本地(TCP)连接直接连接到正在运行的ROS节点中。

3.1 本地文件

要加载一个本地的ROS 1 .bag文件,可以从文件管理器中双击它,直接将文件拖放到应用程序中,或者通过数据源对话框打开本地文件。

同时Foxglove Studio还支持加载远程的ROS 1 (.bag)文件,在数据源对话框中选择从URL打开文件,并输入远程文件的URL。

3.2 在线链接

对于实时连接,你必须与机器人处于同一网络。虽然我们支持多种选择,但我们推荐Foxglove WebSocket。

使用Foxglove WebSocket连接直接连接到你正在运行的ROS栈。这种连接使用标准协议,通过WebSockets将Studio连接到你的ROS主站。这里需要运行一个额外的ROS节点(foxglove_bridge)来进行进行通信。

cd <path/to/your/ros_ws>
git clone https://github.com/foxglove/ros-foxglove-bridge.git src/ros-foxglove-bridge
rosdep update
rosdep install -i --from-path src -y
catkin_make
source install/local_setup.bash
rosrun foxglove_bridge foxglove_bridge

然后,在数据源对话框中点击打开连接,选择Foxglove WebSocket,然后输入你的Rosbridge服务器的URL,值得一提的是,Foxglove WebSocket连接支持发布回调信息,但不支持读取或设置ROS参数。

当然我们还可以用Rosbridge来完成连接,并通过WebSocket直接连接到你正在运行的ROS栈。这个连接选项只需要在Studio和你的机器人之间打开一个端口。

Rosbridge连接使用一个标准协议,通过WebSockets将Studio与你的ROS主站连接起来。虽然它确实需要运行一个额外的ROS节点(rosbridge_server

# For Noetic (ROS 1)
sudo apt install ros-noetic-rosbridge-suite

接下来,启动WebSocket服务器,并查看命令打印结果,以确定它所监听的端口(例如ws://0.0.0.0:9090)

roslaunch rosbridge_server rosbridge_websocket.launch

在数据源对话框中点击打开连接,选择 “Rosbridge (ROS 1 & 2)”,然后输入Rosbridge服务器的URL

4. Foxglove Studio——ROS2

Foxglove Studio可以加载本地和远程的ROS 2(.db3)文件,或使用Rosbridge(WebSockets)或本地(TCP)连接直接连接到运行中的ROS节点

由于ROS 2 (.db3)文件不包含其信息定义,我们建议在将其加载到Foxglove Studio之前先将其转换为独立的MCAP文件。

你可以使用MCAP CLI工具来帮助完成这一转换。

mcap convert ros2_input.db3 ros2_output.mcap

mcap 将搜索存储在您的 $$AMENT_PREFIX_PATH 环境变量中的路径,以找到硬盘上的 ROS 消息定义。你也可以使用 ament-prefix-path 标志来设置分隔的目录列表。

mcap convert ros2_input.db3 ros2_output.mcap --ament-prefix-path=/your/first/directory;/your/second/directory

一旦你有了MCAP(.mcap)文件,你可以从你的本地文件系统或远程云存储解决方案打开它们。

4.1 本地文件

一旦你有了MCAP(.mcap)文件,从文件管理器中双击它,直接将它拖入应用程序,或通过数据源对话框打开本地文件。

同时Foxglove Studio不支持加载远程的ROS 2.db3文件,但你可以将它们转换成MCAP文件,以支持远程文件。

要加载一个远程MCAP(.mcap)文件,在数据源对话框中选择从URL打开文件,然后输入远程文件的URL。并请查看设置CORS页面

4.2 在线链接

对于实时连接,你必须与机器人处于同一网络。虽然我们支持多种选择,但我们推荐Foxglove WebSocket作为最简单的入门选择。

使用Foxglove WebSocket连接直接连接到你正在运行的ROS栈。这种连接使用标准协议,通过WebSockets将Studio连接到你的ROS主站。这需要运行一个额外的ROS节点(foxglove_bridge)并要打开Foxglove WebSocket连接,请确保你已经安装了ROS 2并按照说明设置了Foxglove bridge

然后,在数据源对话框中点击打开连接,选择Foxglove WebSocket,然后输入你的Rosbridge服务器的URL。

同样也可以使用Rosbridge连接,通过WebSockets直接连接到你正在运行的ROS节点。这同样需要额外的节点 (rosbridge_server)并要打开一个Rosbridge连接,确保你已经安装了ROS 2,以及rosbridge-suite

# For Galactic (ROS 2)
$$ sudo apt install ros-galactic-rosbridge-suite

接下来,启动WebSocket服务器,并查看命令打印结果,以确定它所监听的端口(例如ws://0.0.0.0:9090)。

$$ ros2 launch rosbridge_server rosbridge_websocket_launch.xml

在数据源对话框中点击打开连接,选择 “Rosbridge (ROS 1 & 2)”,然后输入Rosbridge服务器的URL。

5. 参考链接

https://foxglove.dev/docs/studio

https://zhuanlan.zhihu.com/p/427952618