# MuJoCo passive viewer添加自定义geom不显示或被覆盖

> 原文链接：https://robotics.hellobike.com/pitfalls/2023-10-10-mujoco-1023
> 频道：pitfalls | 更新日期：2023-10-10 | 标签：auto, github-issue, mujoco
> 核心摘要：旧版passive viewer中自定义geom被内部状态刷新覆盖，需升级至含2e15574b修复的预发布版或正式版以支持该功能。

# MuJoCo passive viewer添加自定义geom不显示或被覆盖

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[add custom geoms to mujoco.viewer.launch_passive](https://github.com/google-deepmind/mujoco/issues/1023)（GitHub google-deepmind/mujoco #1023）

**状态**：已解决

## 问题

在 `mujoco.viewer.launch_passive` 中通过 `viewer.scn` 添加自定义 geom（如球体、胶囊体）无法显示或持续闪烁。即使使用 `viewer.lock()` 保护并调用 `mjv_initGeom`，几何体仍被 `mjv_updateSceneFromState` 内部逻辑覆盖。维护者确认旧版本不支持此操作，且调整 `viewer.sync()` 顺序无效。

## 环境

MuJoCo Python Viewer (launch_passive)，涉及 C++ 底层 simulate.cc 渲染管线；修复包含于 commit 2e15574b58df4bfda59e1642cf67699cb0a58667 及后续版本。

## 解决办法

1. 升级 MuJoCo 至包含 commit `2e15574b` 的版本，可通过 `pip install mujoco --pre -f https://py.mujoco.org/` 安装预发布版或等待正式发版。
2. 在新版本中使用官方支持的 API 添加自定义 geom，避免直接修改被托管的 `viewer.scn` 结构体。
3. 若使用 C++ 原生渲染循环而非 Python passive viewer，务必在 `mjv_updateScene` 之后、`mjr_render` 之前插入自定义 geom 绘制代码，防止被场景更新清除。
4. 不要尝试手动 memcpy 合并 `scn_geo` 等非官方 hack 方案，该问题已在上游修复。

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

## 原始参考来源 (Sources)

- [GitHub google-deepmind/mujoco #1023：add custom geoms to mujoco.viewer.launch_passive](https://github.com/google-deepmind/mujoco/issues/1023)