目录

基于 XiUOS 的目标检测与智能小车联动控制系统设计文档

1. 项目概述

本系统面向分布式场景感知、人体目标检测和智能小车联动控制任务,构建了一套由 XiUOS 前端采集节点、RK3588 边缘服务器、Linux 云端 VLM 服务器和 ROSMASTER-X3 智能小车 组成的三级协同系统。

系统的核心目标是:

  1. 多个前端网络摄像头持续采集不同区域的场景图像;
  2. 每个 CH32V208RBT6 开发板运行 XiUOS,负责获取、封装并向 RK3588 上报对应摄像头图像;
  3. RK3588 使用 RKNN YOLOv8n 检测人体目标并显示检测结果;
  4. 检测到人物后,RK3588 固化带 person 检测框的目标参考图;
  5. 小车根据已经建立的 Gmapping 地图,先导航到触发检测的 CH32V208RBT6 节点附近预设位置;
  6. 到达预设位置后,RK3588 将目标参考图和小车当前摄像头图发送给云端 Qwen3VL-32B;
  7. 云端 VLM 完成人物关联、场景语义理解和动作辅助决策;
  8. RK3588 对 VLM 结果进行本地规则与雷达安全校验,控制小车搜索、对准并靠近同一个人;
  9. 目标居中且雷达距离约为 1 米时,小车安全停止。

各模块的详细实现可参考:

  • ROSMASTER_X3_CAR/README.md
  • CH32V208RBT6/README.md
  • RK3588/README.md
  • VLM_AGENT/README.md

2. 系统架构图

系统架构图

新系统采用三层协同架构:

  1. 第一层:图像采集与数据上报层

    由网络摄像头和运行 XiUOS 的 CH32V208RBT6 前端节点组成。每个节点负责一个区域的场景感知,可按需要扩展为 N 个。

  2. 第二层:边缘协同处理与联动控制层

    由 RK3588 边缘服务器、检测结果显示器和智能小车组成。RK3588 完成 YOLOv8n 检测、前端数据汇聚、目标参考图固化、云端 VLM 请求、任务状态管理和小车控制调度。

  3. 第三层:云端 VLM 语义理解层

    由 Linux 云端服务器组成,部署 Qwen3VL-32B 视觉语言模型,使用 2 张 RTX 5090 GPU,负责高层语义理解、跨摄像头人物关联和结构化动作建议。

旧版架构图保留在 assets/system_architecture_old.png,仅用于版本对比;当前文档和系统设计均以 assets/system_architecture.png 为准。

3. 总体设计原则

3.1 云边端分工

层级 组成 主要职责
前端采集层 网络摄像头 + CH32V208RBT6/XiUOS 获取场景图像、基础封装、网络上报、节点身份标识
边缘协同层 RK3588 图像汇聚、YOLOv8n 检测、结果显示、任务调度、VLM 请求、本地安全校验
云端语义层 Linux + Qwen3VL-32B + 2×RTX 5090 目标人物关联、当前场景理解、结构化动作建议
执行层 ROSMASTER-X3 智能小车 地图导航、小车摄像头采集、雷达测距和底盘动作执行

这种分工兼顾了实时性、算力和可扩展性:

  • 轻量级、频繁的目标检测放在 RK3588 边缘侧;
  • 计算量更大的双图语义理解放在云端 GPU 服务器;
  • CH32V208RBT6 负责体现 XiUOS 前端节点的采集、网络和分布式接入能力;
  • 小车侧保留与运动安全强相关的摄像头、雷达、ROS2 和底盘控制能力。

3.2 节点、摄像头与地图位置关联

每个前端节点在逻辑上应具有唯一 node_id,并与以下信息建立对应关系:

node_id
  ├── 网络摄像头地址
  ├── CH32V208RBT6 网络地址
  └── Gmapping 地图中的小车预设导航点

当某个节点上传的图像检测到人物后,RK3588 根据该节点身份选择相应地图目标点,使小车先导航到对应 CH32V208RBT6 附近,再启动局部视觉搜索。

单节点演示可以使用默认节点和默认预设点;扩展为 N 个节点时,上传协议和 RK3588 任务状态需要携带 node_id。

3.3 全局导航与局部视觉接近分层

小车运动采用两阶段设计:

