Skip to main content

第 3 阶段 · 第 9 章 · 理论与实践

9. 机器人学习与模仿学习基础

在第二阶段,你已经可以用 Python SDK 控制机械臂了:读取关节角、发送目标位置、张开闭合夹爪。于是很自然地会想到——写一个程序,让机械臂自动抓取桌上的方块,不就行了?

本阶段需要的硬件​

本阶段需要准备的硬件如下。全部阶段的完整清单见 第 3 章。

主控单元

硬件购买数量
Jetson Orin Nano Super 8G🛒1
reComputer Robotics J4012🛒1
NVIDIA Jetson AGX Thor 128G🛒1

另外还需要一台台式机或笔记本:Ubuntu 22.04、GTX 4080 以上(12G 显存以上)、16GB 以上内存。

本阶段

硬件购买数量
reBot Arm B601 DM/RS🛒1
reBot Arm 102 Leader臂🛒1
720P单目腕部相机🛒1
1080P海康🛒1
腕部相机支架—1
海康相机俯拍支架🛒1

机器人学习与模仿学习基础​


为什么机械臂需要学习?​

在第二阶段,你已经可以用 Python SDK 控制机械臂了:读取关节角、发送目标位置、张开闭合夹爪。于是很自然地会想到——写一个程序,让机械臂自动抓取桌上的方块,不就行了?

于是就有这样的一个程序:

实验室的第一次演示中,这个程序运行得很好。但第二天,情况变了:

  • 方块被人挪动了 3 厘米——程序找不到它了;
  • 换了一个稍大一点的方块——夹爪的闭合宽度不对,夹不住;
  • 桌上多了一个杯子——机械臂下降时把它碰倒了;
  • 下午阳光照进来,桌面反光——如果你用了视觉定位,识别结果开始漂移。

你会发现,为了应对这些变化,程序里的"如果"越写越多,最终变成一本谁也维护不动的"特殊情况大全"。

这就是传统程序控制的根本困境:真实世界是连续变化的,而 if-else 是离散的。 你不可能穷举世界所有的样子。

  • 那么,人类是怎么解决这个问题的?

    • 你是看着别人抓,然后自己试几次,就会了。而且学会之后,方块换个位置、换个大小,你照样能抓——因为你学到的不是一串坐标,而是"抓"这件事本身。

让机械臂也用这种方式获得技能,就是机器人学习(Robot Learning)要解决的问题。 而本阶段要讲的模仿学习,是其中最成熟、最容易在真实硬件上落地的一条路线。


规则控制与学习控制​

在继续之前,我们先把两种控制方式摆在一起看清楚

  • 请注意,这两者不是谁取代谁的关系。工厂里拧螺丝的机械臂,几十年如一日重复同一个动作,规则控制至今仍是最好的选择——它精确、可靠、可审计。学习控制擅长的,是那些规则写不出来、或者写起来代价太高的任务。

本课程的第三阶段到第四阶段,走的就是"学习控制"这条路线。但请记住:即使在未来,你写的学习系统里依然会保留大量规则——比如关节限位、安全速度限制。学习和规则是互补的。


模仿学习与行为克隆​

什么是模仿学习​

  • 模仿学习的思想朴素到一句话就能说完:先做给机器人看,机器人照着学。

    • 在模仿学习中,人类操作者通过遥操作(Teleoperation)控制机械臂完成任务,系统同时记录"看到的画面"和"执行的动作"。这些数据被用来训练一个模型,训练完成后,模型就能在没有人类操作的情况下,自己看着画面做出动作。

什么是行为克隆​

  • 行为克隆是模仿学习中最直接的一种方法,也是本阶段使用的 ACT 模型的底层思想。它的逻辑是:

    • 把示范数据整理成一条一条的"(输入,输出)"配对——"看到这个画面时,人做了什么动作";
    • 训练模型去拟合这个映射关系:给同样的输入,输出和人一样的动作;
    • 训练好之后,模型看到新的画面,就能"模仿"人给出动作。

Observation、State 和 Action​

模仿学习的全部数据,都可以归到三个概念里。这三个词在后面的每一章都会反复出现,务必在这里建立准确的直觉。

Observation(观测):机器人"看到"的世界​

  • Observation 是机器人通过传感器获得的关于外部环境的信息。你可以把它理解为机器人的"眼睛"。它告诉机器人世界现在是什么样子,对 reBot Arm 来说也就是:

    • 前置相机(俯拍)看到的全局画面:桌面上有什么物体、在哪个位置;
    • 腕部相机(装在机械臂末端)看到的近距离画面:夹爪和目标之间的相对关系。

State(状态):机器人"自己"的样子​

  • State 是机器人对自身状态的描述,和外部环境无关。这相当于人类的本体感觉——你闭上眼睛也知道自己的手在哪、胳膊弯了多少度,State 告诉机器人自己现在是什么姿态,对 reBot Arm 来说,State 就是:

    • 6 个关节当前的角度;
    • 夹爪当前的开合程度。

