4cf4a5665d
Following the export declarations in Dear ImGui and ImPlot METADATA, this change updates MuJoCo's Copybara configuration (copy.bara.sky) to export and transform the Python bindings. `//third_party/dear_imgui/google/py` exports to `python/mujoco/experimental/dear_imgui` and `//third_party/implot/google/py` exports to `python/mujoco/experimental/implot`. PiperOrigin-RevId: 925293624 Change-Id: Ie6e32d247a6f7fc24bb36ae7060f2075d8efeb26
66 lines
2.8 KiB
C++
66 lines
2.8 KiB
C++
// 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.
|
|
|
|
// Python bindings for MuJoCo platform simulation components.
|
|
|
|
#include <mujoco/mujoco.h>
|
|
#include "third_party/mujoco/src/experimental/platform/sim/step_control.h"
|
|
#include "structs.h"
|
|
#include <pybind11/pybind11.h>
|
|
|
|
namespace py = pybind11;
|
|
|
|
using StepControl = mujoco::platform::StepControl;
|
|
|
|
PYBIND11_MODULE(sim, m) {
|
|
m.doc() = "MuJoCo platform simulation bindings for Link.";
|
|
|
|
py::enum_<StepControl::Status>(m, "StepStatus")
|
|
.value("OK", StepControl::Status::kOk)
|
|
.value("PAUSED", StepControl::Status::kPaused)
|
|
.value("VISCOUS_PAUSED", StepControl::Status::kViscousPaused)
|
|
.value("AUTO_RESET", StepControl::Status::kAutoReset)
|
|
.value("DIVERGED", StepControl::Status::kDiverged);
|
|
|
|
py::enum_<StepControl::PauseState>(m, "PauseState")
|
|
.value("UNPAUSED", StepControl::PauseState::kUnpaused)
|
|
.value("NORMAL_PAUSED", StepControl::PauseState::kNormalPaused)
|
|
.value("VISCOUS_PAUSED", StepControl::PauseState::kViscousPaused);
|
|
|
|
py::class_<StepControl>(m, "StepControl")
|
|
.def(py::init<>())
|
|
.def(
|
|
"advance",
|
|
[](StepControl& self, mujoco::python::MjModelWrapper& model,
|
|
mujoco::python::MjDataWrapper& data) {
|
|
return self.Advance(model.get(), data.get());
|
|
},
|
|
py::arg("model"), py::arg("data"),
|
|
"Step physics forward, respecting speed settings and refresh budget.")
|
|
.def("force_sync", &StepControl::ForceSync,
|
|
"Ensures the next Advance() will synchronize time and step once.")
|
|
.def("get_speed", &StepControl::GetSpeed,
|
|
"Returns the desired simulation speed as a percentage of real time.")
|
|
.def("get_speed_measured", &StepControl::GetSpeedMeasured,
|
|
"Returns the measured simulation speed.")
|
|
.def("set_speed", &StepControl::SetSpeed, py::arg("speed"),
|
|
"Sets the desired speed (clamped to [0.1%, 100%]).")
|
|
.def("set_pause_state", &StepControl::SetPauseState, py::arg("state"),
|
|
"Sets the pause state of the simulation.")
|
|
.def("get_pause_state", &StepControl::GetPauseState,
|
|
"Returns the current pause state.")
|
|
.def("request_single_step", &StepControl::RequestSingleStep,
|
|
"Request a single step if paused.");
|
|
}
|