阶段 定位依据 目标
全局地图导航 已建立的 Gmapping 地图和节点预设点 将小车送到触发节点附近
局部 VLM 视觉接近 目标参考图、小车实时图、动作历史和前方雷达 搜索同一个人并在约 1 米处停止

地图解决“从当前位置到哪个区域”的问题,VLM 和雷达解决“到达区域后如何找到并靠近哪个人”的问题。两个阶段彼此独立,降低了单一感知方式承担全部导航任务的复杂度。

4. 数据流设计

4.1 前端检测图像流

网络摄像头
    ↓
CH32V208RBT6 / XiUOS
    ↓ HTTP 上传 JPEG
RK3588
    ↓
RKNN YOLOv8n
    ├── 检测结果图 → 外接显示器
    └── person 参考图 → 导航任务

处理过程如下:

  1. 网络摄像头采集节点所在区域的场景图像;
  2. CH32V208RBT6 通过网络获取 JPEG;
  3. XiUOS 前端任务完成必要的分块接收、基础封装和 HTTP 上报;
  4. RK3588 保存最新图像并运行 YOLOv8n;
  5. 生成带类别、检测框和置信度的结果图;
  6. 检测到 person 时,结果图被固化为本次任务的目标参考图。

4.2 小车实时感知流

小车摄像头 ── JPEG/视频流 ──→ RK3588
小车雷达   ── 前方距离 JSON ─→ RK3588

小车摄像头只在局部 VLM 导航阶段用于实时搜索和控制。它与前端检测摄像头是两路不同视角,因此前端节点检测到人物并不表示小车当前已经看到目标。

4.3 云端 VLM 请求流

进入局部接近阶段后,RK3588 每轮向云端发送:

  1. 固定的初始目标参考图;
  2. 小车当前摄像头图;
  3. 用户目标;
  4. 当前轮次和上一动作;
  5. 最近动作历史;
  6. 是否曾经看到目标;
  7. 小车前方雷达信息。

云端 Qwen3VL-32B 返回严格的结构化结果:

{
  "action": "forward",
  "duration_s": 2.0,
  "done": false,
  "confidence": 0.85,
  "target_visible": true,
  "target_position": "center",
  "reason": "当前小车图中同一个目标已经居中,继续靠近"
}

5. 控制流设计

5.1 完整控制状态

等待前端图像
    ↓
YOLOv8n 检测 person
    ↓
固化参考图并锁存任务
    ↓
根据 node_id 选择地图预设点
    ↓
小车按已有地图导航到 CH32V208RBT6 附近
    ↓
确认地图导航到达
    ↓
启动 VLM 双图闭环
    ↓
搜索 → 对准 → 分段前进 → 必要时后退
    ↓
目标居中且雷达约 1 米
    ↓
停止并完成任务

5.2 任务锁存

前端摄像头可能连续多帧检测到同一个人。RK3588 使用一次性 armed 锁存避免重复创建导航任务:

  1. 空闲时 armed=true;
  2. 第一条有效人体检测创建任务;
  3. 接受后立即设为 armed=false;
  4. 当前任务期间忽略后续自动触发;
  5. 任务结束后通过 /navigate/reset 重新允许下一次任务。

5.3 地图导航阶段

系统环境已经使用 Gmapping 完成建图,并为各 CH32V208RBT6 前端节点配置附近的预设导航位置。

检测到人物后,RK3588 应:

  1. 确定触发检测的节点;
  2. 查询该节点对应的地图预设点;
  3. 向小车地图导航模块发送目标;
  4. 监控导航状态;
  5. 到达后停止全局导航控制;
  6. 切换到 VLM 局部接近阶段。

当前 RK3588/server.py 使用 10 秒直行临时模拟这一阶段,用于验证“检测触发—位置移动—VLM Agent”流程衔接。地图和节点预设点已经准备完成,正式部署时应将该联调动作替换为地图目标下发与到达反馈。

5.4 VLM 局部接近阶段

