Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions assets/robots/galbot_one_golf_description/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ textures are stored under `usd/`.
Variant sets on the root prim (defaults in bold): Physics (**physx**,
physics, none, mujoco), Robot (**none**, robot), Sensor (**none**, sensors).

The `d405` visuals use the forward `d405_sz073` assembly from description
revision `69cdfde0178f2eed10c4b2e612c0c3d3b2263c7a`. Its built-in stand replaces
the hidden original stand; collision geometry and physics are unchanged.
Wrist camera parameters match SynthNova's Yundonghui calibration at 640 x 360.
The standard IsaacLab camera implementation is retained, including its
runtime square-pixel assumption (`fy=fx`).

## LICENSE

This software is licensed under the Apache License 2.0. See `LICENSE` for details.
Git LFS file not shown
Git LFS file not shown
Git LFS file not shown
26 changes: 12 additions & 14 deletions robolab/robots/galbot_golf.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,27 +71,25 @@ def _source_replay_camera(


def _wrist_camera(side: str) -> TiledCameraCfg:
"""Camera parented to Golf's URDF camera frame, using its +Z optical axis."""
"""Yundonghui policy calibration resized from 400x224 to 640x360."""
return TiledCameraCfg(
prim_path=(
f"{{ENV_REGEX_NS}}/robot/{side}_arm_link7/"
f"{side}_arm_wrist_camera_stand/{side}_wrist_camera_link/{side}_wrist_cam"
),
height=224,
width=400,
prim_path=f"{{ENV_REGEX_NS}}/robot/{side}_arm_link7/{side}_wrist_cam",
height=360,
width=640,
data_types=["rgb"],
spawn=sim_utils.PinholeCameraCfg(
focal_length=202 * 0.03,
# Scaled intrinsics: fx=323.2, fy=324.642857, cx=320, cy=180.
focal_length=6.06,
focus_distance=0.0,
horizontal_aperture=400 * 0.03,
vertical_aperture=224 * 0.03,
horizontal_aperture=12.0,
vertical_aperture=6.72,
clipping_range=(0.03, 10.0),
),
# The URDF camera link supplies the optical +Z direction, but its image
# axes are rolled 90 degrees relative to the upright D405 recording.
# Mount-relative calibration expressed in arm_link7, quaternion WXYZ.
# Both wrists have the same rotation (the source quaternions differ only in sign).
offset=TiledCameraCfg.OffsetCfg(
pos=(0.0, 0.0, 0.0),
rot=(0.7071067812, 0.0, 0.0, 0.7071067812),
pos=(-0.18015459385344976, 0.011084636915734618, -0.0475356786953811),
rot=(-0.5860286987303605, -0.38397145780165504, 0.3981361647004496, 0.5921350168801781),
convention="ros",
),
)
Expand Down
8 changes: 4 additions & 4 deletions tests/test_galbot_configs.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,11 @@ def test_left_ego_camera_uses_policy_calibration():
def test_wrist_cameras_use_golf_sensor_calibration():
left = GalbotGolfLeftWristCameraCfg().left_wrist_cam
right = GalbotGolfRightWristCameraCfg().right_wrist_cam
assert (left.width, left.height) == (400, 224)
assert (right.width, right.height) == (400, 224)
assert (left.width, left.height) == (640, 360)
assert (right.width, right.height) == (640, 360)
for camera in (left, right):
assert camera.width * camera.spawn.focal_length / camera.spawn.horizontal_aperture == pytest.approx(202)
assert camera.height * camera.spawn.focal_length / camera.spawn.vertical_aperture == pytest.approx(202)
assert camera.width * camera.spawn.focal_length / camera.spawn.horizontal_aperture == pytest.approx(323.2)
assert camera.height * camera.spawn.focal_length / camera.spawn.vertical_aperture == pytest.approx(324.642857)
assert camera.spawn.clipping_range == pytest.approx((0.03, 10.0))


Expand Down