主题
IsaacLab 视频录制修复说明
问题
IsaacLab 的 isaaclab.python.headless.rendering.kit experience 文件缺少 isaacsim.core.rendering_manager 扩展依赖,导致视频录制时出现:
ModuleNotFoundError: No module named 'isaacsim.core.rendering_manager'根本原因
isaacsim.core.rendering_manager扩展包含ViewportManager类,用于设置相机视角- 该扩展在
isaaclab.python.kit中有声明,但在isaaclab.python.headless.rendering.kit中缺失 - 当使用
enable_cameras=True启动 headless 模式时,会加载后者,导致扩展未加载
解决方案:运行时手动加载扩展
不修改 IsaacLab 源码,而是在 l2/utils/video.py 中运行时手动加载扩展:
python
def _ensure_rendering_manager_loaded():
"""确保 isaacsim.core.rendering_manager 扩展已加载。"""
try:
# 先尝试导入,如果成功说明已经加载
from isaacsim.core.rendering_manager import ViewportManager
return True
except ImportError:
pass
# 如果导入失败,手动启用扩展
import omni.kit.app
ext_manager = omni.kit.app.get_app().get_extension_manager()
ext_id = "isaacsim.core.rendering_manager"
if not ext_manager.is_extension_enabled(ext_id):
ext_manager.set_extension_enabled_immediate(ext_id, True)
# 等待扩展加载
for _ in range(10):
omni.kit.app.get_app().update()
# 验证是否成功
from isaacsim.core.rendering_manager import ViewportManager
return True这个函数在 wrap_env_with_video_recorder() 中自动调用,用户无需手动操作。
优点
- ✅ 不修改 IsaacLab 源码
- ✅ 更新 IsaacLab 时不需要重新应用修复
- ✅ 对用户透明,自动处理
- ✅ 如果扩展已加载(例如使用非 headless 模式),不会重复加载
验证修复
运行以下命令验证:
bash
uv --project l2 run python -c "
from isaaclab.app import AppLauncher
launcher = AppLauncher({'headless': True, 'enable_cameras': True})
app = launcher.app
import sys
sys.path.insert(0, 'l2')
from video_utils import _ensure_rendering_manager_loaded
success = _ensure_rendering_manager_loaded()
print(f'Extension loaded: {success}')
if success:
from isaacsim.core.rendering_manager import ViewportManager
print('SUCCESS: ViewportManager imported!')
app.close()
"如果看到 SUCCESS: ViewportManager imported!,说明修复成功。
替代方案(不推荐)
如果你想修改 IsaacLab 源码,可以编辑 IsaacLab/apps/isaaclab.python.headless.rendering.kit,在 [dependencies] 部分添加:
toml
"isaacsim.core.rendering_manager" = {}但这需要在每次更新 IsaacLab 时重新应用修复。