VLM 负责根据双图判断目标人物身份和方向,RK3588 本地 Agent 负责执行边界控制:

  • 从未看到目标时,以 1.5 秒转向搜索;
  • 发现目标后,左右对准动作至少持续 1 秒;
  • 目标进入画面宽度 25%~75% 区域后视为居中;
  • 前进动作最少 2 秒;
  • 可靠雷达距离大于 2 米且本轮决定前进时,使用 5 秒长前进;
  • 后退避障固定为 1 秒;
  • 雷达小于 0.45 米时禁止继续前进;
  • 目标可见且居中、雷达不大于 1.1 米时停止;
  • 目标居中但距离仍大于 1.1 米时,拒绝 VLM 提前完成。

6. 各模块设计

6.1 前端网络摄像头

网络摄像头负责持续获取部署区域的原始场景图像。它与智能小车摄像头相互独立:

  • 前端摄像头负责远端区域目标发现;
  • 小车摄像头负责小车到达附近后的实时搜索与接近。

6.2 CH32V208RBT6/XiUOS 前端节点

每个 CH32V208RBT6 节点负责:

  • 初始化以太网;
  • 获取对应网络摄像头图像;
  • 完成基础数据接收、分块处理和 HTTP 封装;
  • 向 RK3588 上报图像;
  • 输出串口状态日志;
  • 在多节点部署中携带自身节点身份。

当前 XiUOS 原型主要修改:

  • main.c
  • wchnet_ethernet.c
  • ModuleConfig.c

6.3 RK3588 边缘服务器

RK3588 是系统的边缘检测和控制中枢,主要负责:

  • 接收一个或多个 CH32V208RBT6 节点上传的图像;
  • 使用 RKNN YOLOv8n 检测 person;
  • 生成并显示检测结果;
  • 固化唯一目标参考图;
  • 管理任务锁存、状态和节点位置映射;
  • 调用小车地图导航;
  • 获取小车当前图和前方雷达;
  • 组织双图 VLM 请求;
  • 校验云端决策并下发动作;
  • 在约 1 米处完成任务。

6.4 Linux 云端 VLM 服务器

云端服务器部署 Qwen3VL-32B 视觉语言模型,硬件为 2 张 RTX 5090 GPU。其职责是:

  • 接收 RK3588 发来的检测结果图和小车当前图;
  • 在当前小车图中关联参考图锁定的同一个人;
  • 判断目标是否可见以及位于左侧、中央或右侧;
  • 结合雷达、历史动作和用户目标给出结构化动作建议;
  • 将语义理解结果返回 RK3588。

云端只提供高层决策建议,不直接控制底盘。最终动作仍由 RK3588 本地规则校验后执行。

6.5 ROSMASTER-X3 智能小车

小车提供:

  • 基于已建 Gmapping 地图的全局导航能力;
  • 前置摄像头 JPEG 快照和视频流;
  • ROS2 /cmd_vel 运动控制;
  • ROS2 /scan 雷达数据;
  • 前进、后退、左转、右转和停止 HTTP 接口;
  • 正前方最近障碍物距离接口。

6.6 检测结果与状态显示

RK3588 外接显示器展示:

  • 前端节点上传的场景图;
  • YOLOv8n 人体检测框;
  • 类别名称和置信度;
  • 最新处理结果;
  • 可扩展的任务和导航状态。

7. 关键接口关系

方向 接口或协议 说明
网络摄像头 → CH32V208RBT6 HTTP/JPEG 前端节点获取场景图像
CH32V208RBT6 → RK3588 POST /camera/upload 或 /camera/upload_chunk 上报 JPEG;多节点模式应同时携带node_id
RK3588 → 显示器 HDMI/本地显示 展示 YOLO 检测结果和状态
RK3588 → 地图导航模块 部署环境中的导航目标接口 下发触发节点对应的预设位置
小车 → RK3588 GET /camera/snapshot 返回小车当前 JPEG
小车 → RK3588 GET /lidar/front 返回正前方雷达距离
RK3588 → 云端 VLM OpenAI-compatible/v1/chat/completions 发送双图、历史和雷达上下文
云端 VLM → RK3588 JSON 返回目标关联和动作建议
RK3588 → 小车 POST /forward、/backward、/left、/right、/stop 下发局部动作
小车内部 ROS2/cmd_vel 执行速度控制
小车内部 ROS2/scan 获取雷达扫描

8. 可靠性与安全设计

8.1 参考图固化

YOLO 结果文件会被后续推理覆盖,因此任务接受时将结果复制为带会话 ID 的独立参考图,保证整个 VLM 任务锁定同一个人。

