在 Jetson AGX Thor 上构建四摄像头鱼眼环视演示
介绍
本演示在 NVIDIA Jetson AGX Thor 上运行一个四摄像头鱼眼环视流水线。底盘周围的四个摄像头经过标定并拼接为实时的俯视图(BEV)。占用图提示底盘运动,YOLO-World 用于定位抓取目标,VLM 用于生成场景描述。
拼接后的 BEV 布局:
- 图像顶部 = 车辆前方
- 图像中心 = 车辆车身
- 摄像头朝向前、后、左、右
YOLO 回答目标在哪里。VLM 回答场景是什么样。占用图是二维地面提示,而不是 LiDAR 地图。
本演示已在 reComputer Robotics J601 上验证。
关键特性
- 使用 CUDA OpenCV 进行 GPU 拼接
- 通过网页进行内参、外参和拼接缝标定
- 在一个共享 BEV 上运行占用图、YOLO-World 和 VLM
- 已在 Jetson AGX Thor / reComputer Robotics J601 上验证
前置条件
硬件
- reComputer Robotics J601(Jetson AGX Thor)
- 四个 Sensing SG3S-ISX031C-GMSL2F GMSL2 鱼眼摄像头
- 一根 Mini-Fakra 四合一线缆,让四个摄像头共享一个 GMSL 端口
- 一个显示器或远程桌面会话
- 如果从另一台电脑打开标定页面,需要网络访问
可选:
- 一个移动底盘,如果你想使用占用图进行运动辅助
- 一台机械臂,如果你想使用 YOLO 目标位置进行抓取辅助
软件
- 适用于 J601 的、带 GMSL 驱动支持的 JetPack
- 支持 CUDA 的 OpenCV,用于实时拼接
- 用于网页标定 UI 的 Python 环境
- YOLO-World 和可选 VLM 模型依赖
硬件连接
在标定前,将四个 Sensing GMSL2 鱼眼摄像头连接到 reComputer Robotics J601 上的一个 Mini-Fakra GMSL 端口。J601 有两个 Mini-Fakra 接口(最多支持八个 GMSL2 摄像头)。本演示使用一个 GMSL 端口和一根四合一 Mini-Fakra 线缆。
- 通过 XT30 直流输入为 J601 板供电。
- 如果你在使用 GMSL 扩展板,先将其插在摄像头扩展排针上。
- 将 Mini-Fakra 四合一线缆插入一个 Mini-Fakra GMSL 端口。
- 将四个 Sensing 鱼眼摄像头连接到该线缆的四个 Fakra 端。
- 将摄像头安装在底盘周围,使其朝向前、后、左、右。
- 如需在板子上观看实时 BEV 窗口,可选连接一个 HDMI 显示器。
关于在 J601 上启用 GMSL,请参阅 Robotics J601 Hardware Interfaces Usage。

摄像头连接完成后,确认 /dev/video* 节点以及在 config/camera_profile.json 中的映射。参见 Step 1. Check Camera Mapping。
安装与设置
步骤 1. 克隆仓库
git clone https://github.com/xbs0325/j601-surround-demo.git
cd j601-surround-demo
步骤 2. 构建 CUDA OpenCV
在运行实时环视演示之前,确保已安装支持 CUDA 的 OpenCV。
cd ~/j601-surround-demo
./scripts/build_opencv_cuda.sh --jobs $(nproc)
source scripts/env_opencv_cuda.sh
python3 -c "import cv2; print(cv2.__version__, cv2.cuda.getCudaEnabledDeviceCount())"
如果设置正确,CUDA 设备数量应为 1。
步骤 3. 安装网页标定依赖
标定网页 UI 依赖于 aiortc 和相关 Python 包。
./scripts/install_web_deps.sh
在 Ubuntu 24.04 上,不要将 pip3 install -r requirements.txt 直接安装到系统 Python 中。该项目将拼接环境与感知模型环境分开。
步骤 4. 安装感知依赖
要启用 YOLO-World 抓取辅助和 VLM 场景理解,请运行:
./scripts/setup_perception_thor.sh
./scripts/download_perception_models.sh
这将准备感知环境并下载所需的模型文件。
使用方法
先对四个摄像头进行标定,然后再启动实时环视演示。不要同时运行两者;它们需要独占摄像头访问。
步骤 1. 检查摄像头映射
摄像头设备映射定义在:
config/camera_profile.json
仓库中的典型映射:
front:/dev/video0back:/dev/video2left:/dev/video3right:/dev/video1
在标定前确认这些设备节点。演示运行后,你可以通过遮挡前摄像头进行再次确认:BEV 图像的顶部应变暗。如果前后颠倒,请在配置文件中更改设备映射。不要为此编辑标定结果文件。
步骤 2. 打开网页标定 UI
启动标定服务:
./calib.sh
然后在浏览器中打开标定页面:
http://<board-ip>:8787/

