论文精读:SOLO——从清晰地形边缘到 1.5 km 长时程人形机器人运动

论文信息

  • 题目:SOLO: Stable Omni-terrain Long-Horizon Perceptive Humanoid Locomotion
  • 作者:Pihai Sun、Gang Han、Jingkai Sun 等
  • 版本:arXiv v2,2026 年 8 月 31 日
  • 论文:arXiv:2608.26583
  • 项目页:SOLO Project Page
  • 机器人:Omni humanoid,25 个策略控制关节
  • 关键词:Query Reconstructor、TA-MSE、Teacher–Student、Perceptive Humanoid Locomotion、Long Horizon
先说我的结论 SOLO 的贡献不是让机器人“偶尔跨过一个更难的障碍”,而是同时减少感知端的局部几何损失和控制端的长期行为偏移,让一次尚可接受的小误差不容易在后续数百、数千步里滚成摔倒。

本文的三个动态图均在浏览器本地运行,不加载第三方绘图库。动画用于解释机制;带有论文数字的图会明确标注数据口径。系统开启“减少动态效果”时,页面自动保留静态状态。

0. 一张图先看清 SOLO 在修什么

传统感知运动链条里有两个容易被忽略的“慢性误差源”:

深度历史

共享向量 → 一次性解码整张高度图
↓ 局部尖锐边缘被平滑
Student 当前动作 ≈ Teacher 当前动作
↓ 只约束眼前,不问这个动作把下一状态带到哪里
未来状态逐渐偏离 → 后续观测与动作更难匹配 → 长时程跌倒

SOLO 在两个位置分别动刀:

问题 常见做法 SOLO 的修改 直接服务的场景
地形边缘被抹平 共享 latent 一次解码整张图 每个网格单元用自己的 Fourier query 检索传感器 token 台阶边缘、窄踏石、坑边、平台边缘
当前动作看似相近,未来却越走越偏 只做同一时刻的 action MSE 把下一状态的师生分歧加到当前 transition reward 连续地形切换、长距离无重置行走
训练与部署输入不一致 Teacher 永远吃特权高度图 最后阶段接入 QR,并在 Student 自己的 on-policy 数据上更新 深度噪声、延迟、遮挡下的 Sim-to-Real

关键是二者互补:QR 减少“看错地形”,TA-MSE 减少“这一步暂时没错、但把未来带坏”。

1. 长时程不是把单个障碍重复很多次

如果一个 5 m 测试段成功率为 pp,不能简单认为 1.5 km 的成功率就是 p300p^{300}:真实路线的地形、速度、恢复机会并不独立同分布。这个算式不适合预测论文结果,却揭示了一个工程事实:

只要失败风险会沿闭环积累,短测试中看不明显的小差距,在长距离中就会变得重要。

人形机器人每一步都同时改变三件事:

  1. 下一次相机的视角;
  2. 下一时刻的身体状态与落脚可达域;
  3. Student 接下来将访问的状态分布。

所以“感知误差”和“控制误差”不是两条互不相干的链。脚踩偏一点会让机身姿态改变,姿态改变又会让下一帧深度更难解释。这正是论文用 long-horizon fragility 描述的问题。

2. 输入、输出与部署边界

Teacher 观察为

otT=(mt,vt,pt),o_t^T=(m_t,v_t,p_t),

其中 mtm_t 是特权高度图,vtv_t 是真值基座速度,ptp_t 是 84 维本体与命令信息:

pt=[ωtb,gtb,ct,qt,q˙t,at1]R84.p_t=[\omega_t^b,g_t^b,c_t,q_t,\dot q_t,a_{t-1}]\in\mathbb R^{84}.

Student 看不到 mtm_t 与真值 vtv_t,只使用深度历史与本体历史。部署时的数据形状是:

信号 设置 作用
胸前深度相机 RealSense D455;原始 640×480640\times480,网络输入 113×64113\times64 提供自我中心局部几何
深度历史 4 帧,stride 4 用时间差辅助几何和运动估计
本体历史 84 维 × 10 帧 在视觉退化时保留身体动态线索
QR 输出 16×3216\times32 高度图 + 3-DoF 基座速度 给 Student 一个显式、紧凑的运动相关表示
Policy 输出 25 维默认关节位置偏移 控制双腿、腰部与双臂
控制频率 50 Hz 每 20 ms 产生一次策略动作

