当前位置: 首页 > news >正文

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.04
  • ROS2 Humble
  • Foxglove Bridge
  • cpolar 临时公网访问
  • demo 话题 / 可选图像流

这里不假装有真实机器人硬件。为了让你能复现,我用 ROS2 自带 demo 和image_tools/cam2image演示。真实机器人上只要有话题在发布,思路一样。

最终效果是:

  1. Ubuntu 上启动 ROS2 示例话题;
  2. 启动foxglove_bridge,监听本机8765端口;
  3. 用 cpolar 把8765临时映射到公网;
  4. 远程浏览器打开 Foxglove Web,通过wss://xxx连接;
  5. 看完后关闭 cpolar 隧道。

划重点:不要暴露 SSH,不要把整个 ROS2 网络扔到公网,不要开放控制类话题写入权限。

先检查系统和 ROS2 环境

先确认系统版本:

lsb_release -a

正常应该能看到 Ubuntu 22.04:

Description: 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,就写到~/.zshrc

echo "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 话题

先开一个终端,启动 talker:

source /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 正常。

想演示图像流的话,可以再开一个终端启动cam2image

source /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,端口用默认常见的8765

source /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:8765

Foxglove Web 地址是:

https://app.foxglove.dev/

打开后选择连接 Foxglove WebSocket,填入ws://127.0.0.1:8765。如果能看到/chatter/image等话题,说明本地链路已经通了。

用 cpolar 临时映射 Foxglove Bridge 端口

接下来处理远程访问。

安装 cpolar:

curl -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:8765

Foxglove Bridge 本质是 WebSocket 服务。远程连接时,把 HTTPS 地址改成 WSS:

wss://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:查看/rosout
  • Layout:保存一个临时调试布局,方便别人复看。

如果是团队协作,我建议只让对方看必要话题,不要把调试过程变成远程控制过程。

这也是我喜欢这种方案的原因:cpolar 只负责临时打洞,Foxglove 只负责展示数据,边界很清楚。

演示结束后怎么关闭

用完以后,按顺序关闭。

关闭 cpolar:

# 在运行 cpolar http 8765 的终端里按 Ctrl+C

关闭 Foxglove Bridge:

# 在运行 ros2 launch foxglove_bridge ... 的终端里按 Ctrl+C

关闭 demo 节点:

# 在 talker / cam2image 对应终端里按 Ctrl+C

如果你想确认端口已经不再监听:

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.top

Foxglove 里填:

wss://abcd.cpolar.top
3. 话题列表是空的

检查 ROS2 环境是否一致:

source /opt/ros/humble/setup.bash ros2 topic list

如果你用了自定义ROS_DOMAIN_ID,确保 demo 节点和 Foxglove Bridge 在同一个 domain:

echo $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 地址只发给需要参与调试的人;
  • 演示结束立即Ctrl+C关闭 cpolar;
  • 真实机器人调试时,最好断开危险执行机构,或者只发布只读观测数据。

简单说:远程看数据可以,远程接管机器人不行。

写在最后

ROS2 远程调试不一定非要上来就搞复杂网络。

如果你的目标只是让不在现场的人临时看话题、看图像、看日志,Foxglove Bridge + cpolar 这个组合就够直接:本地 ROS2 不用大改,远程只需要一个浏览器,演示完关隧道。

它不是万能方案,也不应该替代正式的安全接入体系。但在实验室联调、课程演示、外场临时排查这种场景里,确实能少折腾很多网络配置。

我的建议是:先用 demo 跑一遍,把端口、WebSocket 地址、安全关闭流程确认好,再接真实机器人数据。这样现场出问题时,排查会轻松很多。

http://www.cnnetsun.cn/news/2748229.html

相关文章:

  • 电路设计入门:从原理图到PCB,手把手制作可调光LED台灯
  • 别再只怪固态硬盘!从TRIM和垃圾回收机制,看懂格式化后数据恢复的真相
  • 告别996?用AI重构工作流后,效率暴涨
  • 从ChatGPT到离职预警中台:AI工具整合失败的5个致命断点,90%的CTO在第3步就已失控
  • 基于ESP8266的WiFi同步OLED复古时钟:物联网开发实战指南
  • 微信好友关系终极检测:5分钟快速识别单向好友的完整指南
  • MATLAB实现的D-S证据融合工具集:含主融合函数与全套DST辅助计算模块
  • 从控制理论到射频电路:一个视频讲透奈奎斯特判据在ADS中的应用
  • Kafka拷打!!!
  • ICode竞赛Python一级通关秘籍:手把手教你搞定路线规划题(附20关代码详解)
  • 从零开始电路设计:智能感温杯垫实战与电子制作全流程解析
  • 基于免疫机制增强的MATLAB物流路径求解工具包(含真实数据与动态可视化)
  • 本科生可用的坐姿监测系统源码:带训练模型、语音提醒和图形界面
  • NAS跑大模型实战:GLM-5在家庭服务器上的部署与优化
  • AI工具链如何重塑CISSP/CEH认证路径:5大不可逆趋势与3步迁移方案
  • MCA Selector:让你的Minecraft世界重获新生的智能管家
  • MATLAB遗传算法实战:手把手教你为外卖站点或前置仓做智能选址排线
  • 单北斗GNSS在桥梁与大坝变形监测中的应用与发展分析
  • Navicat Mac版终极重置教程:3步解锁永久免费试用
  • 用Makey Makey自制久坐提醒传感器:从物理开关到健康管理
  • 基于聊天应用的远程患者管理:从工具到平台的医疗模式创新
  • 别再手动画进度条了!用Excel的复选框和COUNTIF函数,5分钟搞定动态项目仪表盘
  • VisualCppRedist AIO项目下载异常的处理与优化指南
  • ESP8266-01S双模式切换全攻略:从AT指令调试到固件烧录,一套接线搞定
  • transformer 挑战者 mamba 架构,线性attention RNN给改进iclr 2024拒稿
  • C++ MPI多进程协同筛素数:从基础分区到通信优化的完整实现包
  • 2017-2025年第一至十批绿色工厂名单匹配数据
  • 实战避坑:在Omni-Path或Slingshot网络中配置Dragonfly路由算法
  • BetterJoy:5步实现Switch手柄在电脑上的完美适配方案
  • 二抗选型别乱买!云克隆用教你读懂二抗核心作用、分类与选型底层逻辑