☰
看视频学动作:Gemini 4 Argon 机器人运动生成实践与避坑指南
2026/10/17 4:17:31 网站建设 项目流程

那段时间我们组的状态可以用四个字形容:半信半疑。 Gemini 4 Argon 这个名字是内部定的,说要做“看视频学真人运动”,大家第一反应都是:视频里那是个一米七五的人,机器人是个不到一米二的铁架子,骨骼结构、电机响应、重心分布全都不一样,怎么可能看一段视频就学会?直到那天晚上十一点,双足原型机第一次在没有手动编程任何动作轨迹的情况下,自己照着一段手机视频完成了“蹲下—捡起—起身”的全过程。它做得不算完美,中间甚至犹豫了一下,但那个节奏、那个幅度,一看就是“从视频里学来的”,而不是脚本里写死的。

所谓看视频学真人运动,拆开来说就是给机器人一段人类动作视频,让它从视频里自动提取动作规律,再把规律转化成自己可以执行的关节运动指令。我们组用 Gemini 4 Argon 框架前后折腾了大概两个月,从数据采集、视频关键点提取、运动重定向、仿真回放到真机部署,踩了不少坑,也摸清了一些边界。如果你正打算做机器人模仿学习、动作生成,或者单纯好奇“视频里的动作怎么迁移到机器人身上”,这篇文章会给你一条从数据准备到真机验证的完整路线,以及几个我们花了很长时间才绕开的坑。

1. 为什么我盯上了“看视频学动作”这条路

1.1 传统动作方案的三个天花板

在决定用视频学习之前,我们组其实把行业里常见的机器人动作生成方案都过了一遍,各有各的难受。

第一种是手动编写运动轨迹。就是对着机器人的各个关节,逐个时间点设定目标角度,再用插值把关键帧连起来。这种方式对简单的定点动作还行,比如抬手、摇头,多写几次也能看。但一旦动作稍微复杂一点,比如弯腰捡东西加转身,轨迹曲线就会变得非常难调。我们一个同事为了给机械臂写一段“拿杯子绕过一个障碍物再放下来”的轨迹,前前后后改了三天参数,最后稍微换一个障碍物位置,整个轨迹又废了。手动轨迹的本质问题是“写死了一条路”,没有办法泛化到新的场景。

第二种是动作捕捉。动捕的质量确实高,精度能达到毫米级,可是成本也高。不是设备贵不贵的问题,而是整套流程太笨重:需要专门的场地、需要穿动捕服、需要贴反光标记点,采一个二三十秒的动作就要准备大半天。如果目标是让机器人学习一百种日常动作,按这个效率得采好几个月。而且动捕数据是“人身上的标记点轨迹”,和机器人的关节结构之间依然存在一次转换,这一步并不会因为数据精度高而自动消失。

第三种是遥操作,也就是人戴着手套或者操控示教器,直接“掰着”机器人做动作。这种方式适合工业机械臂的示教编程,机器人一边被你推着走,一边记录轨迹。但它有个问题:学到的动作基本是“人的操作习惯”,而不是“人对任务的表达”。人如果用力过猛或者角度没对,录进去的就是坏轨迹。而且遥操作要求机器人现场待命,一个人一次只能教一个动作,完全谈不上规模化。

1.2 视频学习真正解决的是什么问题

看视频学动作最大的吸引力,是把数据来源变成了互联网上无穷无尽的普通视频。我们不需要动捕房,不需要穿戴设备,只需要一段清晰、完整的视频。这等于把“采集动作数据”这件事的成本,从“找专业演员进棚子”降到了“拿手机拍一段”。

Gemini 4 Argon 的核心思路,并不仅仅是“识别出视频里那个人在做什么”,而是要把人的动作拆解成可迁移的运动信息:哪些是动作语义层面的东西(比如“弯腰”这个意图),哪些是运动轨迹层面的东西(比如手在空间里画过的路径),哪些是物理约束层面的东西(比如脚不能穿过地面、重心要保持稳定)。把这三层信息分开处理之后,再映射到机器人自己的运动学模型上。