这里的“无外部定位”容易被误读。它表示真机部署不使用 motion capture、外部里程计或外部地图;并不表示系统没有 IMU、本体状态估计和相机输入。

3. Query Reconstructor:为什么“每个格子自己提问”会更清楚

3.1 Dense decoder 的共享瓶颈

传统重建器常把整段深度历史压成一个共享 latent,再把 latent 上采样成整张高度图。大坡面很容易重建,因为它主要是低频结构;台阶竖直边缘、踏石边界和窄坑则属于高频细节,很容易在压缩和上采样中被平均掉。

对于 locomotion,这不是普通的视觉模糊。高度差若刚好落在脚掌边缘,几厘米误差就可能把“完整支撑”改成“跨边支撑”。

3.2 QR 的数据流

SOLO 先把每帧深度变成视觉 token,再把同一时刻的本体特征与时间编码加入 memory:

4 帧 depth ─→ ResNet ─→ visual tokens ┐
├─→ Transformer memory M_t
10 帧 proprio ─→ MLP + time embedding ┘

平面网格坐标 (x_i, y_i)
↓ 12 个 Fourier 频率
cell query q_i ──cross attention──→ M_t ─→ 单格高度 ĥ_i

单独的 velocity query ─────────────→ M_t ─→ v̂_t

网格共有

N=GxGy=16×32=512N=G_xG_y=16\times32=512

个单元。第 ii 个 query 带着自己的空间坐标去 memory 中寻找相关证据,而不是让一个共享向量同时记住 512 个位置的所有细节。

动态图 1 · QUERY RECONSTRUCTOR

同一段地形:共享平滑与逐格查询的差别

真值地形、共享解码器平滑结果与逐格查询重建结果的动态比较。

这张动画是机制示意,不是论文数据复刻。它强调的是:QR 不是凭空获得更多传感器信息,而是改变“哪里用哪些证据”的读取方式,让不同网格不必竞争同一个过度压缩的全局表示。

3.3 重建目标和训练位置

QR 同时监督高度与基座速度:

Lrec=λh1Ni=1Nh^ihiGT+λvv^tvtGT1.\mathcal L_{\mathrm{rec}} = \lambda_h\frac{1}{N}\sum_{i=1}^{N}\left|\hat h_i-h_i^{GT}\right| + \lambda_v\left\|\hat v_t-v_t^{GT}\right\|_1.

第三阶段里,QR 在“已经接入 QR 的 Student”产生的 on-policy buffer 上继续训练。策略读取的是停止梯度后的 QR 预测,因此策略 loss 不会借道修改 QR。这个细节非常实用:

  • QR 学的是 Student 真正会访问的相机视角;
  • 策略不能通过扭曲地图来投机降低控制 loss;
  • 感知与控制的数据分布联合变化,但优化目标保持解耦。

4. TA-MSE:为什么同一时刻动作接近还不够

普通蒸馏在 Student 自己访问的状态上,最小化

Laux(θ)=Et[μθ(htS)μT(otT)22].\mathcal L_{\mathrm{aux}}(\theta) = \mathbb E_t\left[ \left\|\mu_\theta(h_t^S)-\mu_T(o_t^T)\right\|_2^2 \right].

它只回答:“在当前状态,两者动作有多像?”
它没有回答:“Student 刚才那个动作,把系统带到的下一状态是否仍容易被 Teacher 接管?”

SOLO 先在下一状态计算师生分歧,并停止梯度:

ˉt+1=sg(μθ(ht+1S)μT(ot+1T)22),\bar\ell_{t+1} = \operatorname{sg}\left( \left\|\mu_\theta(h_{t+1}^S)-\mu_T(o_{t+1}^T)\right\|_2^2 \right),

再把它接到前一个 transition:

rtTA=rttaskβˉt+1.r_t^{TA}=r_t^{task}-\beta\bar\ell_{t+1}.

这就是论文所谓“trajectory-aware”的最小改动。奖励本身只向前看一步,但 PPO 的 GAE 会把后续分歧继续向更早动作传播。对应的模仿回报可以写成:

Gtimit=βk=t+1TRγkt1sg[ˉk].G_t^{imit} = -\beta\sum_{k=t+1}^{T_R} \gamma^{k-t-1}\operatorname{sg}[\bar\ell_k].

动态图 2 · TEMPORAL CREDIT

未来第几步的分歧,会怎样回到当前动作

普通动作 MSE 与 TA-MSE 时序信用分配的动态比较。

