AMOAdaptive Motion Optimization是 UC San Diego 发表于RSS 2025的研究项目用于超灵巧人形机器人全身控制。它结合了强化学习RL与轨迹优化TO实现实时自适应的全身运动控制主要针对Unitree G1机器人29自由度进行验证。开源地址https://github.com/OpenTeleVision/AMO论文地址AMO: Adaptive Motion Optimization for Hyper-Dexterous Humanoid Whole-Body Control示例效果1示例效果21、获取代码首先下载代码git clone https://github.com/OpenTeleVision/AMO.git进入代码目录中cd AMO2、搭建环境依次执行下面三条指令conda create -n amo python3.8 conda activate amo pip install -r requirements.txt顺利的话就成功啦【问题】新的显卡需要CUDA版本更高如果是比较新的显卡比如50系列需要安装CUDA版本比较新的才能正常使用比如cuda12.8以上的版本pip install --upgrade torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128然后检查当前 PyTorch 版本是否正常python -c import torch; print(torch.__version__); print(torch.version.cuda)比如成功输出2.11.0cu12812.83、运行推理python play_amo.py看到可视化窗口【问题】torch.load 加载权重问题问题是torch.load的weights_only参数默认值从 PyTorch 2.6 起改为True而adapter_norm_stats.pt文件包含numpy.core.multiarray._reconstruct对象不在默认安全列表中。报错信息Traceback (most recent call last): File /home/liguopu/lgp_dev/project/AMO/play_amo.py, line 350, in module env HumanoidEnv(policy_jitpolicy_jit, robot_typerobot, devicedevice) File /home/liguopu/lgp_dev/project/AMO/play_amo.py, line 217, in __init__ norm_stats torch.load(adapter_norm_stats.pt) File /home/liguopu/.holosoma_deps/miniconda3/envs/hsmujoco/lib/python3.10/site-packages/torch/serialization.py, line 1578, in load raise pickle.UnpicklingError(_get_wo_message(str(e))) from None _pickle.UnpicklingError: Weights only load failed. This file can still be loaded, to do so you have two options, do those steps only if you trust the source of the checkpoint. (1) In PyTorch 2.6, we changed the default value of the weights_only argument in torch.load from False to True. Re-running torch.load with weights_only set to False will likely succeed, but it can result in arbitrary code execution. Do it only if you got the file from a trusted source. (2) Alternatively, to load with weights_onlyTrue please check the recommended steps in the following error message. WeightsUnpickler error: Unsupported global: GLOBAL numpy.core.multiarray._reconstruct was not an allowed global by default. Please use torch.serialization.add_safe_globals([numpy.core.multiarray._reconstruct]) or the torch.serialization.safe_globals([numpy.core.multiarray._reconstruct]) context manager to allowlist this global if you trust this class/function. Check the documentation of torch.load to learn more about types accepted by default with weights_only https://pytorch.org/docs/stable/generated/torch.load.html.解决方案修改play_amo.py找到第 217 行norm_stats torch.load(adapter_norm_stats.pt)改为norm_stats torch.load(adapter_norm_stats.pt,weights_onlyFalse)解决问题后正常加载可视化可以进行下面测试按键控制量范围W/S前进速度 Vx[-0.5, 0.5]Q/E横向速度 Vy[-0.4, 0.4]A/D偏航角速度-Z/X躯干高度[-0.5, 0.8]J/U躯干偏航[-1.57, 1.57]K/I躯干俯仰[-0.52, 1.57]L/O躯干横滚[-0.7, 0.7]T切换手臂随机动作-示例 1按下Z 键(增加) 与X 键(减少) 控制躯干高度取值范围[-0.5, 0.8]示例 2按下J 键(增加) 与U 键(减少) 控制躯干偏航角取值范围[-1.57, 1.57]示例 3按下K 键(增加) 与I 键(减少) 控制躯干俯仰角取值范围[-0.52, 1.57]示例 4按下L 键(增加) 与O 键(减少) 控制躯干横滚角取值范围[-0.7, 0.7]示例 5按下W 键(增加) 与S 键(减少) 控制X 方向速度取值范围[-0.5, 0.5]示例 6按下Q 键(增加) 与E 键(减少) 控制Y 方向速度取值范围[-0.4, 0.4]示例 7按下A 键(增加) 与D 键(减少) 控制偏航转动示例 8可以尝试各类指令组合也可以使用超出分布范围的指令全部由同一个模型执行。还可以在此基础上叠加手臂动作。按下T 键开启 / 关闭手臂动作4、代码分析代码结构如下所示AMO/├── play_amo.py # 主程序交互式可视化与推理├── requirements.txt # Python依赖├── g1.xml # MuJoCo机器人模型文件├── adapter_jit.pt # 适配器网络TorchScript├── adapter_norm_stats.pt # 适配器归一化统计├── amo_jit.pt # 主策略网络TorchScript├── meshes/ # 机器人网格文件STL等├── img/ # 文档图片资源└── README.md # 项目说明1.play_amo.py— 主控程序这是项目的核心入口实现了交互式 MuJoCo 仿真环境主要功能模块HumanoidEnv 类初始化加载 G1 的 MuJoCo 模型 (g1.xml)配置 23 个关节的 PD 控制参数刚度、阻尼、力矩限制键盘交互通过 GLFW 捕获键盘输入实时调整控制指令观察空间构建组合本体感知数据角速度、关节位置/速度、历史动作与高层指令关键方法方法功能extract_data()从 MuJoCo 数据中提取关节状态、IMU 数据get_observation()构建策略网络输入包含本体感知 适配器输出 历史缓冲区run()主循环每 10 个仿真步sim_decimation10执行一次策略推理控制指令映射键盘按键控制量范围W/S前进速度 Vx[-0.5, 0.5]Q/E横向速度 Vy[-0.4, 0.4]A/D偏航角速度-Z/X躯干高度[-0.5, 0.8]J/U躯干偏航[-1.57, 1.57]K/I躯干俯仰[-0.52, 1.57]L/O躯干横滚[-0.7, 0.7]T切换手臂随机动作-网络架构# 主策略网络RL训练得到 policy_jit torch.jit.load(amo_jit.pt) # 输入: obs extra_hist # 适配器网络处理高层躯干指令 adapter torch.jit.load(adapter_jit.pt) # 输入: [height, yaw, pitch, roll] arm_dofPD 控制torque (pd_target - dof_pos) * stiffness - dof_vel * damping torque clip(torque, -torque_limits, torque_limits)2.g1.xml— MuJoCo 机器人模型基于MuJoCo Menagerie的 Unitree G1 模型定义了 23 自由度不含手部的机器人运动学/动力学包含碰撞体、惯性属性、传感器IMU、角速度引用meshes/目录下的 STL 网格文件3. 预训练模型文件文件说明amo_jit.pt主 RL 策略网络TorchScript输入观察向量输出 15 维动作adapter_jit.pt适配器网络将高层躯干指令映射为参考姿态adapter_norm_stats.pt包含input_mean/std和output_mean/std用于标准化分享完成