当然,一开始也要有清醒的认识。视频学习不是“给一段视频,机器人立刻学会所有动作”,它做的是“把一段可演示的运动规律迁移到机器人这个载体上”。适合的目标是中等复杂度的、节奏可控的全身运动,比如蹲起、挥手、弯腰拾取、简单的起势动作。快速转身、翻滚这类强动态、高冲击的动作,视频里虽然看着不难,但机器人受限于电机扭矩和支撑结构,大概率学不会。这个边界问题我后面专门讲。

2. Gemini 4 Argon 视频理解与运动重定向的完整链路

2.1 视频理解层:不只看关键点,还看动作意图

Gemini 4 Argon 处理一段视频时,第一层做的是把原始视频变成“带语义的关键点序列”。系统会先把视频按固定帧率抽帧,抽出来的每一帧图片先输入姿态估计模块,得到人体关键点的二维坐标,再通过多视角几何和时序滤波升级到三维估计。这里的核心不是单个关键点有多准,而是整个序列在时间上是否连贯、是否平滑。

在实测中我们发现,如果只用单帧关键点,画面里只要有轻微遮挡或者背景杂乱,关键点就会跳来跳去。比如人在深色背景下穿深色衣服,某一帧把手挡在胸前,姿态估计就可能把左手和右手编号对调。Gemini 4 Argon 的处理方式是加一层时序上下文模型:每一帧的关键点都不是独立输出的,而是会和前后几十帧一起做联合推断。同时,多模态模型还会对整段视频生成一段文本描述,标注“这是一个蹲起动作”“节奏较慢”“手臂自然下垂”之类的语义信息。

这层语义信息非常关键。机器人真正执行时,需要的不仅是“每个时刻手在哪里”,还需要“整个动作的意图是什么”。比如同一个蹲起动作,人来做是“捡东西”还是“休息一下松快松快”,手的轨迹会有细微不同。仅靠关键点坐标根本区分不了,但语义描述可以告诉机器人的决策模块:这个动作的目标是接触地面附近的物体,还是单纯地做重心起伏。这两种意图对应到机器人控制层,就是完全不同的任务约束。

在数据清洗阶段,语义描述还有一个很实用的价值:自动筛掉坏数据。我们曾经录了一批动作,人做的时候不小心踩到了垫子边缘,身体晃动很厉害。关键点上肉眼几乎看不出问题,但语义模型给出的描述是“动作执行中平衡不稳定”。我们直接利用这条描述把这些样本标记为低质量,省去了大量人工检查的时间。

2.2 运动重定向:从人的骨骼到机器人的关节

拿到关键点序列和语义描述之后,第二步就是运动重定向。这一步很像游戏动画领域做的“骨骼动画重定向”,但机器人场景下会更麻烦,因为机器人的关节自由度、旋转范围、杆件长度都和人体不一样,而且它必须遵守物理规律。

直接把人体的关键点坐标复制给机器人肯定是行不通的。首先,人体手腕有三个旋转自由度,而我们机器人的腕部只有俯仰和偏航两个轴。直接把人的腕部姿态传过去,机器人很快就会算出无效关节目标,轻则动作僵硬,重则关节直接卡死。Gemini 4 Argon 的重定向模块会先用一个“自由度映射矩阵”把人的关节角投影到机器人允许的关节空间里,冲突的自由度被忽略,缺失的信息由其他关节协同补偿。

还有一个更隐蔽的问题是身体比例差异。视频里的人腿长大约占身高的四成,而我们的双足机器人腿长占了身高的一半以上。如果只按关键点位置缩放,机器人下蹲到同样比例高度时,它的重心会比人更低,很容易超出支撑稳定范围。所以 Gemini 4 Argon 在重定向时会额外解算两件事:一个是质心位置相对于支撑面的投影点,另一个是关节角速度是否被限制在电机可承受范围。一旦发现某个时刻的质心投影超出支撑脚范围,系统就会自动修正髋关节和踝关节的角度,而不是照搬视频。

这一步也是我们把“视频学习”和“单纯的动作拟合”区分开来的地方。单纯的动作拟合只关注误差最小,运动重定向则是在误差和物理可行性之间取平衡。过程中需要平衡几个目标:和视频动作的相似度、关节限位的满足度、机器人稳定的置信度。用优化求解器迭代解这个目标,比人为写一堆if条件要干净得多。

2.3 控制指令输出:给机器人的是目标轨迹还是闭环指令