4.1 为什么要停止梯度

如果不做 sg\operatorname{sg},同一个分歧既作为监督 loss 又沿 reward 路径参与策略梯度,优化含义会变得混乱。停止梯度后:

  • 当前状态的 action MSE 仍负责直接模仿;
  • 分歧数值只被当成环境返回的代价;
  • PPO/GAE 负责把这项代价分配给此前动作。

完整目标为

maxθJPPO(θ;rTA)λLaux(θ).\max_\theta \mathcal J_{\mathrm{PPO}}(\theta;r^{TA}) -\lambda\mathcal L_{\mathrm{aux}}(\theta).

因此三个 baseline 的区别非常清楚:

方法 当前动作 MSE 下一状态分歧 reward PPO task reward
PPO
MSE + PPO
TA-MSE

TA-MSE 没有增加新 critic、显式动力学模型或额外 Teacher rollout。Teacher 只在 Student rollout 已访问的状态上提供标签。

5. 三阶段训练:每一步在消除什么分布差

阶段 Terrain 输入 Policy 初始化 优化目标 解决的问题
I. Teacher 特权真值高度图 + 真值速度 从零 AMP 正则化 PPO 先获得稳定、自然的全地形技能
II. Privileged distillation 仍用特权地形 迁移形状兼容的 AME 权重;LSTM 与 action head 随机 TA-MSE + PPO 让 Student 在自己的轨迹上接近 Teacher
III. QR fine-tuning QR 预测高度图 + 速度 继承阶段 II Policy 继续 TA-MSE;QR 用 on-policy 重建 loss 对齐仿真部署输入与实际访问视角

部署时只保留

Depth + proprioception → QR → Student policy → joint targets

Teacher、privileged critic、AMP discriminator 和真值标签全部删除。

5.1 网络与训练预算

  • Teacher action MLP:[256,256,128][256,256,128]
  • Student action MLP:[512,256,128][512,256,128]
  • Student 本体旁路:单层 LSTM,input 84、hidden 128;
  • QR:dmodel=64d_{\mathrm{model}}=64、8 heads、4 层 memory self-attention、2 层 cross-attention;
  • QR 参数量:0.54 M;
  • 训练使用 4 张 H800;
  • Teacher:4096 env/GPU,50k iterations,约 90 h;
  • 特权蒸馏:4096 env/GPU,20k iterations,约 64 h;
  • QR fine-tuning:2048 env/GPU,5k iterations,约 20 h。

这说明方法虽然部署端很轻,但完整训练并不轻量。复现时最合理的顺序不是直接申请四卡跑满,而是先在小规模地形上验证:

  1. cell query 是否真的比 dense decoder 保住边缘;
  2. TA reward 的索引有没有错一位;
  3. Student rollout 上的 Teacher label 与 done mask 是否对齐;
  4. QR 输入延迟与相机历史是否和部署一致。

6. 公式究竟服务到哪段代码

把它映射到 rsl_rl/legged_gym 风格的训练循环,最关键的是 transition 对齐:

for t in range(num_steps_per_env):
action_t = student.act(student_obs_t)
teacher_action_t = teacher.act(privileged_obs_t)

next_obs, task_reward_t, done_t = env.step(action_t)

with torch.no_grad():
next_student_action = student.mean(next_obs.student)
next_teacher_action = teacher.mean(next_obs.privileged)
next_disagreement = mse(next_student_action, next_teacher_action)

reward_t = task_reward_t - beta * next_disagreement

storage.add(
obs=student_obs_t,
action=action_t,
reward=reward_t,
done=done_t,
teacher_action=teacher_action_t,
)

advantages = compute_gae(storage.rewards, storage.values, storage.dones)
loss = ppo_loss(advantages) + lambda_aux * action_mse(student, teacher)

上面是概念伪代码,不是作者公开实现。它暴露出最容易写错的三处:

  • ˉt+1\bar\ell_{t+1} 必须挂到 rtr_t,不能挂到 rt+1r_{t+1}
  • terminal transition 需要正确 mask,避免把 reset 后新 episode 的分歧算回旧 episode;
  • 计算 disagreement 时不应让梯度穿过 reward 数据通路。

如果想继续追 storage → GAE → PPO update 的真实张量形状,可以接着看 从公式走进 rsl_rl 与 legged_gym 的 PPO 训练闭环

7. Reward 为什么也在强调“别踩边缘”

