当脚陷进地里:腿足机器人在细沙与光滑鹅卵石上的运动问题

一、问题现象
腿足机器人在硬地、草地、台阶上已经能走得很稳,但到了细沙或铺满光滑小鹅卵石的地面,表现会明显变差。支撑脚一踩就往下陷,基座高度跟着下降。抬脚时脚被颗粒"咬住",摆动腿拖地、绊脚。向后蹬地时地面不给力,脚往后滑,速度跟踪严重偏离指令,连续几步后失稳摔倒。一个在 Isaac Lab 里训练、刚性地形上表现良好的 RL policy,到了这种地面往往直接失效。
二、为什么会这样
颗粒介质不等于"硬地加低摩擦"。 沙子和小石子受力小时像固体,超过屈服强度后像流体。描述脚与颗粒相互作用,常用 RFT(阻力理论):足面上每一小块受到的力,只取决于它的埋深、朝向和运动方向。粗略写成 σ ≈ α·|z|,即阻力大致与埋深成正比。所以脚必须沉到一定深度,累积的阻力才撑得住体重和冲击。在颗粒地面上,下沉不是异常,而是地面产生支撑力的方式本身。
仿真的刚性接触假设与此根本冲突。 PhysX 默认是刚体接触加库仑摩擦,脚一碰到地面就立刻获得足够的支撑。训练时随机化摩擦系数、恢复系数、地形高度,改变的只是参数,改变不了"支撑是瞬时的"这个结构性假设。policy 从没见过"踩下去、地面在退让"的动力学,真实部署时它对下沉的第一反应往往是错的。
光滑鹅卵石还有额外难点。 圆润颗粒内摩擦角低,容易滚动,抗剪能力比棱角沙更差,打滑往往比下沉更突出。粒径接近脚的尺度时,每一步的接触离散性很强,力的波动大。如果只是薄薄一层铺在硬底上,受力大致介于两种极限之间:刚性地面的库仑摩擦,和深层颗粒的 RFT。
问题还会传到状态估计。 腿式里程计假设支撑脚静止,软地面上这个假设不成立,实验显示状态估计的漂移明显大于刚性地面。如果 policy 的观测里含估计线速度,输入本身就是偏的。
三、可行的解决思路
思路一:在仿真中引入颗粒接触模型
这一步决定方案的上限。做法是在 Isaac Lab 里实现逐足端的 3D RFT 外力:
- 在颗粒地块上关闭脚与地面的刚体碰撞。
- 在脚底 mesh 上撒几十个采样点。
- 每个仿真步计算每个点的埋深、面元法向和速度方向,查 RFT 系数得到局部应力,乘以面积后求和,得到合力与合力矩。
- 通过 external force/torque 接口施加到脚部刚体上。
- 训练时随机化 α 缩放系数、摩擦和颗粒层厚度,范围覆盖细沙到鹅卵石。
这条路线已有验证。Kamohara 等(2026)把 3D RFT 集成进 IsaacLab,Unitree G1 在玄武岩、干沙和海滩沙上实测,最高跑到 2.5 m/s。KAIST 的 Raibo 用自研颗粒模型训练,支撑相脚完全埋进沙里,仍能以 3.03 m/s 奔跑。
实现时注意两点。第一,RFT 是准静态模型,跑跳时冲击速度大,需要补一个与速度相关的惯性项。第二,人形的大脚板上反力并不均匀,采样点要覆盖整个脚底,不能只算一个接触点。模型写好后,可以用 Newton 的 MPM 离线交叉验证(它支持颗粒与关节刚体双向耦合),不放进训练循环。
思路二:地形自适应策略
即使仿真模型准确,真实地面的参数仍是未知且会变化的,policy 需要边走边辨识。结构上用 teacher-student:
- Teacher:观测特权地形参数(α 缩放、摩擦、层厚)。
- Student:只用约 0.5 到 1 秒的本体历史(关节位置、速度、力矩、上一步动作),编码出地形 latent,监督目标是 teacher 的地形编码。
下沉在本体信号里是可观测的:同样的关节指令下,膝关节力矩建立得更慢,足端相对基座持续下移。
奖励设计要避免把刚性地面的习惯写死:
- 抬脚高度不设固定目标,只惩罚摆动相足端的水平拖曳速度。
- 基座高度奖励留出下沉容差。
- 适当加大力矩与能耗惩罚,防止 policy 靠暴力蹬地"挖坑"前进。
思路三:足端硬件改造
这是成本最低、见效最直接的一步。增大接触面积能直接降低压强和下沉量。SpaceBok 实验中,每只脚约 110 cm² 的面积,就把下沉控制在了可接受范围;加上抓地齿后,牵引力提升 22% 到 66%。对平足人形,可以设计可拆卸的加大底板,底部加浅齿。
但细沙和鹅卵石的需求可能冲突:有研究中的两段式脚在沙地上表现差,在鹅卵石上反而优于其他设计。另外,改脚后必须同步更新仿真里的脚部几何和质量,否则等于重新引入 sim-to-real gap。
思路四:放宽状态估计假设
有两种做法。一是把支撑脚速度的噪声协方差与地形 latent 挂钩,软地面上降低对腿式里程计的信任。二是 policy 不观测估计线速度,只依赖本体历史。第二种改动更小,在颗粒地面上通常也更稳。
