Skip to main content

在 Jetson AGX Thor 上构建四摄像头鱼眼环视演示

介绍

本演示在 NVIDIA Jetson AGX Thor 上运行一个四摄像头鱼眼环视流水线。底盘周围的四个摄像头经过标定并拼接为实时的俯视图(BEV)。占用图提示底盘运动,YOLO-World 用于定位抓取目标,VLM 用于生成场景描述。

拼接后的 BEV 布局:

  • 图像顶部 = 车辆前方
  • 图像中心 = 车辆车身
  • 摄像头朝向前、后、左、右
note

YOLO 回答目标在哪里。VLM 回答场景是什么样。占用图是二维地面提示,而不是 LiDAR 地图。

本演示已在 reComputer Robotics J601 上验证。

reComputer Robotics J601 Sensing SG3S-ISX031C-GMSL2F

关键特性

  • 使用 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 线缆。

  1. 通过 XT30 直流输入为 J601 板供电。
  2. 如果你在使用 GMSL 扩展板,先将其插在摄像头扩展排针上。
  3. 将 Mini-Fakra 四合一线缆插入一个 Mini-Fakra GMSL 端口
  4. 将四个 Sensing 鱼眼摄像头连接到该线缆的四个 Fakra 端。
  5. 将摄像头安装在底盘周围,使其朝向前、后、左、右
  6. 如需在板子上观看实时 BEV 窗口,可选连接一个 HDMI 显示器。

关于在 J601 上启用 GMSL,请参阅 Robotics J601 Hardware Interfaces Usage

tip

摄像头连接完成后,确认 /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
tip

在 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/video0
  • back: /dev/video2
  • left: /dev/video3
  • right: /dev/video1

在标定前确认这些设备节点。演示运行后,你可以通过遮挡摄像头进行再次确认:BEV 图像的顶部应变暗。如果前后颠倒,请在配置文件中更改设备映射。不要为此编辑标定结果文件。

步骤 2. 打开网页标定 UI

启动标定服务:

./calib.sh

然后在浏览器中打开标定页面:

http://<board-ip>:8787/

标定 UI 用于:

  • 内参标定
  • 外参对齐
  • 拼接缝优化

对于拼接缝优化,请按照仓库中的配对方式:

  • front + left
  • front + right
  • back + left
  • back + 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 在你只需要定位或检测时跳过场景描述

演示结果与控制

当演示窗口运行时,可以使用以下键盘快捷键:

按键动作
ESCq退出
o运行一次 YOLO-World 进行抓取辅助
a触发一次 VLM 场景理解描述
s保存一帧图像
m切换占用图显示

在运行过程中,演示还会写出:

  • output/perception/preview.jpg
  • events.jsonl

这些文件有助于调试、验证以及后续集成。

坐标约定

本项目使用如下 BEV 约定:

项目含义
图像向上车辆前方
base_link 原点约为 BEV 中心
+X前方
+Y左侧

因此,YOLO 可以报告近似的二维目标位置,例如方向、前向距离和横向偏移,以辅助抓取。

结果仍然是地平面近似。它不是 6 自由度抓取位姿,不应被视为精确操作的真实标注。

注意事项与限制

  • 本演示提供的是感知辅助。它不会向底盘或机械臂发送控制指令
  • YOLO 仅用于定位目标以辅助抓取;它本身不会闭合抓取控制环
  • VLM 输出用于场景理解,而不是用于坐标
  • 占用图是二维地面提示,不是 LiDAR SLAM 地图
  • 实时拼接面向支持 CUDA 的 Jetson AGX Thor
  • 仅 CPU 模式适合用于调试,但不推荐用于实时部署

资源

技术支持与产品讨论

感谢您选择我们的产品!我们将为您提供多种支持,以确保您在使用我们产品的过程中尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...