SOLO 的 task reward 并不只追踪速度。一个很能说明设计意图的项是 foothold gradient penalty:

redge=1[vxb>0]fFcf[0.7(dffront+dfrear)+0.3(dfleft+dfright)],r_{\mathrm{edge}} = \mathbf 1[v_x^b>0] \sum_{f\in\mathcal F}c_f \left[ 0.7(d_f^{front}+d_f^{rear}) +0.3(d_f^{left}+d_f^{right}) \right],

权重为 5-5。若脚下某方向的局部高度差跨过 5 cm 阈值,对应 dfs=1d_f^s=1。前后边缘比左右边缘权重更高。

这把 QR 和控制目标真正接了起来:

QR 保住高度不连续

Policy 看见落脚边缘

edge reward 告诉策略不要跨边支撑

减少 stumble 与后续姿态偏移

其他关键项还包括:腰/头触地终止 200-200、foot stumble 5-5、非足部接触、腾空、脚滑、接触力、动作变化率和能耗。这里的重点不是背权重,而是理解:更清楚的地图只有在 reward 或策略目标真正关心落脚几何时才有价值。

8. 地形课程和 Sim-to-Real

训练地形是 10×1710\times17 的程序化 curriculum 网格,每块 8×88\times8 m,水平分辨率 5 cm、竖直分辨率 5 mm。10 行增加难度,17 列覆盖不同地形族:

  • 上下楼梯共 35.3%,最高台阶 25 cm;
  • 上下坡共 11.8%;
  • 方台与坑共 11.8%;
  • 随机网格 5.9%;
  • 随机粗糙地面 11.8%;
  • gap 5.9%,宽度最大 50 cm;
  • stepping stones 11.8%,石块最窄 20 cm、间隙最大 30 cm。

随机化同时覆盖两类误差:

类别 例子
动力学 摩擦、腰部质量与 CoM、PD 增益、初始位姿、10–15 s 随机推扰
感知 本体噪声、相机外参、0–3 帧深度延迟、值/边缘噪声、缺失像素、盲区与模糊

值得注意的是,最高难度仿真 stress test 关闭了噪声和推扰,用来更干净地比较重建器;真实部署的鲁棒性则来自完整训练随机化与系统闭环。两类证据不能混为一张表。

9. 实验数字:哪些结果最能支持方法

9.1 高度重建

在难度 0.99 的 8 类地形上,平均高度 L1 为:

重建器 平均 L1(cm) Gap Random Grid Stones
START 7.59 10.11 5.18 14.76
DPL 9.26 10.62 8.09 12.75
QR 2.29 2.27 2.43 5.92

因此论文摘要中的“3.3–4.0 倍”来自 7.59/2.293.317.59/2.29\approx3.319.26/2.294.049.26/2.29\approx4.04。这不是“提升 330%–400%”,而是误差缩小到基线的大约 1/3.31/3.31/4.01/4.0

在参数量受控的离线比较里,QR 为 0.54 M 参数,平均 L1 2.98±0.072.98\pm0.07 cm、Edge F1@1 0.386±0.0080.386\pm0.008;DPL 为 0.78 M 参数,对应 4.36±0.104.36\pm0.10 cm 与 0.214±0.0040.214\pm0.004。QR 的优势不仅是平均高度,更明显地落在边缘质量上。

9.2 最高难度运动 stress test

每种地形 100 次 rollout、最长 30 s、通过 5 m 算成功;命令前进速度为 0.4–1.0 m/s,侧向和转向为零,并关闭噪声和推扰。

动态图 3 · REPORTED RESULTS

别只看均值:窄踏石才是重建器的压力点

SOLO QR、START 与 DPL 在最高难度地形上的成功率对比。

指标 START DPL SOLO / QR
八类地形平均成功率 75.0% 75.6% 97.5%
Stepping stones 3% 0% 96%
各方法最差地形 3% 0% 92%

楼梯上的 foot stumble 和 foothold-gradient 代价也全面降低;dense baselines 为 QR 的 1.78–10.83 倍。这比只看总 reward 更接近方法想解决的因果点:地图边缘更清楚,脚跨边支撑更少。

9.3 TA-MSE 的证据强度

主 curriculum 曲线中,TA-MSE 最终约到 5.5,MSE+PPO 约 5.1,纯 PPO 低于 5.0 且更震荡。附录的三随机种子、缩减算力对比中,level-9 stepping stones 为:

方法 成功率
MSE + PPO 72.66±5.1272.66\pm5.12%
TA-MSE 79.43±5.9779.43\pm5.97%

增量为 6.77±5.866.77\pm5.86 个百分点。简单/中等地形接近饱和,个别项目并非 TA-MSE 更高,例如 Down-25 中 TA-MSE 为 97.92%,MSE+PPO 为 100%。因此更稳妥的判断是:

TA-MSE 对“未来动作分歧会放大的难地形”最有帮助,但现有消融还不足以证明它在每种地形上都严格占优。

10. 真机结果:1.5 km 到底证明了什么

SOLO 使用胸前单目深度输入(D455 depth stream)和本体状态,zero-shot 部署完成:

  • 一次无重置、无人工扶持的连续 1.5 km 户外路线;
  • 自然楼梯、斜坡、草地过渡与不平地面;
  • 室内连续混合路线:上楼、踏石、45 cm gap、下楼、可移动障碍;
  • 七类隔离地形各 10 次:除踏石 9/10 外,其余均为 10/10,总计 69/70。

这组证据可以支持:

  1. 单深度相机 + 本体输入的完整系统具备很强的连续闭环稳定性;
  2. QR 与 Student 可以在 50 Hz 的板载预算里工作;
  3. 训练中的噪声、延迟与动力学随机化足以支撑有代表性的 zero-shot 真机迁移。

但它不能单独支持:

  • “任意 1.5 km 路线都能完成”:论文展示的是一条连续路线,不是多路线重复统计;
  • “已经自主导航”:平面速度命令由人给出,策略负责按命令稳定穿越;
  • “完全不依赖状态估计”:本体与重力方向仍是输入;
  • “仿真 97.5% 等于户外长程成功率”:前者是 5 m、30 s、关闭噪声的 stress test。

把展示、受控仿真和重复真机试验分开读,反而更能看到论文证据链的完整性。

11. 板载延迟为什么不是瓶颈

在 Jetson AGX Thor MAXN 上,TensorRT batch-1 推理为:

  • network inference:1.03±0.211.03\pm0.21 ms;
  • p95:1.59 ms;
  • 完整 pipeline:1.15±0.231.15\pm0.23 ms;
  • TensorRT engine:7.56 MB。

相对 50 Hz 的 20 ms 控制周期,网络本身余量很大。工程上的剩余风险更可能来自相机采集、帧同步、缓冲延迟、状态估计和控制通信,而不是一次 forward。

12. 我认为最值得复现的四个小实验

实验 A:只验证“边缘”,不要先训机器人

生成楼梯、窄平台和踏石高度图,构造同一批深度历史,比较 dense decoder 与 cell-query decoder:

  • overall height L1;
  • 靠近高度不连续处的 edge L1;
  • Edge F1;
  • 参数量与推理延迟。

如果 overall L1 接近而 Edge F1 明显不同,才能说明表示真的服务于落脚而非只提高平均像素分数。

实验 B:检查 TA reward 是否错位

做一个长度 8 的玩具 rollout,只在 t+5t+5 注入一次分歧,打印每个 transition 的 imitation return。它应该按 γ\gamma 向前衰减,并在 episode boundary 截断。本文动态图 2 就是这个单元测试的可视化版本。

实验 C:分开记录当前 MSE 与未来分歧

若 action MSE 持续下降但 next-state disagreement 不降,说明 Student 会在眼前模仿,却仍把系统带向 Teacher 难以纠正的状态。只记录合并后的 PPO reward 会掩盖这个问题。

实验 D:让重建误差与脚下事件对齐

按时间同步记录:

edge reconstruction error
foot contact position
foothold_grad_penalty
foot stumble
termination reason

然后检查“边缘误差升高 → 跨边支撑 → stumble/跌倒”是否真的存在。只有这条链成立,QR 的视觉指标才与运动收益形成闭环。

13. 与已有笔记的连接

SOLO 可以放进这条演进线:

鲁棒感知运动:视觉坏了时靠本体记忆与可信度

AME-1:用身体状态查询地形,隐式选择落脚区域

AME-2:局部 attention + 全局地形上下文 + 不确定性地图

SOLO:逐格查询保住尖锐边缘 + 时序分歧约束长程状态分布

SOLO 与 AME 系列都使用 attention,但 query 的语义不同:

方法 谁发出 query 想回答的问题
AME-1 本体状态 当前身体状态下,地图哪些位置与动作最相关?
AME-2 本体 + 全局地形上下文 当前整体地形中,哪些局部区域最值得关注?
SOLO QR 每个高度图单元的空间坐标 传感器历史中,哪些证据能重建我这个格子的高度?

一个是为 policy 选信息,一个是为 reconstructor 恢复空间位置,不能因为都有 cross-attention 就视为同一模块。

14. 局限与我仍然想追问的地方

论文明确列出的边界包括:

  1. 仍是 2.5D 高度图,每个 (x,y)(x,y) 只能表达一个地面高度;
  2. 胸前前视相机存在后方盲区;
  3. 透明、反光表面会破坏深度;
  4. 目前依赖人工速度命令,没有自主路径规划;
  5. 更长记忆、体素表示或互补传感器仍是后续方向。

此外,我会保留四个判断:

  • 1.5 km 很有说服力,但仍是一条路线的一次连续系统展示;
  • 跨论文 long-horizon 对比涉及不同机器人、路线与协议,只适合提供背景;
  • 4 张 H800、约 174 h 的三阶段训练成本不低;
  • 截至本文整理时,论文和项目页没有给出公开代码入口,因此本文伪代码只表达算法索引,不能替代作者实现。

15. 最后的理解

SOLO 最让我受用的地方,是它把“长期稳定”拆成两个非常具体的局部问题:

空间上,不要让一张共享表示抹掉脚真正关心的边缘;时间上,不要只问当前动作像不像 Teacher,还要问它把未来带到了哪里。

QR 并没有解决所有深度感知问题,TA-MSE 也没有变成完整的轨迹模型。两者都选择了相对小、容易接入现有 teacher–student PPO 系统的改动:

per-cell query → 少丢一点动作关键几何
next-state disagreement → 早一点惩罚会导致未来偏离的动作
on-policy QR fine-tuning → 让感知器适应 Student 真正看到的视角

当单步误差不能完全消灭时,长时程系统更现实的目标就是:让误差更少发生、发生后更难积累,并尽快回到 Teacher 熟悉的状态分布。SOLO 的 1.5 km 展示,正是这套思路在完整真机闭环中的一次强证据。

参考资料

  1. Sun, P., Han, G., Sun, J., et al. SOLO: Stable Omni-terrain Long-Horizon Perceptive Humanoid Locomotion. arXiv:2608.26583v2, 2026.
  2. SOLO authors. SOLO Project Page. 2026.
  3. Peng, X. B., et al. AMP: Adversarial Motion Priors for Stylized Physics-Based Character Control. ACM TOG, 2021.
3d打印 actor-critic adaptive sampling ai辅助设计 algorithm algorithms anymal apriltag ardupilot atlas attention axis-angle bang-bang belief encoder blender bode cadquery calibration camera calibration chrome cmake cmakelists cnn colcon conan control cpp cpu d435i dagger data_struct db depth camera design-pattern direct collocation dots economics eigen elevation map factory-pattern fcpx fiducial marker figure finance forge fourier fov freecad gae gazebo gdb git gnu gru guitar hardware humanoid ibus imu interest isaac gym isaac lab isaaclab kdl laplace latent variable latex launch learning-notes legged locomotion legged robotics legged-robot legged_gym life linux linux-kernel mac math matlab matrix memory mlp money motion imitation motion-control motor moveit mpc mujoco music-theory network neural mapping ocs2 ode openscad operator optimal algorithm optimal-control perceptive locomotion perf performance personal-finance piano pixhawk pixhawk 6c policy distillation ppo privileged learning profiling px4 python qgroundcontrol qos quadrotor realsense reinforcement learning representation learning reward tuning rnn robot robot parkour robotics ros ros2 rsl_rl rtb security shell signal-processing sim-to-real simulation socket soft dynamics constraints spot stairs stl stm32 tcp-ip teacher policy teacher student teacher-student temporal convolution terrain reconstruction thread tools tron1 twist ubuntu uml uncertainty unitree unitree g1 urdf vae valgrind vcxsrv velocity vim web wifi wiring work workflow wsl z-transform zero-shot transfer 中文输入 交叉编译 人形机器人 依赖管理 分支管理 四旋翼 四足机器人 实验诊断 强化学习 机器人 机器人控制 机器人视觉 构建系统 深度学习 深度相机 点云 版本控制 神经网络 自主回充 航模 视觉定位 训练曲线 足式机器人 输入法 配置类 采购记录 音乐 飞控
知识共享许可协议