重定向完成后,得到的是一串关节角度目标值。但直接把这串目标值发给电机会出问题:因为真实世界有重力、摩擦力、负载波动,简单的目标值跟踪会让机器人“照着画线”一样僵硬,稍微受点扰动就会跑偏。

我们在 Gemini 4 Argon 里实际使用了两种控制输出模式。第一种是离线轨迹模式,把重定向后的关节角度序列作为前馈目标,配合底层PD控制器跟踪。这种方式实现简单,适合动作确定性强的场景,比如挥手、蹲起、双臂起势这类。第二种是策略网络模式,把视频的语义embedding和当前机器人状态作为输入,由策略网络实时输出关节扭矩指令。这个模式对扰动有更强的适应能力,属于更接近强化学习里“学到的是策略”的形态。

策略网络模式我们只跑通了一个动作,就是“弯腰捡物”。它能够根据视觉反馈稍微调整手的位置,比纯回放轨迹稳得多。但代价是训练时间更长,需要更多仿真数据。目前阶段,项目里大部分落地动作还是靠离线轨迹模式,策略网络模式留给后续迭代。

3. 从零跑通一次“看视频学动作”的实操记录

3.1 环境准备:别在最基础的环节翻车

开始之前先把环境准备好,这部分看起来很基础,但很多人就是在这一环浪费了时间。我们的运行环境大致是这样:一台带GPU的Linux工作站,Python作为主脚本语言,深度学习框架负责姿态模型和策略网络,开源物理仿真器用于中间回放与验证。机器人本体是组里的双足原型机,关节全部走控制总线,底层跑PD控制器,上层只要送目标角就能执行。

我用的是个人PC先做前期的数据处理和可视化,真正训练和重定向解算才上服务器。因为姿态估计和仿真训练都比较吃显存,如果你手里的GPU显存低于8G,处理高帧率视频时大概率会爆显存。建议先按25到30帧抽帧,分辨率压到72万像素以内,这样能缓解不少压力。

另外一定要记得把数据、代码、参数配置文件分开存放。Gemini 4 Argon 的配置文件里包含动作标签、关键点置信度阈值、重定向权重这些变量,如果散落在代码里,调参的时候会非常痛苦。我们后来统一用一份参数清单记录每一轮实验的设置,每次改完参数都存档,配合日志定位问题会高效很多。

3.2 数据采集与清洗:手机视频也可以,但有前提

数据采集是整个流程里最容易被低估的一环。我们试过两种方式:一种是正式一点,用手机横屏固定机位拍摄,人物完整入镜,背景尽量简单;另一种是拿互联网视频直接处理。结论是:互联网视频成功率明显偏低,原因不是姿态识别模块不准,而是互联网视频的运镜、剪辑、镜头切换太频繁,系统很难从单一视角拿到连续稳定的关键点序列。

给自己录数据的时候,有几个注意事项值得写下来。第一,动作前后各留一秒静止状态,这样系统能自动识别动作的起止边界。第二,每个动作重复录五段以上,最好换不同的人来演示,省得模型过拟合到某一个体体型。第三,动作尽量做慢一点,让关键点序列的时序分辨率足够。我们最开始的样本里有一批快动作,速度太快导致相邻帧之间关键点移动距离过大,重定向出来的关节角速度全在限位边缘,机器人一执行就报警。

清洗数据的时候,我们主要看三样东西:关键点置信度曲线是否平滑,骨架序列里有没有手脚编号突然互换,语义描述是否和实际动作一致。清洗完的数据会按“动作标签—视频编号—帧序列”的方式存档,后续步骤都是从这个存档开始跑。

3.3 完整处理链路:抽帧、姿态估计、重定向、仿真回放

把一段已经清洗好的视频变成机器人能执行的轨迹,大致经过这几个步骤。

第一步是抽帧。我们会把视频统一转成固定帧率,形成帧序列。第二步是姿态估计。这一步直接调用 Gemini 4 Argon 里集成的姿态模型,对每一帧产出人体2D关键点,再通过时序滤波生成相对稳定的3D关键点序列和语义描述。第三步是运动重定向。将关键点序列输入重定向模块,输出对应的机器人关节角度序列,并带一个“可行性检查”结果。如果某段轨迹存在关节超限、质心不稳定等问题,模块会标红提示。

