宇树 G1 人形机器人踢足球项目:视觉模块代码逻辑全梳理
注:我将宇树 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 跑的。区别只在模型的"加载入口":
| 对比项 | ONNX | TensorRT Engine |
|---|---|---|
| 本质 | 通用配方,任何机器都能读 | 用 TensorRT 针对特定 GPU 专门编译出来的产物 |
| 关系 | 是 engine 的"原材料" | 是 onnx 的编译产物 |
| 加载方式 | 读到 onnx → 先经 TensorRT 编译成 engine → 再运行 | 读到 engine → 直接运行 |
| 速度 | 慢 | 快 2~5 倍 |
一句话总结:
读到 engine ────────────→ 直接运行
读到 onnx ──TensorRT 编译──→ engine ──→ 运行
四、整条数据流:一张照片如何变成检测结果
这是最核心的数据链,记住它就拿到了学习正式版视觉代码的钥匙。
4.1 8400 个格子是怎么来的?
AI 用三种粗细的网格同时看图片,每个格子都要"汇报"一句话:
| 网格 | 格子数 | 职责 |
|---|---|---|
| 80×80 | 6400 个细格子 | 负责找小东西(球) |
| 40×40 | 1600 个中格子 | 负责找中等东西 |
| 20×20 | 400 个粗格子 | 负责找大东西(远处的门柱) |
| 合计 | 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坐标的知识
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)