44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
|
|
"""Headless smoke test for the canonical master MuJoCo model.
|
||
|
|
|
||
|
|
This file used to launch an interactive viewer at import time, which made test
|
||
|
|
discovery block or fail depending on the current working directory.
|
||
|
|
"""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import unittest
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
import mujoco
|
||
|
|
|
||
|
|
|
||
|
|
CONFIG_ROOT = Path(__file__).resolve().parents[1] / "config"
|
||
|
|
MASTER_MJCF = CONFIG_ROOT / "master_7dof.mjcf"
|
||
|
|
MASTER_JOINT_NAMES = (
|
||
|
|
"master_shoulder_pitch_joint",
|
||
|
|
"master_shoulder_yaw_joint",
|
||
|
|
"master_shoulder_roll_joint",
|
||
|
|
"master_elbow_flex_joint",
|
||
|
|
"master_wrist_roll_joint",
|
||
|
|
"master_wrist_yaw_joint",
|
||
|
|
"master_wrist_pitch_joint",
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
class MasterMujocoModelTest(unittest.TestCase):
|
||
|
|
def test_canonical_model_loads_headlessly(self) -> None:
|
||
|
|
model = mujoco.MjModel.from_xml_path(str(MASTER_MJCF))
|
||
|
|
self.assertEqual(model.nq, 7)
|
||
|
|
self.assertEqual(model.nv, 7)
|
||
|
|
for name in MASTER_JOINT_NAMES:
|
||
|
|
joint_id = mujoco.mj_name2id(
|
||
|
|
model,
|
||
|
|
mujoco.mjtObj.mjOBJ_JOINT,
|
||
|
|
name,
|
||
|
|
)
|
||
|
|
self.assertGreaterEqual(joint_id, 0, name)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
unittest.main()
|