第四步是仿真回放。在把轨迹放到真机之前,先在开源物理仿真器里跑一遍。我们会在仿真器里给机器人施加随机的微小外力,模拟真实世界的扰动。回放时重点观察三个指标:关节有没有到达物理限位、机器人有没有出现明显漂移、落脚的ZMP轨迹是否保持在支撑区域内。如果仿真里都站不稳,就不要去真机上试。

3.4 部署到真机:先用低速安全模式跑一轮

最后一步是部署到真机。但这里我强烈建议第一次验证时不要用正常速度,而是把整个动作的执行时间放大到两倍,也就是用慢动作回放轨迹。这样即使轨迹里有动力学不合理的地方,机器人的响应速度也能跟得上,不容易摔。

慢放通过之后,再逐步把速度拉回到正常节奏。与此同时,关节的PD参数也需要针对不同动作调整。蹲起动作主要在髋和膝盖两处出力,挥手动作用到的是肩和肘,如果全局共用一套PD参数,某个动作就会显得特别“面”,或者特别“僵”。实测下来,蹲起和捡物动作的膝部增益要比挥手的膝部增益高一倍左右,才能保证重心控制稳定。

4. 实测结果和四个绕不开的坑

4.1 五组动作的实测数据

我们挑了五个动作做真机验证,每组动作录了5到16段不等的视频,每段视频来自不同的人。真机测试统一在固定地面进行,机器人使用低速模式起步,动作执行完10次统计成功率。相似度评分是三个人根据回放视频打分的平均值,主要看动作节奏和轨迹风格。

动作示例视频数真机成功率(10次)相似度评分备注
原地蹲起129/100.81站姿学到最稳,膝盖控制略僵硬
挥手告别810/100.92动作简单,肩肘配合最好
缓慢转身103/100.47支撑脚切换时容易失去平衡
弯腰捡物147/100.74配合头部视觉反馈后改善明显
太极起势166/100.69动作较长,偏差随时间累积

从结果能看出,动作越长、支撑状态变化越复杂,成功率越低。这个规律其实贯穿了整个项目,也是后面讲边界问题时反复出现的主题。

4.2 坑一:骨骼自由度对不上,手部动作直接崩溃

第一个坑出现在重定向环节。视频里人的手腕可以绕三个轴旋转,而机器人腕部只有两个自由度,多出来的那个旋转自由度在映射时没有对应项。最初我们没有做约束投影,结果手腕位置的轨迹看起来没问题,但前臂在某一小段时间内出现“拧麻花”一样的姿态,电机跟着发出一阵高频啸叫。

解决办法是在重定向时对关节空间做约束投影:把不可实现的分量直接去掉,把它的效果分摊到相邻关节上。分摊之后前臂的姿态误差会略微变大,但整体运动不再产生反人类的内部扭转。后来我们把这个约束检查前移到重定向阶段,一旦自由度冲突超过阈值就直接标记样本为“低可行性”,不再往下一步送。

4.3 坑二:视频里的“快”和机器人的“快”不是一回事

第二个坑来自时间轴。人做快速转身时,转髋动作可能在0.3秒内就完成了,电机扭矩虽然能跟上,但惯性带来的冲击会让机器人瞬间失去平衡。第一次真机尝试快速挥手时,机器人手抬起来了,整个身体却被手臂反作用力带得往后退了半步,虽然没有倒,但是动作已经走形了。

Gemini 4 Argon 给出的解决方案是“时间缩放”,就是检测机器人动力学模型里每个关节的最大角加速度,再把视频轨迹的时间轴整体拉长,直到所有关节都满足动力学约束。通俗说就是:人类做得到,不代表机器人做得到,那就把它变成机器人的“慢动作”。我们在快速转身这个动作上把时间轴拉长到了1.8倍,成功率立刻从几乎为零提到了三成。虽然离实用还有距离,但至少找到了可控的方向。

4.4 坑三:复杂背景下的关键点跳变,比想象中更频繁

第三个坑来自数据端。刚开始我们用纯色背景录制,姿态估计挺稳。后来想增加数据多样性,改在办公室场景里拍,背景里有桌椅、显示器、绿植,结果关键点跳变频率一下子高了不少。最典型的问题发生在人弯腰捡物的时候:身体折叠后,手和前臂被大腿遮挡,姿态模型偶尔会把左手和左腿的关键点混在一起,出来的轨迹在那一瞬间明显不符合常识。

