Merge branch 'google-deepmind:main' into tendons
This commit is contained in:
@@ -84,7 +84,7 @@ if(NOT TARGET mujoco)
|
||||
if(MUJOCO_FRAMEWORK)
|
||||
message("MuJoCo framework is at ${MUJOCO_FRAMEWORK}/mujoco.framework")
|
||||
set(MUJOCO_LIBRARY
|
||||
${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.3.1.6.dylib
|
||||
${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.3.1.7.dylib
|
||||
)
|
||||
target_compile_options(mujoco INTERFACE -F${MUJOCO_FRAMEWORK})
|
||||
endif()
|
||||
@@ -92,7 +92,7 @@ if(NOT TARGET mujoco)
|
||||
|
||||
if(NOT MUJOCO_FRAMEWORK)
|
||||
find_library(
|
||||
MUJOCO_LIBRARY mujoco mujoco.3.1.6 HINTS ${MUJOCO_LIBRARY_DIR} REQUIRED
|
||||
MUJOCO_LIBRARY mujoco mujoco.3.1.7 HINTS ${MUJOCO_LIBRARY_DIR} REQUIRED
|
||||
)
|
||||
find_path(MUJOCO_INCLUDE mujoco/mujoco.h HINTS ${MUJOCO_INCLUDE_DIR} REQUIRED)
|
||||
message("MuJoCo is at ${MUJOCO_LIBRARY}")
|
||||
|
||||
@@ -27,6 +27,7 @@ import numpy as np
|
||||
TEST_XML = r"""
|
||||
<mujoco model="test">
|
||||
<compiler coordinate="local" angle="radian" eulerseq="xyz"/>
|
||||
<size nkey="2"/>
|
||||
<option timestep="0.002" gravity="0 0 -9.81"/>
|
||||
<visual>
|
||||
<global fovy="50" />
|
||||
@@ -745,6 +746,37 @@ class MuJoCoBindingsTest(parameterized.TestCase):
|
||||
# Expect next states to be equal.
|
||||
np.testing.assert_array_equal(state1a, state1b)
|
||||
|
||||
def test_mj_setKeyframe(self): # pylint: disable=invalid-name
|
||||
mujoco.mj_step(self.model, self.data)
|
||||
|
||||
# Test for invalid state spec
|
||||
invalid_key = 2
|
||||
expected_message = (
|
||||
f'mj_setKeyframe: index must be smaller than {invalid_key} (keyframes'
|
||||
' allocated in model)'
|
||||
)
|
||||
with self.assertRaisesWithLiteralMatch(mujoco.FatalError, expected_message):
|
||||
mujoco.mj_setKeyframe(self.model, self.data, invalid_key)
|
||||
|
||||
valid_key = 1
|
||||
time = self.data.time
|
||||
qpos = self.data.qpos.copy()
|
||||
qvel = self.data.qvel.copy()
|
||||
act = self.data.act.copy()
|
||||
mujoco.mj_setKeyframe(self.model, self.data, valid_key)
|
||||
|
||||
# Step, assert that time has changed.
|
||||
mujoco.mj_step(self.model, self.data)
|
||||
self.assertNotEqual(time, self.data.time)
|
||||
|
||||
# Reset to keyframe, assert that time, qpos, qvel, act are the same.
|
||||
mujoco.mj_resetDataKeyframe(self.model, self.data, valid_key)
|
||||
self.assertEqual(time, self.data.time)
|
||||
np.testing.assert_array_equal(qpos, self.data.qpos)
|
||||
np.testing.assert_array_equal(qvel, self.data.qvel)
|
||||
np.testing.assert_array_equal(act, self.data.act)
|
||||
|
||||
|
||||
def test_mj_angmomMat(self): # pylint: disable=invalid-name
|
||||
self.data.qvel = np.ones(self.model.nv, np.float64)
|
||||
mujoco.mj_forward(self.model, self.data)
|
||||
|
||||
@@ -302,6 +302,7 @@ PYBIND11_MODULE(_functions, pymodule) {
|
||||
}
|
||||
return InterceptMjErrors(::mj_setState)(m, d, state.data(), spec);
|
||||
});
|
||||
Def<traits::mj_setKeyframe>(pymodule);
|
||||
Def<traits::mj_addContact>(pymodule);
|
||||
Def<traits::mj_isPyramidal>(pymodule);
|
||||
Def<traits::mj_isSparse>(pymodule);
|
||||
@@ -697,6 +698,8 @@ PYBIND11_MODULE(_functions, pymodule) {
|
||||
Def<traits::mju_norm3>(pymodule);
|
||||
Def<traits::mju_dot3>(pymodule);
|
||||
Def<traits::mju_dist3>(pymodule);
|
||||
Def<traits::mju_mulMatVec3>(pymodule);
|
||||
Def<traits::mju_mulMatTVec3>(pymodule);
|
||||
Def<traits::mju_rotVecMat>(pymodule);
|
||||
Def<traits::mju_rotVecMatT>(pymodule);
|
||||
Def<traits::mju_cross>(pymodule);
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.mujoco.mjpython</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>3.1.6</string>
|
||||
<string>3.1.7</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>3.1.6</string>
|
||||
<string>3.1.7</string>
|
||||
<key>CFBundleLongVersionString</key>
|
||||
<string>3.1.6</string>
|
||||
<string>3.1.7</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.1.6</string>
|
||||
<string>3.1.7</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>mjpython</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
|
||||
@@ -1390,6 +1390,7 @@ PYBIND11_MODULE(_structs, m) {
|
||||
});
|
||||
DefineStructFunctions(mjVisualGlobal);
|
||||
#define X(var) mjVisualGlobal.def_readwrite(#var, &raw::MjVisualGlobal::var)
|
||||
X(orthographic);
|
||||
X(fovy);
|
||||
X(ipd);
|
||||
X(azimuth);
|
||||
@@ -2123,6 +2124,7 @@ This is useful for example when the MJB is not available as a file on disk.)"));
|
||||
X(distance);
|
||||
X(azimuth);
|
||||
X(elevation);
|
||||
X(orthographic);
|
||||
#undef X
|
||||
|
||||
#define X(var) DefinePyArray(mjvCamera, #var, &MjvCameraWrapper::var)
|
||||
@@ -2153,6 +2155,7 @@ This is useful for example when the MJB is not available as a file on disk.)"));
|
||||
X(frustum_top);
|
||||
X(frustum_near);
|
||||
X(frustum_far);
|
||||
X(orthographic);
|
||||
#undef X
|
||||
|
||||
#define X(var) DefinePyArray(mjvGLCamera, #var, &MjvGLCameraWrapper::var)
|
||||
|
||||
Reference in New Issue
Block a user