8.2 决策本地校验

云端 VLM 输出不会被直接执行。RK3588 会校验:

  • 动作是否合法;
  • 时长是否在允许范围;
  • 目标是否可见、是否居中;
  • 平移动作置信度是否达到阈值;
  • 雷达数据是否可靠;
  • 是否满足停止距离;
  • 是否发生连续左右摆动。

8.3 故障停止

Agent 在正常完成、模型异常、HTTP 异常、达到最大轮次、达到最大时间或收到中断时都会发送 stop。地图导航阶段也应具备超时、取消和到达状态检查。

8.4 多节点并发

多节点可能同时发现人物。正式扩展时需要在 RK3588 增加:

  • 节点身份字段;
  • 节点到地图目标点的配置表;
  • 任务优先级;
  • 去重和冷却策略;
  • 当前小车占用状态;
  • 任务排队、拒绝或替换规则。

当前单任务锁存适合一次只执行一个目标接近任务。

9. 硬件约束与工程方案

CH32V208RBT6 片内 SRAM 最大约为 64KB,运行 XiUOS 后可用内存较少,完整 JPEG 缓存和裁剪、缩放、灰度化等处理会带来较大压力。

因此前端节点采用以下策略:

  • 使用网络摄像头提供压缩 JPEG;
  • 控制图像分辨率和 JPEG 质量;
  • 必要时分块获取或分块上报;
  • CH32V208RBT6 主要完成网络采集、基础封装和数据搬运;
  • YOLOv8n 推理放在 RK3588;
  • 大模型语义理解放在云端 GPU 服务器。

该方案符合各硬件平台的资源特点,并保留了 XiUOS 节点在完整数据链路中的核心作用。

10. 系统完整运行流程

  1. 启动 Linux 云端 Qwen3VL-32B 服务;
  2. 启动小车 ROS2、地图导航、摄像头、雷达和 HTTP 服务;
  3. 启动 RK3588 图像接收、YOLO、显示和联动调度服务;
  4. 启动一个或多个 CH32V208RBT6/XiUOS 前端节点;
  5. 各节点从对应网络摄像头获取图像并上传到 RK3588;
  6. RK3588 使用 YOLOv8n 检测人体;
  7. 显示器展示检测结果;
  8. RK3588 固化目标参考图,并根据触发节点选择地图预设点;
  9. 小车按已有地图导航到该 CH32V208RBT6 附近;
  10. 到达后启动 VLM 双图闭环;
  11. 小车旋转搜索并识别参考图中的同一个人;
  12. 目标居中后分段前进,RK3588 使用雷达进行本地校验;
  13. 距离目标约 1 米时停止;
  14. 通过状态接口查看结果,完成后重置任务锁存。

11. 当前实现与正式架构的关系

能力 当前状态
Gmapping 环境地图 已建立
CH32V208RBT6 附近预设导航位置 已规划
RK3588 YOLOv8n 人体检测 已实现
检测结果显示 已实现
VLM 双图搜索与约 1 米停止 已实现并完成实车 Demo
RK3588 到云端 Qwen3VL-32B 请求 已在 Agent 中实现
RK3588 地图导航接口调用 当前以 10 秒直行联调替代,正式部署时替换为地图目标下发与到达反馈
多前端节点node_id 和位置映射 架构已支持扩展,接口字段和调度策略需按部署节点完善
独立网络摄像头前端 系统架构采用该方案;现有 CH32 原型中的图像源地址需按实际摄像头配置

12. 与赛题要求的对应关系

要求 系统实现
视觉数据采集与基础处理 网络摄像头采集,CH32V208RBT6/XiUOS 完成获取、封装和上报
XiUOS 开发板参与系统链路 一个或多个 CH32V208RBT6 节点运行 XiUOS,构成分布式前端
轻量级 AI 模型部署 RK3588 使用 RKNN YOLOv8n 检测人体
高层语义理解 Linux 云端 Qwen3VL-32B 完成人物关联和动作辅助决策
结果输出 RK3588 外接显示器展示检测结果和状态
系统行为联动 小车先进行地图导航,再由 VLM 和雷达引导靠近人物
系统可扩展性 前端节点可扩展为 N 个,并通过节点到地图位置映射进行调度
关于

面向智慧车间的工业物联网操作系统

986.8 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号