公司动态
人形机器人跑步控制技术拆解:从400米夺冠到运动控制与算力设计
第二届世界人形机器人运动会 400 米小型组决赛中天工 Omni 以 45.66 秒的成绩夺冠。这个数字放在人类田径赛场里并不算快但对一台双足人形机器人来说用跑步而不是走路的方式完成 400 米背后涉及动力学建模、实时控制、软件调度、芯片算力和工程调参等一系列问题。很多开发者关注的是“它跑得有多快”但更值得拆解的是一台小型人形机器人要做到稳定跑完一圈软件和硬件分别要解决什么。这篇文章就从运动控制和机器人工程的角度把 400 米小型组决赛背后的技术链路逐层展开。1. 人形机器人跑 400 米为什么这比“走两步”难得多1.1 “跑步”和“行走”是两种不同的运动状态很多刚开始接触人形机器人的人会认为能稳定走路离能跑步就不远了。实际工程中从“走”到“跑”不是把步频调快那么简单而是改变了机器人的动力学状态。走路时机器人大多数时间存在双脚支撑期重心始终落在双脚围成的支撑多边形内部稳定性判断相对直接。跑步则完全不同跑步过程中会出现腾空相也就是双脚都离开地面重心在竖直方向上呈现抛物线运动ZMP 支撑多边形这个概念会短暂失效因为脚下没有支撑。腾空相出现后系统必须提前规划落地位置和落地时的姿态不能只靠当前支撑脚的反馈去“纠正”身体。这意味着控制器的输入输出关系变了状态估计、步态规划和关节力矩计算都需要切换模型。天工 Omni 能完成 400 米比赛至少说明它在跑步状态下的动力学建模、状态估计和落脚点规划已经形成了一套可运行的闭环。1.2 400 米考验的不只是速度还有续航、散热和结构强度单看 45.66 秒的平均速度大约 8.76 米/秒这个数值对于人形机器人而言已经属于跑步速度区间。但 400 米并不是 10 米冲刺它连着弯道、直道和持续的关节输出对整机系统提出了连续工作能力的要求。电池容量、电机峰值扭矩、关节散热和机械结构疲劳都会影响成绩。小型机器人本身质量轻适合做高步频运动但质量轻也意味着抗扰动能力弱脚底稍微打滑或重心偏离就可能摔倒。续航方面400 米比赛中电机需要持续输出功率如果电池电压在最后 100 米明显下降控制力矩上限会跟着下降机器人就会出现“后程乏力”的现象。还有一个容易被忽略的点是机械装配精度。跑步时每条腿会承受多次冲击如果左右腿的编码器零位、电机减速间隙或脚底摩擦系数不一致机器人会越跑越偏最终需要在控制层面额外补偿。而这些补偿会消耗额外扭矩和功耗所以在 400 米这种距离上结构设计、硬件一致性和控制算法必须同时达标。1.3 “小型组”意味着更苛刻的算力和结构约束不同量级的人形机器人工程侧重点差异很大。大型人形机器人有更大空间安装散热器、工控机和高性能计算平台小型组则必须在有限体积内完成计算、供电和自由度布置。约束项大型人形机器人小型人形机器人比赛中的影响机身体积空间充足可装多块计算板卡结构紧凑主板和电池位置受限无法随意堆算力和散热关节力矩电机功率大驱动能力强电机力矩有限减速比选择更敏感跑步中要严格控制冲击电流电池容量可携带更大电池容量受重量限制400 米后程可能出现电压跌落算力平台可装高性能 GPU 工控机常用 MCU 嵌入式 SoC 组合神经网络推理和实时控制要共享有限算力散热空间有风扇和均热板空间散热面积小温升快连续跑步后关节过热可能触发限流小型组比赛最大的特点就是所有系统都要“在很小的空间里协同工作”。如果控制算法过于复杂算力不够如果策略模型太大内存不够如果电池太小跑不完如果电池太大身体过重每一步的关节负荷也会增加。因此天工 Omni 能跑出 45.66 秒不只是算法层面有突破背后更是一套软硬件平衡的结果。2. 从 45.66 秒拆解运动控制核心链路2.1 一个完整的机器人跑步控制循环要在 400 米赛道上稳定跑步机器人必须有一个高频、闭环、低延迟的控制循环。这个循环至少包含四个阶段状态感知读取 IMU、关节编码器、足端力传感器等数据估算机器人当前的位置、速度、姿态和角速度。步态规划根据当前速度指令、转向指令和比赛阶段生成下一步的步频、步长、抬脚高度和躯干姿态。实时稳定控制通过模型预测控制或全身动力学控制计算每个关节需要的力矩或位置指令。执行与反馈底层伺服驱动器执行指令并把实际关节位置、力矩和电流回传供下一轮控制使用。整个循环通常在几百赫兹到一千赫兹之间运行。如果控制频率太低机器人在腾空相回落时来不及调整落脚点摔倒风险会显著上升。2.2 跑步步态中的支撑相与腾空相跑步步态和走路步态最大的区别在于是否出现腾空相。一个完整的跑步周期可以拆成支撑相和腾空相支撑相里脚与地面接触机器人通过腿部发力实现身体的加速和减速腾空相里两只脚都离开地面身体按照惯性飞行。阶段主要动作控制目标支撑相前期脚跟着地腿部缓冲吸收冲击避免速度突变支撑相中期膝盖伸展踝关节发力提供向前推进力支撑相末期脚趾离地腿后摆增加步长准备腾空腾空相前期摆腿向前收腿维持身体姿态准备落地腾空相末期腿前伸脚掌准备着地调整落脚点防止前倾或后仰如果只做行走步态支撑相占比较高重心一直处于相对安全的位置。跑步步态则要求控制器在腾空相不能“失联”必须根据 IMU 反馈持续估计姿态并在落地前完成落脚点修正。一旦落地时机、位置、速度和关节阻抗不匹配冲击力就会直接传导到躯干导致姿态失控。2.3 一个最小运动控制循环示例下面这段伪代码用于说明跑步控制循环的基本结构不是某款机器人的真实代码。实际工程中这段代码会被拆到实时内核或高优先级线程中并且会做更多异常保护。while running: # 读取传感器数据 imu_data read_imu() joint_data read_joint_state() # 状态估计推测机器人当前的位置、速度、姿态 state estimate_state(imu_data, joint_data) # 步态规划根据目标速度和转向指令生成步态参数 gait generate_gait( cycle_timecycle_time, speed_cmdspeed_cmd, turn_cmdturn_cmd, ) # 控制求解基于当前状态和期望步态计算关节力矩 torque solve_control( statestate, gaitgait, gainscontroller_gains, ) # 发送关节指令 write_joint_commands(torque) # 等待下一个控制周期 wait_for_next_control_cycle()这里最关键的是solve_control这一步。跑步场景下控制器不能再简单地把当前脚底当作“固定支撑点”而要在腾空相预判落地点并考虑机器人质心速度、角动量和脚底接触力。若使用模型预测控制每个周期都需要求解一个有限时域优化问题这会占用不少 CPU 资源。2.4 45.66 秒背后必须有全局速度规划400 米不是一条直线而是包含弯道。机器人不能只靠“跑得快”获胜还要解决转向问题。弯道中机器人需要产生额外的偏航力矩内外腿的步长和受力通常也不一样。如果控制系统只关注直线步态没有规划转向轨迹机器人会在弯道处明显外抛甚至冲出跑道。比赛场景下的速度规划通常包括几个阶段起跑加速起步阶段不能把力矩给太满否则电机过流或机器人后仰。途中稳定保持相对恒定的步频和步长降低能耗。弯道减速进入弯道前适当降低速度增加转向稳定性。终点冲刺最后一段如果电池电压和体温允许再提高目标速度。45.66 秒的成绩说明这套速度规划和步态规划要能够在几百米距离内持续稳定工作。任何阶段出错都可能导致摔倒或明显降速。3. 人形机器人软件架构一场比赛背后的实时调度3.1 软件模块要分层但实时路径不能“分太散”人形机器人通常包含感知、状态估计、运动规划、实时控制和硬件管理等多个模块。比赛场景下模块可以分成两类一类是硬实时任务比如电机控制、IMU 采集另一类是软实时或非实时任务比如日志记录、可视化调试和参数修改。常见分层方式如下软件层核心职责典型模块周期要求感知与状态估计读取 IMU/编码器/力传感器融合出稳态IMU 积分、卡尔曼滤波、接触检测200Hz - 1000Hz运动规划生成步态、速度曲线和落脚点步态规划器、速度规划器、路径规划50Hz - 200Hz实时控制计算关节力矩或位置指令MPC、WBC、PID、阻抗控制500Hz - 1000Hz硬件抽象屏蔽不同电机和驱动器差异电机驱动、通信协议、数据转换与电机通信频率一致系统管理状态监控、错误处理、日志安全检测、急停、录像较低优先级这里要注意日志和可视化不要放在运动控制主链路里。如果每毫秒控制周期都要等待日志写入或 GUI 刷新控制延迟会变得不可控。更合理的做法是把控制结果先写入环形缓冲区再通过另一个低优先级线程异步落盘。3.2 实时任务周期与优先级设计小型人形机器人的控制周期通常以毫秒计算。IMU 读取可能需要 1kHz状态估计可能 500Hz步态规划 100Hz力矩控制可能 500Hz 以上。为了让这些任务不互相抢占、不互相阻塞常见做法是给关键任务绑定独立 CPU 核心或使用 RTOS 的高优先级任务。下面是一份示例任务配置用于说明周期、优先级和 CPU 核心分配tasks: imu_read: period_ms: 1 priority: 90 core: 0 state_estimator: period_ms: 2 priority: 80 core: 0 gait_planner: period_ms: 10 priority: 50 core: 1 torque_controller: period_ms: 2 priority: 95 core: 1 log_writer: period_ms: 100 priority: 20 core: 2 debug_gui: period_ms: 500 priority: 10 core: 2这份配置并不是标准答案但它体现了比赛机器人的软件设计思路IMU 读取和力矩控制优先级最高状态估计次之步态规划可以稍微慢一点日志和 GUI 则放在最后。如果所有任务都挤在同一个核上步态规划里的矩阵计算可能导致力矩控制延迟最终表现为机器人动作卡顿。3.3 仿真训练与真机迁移Sim2Real 是绕不开的环节很多人形机器人跑步策略现在都依赖强化学习训练而不是纯靠人工编写步态规则。训练过程通常在海量并行仿真环境中进行让机器人在随机化的质量、摩擦系数、延迟、电机力矩下反复跌倒和重试。训练结束后再把策略部署到真机。但仿真到真机Sim2Real并不是一键完成。常见的做法包括域随机化在仿真中随机人体质量、关节摩擦、脚底摩擦、通信延迟。动作延迟补偿网络模型或控制器要考虑真实指令从计算到执行之间的延迟。软件在环仿真先用仿真的传感器数据和真实控制代码联调排除通信协议问题。真机小步验证先在软垫、安全绳保护下做单步和慢跑测试确认策略不会产生危险动作。对于 400 米比赛来说仿真训练能解决“怎么跑”的问题但跑完一整圈还需要考虑电池电压变化、关节温升和实际场地摩擦差异。这类连续长距离工况必须通过真机长距离测试来验证。4. 小型人形机器人的算力与芯片选型4.1 运动控制到底需要多少算力小型人形机器人能携带的计算平台非常有限因此算力规划需要精确到每个模块。经典控制方法中模型预测控制需要每个控制周期求解优化问题。优化问题的维度越高、约束越多、预测时域越长CPU 占用越高。如果使用端到端神经网络策略推理过程可能需要 GPU 或 NPU 加速普通的 MCU 往往扛不住。从当前常见方案来看实时关节控制通常放在低延迟 MCU 上负责电流环和位置环步态规划与神经网络推理放在带 NPU 的嵌入式 SoC 上更复杂的全局感知和任务决策则可能放到更高算力的平台。对于 400 米比赛这种场景感知复杂度相对较低但运动控制复杂度很高所以算力分配会更偏向控制模块。4.2 芯片选型不能只看跑分人形机器人这个方向热起来之后很多芯片厂商都开始强调自己在机器人场景的价值。类似全志科技这样的国产 SoC 厂商也会被讨论用于人形机器人的交互、联网、视觉处理或边缘计算模块。具体某款机器人是否使用了某款芯片需要以官方拆解或技术白皮书为准不能靠跑分判断。选型时要关注的因素包括外设接口是否足够接多路 UART、CAN、SPI、USB能否直接连接 IMU、激光雷达和伺服驱动器。BSP 与系统生态芯片能否方便跑 Linux、RTOS驱动是否长期维护。实时性中断延迟、核间通信延迟、缓存一致性是否符合控制周期要求。功耗与散热芯片功耗是否会导致电池续航下降是否需要额外散热片。工作温度比赛或工业环境中机器人长时间运行后温度可能较高芯片要留出余量。一个很常见的误区是只看 CPU 主频和 NPU 算力忽略了实时外设和驱动生态。结果主控跑起来了但电机命令没能在稳定周期内发出机器人照样无法稳定走路。4.3 小型机器人算力分配的实用思路对于开发团队来说早期阶段不一定要把所有算法都搬到一个高性能平台上。推荐从简单且可靠的结构开始MCU 负责底层电机控制、IMU 采集和急停逻辑。嵌入式 SoC 负责状态估计、步态规划和数据日志。如果要用强化学习推理再评估 NPU/GPU 是否必要。将策略推理放在 SoC 上但必须保证推理延迟抖动不能超过控制周期。比赛中的 45.66 秒看起来只在一瞬间完成但背后对系统实时性要求极高。任何一次调度延迟或通信波动都可能造成步态失稳。因此在算力设计中“够用且稳定”比“峰值算力高”更重要。5. 关键参数、调试验证与排错清单5.1 跑步控制的关键参数无论采用经典控制还是强化学习策略开发者都需要调一组能落地的跑步参数。下面列出的参数需要在真机或仿真环境中反复测试。参数含义调大影响调小影响调试建议步频每秒钟迈出多少步前进速度增加腾空时间变短速度下降腾空时间变长先固定步长调步频观察姿态稳定步长每一步步距速度快但关节行程压力大速度慢但更稳定避免超出关节物理限位抬脚高度腾空相中脚掌离地高度更好跨过障碍但腾空时间变长落地风险增加脚容易被绊倒平地比赛尽量降低但要留缓冲余量躯干俯仰身体前倾角度重心前移便于加速但易前倒身体直立稳定性高但速度不足根据跑速逐步调整落地阻抗脚底着地时的关节柔性冲击吸收好但反馈变慢响应快但冲击电流大用真机脚底力数据校准峰值力矩限制关节最大输出力矩加速猛但可能过流保护电机但速度上不去结合电池电流和温升设置实际调参时不要一次性改多个参数。最好一次只修改一个变量并记录数据。例如把步频从 2.8Hz 调到 3.0Hz先观察身体俯仰角度和关节电流是否异常再决定是否继续加。5.2 从单步测试到 400 米完赛的调试流程比赛不是直接上赛道跑 400 米。更稳妥的做法是分阶段验证静态站立机器人站在原地检查姿态稳定和零位是否正常。原地踏步验证跑步步态的周期性观察是否越踏越偏。小步慢跑在低速下完成跑步动作确认不会摔倒。直线快速跑逐步提高速度测量跑偏距离和速度波动。弯道测试在半径接近比赛跑道的弯道上测试转向能力。多圈组合测试模拟比赛全程检查电池、关节温度和机械连接是否正常。每个阶段都应该设置“通过门槛”。比如直线跑 10 米时重心横向偏移不能超过某个阈值如果超过不进入下一个阶段先回头检查装配和状态估计。5.3 常见失效模式与排查路径问题现象常见原因检查方式处理建议直线跑越来越偏左右腿机械参数不一致、编码器零位偏移、重心装配偏右查看左右关节角度曲线测量空载转动阻力重新校准编码器零位检查脚底摩擦和重物分布跑动过程中突然摔倒状态估计漂移、落地脚摩擦突变、控制周期超时回放 IMU 和关节日志检查是否有控制超时告警加强状态估计滤波扩展域随机化范围跑步后关节过热严重阻抗参数过高、关节频繁冲击、散热设计不足监测关节温度曲线和电流曲线降低落地阻抗或增加减速比保护最后 100 米明显掉速电池电压跌落、电流限制触发、目标速度曲线过早下降查看电池端电压和电机电流日志调整功率分配或在规划中允许最后阶段降低速度仿真中能跑真机不能跑模型参数不准、延迟补偿不足、脚底摩擦差异对比仿真和真机状态曲线测量控制延迟增加域随机化延迟补偿使用更精确的电机模型转向时外抛弯道速度过高、内外腿步长规划不充分查看偏航角误差和左右腿发力差降低弯道目标速度增加转向力矩约束排错时不要直接改参数优先看日志。现代机器人控制日志至少要记录时间戳、IMU 数据、关节位置、关节电流、控制指令、状态估计结果和异常事件。如果日志里能看到“控制周期超时”或“电机过流”就能快速缩小问题范围。5.4 赛前发布检查清单赛事环境与开发环境不同现场没有太多反复调试的机会。发布前建议按这个清单逐一确认电池满电并测试过电压跌落曲线确认 400 米全程不会触发欠压保护。关节温度在模拟跑动后处于安全范围留出足够冗余。所有螺丝力矩重新检查尤其是腿部结构和脚底安装板。编码器零位和关节原点已经校准。脚底防滑材料与现场跑道摩擦系数匹配。急停功能正常控制程序没有异常死锁。日志记录功能开启并且存储空间足够。现场使用与开发环境一致的软件版本和参数。这些检查项看似琐碎却是比赛能否正常发挥的关键。很多机器人并不是在算法环节失败而是因为一个松掉的螺丝、一个没充满的电池或一个碰撞后的传感器偏移。6. 从机器人运动会到工程落地开发者可以参考的路径6.1 不要一开始就追求“跑得快”看到天工 Omni 的 45.66 秒成绩后很多开发者会想立刻跑通一套跑步控制。更好的路径是先建立最小验证环境在仿真软件中搭建一个双足机器人模型让它先学会站立再学会行走最后加入跑步步态。常见工具包括 MuJoCo、PyBullet、Isaac Gym 等。安装仿真环境后可以先写一个简单的脚本来读取关节状态并绘制曲线pip install mujoco pandas matplotlib下面是一个简单的日志分析示例假设机器人控制系统把关节位置写入了 CSV 文件import pandas as pd import matplotlib.pyplot as plt log pd.read_csv(run_log.csv) plt.plot(log[time], log[left_hip_pitch], labelleft_hip_pitch) plt.plot(log[time], log[right_hip_pitch], labelright_hip_pitch) plt.xlabel(time (s)) plt.ylabel(joint position (rad)) plt.legend() plt.grid(True) plt.show()这种分析看似简单但能快速发现左右腿是否对称、步态周期是否稳定、关节位置是否有明显饱和或突变。日志回放能力是后续所有控制算法调试的基础。6.2 仿真训练、真机验证和比赛/生产要形成闭环人形机器人跑步不是“仿真放一遍真机就复现”的过程。更可靠的做法是持续迭代在仿真中训练策略覆盖不同摩擦、质心、负载和延迟。把策略导出到真机控制器在小范围内验证。将真机运行日志导入仿真环境复现异常场景。根据复现结果调整参数或重新训练。再进行下一轮真机验证。这种闭环要依赖高质量日志。如果日志数据不完整异常很难定位。建议至少记录传感器原始数据、状态估计结果、控制指令、目标步态参数、电机电流、事件告警和系统时间戳。6.3 最容易忽略的工程点结合人形机器人项目的常见情况有几点容易被忽略坐标系对齐IMU 方向、关节正方向、视觉坐标系如果不一致状态估计会出错。通信时钟同步不同传感器和控制器的时钟如果不同步融合结果会产生额外延迟。策略训练中的奖励函数不要让机器人为了“跑得快”而做出异常动作要惩罚摔倒、打滑、过大冲击和偏航误差。仿真随机化范围摩擦系数和电机延迟不能只取固定值否则真机泛化能力很差。安全机制即使比赛算法不强也必须保留急停开关和电流/温度保护避免损坏硬件。6.4 后续学习路线清单如果想把这类技术吃透推荐按照下面的路线逐步推进先学习机器人学基础刚体动力学、运动学、雅可比矩阵。再学习双足控制方法倒立摆模型、ZMP 稳定、模型预测控制、全身控制。然后学习强化学习在机器人运动控制中的应用重点理解奖励设计和仿真随机化。接着学习实时系统和嵌入式开发理解 RTOS、线程优先级、CAN 总线通信。最后参与一个开源双足项目在真实硬件上调试步态。这条路线不短但比直接复现一场比赛更有价值。45.66 秒的成绩是结果而支撑这个结果的运动控制、软件架构、芯片选型和工程调参能力才是真正值得长期积累的部分。对于开发者来说先跑稳一条直线再逐步挑战弯道和长距离会比一开始就追求“更快”更可靠。