Action(动作):机器人"要做"的事​

  • Action 是模型输出的、发给机械臂的执行指令。注意一个关键细节:在 reBot Arm 上,State 和 Action 的维度是一样多的(都是 6 个关节 + 1 个夹爪)。State 是"现在在哪儿",Action 是"下一步要去哪儿"。:

    • 6 个关节的目标角度;
    • 夹爪的目标开合程度。

单步动作与 Action Chunk​

单步动作:一帧一决策​

  • 每一帧画面,模型预测下一个瞬间的关节目标,机械臂执行,然后取下一帧再预测。

    • 单步动作有一个明显的缺陷。模型每一步都可能有一点点偏差,而每一步的偏差都会改变机械臂的位置,让下一帧的画面偏离训练数据见过的分布,导致下一步偏差更大。反映在机械臂上,就是动作抖动、犹豫、走走停停——就像一个人每走半步就停下来重新想一次"我接下来该迈哪条腿"。

Action Chunk:一次预测一串动作​

  • 让模型一次预测未来一小段时间内的一连串动作(比如未来 1 秒内的 50 个关节目标),而不是只预测下一步。

    • 推理频率要求降低。 一次推理管一小段时间,即使模型推理稍慢(比如用没有顶级显卡的电脑),机械臂也能流畅运动。这对真机部署非常关键。
    • 任务有"记性"。 一次预测未来一段动作,模型必须"想清楚"接下来要干什么,这让它更不容易被瞬时干扰带偏。
    • 动作更平滑连贯。

当然,Action Chunk 也不是越长越好。预测得太远,环境可能在中途发生变化(比如物体被碰了一下),而机械臂还在执行"过时"的动作。实际系统会采用开环执行一小段、然后重新观测再预测的折中方案。


数据分布与模型泛化:模型的能力边界在哪​

这是本章最重要的一节,也是初学者最容易忽视、却在实践中决定成败的一节。请先记住一句话:

模仿学习模型只能学会数据里有的东西,也只能在数据覆盖的范围内工作。

  • 模型训练时见过的所有"(观测,动作)"配对,构成了一个数据分布(Data Distribution)。推理时,如果机械臂遇到的画面和状态落在这个分布之内,模型通常表现良好;一旦跑出分布之外,模型的输出就失去依据,行为变得不可预测。

这带来几个非常实际的推论:

  • 想让它在桌子的任何位置抓方块,数据里就要覆盖桌子的各个位置**。** 只在桌子中央采数据,模型就只会抓中央。
  • 想让它抓不同颜色的物体,数据里就要有不同的颜色**。** 否则换一个颜色,对它来说就是陌生世界。
  • 光照、背景、相机位置都要尽量和数据采集时保持一致**。** 下午采集的数据训练出的模型,在晚上的灯光下可能完全失效。

而泛化,就是模型把数据中学到的规律,应用到分布内、但从未逐一见过的新情况的能力。比如训练时见过方块在 100 个不同位置,推理时方块出现在第 101 个位置(仍在桌面上),模型依然能抓——这就是泛化。泛化不是魔法,它来自数据的多样性:数据覆盖越丰富、越连续,分布内的"空隙"就越小,泛化就越好。

模仿学习的上限,在采集数据的那一刻就已经基本决定了。 训练只是把这个上限兑现出来。


训练、推理和评估:模仿学习的三个阶段​

训练:离线学习​

训练发生在数据采集完成之后,是一个离线过程:机械臂可以断电放在一边,全部工作在 GPU 上进行。

  • 输入:采集好的数据集(图像、State、Action 的时间序列);
  • 过程:模型反复读取数据,不断调整内部参数,让自己预测的 Action 越来越接近人类的示范;
  • 输出:一个训练好的模型文件。

训练的好坏主要通过 Loss(损失值) 观察:Loss 下降,说明模型预测的动作和人类示范越来越像。

推理:在线决策​

  • 推理是模型部署上真机、实时工作的过程,也就是:读取相机和关节状态 → 模型预测 Action Chunk → 发送给电机执行。推理对实时性有要求——模型必须在几十毫秒内给出动作,否则机械臂会卡顿。

评估:用成功率说话​

模型训练好了,Loss 也很低,它能干活吗?不一定。Loss 低只说明模型"像人",不说明它"能完成任务"。 评估的唯一可靠方法是真机测试:

  • 设定明确的任务成功标准(比如"方块最终进入盒子");
  • 改变初始条件(方块位置、光照),重复测试 N 次;
  • 统计任务成功率,例如 20 次测试成功 14 次,成功率 70%。

评估发现的失败案例不是终点,而是下一轮数据采集的输入——哪里失败,就补采哪里的数据,然后重新训练。这就是数据迭代闭环,也是真实机器人学习项目的日常。


模仿学习的优势与局限​


Loading Comments...