为了绕开这个坑,我们同时用了两招。第一招是在时序上做滑动窗口滤波,每一帧的关键点不是独立决定,而是参考前后各0.4秒的轨迹走向,把突然跳变的位置拉回平滑范围。第二招是在采集时尽量让人体正对镜头、减少躯干折叠遮挡。如果实在避免不了遮挡,就多录几段备选,让清洗环节把坏片段自动淘汰掉。

4.5 坑四:仿真里完美,真机上摔得毫无预兆

最后一个坑是每个做机器人都逃不掉的“仿真与真实差距”。有一段蹲起动作,仿真回放里机器人稳得像钉子,一上真机,前两次都摔了,而且摔的时机都在同一帧,完全不是随机干扰导致的。排查后发现,仿真器里机器人的脚底摩擦系数设成了0.8,真实地面由于表面有灰尘,摩擦系数只有0.4左右。下蹲时质心前移,真实摩擦力根本不足以维持静态稳定。

我们做了两处调整:一是把仿真器里的物理参数改成带随机区间的分布,摩擦系数在0.3到0.9之间随机采样,质量在额定值上下浮动5%,接触刚度也加噪声;二是真机验证时先用两倍慢速回放,让轨迹中不合理的动力学效应在低速下暴露出来,再逐步提速。经过这些改动之后,新动作第一次上真机的成功率明显提高,至少不再出现“仿真满分、真机秒摔”的尴尬情况。

5. 哪些动作学得会、哪些别指望:能力边界与下一步

5.1 目前能稳稳落地的动作类型

做了一段时间之后,我对 Gemini 4 Argon 的能力边界有了比较清晰的判断。能稳定落地的动作有几个共性:单人完成,动作时长在2到6秒之间,通常没有强烈的运镜和视角变化;身体的支撑状态变化不多,比如蹲起是从双脚站立到双脚站立,挥手也是双脚站立,不涉及单脚支撑或支撑脚切换;不需要和外界产生力的交互,比如推东西、提重物这类还需要更多的力觉信息。

在项目里真正能较快投入使用的场景,是那种“固定场地、动作流程相对固定、由工作人员拍一段视频更新一下机器人动作”的场景。比如服务机器人在展厅里学会新的迎宾姿态,或者在实验室里学会一个标准的物品交接动作。这些动作原本要写轨迹,现在一段视频就搞定了,而且换一个演示者重拍一段,动作风格就能跟着变,这种灵活度是手工编程很难提供的。

5.2 当前阶段就别指望这三类动作

也有几类动作,项目组试过之后直接划进了“现阶段不做”的列表。第一类是翻滚、快速转体这种强动态动作,机器人的关节速度和功率根本不够,强行执行只会让电机过载报警。第二类是双人配合动作,视频里两个人的互相对齐关系非常复杂,Gemini 4 Argon 目前还缺乏处理多人交互语义的能力,强行做的话需要给每个目标单独建模,投入产出比太低。第三类是需要操作工具的动作,比如拿扫帚扫地,视频信息里缺少工具和人手之间的力觉关系,机器人就算轨迹学对了,也学不会“用多大力气按着扫帚”。

需要说明的是,“学不会”不是说完全没有解决思路,而是当前的框架没有专门针对这些场景的建模模块,硬凑业余时间去搞,很难达到稳定可用的水准。做工程项目最忌讳就是什么都想试,最后什么都没有落地。

5.3 后续想做的三件事

基于当前结果,我们后续主要想改进三个方向。一个是给动作学习加入多模态反馈纠正:机器人执行时如果发现姿态和视频语义描述不一致,就自动修改后续轨迹,而不是把一整段动作回放完再判断。另一个是把“动作速度风格”作为条件输入:同样的挥手动作,可以生成慢速版或者快速版,这用语义模型的条件生成就能扩展。最后一个是把摔倒后的自复位动作也纳入学习范围,让机器人在学完每个动作之后顺便学会“如果失败了怎么站起来”,这对日常部署的稳定性提升会非常明显。

这些方向还在早期验证阶段,目前能给到大家的经验就是:视频学习这件事,天花板不在识别算法,而在物理执行和系统集成的细致程度。把数据、重定向、仿真验证、真机调试每一环都做扎实,比频繁换模型更有效。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询