# MuJoCo Managed Viewer保存XML报错No XML model loaded

> 原文链接：https://robotics.hellobike.com/pitfalls/2026-10-23-mujoco-2728
> 频道：pitfalls | 更新日期：2026-10-23 | 标签：auto, github-issue, mujoco
> 核心摘要：通过MjSpec启动Viewer时保存XML为空，需先将Spec编译并写入文件再加载模型以绕过旧API限制。

# MuJoCo Managed Viewer保存XML报错No XML model loaded

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[Save XML on Managed Viewer Fails](https://github.com/google-deepmind/mujoco/issues/2728)（GitHub google-deepmind/mujoco #2728）

**状态**：有绕过办法

## 问题

在Python中使用mujoco.MjSpec编译模型并通过mujoco.viewer.launch启动Managed Viewer后，点击Save xml功能失效，生成的XML文件内容为空，且退出时在标准错误输出中打印Save XML error: No XML model loaded%。该问题在MuJoCo 3.3.3及以下版本、3.16.0及当前main分支均复现，涉及macOS与Linux平台及Python 3.11环境。

## 环境

MuJoCo 3.3.3/3.16.0/main分支，Python 3.11，macOS/Linux

## 解决办法

1. 调用spec.compile()编译MjSpec对象生成模型。
2. 使用spec.to_file('model.xml')将编译后的模型序列化为临时XML文件。
3. 通过mujoco.MjModel.from_xml_path('model.xml')从文件路径重新加载模型实例。
4. 将重新加载的模型传入mujoco.viewer.launch()启动Viewer，此时Save xml功能恢复正常。
5. 根本修复方案为修改Viewer使其感知MjSpec，在Simulate::Load中接收可选mjSpec指针，保存时改用mj_copyBack配合mj_saveXML替代仅依赖历史加载记录的mj_saveLastXML。

讨论原作者：@kevinzakka 等，版权归原作者所有。
:::

## 原始参考来源 (Sources)

- [GitHub google-deepmind/mujoco #2728：Save XML on Managed Viewer Fails](https://github.com/google-deepmind/mujoco/issues/2728)