Replace the Studio parser module with a pure Python implementation
PiperOrigin-RevId: 953181335 Change-Id: I1d2ce6f27f50aa4c30cce6d43caed80186ddef42
This commit is contained in:
committed by
Copybara-Service
parent
a9f56dabc2
commit
91d78346e1
@@ -23,9 +23,6 @@ set(STUDIO_COMMON_LIBS
|
|||||||
structs_wrappers
|
structs_wrappers
|
||||||
)
|
)
|
||||||
|
|
||||||
mujoco_pybind11_module(parser parser.cc)
|
|
||||||
target_link_libraries(parser PRIVATE ${STUDIO_COMMON_LIBS})
|
|
||||||
|
|
||||||
mujoco_pybind11_module(native_viewer_cc native_viewer.cc)
|
mujoco_pybind11_module(native_viewer_cc native_viewer.cc)
|
||||||
target_link_libraries(native_viewer_cc PRIVATE ${STUDIO_COMMON_LIBS})
|
target_link_libraries(native_viewer_cc PRIVATE ${STUDIO_COMMON_LIBS})
|
||||||
|
|
||||||
@@ -39,7 +36,6 @@ mujoco_pybind11_module(sim sim.cc)
|
|||||||
target_link_libraries(sim PRIVATE ${STUDIO_COMMON_LIBS})
|
target_link_libraries(sim PRIVATE ${STUDIO_COMMON_LIBS})
|
||||||
|
|
||||||
set(MUJOCO_STUDIO_TARGETS
|
set(MUJOCO_STUDIO_TARGETS
|
||||||
parser
|
|
||||||
native_viewer_cc
|
native_viewer_cc
|
||||||
renderer
|
renderer
|
||||||
ux
|
ux
|
||||||
@@ -73,7 +69,6 @@ set_target_properties(implot PROPERTIES
|
|||||||
# when linking both GLFW (via Filament) and SDL2 statically on Linux.
|
# when linking both GLFW (via Filament) and SDL2 statically on Linux.
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
set(STUDIO_PY_MODULES
|
set(STUDIO_PY_MODULES
|
||||||
parser
|
|
||||||
native_viewer_cc
|
native_viewer_cc
|
||||||
renderer
|
renderer
|
||||||
ux
|
ux
|
||||||
@@ -86,7 +81,6 @@ endif()
|
|||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(STUDIO_PY_MODULES
|
set(STUDIO_PY_MODULES
|
||||||
parser
|
|
||||||
native_viewer_cc
|
native_viewer_cc
|
||||||
renderer
|
renderer
|
||||||
ux
|
ux
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
// Copyright 2026 DeepMind Technologies Limited
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
#include <string_view>
|
|
||||||
|
|
||||||
#include <mujoco/mujoco.h>
|
|
||||||
#include <mujoco/experimental/platform/sim/model_holder.h>
|
|
||||||
#include "structs.h"
|
|
||||||
#include <pybind11/pybind11.h>
|
|
||||||
|
|
||||||
namespace mujoco::python {
|
|
||||||
|
|
||||||
// Loads, parses, and compiles a MuJoCo model from the given file. Returns the
|
|
||||||
// python mjData object (which also contains the compiled mjModel).
|
|
||||||
py::object Parse(std::string_view filepath) {
|
|
||||||
std::unique_ptr<platform::ModelHolder> holder;
|
|
||||||
{
|
|
||||||
py::gil_scoped_release no_gil;
|
|
||||||
holder = platform::ModelHolder::FromFile(filepath);
|
|
||||||
}
|
|
||||||
if (!holder->ok()) {
|
|
||||||
throw py::value_error(
|
|
||||||
std::string("Failed to load model from '") +
|
|
||||||
std::string(filepath) + "': " + std::string(holder->error()));
|
|
||||||
}
|
|
||||||
mjModel* model = holder->ReleaseModel();
|
|
||||||
mjData* data = holder->ReleaseData();
|
|
||||||
py::object py_model = py::cast(MjModelWrapper(model));
|
|
||||||
py::object py_data =
|
|
||||||
py::cast(MjDataWrapper(py::cast<MjModelWrapper*>(py_model), data));
|
|
||||||
return py_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace mujoco::python
|
|
||||||
|
|
||||||
PYBIND11_MODULE(parser, m, pybind11::mod_gil_not_used()) {
|
|
||||||
pybind11::module_::import("mujoco._structs");
|
|
||||||
m.def("parse", &mujoco::python::Parse,
|
|
||||||
pybind11::return_value_policy::take_ownership);
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# Copyright 2026 DeepMind Technologies Limited
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
"""Loads and compiles MuJoCo models for the studio viewer."""
|
||||||
|
|
||||||
|
import mujoco
|
||||||
|
|
||||||
|
|
||||||
|
def parse(filepath: str) -> mujoco.MjData:
|
||||||
|
if filepath.endswith('.mjb'):
|
||||||
|
model = mujoco.MjModel.from_binary_path(filepath)
|
||||||
|
else:
|
||||||
|
model = mujoco.MjSpec.from_file(filepath).compile()
|
||||||
|
return mujoco.MjData(model)
|
||||||
Reference in New Issue
Block a user