早上在行业信息流里翻到两条热度最高的消息,一条是某款双足平台Bolt跑出了35km/h的速度,另一条是人形机器人对着镜子练嘴型,日报标题写得很俏皮——“机器人学会照镜子练嘴皮子了”。一条在猛冲猛跑,一条在对着镜子做表情,表面上毫不搭界,但我在这个领域里泡久了,反而觉得这两条新闻其实是在同一张地图上画坐标:一个画的是运动能力的边界,另一个画的是交互能力的边界。
这篇文章我就把这两件事拆开揉碎聊聊,包括“照镜子练嘴皮子”到底是怎么实现的、35km/h在双足家族里是什么水平、这两个进展背后各自拉着一条什么样的技术账单,以及如果你也想在自己硬件上复刻一个类似的口型跟随Demo,我踩过的那些坑可以直接给你避掉。内容偏工程向,但也尽量把原理讲到能让刚入门的朋友听明白的程度。
1. “照镜子练嘴皮子”不是卖萌:嘴型跟随背后的视觉-运动闭环
1.1 先拆解一下这条技术链路
所谓“照镜子练嘴皮子”,严格说应该叫“基于视觉反馈的口型跟随”或“面部表达模仿”。它不是写死一段动画循环播放,而是让机器人通过摄像头感知目标人物的嘴部状态,再把状态映射成自己嘴部机构的运动指令,同时用另一个视觉信号观察自己的执行结果,形成闭环修正。
完整链路大概是这样的:
- 外部摄像头捕获说话人的面部图像,跑一个人脸关键点检测模型,拿到68个甚至上百个关键点坐标。
- 从关键点里筛出和口型强相关的子集:上唇中心点、下唇中心点、左右嘴角、上下唇边缘点。
- 计算几个低维特征量:上下唇开合距离、嘴角宽度、下唇与下巴的相对位置等。
- 通过一个映射函数(查表、线性插值、或标定好的非线性曲线),把这些特征量转换成机器人嘴部各自由度的目标角度。
- 把目标角度以固定刷新率发送给执行器。
- 机器人额头或颌下装一个内窥式微型摄像头,实时观察自己嘴部的实际开合程度,和目标值做差,用PID或更简单的比例修正去消除误差。
看到第6步,你就明白“照镜子”三个字不是修辞,而是技术描述。机器人不再是被动地放录播,它在看着自己的输出校准自己。人类学外语的时候也是这个逻辑——我们听自己的录音、看镜子里的嘴型,不断调整发音动作,直到听起来像、看起来也像。机器人做的是同一件事,只不过把“听”换成了“看关键点”。
这也是为什么这条新闻值得单独拎出来讲:它代表的是“感知-控制-表达”闭环,和小车避障、机械臂抓取在结构上是同一个框架,只是应用目标变成了社交信号。技术难度不高,但工程价值很具体。
1.2 为什么嘴部控制比颈部、手臂控制更难
很多人觉得,头部都做了那么复杂的眼球和颈部自由度,嘴部多两个电机不就完事了?真不是。嘴部控制有四个特别恶心的地方。
第一是自由度严重不足。自然口型里,上下唇开合、嘴唇前突、嘴角左右移动、下颌开合,至少需要五到六个独立维度才能比较像样。但绝大多数人形机器人的头部空间是寸土寸金,传感器、扬声器、散热风扇全挤在一起,最后留给嘴部机构的往往只有两到三个自由度。自由度不够,意味着很多口型只能“近似表达”,你让它说“呜”,它只能把嘴缩成一个小圆孔,但没法做出真正的前突动作。所以每次看到Demo里机器人“说话”,我都会下意识数它的嘴部自由度。
第二是延迟要求极其苛刻。真人对话里,口型和语音的同步误差只要超过100到150毫秒,观众就会产生明显的“配音对不上嘴”的感觉。而整条链路里,视觉推理、特征计算、通信传输、执行器响应每一环都要吃掉时间。我实测下来,哪怕用一块带GPU的开发板跑轻量级关键点模型,视觉环节就要吃掉30到50毫秒,普通舵机的响应又是30到50毫秒,中间再叠加控制周期和通信抖动,很容易冲过150毫秒。这个后面我专门列了一张延迟预算表,你先记住结论:嘴型控制对实时性的要求比手臂抓取高一个量级。
第三是嘴部机构工作空间小、出力小,但还要求高带宽。手臂可以容忍慢半拍,嘴巴慢半拍就是恐怖片。要跟上自然说话时每秒5到10次的嘴型变化,执行器的响应带宽至少要20到30赫兹。普通总线舵机在这个频率附近已经明显发软,甚至发热。更麻烦的是,嘴部机构间隙和背隙会被“等效放大”——手臂上1毫米的误差没人注意,嘴巴上1毫米的误差,观众会觉得它在做鬼脸。
第四是映射关系高度非线性。上下唇开合距离从0到20毫米,对应的“看起来像不像”并不是线性变化。嘴巴从闭合到微张5毫米,视觉差异巨大;但从15毫米到20毫米,视觉差异反而没那么明显。嘴唇是柔性材料,不同机器人嘴唇的厚薄、硬度都不一样,标定曲线往往只能逐台机器去做。这也是为什么很多团队干脆上了端到端学习,让网络自己去学这个非线性。
1.3 实现方式的取舍:参数映射还是端到端学习
当前想复现口型跟随,主流有三条路。
路线A:关键点驱动的查表/线性映射。提取人脸关键点后,把手动标定的“开合距离-角度”曲线做成查表,再用线性插值补齐中间值。优点是实现最快、可解释性最强,出问题了一看就知道是哪一环;缺点也很明显,泛化能力差,换一个脸型或者换一个说话风格,映射可能就不太准了。
路线B:参数化口型模型映射。类似影视行业里的Blendshape表情系统,把口型分解成一组语义系数,比如“嘴角拉伸度”“唇部圆度”“下颌开度”,然后把这些系数映射到机械自由度上。这种方案的好处是控制指令人体可读,调试方便,能很自然地和语音合成、情感表情模块联动。我自己的项目最终就是走的这条路。
路线C:端到端视觉运动策略。输入图像或视频序列,直接输出关节角度轨迹,中间不做显式特征提取。用强化学习或行为克隆训练。好处是能学到一些手工特征很难捕捉的微妙协同动作,比如说话时下巴微沉、嘴角不对称地抽动;坏处是需要大量标注数据,而且一旦效果不好,你很难判断是感知的问题还是策略的问题。
我的建议很直接:做产品Demo,选B;做研究发论文,选C。不要一上来就端到端,否则你会花80%的时间在建数据管道而不是调试效果。
2. Bolt的35km/h到底快到什么程度:双足奔跑的物理与算法账单
2.1 先看数字对比:35km/h排在什么位置
我们把几个参考速度拉一张表感受一下:
| 对象 | 速度参考 | 说明 |
|---|---|---|
| 人类普通慢跑 | 约8-12 km/h | 大多数人可以持续较长时间 |
| 人类百米冲刺 | 约35-37 km/h | 世界级短跑运动员的瞬时速度 |
| 一般双足机器人 | 约10-20 km/h | 多数以稳定步行为主,慢跑也算 |
| 某高性能四足平台 | 约45 km/h | 四条腿在高速奔跑上有天然优势 |
| Bolt双足平台 | 35 km/h | 已进入人类冲刺速度区间 |
所以35km/h是什么概念?它没有打破四足机器人的纪录,但放在“双足”这个赛道里,已经是跨越式的指标。双足系统在奔跑时面临的核心难题是:存在腾空相,双脚同时离地,系统处于欠驱动状态,你没法靠静力学稳定去“装稳”,必须在极短的时间内完成质心轨迹规划、落足点调整和着地冲击吸收。而四足因为支撑点多,容错性比双足高一个档次。
我个人的判断是,35km/h这个数字本身的营销意义远大于实用意义,但它背后反映的关节功率密度、控制频率、结构刚度,才是真正值钱的资产。这些能力会直接反哺到跳跃、快速转身、越障等运动技能上。
2.2 奔跑态与行走态的本质差异:从静稳定到动态稳定
走路和跑步看起来都是“两条腿交替迈步”,但在控制系统眼里,它们是两种完全不同的动物。
走路时,机器人可以看作一个准静态系统,用ZMP(零力矩点)理论把质心投影约束在支撑多边形内,每一步都有充足的时间去调整姿态,相当于“扶着地面慢慢挪”。这种模式稳定性好、实现简单,但速度天花板很低,因为步频和步长都受限。
跑步则完全不同。跑步必须存在腾空相,在腾空时间里地面反作用力为零,ZMP这个概念直接失效。这时候机器人有点像一个连续抛接的球——质心沿着抛物线运动,你只能通过下一个落足点的位置和时机去影响下一次腾空的抛物线。落地瞬间,冲击力会是体重的数倍,腿部关节要在大扭矩、高速度、短时间三同时满足的情况下完成缓冲。
控制频率的要求也差异巨大。慢走时模型预测控制的更新频率做到50到100赫兹就够了,跑步大概率需要200赫兹以上,因为腾空时间可能只有0.2到0.3秒,留给你调整落足点的窗口极短。
拿生活里的事情类比:走路像在结冰的路面上小步挪动,慢一点就稳;跑步像骑车过弯,你必须保持一定速度,用身体重心去换稳定,一旦停下来反而会倒。控制系统从“扶墙走”切换到“高速飞驰”,底层算法全部要换一遍。
2.3 跑出35km/h,硬件和算法分别要付多少账单
先看硬件账单。奔跑时的关节峰值扭矩通常是平均扭矩的三到五倍,这要求电机有极高的瞬时过载能力,而不是只看额定功率。高功率密度无框电机、低转动惯量转子和配合合理的减速比,几乎是标配。
电池这边也不轻松。峰值功率的放电需求意味着要用高倍率电芯,普通的18650电池搞不定,得让位给高倍率聚合物电池或者超级电容做缓冲。我见过一些团队的跑跳机器人,跑完一轮之后电池直接发烫到不敢摸,就是因为峰值电流把电芯逼到了极限。
结构这边,下肢模组的转动惯量是关键。摆动腿越轻,步频才能提得越高,所以碳纤维小腿、中空结构件、钛合金关节这些轻量化方案会被反复使用。这里的“轻”不是绝对重量,而是相对于转动轴的惯量,稍微结构设计不合理,电机要把很大一部分力气花在甩自己的腿而不是推动身体前进。
再看算法账单。奔跑控制不是一个单一算法能搞定的,至少需要三层:
- 质心轨迹规划层。通过模型预测控制(MPC)或线性倒立摆模型,根据当前状态和目标速度,规划未来几十到几百毫秒的质心轨迹。这一层要处理腾空相的抛物线方程和落地相的接触力约束。
- 落足点预测层。在腾空相里,通过质心速度外推目标落点。这里有一个经典公式思路:落足点大约在质心投影前方某个与速度成正比的偏移位置。具体系数要根据实际情况调。
- 状态估计与鲁棒层。奔跑时足底冲击大,IMU的振动噪声、足底力传感器的波形都很难处理,需要把关节编码器、IMU、足底力做多传感器融合。跑得越快,估计延迟对稳定性的影响越致命,往往要牺牲一点估计精度去换相位超前。
近两年不少团队直接用强化学习做足式运动控制,把整个“质心规划+落足点+关节控制”打包成一个神经网络策略,再用仿真到现实的迁移补齐真实世界差异。这条路对奖励函数设计的依赖很深,但确实解决了很多手工控制器难以处理的复杂地形适应问题。
2.4 跑得快不一定是终局,场景适配才是
很多人看到35km/h就会兴奋:“这不就能追上人了?”但实际量产产品里,移动速度从来不是越高越好。高速意味着噪声更大、刹车距离更长、功耗更高,也意味着对现场人员的安全威胁更大。安防巡逻、工业巡检这些场景,真正需要的是二十小时续航和稳定越障,而不是三秒冲刺。
那速度突破的意义在哪?我认为在于它验证了系统的能力上限:关节支持多大峰值功率、控制系统能跑多高的刷新频率、结构能承受多大的落地冲击。这些能力是去做跳跃、快速转向、上下楼梯等复杂动作的底层基础。没有跑的能力储备,很多复杂机动动作的设计空间会被锁死。
所以我的态度是这样:速度指标可以用来宣传,但真正落地的时候,要回到场景里去看“在这个环境里哪种运动模式最经济、最安全”。Bolt的35km/h,更像是在向行业宣告:双足运动能力的天花板又被顶上去了一截,接下来要看谁能把这块能力用在实际产品里。
3. 从交互表达和运动边界,看人形机器人行业接下来在卷什么
3.1 交互赛道:服务型机器人开始拼“表现力”
“照镜子练嘴皮子”背后,其实是人形机器人交互赛道的军备竞赛。过去几年,大家比的是语音识别准不准、回答流畅不流畅,但用户最终感知到的是一个“整体形象”:口型能不能对上、表情有没有起伏、眼神会不会追随、姿态会不会配合语义。
我在很多展会上观察过,观众对机器人的第一印象往往不是“它说什么”,而是“它像不像活的”。口型同步差200毫秒,观众立刻就出戏;如果口型居然能对上,哪怕语音识别偶尔犯错,用户包容度都会高很多。这是很微妙但很关键的心理效应。
所以嘴型控制不是玩具功能,它和情感表达、意图反馈一起,构成了具身智能面向人类时的那扇“窗口”。机器人对外部世界的感知和理解,最终都要通过这扇窗口传递出来。如果窗口是僵的,感知再准,用户也感受不到。
3.2 运动赛道:速度压力正在重塑机电设计思维
双足平台跑出35km/h,最直接的影响是让整个供应链重新审视“该用什么电机、什么电池、什么材料”。过去做人形机器人,很多团队用的还是从机械臂产业搬过来的电机和减速器方案,讲究的是定位精度和重复性,但不太在意瞬时爆发力和高频率加减速。
奔跑需求一上来,选型逻辑就变了:电机要看峰值扭矩和功率密度,减速器要评估在承受冲击载荷时的刚度与背隙,结构件要同时做轻量化和抗疲劳。电池管理系统要面对的也不再是平稳放电,而是频繁的脉冲大电流。
这不是只有做跑步机器人才需要考虑的问题。哪怕你做一台陪伴机器人,只要它需要快速抬头、快速转向、做大幅度的肢体表达,同样会撞上“功率密度”“响应带宽”这些同样的坎。所以我可以负责任地说,高速奔跑带来的设计理念,会逐渐渗透进所有人形机器人的机电平台。
3.3 两个方向都指向同一件事:数据闭环
口型跟随需要的三元组数据是“音频-口型-关节轨迹”。跑步控制需要的数据是“状态-动作-结果”的交互经验,或者是仿真环境里的域随机化配置。这两类数据看着完全不搭,但技术演进路径高度一致:要建数据采集系统,要搭建仿真环境,要在真机上做闭环验证,然后迭代。
这也是我判断一个团队是不是在“真做”的标准:看它有没有形成数据造血能力。如果每次Demo都要靠手调参数凑效果,那基本就是实验室特调;如果它能持续采集数据、自动扩充策略的泛化边界,那才叫能力飞轮。
4. 想自己复现一遍?我搭过一套嘴型跟随最小系统,避坑记录如下
4.1 最小系统的硬件选型方案
如果你也想在桌面级设备上复现“照镜子练嘴皮子”,不需要上全尺寸人形。我搭过一套很朴素的最小系统,成本控制在很低的范围,核心硬件如下:
- 一个带嘴部机构的小型人形头壳,嘴巴部分两到三个自由度。自己打印也行,但建议至少包含“上下开合”和“嘴角左右”两个独立动作。
- 两块执行器:预算紧可以用小型总线舵机,预算宽裕我会强烈建议换成微型直线电机加弹簧复位。舵机便宜,但带宽低、回差大,做高频嘴型修正时会有明显的“肉肉感迟滞”。
- 一个RGB摄像头,用来拍摄外部说话人。不需要特别好的分辨率,但帧率最好到60fps,曝光控制要能关闭自动模式。
- 一个内窥式微型摄像头,装在机器人额头附近,朝下观察自己嘴部。
- 一块带GPU的开发板,用来跑人脸关键点模型。CPU也行,但帧率会掉到10fps以下,延迟会让人崩溃,不推荐。
- 一块单片机或者干脆就用开发板直接驱动舵机控制板。
另外强烈建议在嘴部机构上加机械限位,并在代码里做角度软限位。否则调试时一旦映射算出一个越界角度,执行器会一直顶到机构卡死,轻则损坏齿轮,重则烧舵机。
4.2 软件链路与标定方法
第一版软件管线建议保持简单:
- 用现成的人脸关键点模型提取68个关键点。
- 计算两个核心特征量:上下唇中心点距离、左右嘴角距离。
- 手动标定映射关系。做法是控制机器人依次做出“完全闭合”“自然微张”“张大嘴”三个状态,同时记录对应的特征值和关节角度,中间用线性插值补齐。
- 写一个控制线程,以50Hz频率向执行器发送目标角度;写一个感知线程,以30fps频率跑视觉推理,计算目标特征量。
- 加一个自身嘴型闭环:内窥摄像头的图像算出实际开合距离,和目标距离比较,用比例控制修正角度指令。
下面给一个核心伪代码片段,方便理解整体逻辑:
# 伪代码:嘴型跟随主循环 while running: # 感知线程产出 target_open = compute_lip_distance(external_frame) # 目标开合距离 # 自观察线程产出 actual_open = compute_lip_distance(inner_frame) # 实际开合距离 # 比例修正 error = target_open - actual_open angle_cmd = base_angle_map(target_open) + kp * error angle_cmd = clamp(angle_cmd, MIN_ANGLE, MAX_ANGLE) # 发送给执行器 send_servo_cmd(angle_cmd)有一点要特别提醒:第一版系统跑通时,大概率会出现嘴部“高频颤抖”,尤其是当比例系数调大之后。这时候不要一味去降增益,先检查是不是内窥摄像头帧率太低导致反馈延迟过大,形成一个“延迟-振荡”正反馈。把内窥摄像头帧率提上来,往往比单纯调PID更管用。
4.3 实测中踩过的几个坑
我按踩坑的痛感从高到低排列,你直接抄答案就行。
第一个坑是曝光白平衡问题。外部摄像头的自动曝光一旦变化,同一个嘴型的开合距离特征值会漂移好几个像素,导致嘴型忽大忽小。解决办法是关闭自动白平衡和自动曝光,固定曝光时间,或者用支持手动模式的高帧率工业相机。
第二个坑是头部姿态干扰。人脸如果稍微抬头或转头,上下唇中心距离的变化完全可能是姿态造成的,而不是嘴型造成的。我需要同时跟踪头部俯仰角和偏航角,做一个简单坐标补偿,把关键点投影到标准正面视角下再计算距离。不加这个补偿,你让用户转头说话的时候,机器人嘴型就会乱跳。
第三个坑是执行器共振。小型舵机在20到30Hz的修正信号下,如果支架是塑料薄壁件,会发出持续高频嗡鸣,听感极其廉价。我的处理是把支架换成加厚铝件,并在电机与支架之间垫一片橡胶减震垫,同时把PID的微分项调低,避免激励共振。
第四个坑是声学问题。嘴型一跑起来,你放上TTS语音,结果机器人的控制板和风扇噪音比语音还响,观众瞬间出戏。人形机器人交互系统里,声学不是一个可选项。最后我把散热风扇换成大尺寸低转速方案,又把整个头壳内侧贴了吸音棉,才把噪音压到可以接受的水平。
4.4 跑步能力想复刻?我建议先做单腿跳跃
口型跟随是低成本高性价比的Demo方向,但如果你看了Bolt的35km/h,也想在物理平台上试试动态运动控制,我的建议非常保守:直接从单腿跳跃平台开始,不要一上来就全尺寸双足跑。
单腿跳跃平台几乎是奔跑的缩略版,它保留了奔跑最核心的困难:腾空相的存在。你只需要让一条腿周期性地弹跳起来,再在落地时缓冲住,就已经在解决“欠驱动状态下的稳定控制”这个核心问题了。参数可以先从5厘米高度、0.5秒周期开始,先做垂直跳,再加前后小幅度移动。
等单腿跳跃稳定之后,再扩展到双足交替摆腿,你面对的就是一台最简跑步机器人。此时再去考虑Bolt那种全尺寸平台的MPC和落足点规划,心里的物理直觉会踏实得多。很多团队把这一步放在仿真里做,先建一个简化双足模型,跑通质心轨迹规划后再迁移真机,也可以省下大量试错时间和硬件损坏成本。
5. 一些没能写进日报里的个人体会
5.1 一张延迟预算表,帮你判断口型跟随做不做得成
这是我做口型跟随项目时最核心的工具——延迟预算表。你把整条链路每个环节的耗时估算出来,一眼就能看到瓶颈在哪。
| 环节 | 典型耗时 | 优化手段 |
|---|---|---|
| 相机采集与传输 | 8-15ms | 高帧率相机,关闭自动曝光 |
| 人脸关键点推理 | 15-40ms | 换成TensorRT/ONNX加速 |
| 特征计算与映射 | 1-5ms | 几乎可忽略 |
| 通信传输 | 1-5ms | 串口或CAN总线,减少协议开销 |
| 执行器响应 | 20-50ms | 微型直线电机优于普通舵机 |
| 自观察反馈 | 10-30ms | 内窥摄像头帧率不低于30fps |
| 合计 | 55-120ms | 目标控制在150ms以内 |
我第一次跑通全链路时,总计冲到了180毫秒,嘴部动作明显“慢半拍”。后来我把视觉推理从CPU挪到GPU,又把总线舵机换成直线电机,总延迟压到了90毫秒左右,观感立刻自然了很多。所以当你觉得效果不行时,先做延迟预算,再决定改哪一环,而不是盲目升级摄像头或重训模型。
5.2 怎么判断一个Demo是“真能力”还是“秀技巧”
看行业日报久了,我养成了一个职业习惯:遇到任何“机器人学会了某某技能”的视频,先问三个问题。
第一,它有没有闭环反馈?如果只是按预设时间轴播放一段动画,不管动作多复杂,都只是编舞,不是学习。第二,它能不能泛化?换一个人、换一句台词、换一个光照环境,表现是不是还稳定?如果换个角度就直接翻车,那说明过拟合严重。第三,它有没有公开失败案例?一个团队如果只放成功剪辑,大概率是在刻意隐藏真实鲁棒性。
用这三个问题去看“照镜子练嘴皮子”那条新闻,你会发现重点不是“它学会了”,而是“它开始建立自我观察的闭环”。这才是值得关注的部分。
5.3 关于“35km/h你追得上吗”的一点尾声
说回标题那个问题:35km/h你追得上吗?普通人不冲刺还真追不上。但我更愿意把这句话理解成一个隐喻——人形机器人正在从“缓慢行走的演示品”,变成“具备动态能力边界的物理平台”。今天的一小步是口型同步,明天的一小步是高速奔跑,背后共通的东西永远不变:功率密度、控制频率、数据闭环。
如果你也想进入这个领域,我的建议是从小处开始,先搭一个能闭环的小系统,把延迟预算表和“真能力与秀技巧”的判断标准焊在脑子里。因为不管行业日报怎么换标题,真正推动技术向前走的,永远是这些看起来不够炫、但极其扎实的工程细节。