标定 UI 用于:
- 内参标定
- 外参对齐
- 拼接缝优化
对于拼接缝优化,请按照仓库中的配对方式:
front + leftfront + rightback + leftback + right
将棋盘格放在两个摄像头视野的重叠区域。当两个视野都检测到棋盘格并显示就绪状态时,系统即可优化该拼接缝。
步骤 3. 运行演示
标定完成后,启动环视演示:
./run.sh
这将启动实时 BEV 流水线:拼接、占用图、YOLO 抓取辅助以及可选的 VLM 场景描述。
你也可以直接启动感知启动器:
./scripts/run_perception.sh --vlm off --mode nav --range 2.5
./scripts/run_perception.sh --mode grasp --target bottle
常用模式
| 目标 | 命令 |
|---|---|
| 底盘运动辅助 | ./scripts/run_perception.sh --vlm off --mode nav --range 2.5 |
| 机械臂抓取辅助 | ./scripts/run_perception.sh --mode grasp --target bottle |
| 无界面运行 | ./scripts/run_perception.sh --no-window |
| 离线冒烟测试 | /usr/bin/python3 -m perception.smoke_offline |
--mode nav侧重于底盘周围的占用图--mode grasp --target bottle让 YOLO 寻找抓取目标--vlm off在你只需要定位或检测时跳过场景描述
演示结果与控制
当演示窗口运行时,可以使用以下键盘快捷键:
| 按键 | 动作 |
|---|---|
ESC 或 q | 退出 |
o | 运行一次 YOLO-World 进行抓取辅助 |
a | 触发一次 VLM 场景理解描述 |
s | 保存一帧图像 |
m | 切换占用图显示 |
在运行过程中,演示还会写出:
output/perception/preview.jpgevents.jsonl
这些文件有助于调试、验证以及后续集成。
坐标约定
本项目使用如下 BEV 约定:
| 项目 | 含义 |
|---|---|
| 图像向上 | 车辆前方 |
base_link 原点 | 约为 BEV 中心 |
+X | 前方 |
+Y | 左侧 |
因此,YOLO 可以报告近似的二维目标位置,例如方向、前向距离和横向偏移,以辅助抓取。
结果仍然是地平面近似。它不是 6 自由度抓取位姿,不应被视为精确操作的真实标注。
注意事项与限制
- 本演示提供的是感知辅助。它不会向底盘或机械臂发送控制指令
- YOLO 仅用于定位目标以辅助抓取;它本身不会闭合抓取控制环
- VLM 输出用于场景理解,而不是用于坐标
- 占用图是二维地面提示,不是 LiDAR SLAM 地图
- 实时拼接面向支持 CUDA 的 Jetson AGX Thor
- 仅 CPU 模式适合用于调试,但不推荐用于实时部署
资源
技术支持与产品讨论
感谢您选择我们的产品!我们将为您提供多种支持,以确保您在使用我们产品的过程中尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

