-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Add Fii mobile manipulator for teleoperation and locomanipulation SDG #4191
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Add Fii mobile manipulator for teleoperation and locomanipulation SDG #4191
Conversation
Greptile OverviewGreptile SummaryThis PR introduces comprehensive support for the Fii mobile manipulator robot in Isaac Lab, adding both simulation environments and teleoperation capabilities. The implementation includes a new locomanipulation task environment that handles dual-arm manipulation with swerve drive mobility, integrating custom inverse kinematics for the 3-wheel swerve drive system and Pink IK for upper body control. The PR also adds OpenXR hand tracking retargeting functionality that translates human hand movements into robot commands for end-effector poses, gripper control, and base velocity. The changes follow Isaac Lab's established architecture patterns, extending the existing locomanipulation framework with Fii-specific configurations while maintaining compatibility with the broader ecosystem. Important Files Changed
Confidence score: 3/5
Sequence DiagramsequenceDiagram
participant User
participant OpenXRDevice
participant FiiRetargeter
participant ManagerBasedEnv
participant FiibotLowerBodyAction
participant swerve_ik
participant PinkIKController
participant Articulation
User->>OpenXRDevice: "Hand tracking input"
OpenXRDevice->>FiiRetargeter: "retarget(hand_data)"
FiiRetargeter->>FiiRetargeter: "_hand_data_to_gripper_values(left_hand)"
FiiRetargeter->>FiiRetargeter: "_hand_data_to_gripper_values(right_hand)"
FiiRetargeter->>FiiRetargeter: "Extract wrist poses from hand data"
FiiRetargeter-->>OpenXRDevice: "Combined action tensor [left_eef, right_eef, grippers, base_vel, base_height]"
OpenXRDevice-->>ManagerBasedEnv: "Retargeted actions"
ManagerBasedEnv->>FiibotLowerBodyAction: "process_actions([vx, vy, wz, jack_height])"
FiibotLowerBodyAction->>swerve_ik: "swerve_isosceles_ik(vx, vy, wz, L1, d, w, R)"
swerve_ik-->>FiibotLowerBodyAction: "wheel angles and velocities"
FiibotLowerBodyAction->>FiibotLowerBodyAction: "Calculate joint targets"
ManagerBasedEnv->>PinkIKController: "Upper body IK control"
PinkIKController->>PinkIKController: "Process EEF poses for left/right arms"
FiibotLowerBodyAction->>Articulation: "set_joint_position_target(lower_body_joints)"
PinkIKController->>Articulation: "set_joint_position_target(upper_body_joints)"
Articulation-->>ManagerBasedEnv: "Robot state update"
ManagerBasedEnv-->>User: "Visual feedback in simulation"
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Additional Comments (8)
-
source/isaaclab_tasks/isaaclab_tasks/manager_based/locomanipulation/pick_place/__init__.py, line 34 (link)style: Consider adding version suffix '-v0' to maintain consistency with other environment IDs in the codebase
Is there a specific reason for omitting the version suffix that other environments use?
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
-
source/isaaclab_tasks/isaaclab_tasks/manager_based/locomanipulation/pick_place/swerve_ik.py, line 50-52 (link)style: references contain placeholder text
:contentReference[oaicite:x]{index=x}that should be replaced with actual referencesAre these placeholders meant to be replaced with actual citations?
-
source/isaaclab_tasks/isaaclab_tasks/manager_based/locomanipulation/pick_place/locomanipulation_fii_env_cfg.py, line 273-276 (link)logic: link name mismatch: observations use 'left_7_Link' but action config uses 'Fiibot_W_2_V2_left_7_Link'
Should the observation link names match the full names used in the action configuration?
-
source/isaaclab_tasks/isaaclab_tasks/manager_based/locomanipulation/pick_place/locomanipulation_fii_env_cfg.py, line 42 (link)syntax: typo: 'exit' should be 'exist' in comment
-
source/isaaclab/isaaclab/devices/openxr/retargeters/humanoid/fii/fii_retargeter.py, line 40 (link)logic: This line performs a no-op assignment. The height coordinate is assigned to itself without any transformation. Was there supposed to be a height adjustment or transformation applied to the z-coordinate?
-
source/isaaclab/isaaclab/devices/openxr/retargeters/humanoid/fii/fii_retargeter.py, line 43 (link)logic: Same no-op assignment issue as the left wrist. The height coordinate is not being modified.
-
source/isaaclab/isaaclab/devices/openxr/retargeters/humanoid/fii/fii_retargeter.py, line 39 (link)style: Redundant tensor creation -
torch.from_numpy()already creates a tensor, thentorch.tensor()creates another tensor from it.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
-
source/isaaclab/isaaclab/devices/openxr/retargeters/humanoid/fii/fii_retargeter.py, line 42 (link)style: Same redundant tensor creation issue as line 39.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
6 files reviewed, 8 comments
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is this file commit by mistake?
| import gymnasium as gym | ||
| import os | ||
|
|
||
| from . import agents, fixed_base_upper_body_ik_g1_env_cfg, locomanipulation_g1_env_cfg |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please using string style for registration entry point rather than direct import https://github.com/isaac-sim/IsaacLab/pull/3803/changes
| def __post_init__(self): | ||
| self.decimation = 4 | ||
| self.episode_length_s = 200.0 | ||
| self.sim.dt = 1 / 120 # 200Hz |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
wrong comment?
zoctipus
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nice work, some nit fixes but overall seems good. I would be a bit more thoughtful about handling the urdf, is it possible to upload it to server instead rather than do local convertion?
| """Initialize the retargeter.""" | ||
| self.cfg = cfg | ||
| self._sim_device = cfg.sim_device | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing super().__init__(cfg) to properly handle the sim_device
Description
This PR adds support for the Fii mobile manipulator with teleoperation and locomanipulation SDG.
This includes
This was tested by
Please note, this PR requires an asset be uploaded to the IsaacLab nucleus server, the USD is in the attached zip file:
Type of change
Screenshots
Checklist
pre-commitchecks with./isaaclab.sh --formatconfig/extension.tomlfileCONTRIBUTORS.mdor my name already exists there