注:我将宇树 G1 人形机器人踢足球项目拆分成4个大板块:视觉,定位导航,摄像头舵机,决策。今天先整理视觉板块的逻辑,本人大二本科生,所有内容均为个人理解,能力和水平有限,文中定有错误和疏漏之处。恳请读者多加指正,以便今后不断改进!

一、整体行为流程:机器人怎么完成一次踢球

这是整个项目的"顶层设计"。机器人从开机识别到踢出球,是一个闭环决策流程:

流程要点:

环节说明
场地定位先识别场地上的 3 个标记点(2 个 T 型 + 1 个 L 型),确认机器人在场内的位置
找球定位不到球就原地旋转搜索,直到球进入视野
对准球不在视野中心时,由摄像头舵机(云台)转动调整,YOLO 持续反馈位置
决策计算最佳击球点与踢球路径,移动到位后大脚踢球
循环多轮比赛时回到视觉识别模块继续,直到没有下一轮

二、视觉模块入门:onnx_image_test 工程

学习正式代码之前,先看最简单的 onnx_image_test 文件夹里的 main.cpp——总体上是 OpenCV 识别物体并标注画框的代码,是理解正式版的"钥匙"。

main 函数流程:

右侧还有一条简化的主线,方便记忆:

读取图片 → 调用模型 → 图像预处理 → 推理与去重 → 标注画框

三、engine_image_test 与 onnx 版的区别

engine_image_test 文件夹里的 main.cpp 与 onnx 版大致逻辑相同——最终都是用 .engine 跑的。区别只在模型的"加载入口":

对比项ONNXTensorRT Engine
本质通用配方,任何机器都能读用 TensorRT 针对特定 GPU 专门编译出来的产物
关系是 engine 的"原材料"是 onnx 的编译产物
加载方式读到 onnx → 先经 TensorRT 编译成 engine → 再运行读到 engine → 直接运行
速度慢快 2~5 倍

一句话总结:

读到 engine ────────────→ 直接运行
读到 onnx ──TensorRT 编译──→ engine ──→ 运行

四、整条数据流:一张照片如何变成检测结果

这是最核心的数据链,记住它就拿到了学习正式版视觉代码的钥匙。

4.1 8400 个格子是怎么来的?

AI 用三种粗细的网格同时看图片,每个格子都要"汇报"一句话:

网格格子数职责
80×806400 个细格子负责找小东西(球)
40×401600 个中格子负责找中等东西
20×20400 个粗格子负责找大东西(远处的门柱)
合计6400 + 1600 + 400 = 8400像用粗细不同的三张渔网一起捞鱼,小鱼大鱼都不漏

4.2 每个格子的"汇报":9 个数字

第几个数含义
1东西中心的横坐标 x(卡纸坐标系,0~640)
2中心的纵坐标 y(卡纸坐标系)
3框的宽度
4框的高度
5"我这格是球"的分数(0~1,越接近 1 越有把握)
6"是门柱"的分数
7"是 X 标记"的分数
8"是 L 标记"的分数
9"是 T 标记"的分数

划重点:正式版(football_detect.cpp)在这条链上只加了三样东西——真相机(一直拍)、深度(算球离多远)、广播(用 DDS 把结果发给别的模块)。骨架和这里一模一样。

五、最核心代码逻辑关系(正式版 football_detect)

5.1 三个文件的"角色分工"

用餐厅来打比方:

  • YOLO.h:菜单/说明书,class YOLO 的方法声明,依赖 OpenCV 和 TensorRT;谁要用到 YOLO,就调用它。
  • main.cpp:店长,负责调度。
  • YOLO.cpp:厨师长,真正干活。

5.2 YOLO 的"全家福"关系

mindmap
  root((YOLO))
    输入
      彩色 RGB 图
      深度图
    输出
      深度 3D 坐标 X,Y,Z
      画框 + 置信度
    内部
      infer 网络
      NMS 去重
    依赖
      onnx / .engine 构建
      CUDA

5.3 最核心代码主流程

主循环里做的事(processing_loop):

取帧 → 深度对齐彩色(SDK)→ YOLO 处理 → 深度反投影算 3D 坐标 → 判断相机状态

5.4 相机掉线怎么办?

设计亮点:相机掉线只报错、不停止进程,由 reconnect_monitor 持续尝试重连,恢复后自动回到主循环——比赛中掉线不至于整场报废。

六、视觉总逻辑

6.1 视觉总逻辑(一张图看懂)

之后会补充3D坐标的知识

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