资讯动态

具身智能进阶:让 MicroDuck 自己学会荡秋千

发布时间:2026/10/23 5:05:25 来源:尧图企业网站定制
前置知识已阅读 HelloWorld 解读。本文深入解读摆动旋转Swing任务——MicroDuck 坐在两根软绳悬挂的摆座上从静止出发只靠自己的身体动作把摆幅越荡越大。一、整体流程概览这个 Notebook 演示了**摆动旋转Swing**任务。和之前让机器狗走路不同这次机器狗坐在一个由两根软绳悬挂的摆座上像一只坐在秋千上的鸭子从最低点静止出发靠自己的身体动作把秋千越荡越高。环境配置 → 加载策略模型 → 创建仿真 → 泵摆演示 → ONNX 验证 → BPU 部署通俗理解就像教一只坐在秋千上的机器狗学会靠自己泵起来越荡越高。先看实际效果图 1使用公开alpha050.pt在本地导出得到的 36 秒 rollout 关键帧。它展示的是从静止开始主动泵摆不是外部给摆座施加初始冲量。图 2本地导出视频的六个时间点抽帧。可以观察到机器狗如何通过身体伸展和收缩来给秋千加油。图 3两根独立软绳和保留座椅结构。注意绳子只能受拉不能把绷直和压缩都当作合法约束——这是任务的核心物理约束。二、这个任务到底难在哪里2.1 为什么不是按固定节奏蹬腿摆座本身是一个会摆动的动力学系统。鸭子一开始位于最低点速度和角度都接近零。如果策略只输出一个固定的周期动作——比如每隔 0.5 秒蹬一次腿——动作的相位很快就会和摆座的实际运动错开。打个比方想象你坐在秋千上闭着眼睛胡乱蹬腿。有时候你往前蹬的时候秋千正在往前荡这一下给了秋千额外的能量但更多时候你往前蹬的时候秋千正在往回摆这一下反而把秋千刹住了。结果就是秋千不会越荡越高反而会停下来。机器鸭要学的是在每个控制周期每秒 50 次实时回答一个闭环问题当前摆座正在向哪边运动我的身体应该提前伸展还是收缩哪一组腿部和头部动作能把身体重心的运动投影到摆动方向而不把能量泄露到横向和偏航方向2.2 绳子的物理约束另一个关键难点绳子只能受拉不能受压。你可以用绳子去拉一个东西但不能用绳子去推一个东西。这意味着当绳子绷直时它能传递力让摆座沿着弧线运动当绳子松弛时它不传递任何力摆座处于自由落体状态策略不能让绳子压缩来产生推力也不能让绳子过度拉伸。它必须在绳子始终处于合法张力范围的约束下找到泵摆的方式。2.3 没有秋千角度传感器公开实现明确把精确的绳长、座椅状态和几何量留给 critic 与评估器actor 主要依靠本体感觉也就是身体自己的传感器来完成判断。也就是说鸭子并不知道秋千现在摆到了 30 度它只能通过自己身体的陀螺仪、加速度计、关节角度等信息去推断当前的摆动状态。三、任务架构谁在控制谁在评估3.1 Actor演员——真正控制动作的神经网络Actor就是最终部署到机器鸭身上的神经网络负责把传感器数据变成关节动作。传感器数据61 维 → Actor 神经网络 → 关节动作14 维输入61 维包含什么输入组通俗解释基座角速度鸭子身体现在转得多快就像陀螺仪告诉你你在旋转投影重力重力方向在鸭子身体坐标系里的投影让鸭子知道哪边是下14 个关节位置两条腿和头部的每个关节现在在什么角度14 个关节速度每个关节转得多快上一时刻动作刚才给了什么指令让策略知道自己刚才做了什么速度/头部/身体命令想让鸭子往前跑、转弯还是做什么保持与 MicroDuck 既有控制接口一致输出14 维是什么14 个关节的目标位置。MicroDuck 每条腿有 7 个可控关节髋关节 3 个 膝关节 1 个 踝关节 3 个两条腿共 14 个。关键问题Actor 看不到秋千角度怎么知道该什么时候蹬腿秋千的运动不会以swing_angle 30°这种特权信息直接出现但会通过以下方式间接体现基座角速度秋千往前荡时身体会感觉到向前的旋转重力方向秋千倾斜时下的方向在身体坐标系里会偏移关节响应腿在蹬伸时如果秋千正在同方向运动关节会感觉更轻策略在时间上连续运行每秒 50 次就能从这些信号中推断自己处于上摆、过顶还是下摆阶段从而在正确的时机做出动作。3.2 Critic评论家——训练时的辅助评估者Critic是训练时用来帮 Actor 学习的辅助神经网络。训练结束后Critic 就被扔掉了只保留 Actor。传感器数据61 维 特权信息7 维 → Critic 神经网络 → 价值评估Critic 的输入比 Actor 多了 7 维这多出来的就是特权信息秋千的精确摆角绳子的精确长度秋千的精确能量但是这些信息只在训练时用真正部署到真实机器鸭上时Critic 就不存在了。这叫asymmetric actor-critic非对称演员-评论家Actor 只能用真实传感器能拿到的数据Critic 可以用上帝视角数据来更准确地评估这个动作好不好打个比方就像学开车教练Critic能看到车速、转速、油耗、轮胎磨损但司机Actor只能看仪表盘。教练根据更多信息判断你刚才换挡换得好不好但司机要学会只靠仪表盘就能开好车。一个常见误读critic 能看到绳长不等于鸭子的策略在真机上装了一个理想绳长传感器。导出的 ONNX 只应使用 actor 的 61 维输入。3.3 训练链路全景摆座与两根软绳的 MuJoCo 动力学关节位置/速度 IMU 重力角速度61 维 actor observationPPO actor512-256-128 ELU14 维关节位置动作50 Hz精确摆座状态绳长/对齐/侧向/能量privileged critic68 维 observation奖励与物理有效性门控PPO 更新图 1训练链路。actor 负责最终部署动作critic 可以在训练时使用更多仿真状态但这些特权状态不能进入部署 ONNX。四、自己泵摆是怎样学出来的机器鸭学到的不是一个按固定相位摆腿的动画而是一个把本体感觉和接触动力学闭环起来的泵摆控制器。这个行为可以拆成三个层次理解4.1 能量注入——怎么给秋千加油身体和腿在摆动的特定相位发生伸展/收缩把关节运动转化为摆座沿弧线方向的有效能量。打个比方在秋千往上荡的时候鸭子伸展身体把重心往外推增加势能就像你站起来在秋千往下荡的时候鸭子收缩身体减少阻力就像你蹲下去这样每次都能偷一点能量进去秋千越荡越高4.2 方向约束——怎么让秋千只在前后荡奖励函数鼓励前后摆动像荡秋千一样却惩罚左右晃动像扭秧歌一样和身体旋转像转圈一样。具体来说奖励会惩罚横向位移左右偏移横向速度左右甩的速度滚转/偏航角速度身体绕纵轴旋转挂点不对齐绳子系点和理想位置的偏差这样鸭子学会的是前后荡而不是乱晃。4.3 物理边界——不能靠耍赖来解决问题当出现以下情况时策略不能靠快速 reset重置来逃避问题软绳松弛失去张力过度拉伸超过绳子的物理极限身体脱离摆座几何鸭子从座位上飞出去出现 NaN数值计算崩溃结果换初始噪声或执行器参数后动作相位仍然要能在反馈中自行修正。策略必须真正学会泵摆而不是找到一个漏洞来刷分。五、奖励设计不是角度越大越好公开配置里最重要的奖励项不是单独的角度越大越好而是一组同时生效的目标类别代表项通俗解释进度swing_peak_progress如果你荡到了新的高度加分。防止你只在低幅度来回晃那样虽然安全但没进步高度/能量swing_height、swing_late_height、swing_energy让你在整个 36 秒内都保持高摆幅而不是前几秒冲高后就失控平面约束swing_lateral、swing_lateral_velocity、swing_out_of_plane_angular_velocity让你保持在前后摆动的平面内不要左右晃机构约束swing_alignment、string_slack、string_extension_barrier让挂点绳子系在秋千上的点对齐绳子不要松垮垮或拉太长控制平滑action_rate_l2、joint_torques_l2、关节限位不要靠高频抖动来换角度像抽搐一样动作要平滑评估时还要检查完整时域是否跑完36 秒内有没有中途 reset绳长是否越过几何包络绳子有没有松掉或拉断侧向位移是否受控有没有左右乱甩BAM 执行器电压/电流/扭矩是否在安全范围内电机有没有过载六、公开策略的真实指标视频里的数字是怎么回事6.1 测试方法使用固定源码版本https://github.com/Vottivott/microduck-playground commit: c5fcc50219fef01ac9931d0079c583ccbb29b689对应的alpha050策略在 100 个不同的随机种子上各跑 36 秒。6.2 真实数据指标数值通俗解释随机评估100 个 seed × 36 秒用 100 个不同的初始条件测试严格完整时域通过71/10071 个种子完整跑完 36 秒没有中途 reset无几何债务通过73/10073 个种子没有出现绳子松弛、拉伸过度等问题峰峰摆幅中位数163.03°一半以上的种子能荡到 163° 以上最好严格 rolloutseed 27173.20°最好的单次摆幅是 173.2°seed 27 最大横向位移10.35 mm横向偏移只有 1 厘米说明摆动很正6.3 视频里的2717.8°是怎么回事视频中出现的60 s、7 圈、2717.8°是累计角度的展示指标不是单次摆幅。打个比方累计角度就像计步器你今天走了 2 万步这是把所有步数加起来峰峰摆幅就像单次步幅你一步能跨多远2717.8° 是把 60 秒内每次摆动的角度不断累加的结果适合做展示但不等于摆座一直处于一个合法的 360° 环形运动。公开选择策略的严格峰峰摆幅只有约173.2°。后来某次 60 秒回放达到 180.2°但离开了准确几何包络绳子超出了合理范围因此不能把它当作通过物理门控的正式结果。七、关键参数速查表参数值含义策略频率50 Hz每秒做 50 次决策仿真频率—MuJoCo 物理引擎推进频率关节数14MicroDuck 有 14 个可控关节Actor 输入维度61本体感觉传感器数据Critic 输入维度68本体感觉 特权信息网络结构512-256-128 ELU三层全连接网络评估时长36 秒每次 rollout 的时间BPU 推理可选需要 RDK 开发板总结摆动旋转任务的核心不是按固定节奏蹬腿而是根据身体感觉实时调整动作让秋千越荡越高。它展示了强化学习如何让机器人在复杂动力学约束下学会从本体感觉推断环境状态并做出最优决策。附原始 Notebook 参考04_摆动旋转_ONNX_BPU_MuJoCo.ipynb— 在 GitHub 上查看原始 Notebook可对照代码逐行学习。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