ROS2 数据不在现场也能看:Ubuntu 22.04 用 Foxglove Bridge + cpolar 远程看话题和图像流

张开发
2026/6/6 7:08:16 15 分钟阅读

分享文章

ROS2 数据不在现场也能看:Ubuntu 22.04 用 Foxglove Bridge + cpolar 远程看话题和图像流
ROS2 数据不在现场也能看Ubuntu 22.04 用 Foxglove Bridge cpolar 远程看话题和图像流机器人调试最烦的一件事机器在实验室人不在现场。只想让老师、同事或者外场人员临时看一下 ROS2 话题、TF、图像流结果一上来就要 VPN、远程桌面、开 SSH、改网络。说实话这种做法很容易把一个小问题搞成安全事故。我更推荐的方式是机器人主机只启动 Foxglove Bridge再用 cpolar 临时映射这个 WebSocket 端口。别人只需要打开 Foxglove Web连上一个临时地址就能看数据演示结束后关掉隧道不长期暴露主机。这篇文章要跑通什么环境按最常见的来Ubuntu 22.04ROS2 HumbleFoxglove Bridgecpolar 临时公网访问demo 话题 / 可选图像流这里不假装有真实机器人硬件。为了让你能复现我用 ROS2 自带 demo 和image_tools/cam2image演示。真实机器人上只要有话题在发布思路一样。最终效果是Ubuntu 上启动 ROS2 示例话题启动foxglove_bridge监听本机8765端口用 cpolar 把8765临时映射到公网远程浏览器打开 Foxglove Web通过wss://xxx连接看完后关闭 cpolar 隧道。划重点不要暴露 SSH不要把整个 ROS2 网络扔到公网不要开放控制类话题写入权限。先检查系统和 ROS2 环境先确认系统版本lsb_release -a正常应该能看到 Ubuntu 22.04Description: Ubuntu 22.04.x LTS Codename: jammy再检查 ROS2 是否已经装好source /opt/ros/humble/setup.bash ros2 --version ros2 topic list如果ros2命令不存在说明 ROS2 Humble 还没装。这里给一份最小前置流程完整安装建议以 ROS 官方文档为准。sudo apt update sudo apt install -y software-properties-common curl gnupg lsb-release sudo add-apt-repository universe sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \ -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] \ http://packages.ros.org/ros2/ubuntu $(. /etc/os-release echo $UBUNTU_CODENAME) main | \ sudo tee /etc/apt/sources.list.d/ros2.list /dev/null sudo apt update sudo apt install -y ros-humble-desktop装完后建议把环境写进 shell 配置echo source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc如果你用的是 zsh就写到~/.zshrcecho source /opt/ros/humble/setup.bash ~/.zshrc source ~/.zshrc安装 Foxglove Bridge 和示例包Foxglove Bridge 在 ROS2 Humble 下可以直接用 apt 安装sudo apt update sudo apt install -y \ ros-humble-foxglove-bridge \ ros-humble-demo-nodes-cpp \ ros-humble-turtlesim \ ros-humble-image-tools确认包能找到ros2 pkg list | grep foxglove_bridge如果能输出foxglove_bridge说明安装没问题。启动一个可复现的 ROS2 demo 话题先开一个终端启动 talkersource /opt/ros/humble/setup.bash ros2 run demo_nodes_cpp talker再开一个终端检查话题source /opt/ros/humble/setup.bash ros2 topic list你应该能看到/chatter /parameter_events /rosout看一下/chatter数据ros2 topic echo /chatter如果能持续输出Hello World说明 demo 正常。想演示图像流的话可以再开一个终端启动cam2imagesource /opt/ros/humble/setup.bash ros2 run image_tools cam2image --ros-args -p burger_mode:true这个命令不依赖真实摄像头会发布一张示例图像适合教程复现。如果你要接真实 USB 摄像头再按自己的驱动和权限处理。检查图像话题ros2 topic list | grep image常见会看到类似/image启动 Foxglove Bridge现在启动 Foxglove Bridge。为了让 cpolar 能映射建议监听0.0.0.0端口用默认常见的8765source /opt/ros/humble/setup.bash ros2 launch foxglove_bridge foxglove_bridge_launch.xml \ address:0.0.0.0 \ port:8765正常情况下终端会显示 bridge 已启动并监听 WebSocket 服务。再开一个终端检查端口ss -lntp | grep 8765能看到类似输出就可以LISTEN 0 ... 0.0.0.0:8765 ...本机也可以用 Foxglove Web 先试一下ws://127.0.0.1:8765Foxglove Web 地址是https://app.foxglove.dev/打开后选择连接 Foxglove WebSocket填入ws://127.0.0.1:8765。如果能看到/chatter、/image等话题说明本地链路已经通了。用 cpolar 临时映射 Foxglove Bridge 端口接下来处理远程访问。安装 cpolarcurl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash如果是第一次使用需要登录 cpolar 控制台获取 authtoken然后执行cpolar authtoken 你的 authtoken把本地8765映射成公网 HTTP/HTTPS 地址cpolar http 8765启动后终端里会出现类似Forwarding https://xxxx.cpolar.top - http://localhost:8765Foxglove Bridge 本质是 WebSocket 服务。远程连接时把 HTTPS 地址改成 WSSwss://xxxx.cpolar.top然后让远程同事打开https://app.foxglove.dev/选择 Foxglove WebSocket 连接填入wss://xxxx.cpolar.top如果配置正常远程浏览器就能看到 ROS2 话题列表。比如/chatter、/image、/rosout。在 Foxglove 里看什么连接成功后可以先看几个基础项Topics确认/chatter、/image是否出现Raw Messages查看/chatter原始消息Image 面板选择/image看图像流Logs查看/rosoutLayout保存一个临时调试布局方便别人复看。如果是团队协作我建议只让对方看必要话题不要把调试过程变成远程控制过程。这也是我喜欢这种方案的原因cpolar 只负责临时打洞Foxglove 只负责展示数据边界很清楚。演示结束后怎么关闭用完以后按顺序关闭。关闭 cpolar# 在运行 cpolar http 8765 的终端里按 CtrlC关闭 Foxglove Bridge# 在运行 ros2 launch foxglove_bridge ... 的终端里按 CtrlC关闭 demo 节点# 在 talker / cam2image 对应终端里按 CtrlC如果你想确认端口已经不再监听ss -lntp | grep 8765 || echo 8765 已关闭常见问题和排查1. Foxglove Web 连不上先确认 bridge 是否在监听ss -lntp | grep 8765再确认本地能不能连。远程之前先在本机 Foxglove Web 用下面地址测试ws://127.0.0.1:8765本地都不通就先别排查 cpolar问题大概率在 ROS2 或 bridge。2. 远程地址填了 https 还是不行Foxglove 连接 WebSocket 时要用wss://不是普通网页访问的https://。比如 cpolar 给的是https://abcd.cpolar.topFoxglove 里填wss://abcd.cpolar.top3. 话题列表是空的检查 ROS2 环境是否一致source /opt/ros/humble/setup.bash ros2 topic list如果你用了自定义ROS_DOMAIN_ID确保 demo 节点和 Foxglove Bridge 在同一个 domainecho $ROS_DOMAIN_ID不要为了远程访问去把 ROS2 DDS 网络大范围暴露出去。这里远程只走 Foxglove Bridge 的 WebSocket 端口。4. 图像面板没画面先确认/image是否有数据ros2 topic hz /image如果没有频率输出说明图像发布节点没跑起来。用 demo 的话重新启动ros2 run image_tools cam2image --ros-args -p burger_mode:true安全注意这部分别省这套方案适合临时调试不适合长期裸奔。我建议至少做到这几条只映射8765这一个 Foxglove Bridge 端口不要映射 SSH 端口不要把 ROS2 DDS 发现端口直接暴露到公网不要开放控制类话题的写入权限给不可信人员cpolar 地址只发给需要参与调试的人演示结束立即CtrlC关闭 cpolar真实机器人调试时最好断开危险执行机构或者只发布只读观测数据。简单说远程看数据可以远程接管机器人不行。写在最后ROS2 远程调试不一定非要上来就搞复杂网络。如果你的目标只是让不在现场的人临时看话题、看图像、看日志Foxglove Bridge cpolar 这个组合就够直接本地 ROS2 不用大改远程只需要一个浏览器演示完关隧道。它不是万能方案也不应该替代正式的安全接入体系。但在实验室联调、课程演示、外场临时排查这种场景里确实能少折腾很多网络配置。我的建议是先用 demo 跑一遍把端口、WebSocket 地址、安全关闭流程确认好再接真实机器人数据。这样现场出问题时排查会轻松很多。

更多文章