Skip to content

Commit

Permalink
Support user-defined cameras in mujoco.loaders
Browse files Browse the repository at this point in the history
  • Loading branch information
flferretti committed Apr 3, 2024
1 parent 09a8015 commit 82015ab
Showing 1 changed file with 25 additions and 0 deletions.
25 changes: 25 additions & 0 deletions src/jaxsim/mujoco/loaders.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,13 +159,19 @@ def convert(
considered_joints: list[str] | None = None,
plane_normal: tuple[float, float, float] = (0, 0, 1),
heightmap: bool | None = None,
cameras: (
list[dict[str, str, str, str, str]] | dict[str, str, str, str, str]
) = None,
) -> tuple[str, dict[str, Any]]:
"""
Converts a ROD model to a Mujoco MJCF string.
Args:
rod_model: The ROD model to convert.
considered_joints: The list of joint names to consider in the conversion.
plane_normal: The normal vector of the plane.
heightmap: Whether to generate a heightmap.
cameras: The list of cameras to add to the scene.
Returns:
tuple: A tuple containing the MJCF string and the assets dictionary.
Expand Down Expand Up @@ -470,6 +476,11 @@ def convert(
fovy="60",
)

# Add user-defined camera
cameras = cameras if cameras is not None else {}
for camera in cameras if isinstance(cameras, list) else [cameras]:
_ = ET.SubElement(worldbody_element, "camera", **camera)

# ------------------------------------------------
# Add a light following the CoM of the first link
# ------------------------------------------------
Expand Down Expand Up @@ -504,6 +515,9 @@ def convert(
model_name: str | None = None,
plane_normal: tuple[float, float, float] = (0, 0, 1),
heightmap: bool | None = None,
cameras: (
list[dict[str, str, str, str, str]] | dict[str, str, str, str, str]
) = None,
) -> tuple[str, dict[str, Any]]:
"""
Converts a URDF file to a Mujoco MJCF string.
Expand All @@ -512,6 +526,9 @@ def convert(
urdf: The URDF file to convert.
considered_joints: The list of joint names to consider in the conversion.
model_name: The name of the model to convert.
plane_normal: The normal vector of the plane.
heightmap: Whether to generate a heightmap.
cameras: The list of cameras to add to the scene.
Returns:
tuple: A tuple containing the MJCF string and the assets dictionary.
Expand All @@ -530,6 +547,7 @@ def convert(
considered_joints=considered_joints,
plane_normal=plane_normal,
heightmap=heightmap,
cameras=cameras,
)


Expand All @@ -541,6 +559,9 @@ def convert(
model_name: str | None = None,
plane_normal: tuple[float, float, float] = (0, 0, 1),
heightmap: bool | None = None,
cameras: (
list[dict[str, str, str, str, str]] | dict[str, str, str, str, str]
) = None,
) -> tuple[str, dict[str, Any]]:
"""
Converts a SDF file to a Mujoco MJCF string.
Expand All @@ -549,6 +570,9 @@ def convert(
sdf: The SDF file to convert.
considered_joints: The list of joint names to consider in the conversion.
model_name: The name of the model to convert.
plane_normal: The normal vector of the plane.
heightmap: Whether to generate a heightmap.
cameras: The list of cameras to add to the scene.
Returns:
tuple: A tuple containing the MJCF string and the assets dictionary.
Expand All @@ -567,4 +591,5 @@ def convert(
considered_joints=considered_joints,
plane_normal=plane_normal,
heightmap=heightmap,
cameras=cameras,
)

0 comments on commit 82015ab

Please sign in to comment.