Skip to content
Merged
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
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 15 additions & 3 deletions docs/source/overview/uw_environments.rst
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@ Environments based on fixed-arm manipulation tasks.
+--------------------------------+------------------------------------------------+------------------------------------------------------------------------------+
| |omnireset-ur5e-peg-insert| | |omnireset-ur5e-peg-insert-link| | Insert a square peg into the square peg hole |
+--------------------------------+------------------------------------------------+------------------------------------------------------------------------------+
| |omnireset-ur5e-rectangle| | |omnireset-ur5e-rectangle-link| | Orient a rectangle into desired location during a wall |
+--------------------------------+------------------------------------------------+------------------------------------------------------------------------------+
| |omnireset-ur5e-cupcake| | |omnireset-ur5e-cupcake-link| | Place a cupcake into desired location on a plate |
+--------------------------------+------------------------------------------------+------------------------------------------------------------------------------+
| |omnireset-ur5e-cube-stack| | |omnireset-ur5e-cube-stack-link| | Stack one cube on top of another cube in a desired orientation. |
+--------------------------------+------------------------------------------------+------------------------------------------------------------------------------+

.. |track-goal-ur5| image:: ../_static/tasks/manipulation/ur5_track_goal.jpg
.. |track-goal-tycho| image:: ../_static/tasks/manipulation/tycho_track_goal.jpg
Expand All @@ -67,16 +73,22 @@ Environments based on fixed-arm manipulation tasks.
.. |omnireset-ur5e-drawer| image:: ../_static/tasks/manipulation/omnireset_drawer_assemble.jpg
.. |omnireset-ur5e-fbleg| image:: ../_static/tasks/manipulation/omnireset_fbleg_screw.jpg
.. |omnireset-ur5e-peg-insert| image:: ../_static/tasks/manipulation/omnireset_peg_insert.jpg
.. |omnireset-ur5e-rectangle| image:: ../_static/tasks/manipulation/omnireset_rectangle_reorientation.jpg
.. |omnireset-ur5e-cupcake| image:: ../_static/tasks/manipulation/omnireset_cupcake_on_plate.jpg
.. |omnireset-ur5e-cube-stack| image:: ../_static/tasks/manipulation/omnireset_cube_stack.jpg

.. |track-goal-ur5-link| replace:: `UW-Track-Goal-Ur5-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/track_goal/config/ur5/track_goal_ur5_env_cfg.py>`__
.. |track-goal-tycho-link| replace:: `UW-Track-Goal-Tycho-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/track_goal/config/tycho/tycho_track_goal.py>`__
.. |track-goal-xarm-leap-link| replace:: `UW-Track-Goal-Xarm-Leap-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/track_goal/config/xarm_leap/track_goal_xarm_leap.py>`__
.. |ext-nut-thread-franka-link| replace:: `UW-Nut-Thread-Franka-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/factory_extension/nutthread_env_cfg.py>`__
.. |ext-gear-mesh-franka-link| replace:: `UW-Gear-Mesh-Franka-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/factory_extension/gearmesh_env_cfg.py>`__
.. |ext-peg-insert-franka-link| replace:: `UW-Peg-Insert-Franka-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/factory_extension/peginsert_env_cfg.py>`__
.. |omnireset-ur5e-drawer-link| replace:: `OmniReset-Ur5eRobotiq2f85-RelJointPos-State-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/reset_states/config/ur5e_robotiq_2f85/reset_states_cfg.py>`__
.. |omnireset-ur5e-fbleg-link| replace:: `OmniReset-Ur5eRobotiq2f85-RelJointPos-State-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/reset_states/config/ur5e_robotiq_2f85/reset_states_cfg.py>`__
.. |omnireset-ur5e-peg-insert-link| replace:: `OmniReset-Ur5eRobotiq2f85-RelJointPos-State-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/reset_states/config/ur5e_robotiq_2f85/reset_states_cfg.py>`__
.. |omnireset-ur5e-drawer-link| replace:: `OmniReset-Ur5eRobotiq2f85-RelCartesianOSC-State-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/reset_states/config/ur5e_robotiq_2f85/rl_state_cfg.py>`__
.. |omnireset-ur5e-fbleg-link| replace:: `OmniReset-Ur5eRobotiq2f85-RelCartesianOSC-State-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/reset_states/config/ur5e_robotiq_2f85/rl_state_cfg.py>`__
.. |omnireset-ur5e-peg-insert-link| replace:: `OmniReset-Ur5eRobotiq2f85-RelCartesianOSC-State-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/reset_states/config/ur5e_robotiq_2f85/rl_state_cfg.py>`__
.. |omnireset-ur5e-rectangle-link| replace:: `OmniReset-Ur5eRobotiq2f85-RelCartesianOSC-State-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/reset_states/config/ur5e_robotiq_2f85/rl_state_cfg.py>`__
.. |omnireset-ur5e-cupcake-link| replace:: `OmniReset-Ur5eRobotiq2f85-RelCartesianOSC-State-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/reset_states/config/ur5e_robotiq_2f85/rl_state_cfg.py>`__
.. |omnireset-ur5e-cube-stack-link| replace:: `OmniReset-Ur5eRobotiq2f85-RelCartesianOSC-State-v0 <https://github.com/uw-lab/UWLab/blob/main/source/uwlab_tasks/uwlab_tasks/manager_based/manipulation/reset_states/config/ur5e_robotiq_2f85/rl_state_cfg.py>`__


Locomotion
Expand Down
23 changes: 22 additions & 1 deletion docs/source/publications/omnireset/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ OmniReset
.. important::
**Pre-trained RL Checkpoints Available!**

We provide trained RL checkpoints for all three tasks: **Drawer Assembly**, **Leg Twisting**, and **Peg Insertion**.
We provide trained RL checkpoints for all six tasks: **Drawer Assembly**, **Leg Twisting**, **Peg Insertion**, **Rectangle Reorientation on Wall**, **Cupcake on Plate**, and **Cube Stacking**.
Download the checkpoints and evaluate them immediately!

See the :doc:`instruction` guide for download links and evaluation instructions.
Expand Down Expand Up @@ -35,6 +35,27 @@ OmniReset
</video>
<p style="margin-top: 10px; font-weight: bold;">Peg Insertion</p>
</div>
<div style="text-align: center;">
<video width="350" height="260" controls>
<source src="https://s3.us-west-004.backblazeb2.com/uwlab-assets/Media/OmniReset/rectangle.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
<p style="margin-top: 10px; font-weight: bold;">Rectangle Reorientation on Wall</p>
</div>
<div style="text-align: center;">
<video width="350" height="260" controls>
<source src="https://s3.us-west-004.backblazeb2.com/uwlab-assets/Media/OmniReset/cupcake.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
<p style="margin-top: 10px; font-weight: bold;">Cupcake on Plate</p>
</div>
<div style="text-align: center;">
<video width="350" height="260" controls>
<source src="https://s3.us-west-004.backblazeb2.com/uwlab-assets/Media/OmniReset/cube.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
<p style="margin-top: 10px; font-weight: bold;">Cube Stacking</p>
</div>
</div>

.. note::
Expand Down
35 changes: 20 additions & 15 deletions docs/source/publications/omnireset/instruction.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,11 @@ Choose your path: :ref:`evaluate our pre-trained checkpoints <evaluate-checkpoin
* **Drawer Assembly:** ``fbdrawerbottom`` / ``fbdrawerbox``
* **Twisting:** ``fbleg`` / ``fbtabletop``
* **Insertion:** ``peg`` / ``peghole``
* **Rectangle Reorientation on Wall:** ``rectangle`` / ``wall``
* **Cupcake on Plate:** ``cupcake`` / ``plate``
* **Cube Stacking:** ``cube`` / ``cube``

For grasp sampling, replace ``object`` with ``fbleg``, ``fbdrawerbottom``, or ``peg``.
For grasp sampling, replace ``object`` with ``fbleg``, ``fbdrawerbottom``, ``peg``, ``rectangle``, ``cupcake``, or ``cube``.

----

Expand All @@ -33,6 +36,9 @@ Download the pre-trained checkpoints from our Backblaze B2 storage (drawer assem
wget https://s3.us-west-004.backblazeb2.com/uwlab-assets/Policies/OmniReset/fbdrawerbottom_state_rl_expert.pt
wget https://s3.us-west-004.backblazeb2.com/uwlab-assets/Policies/OmniReset/fbleg_state_rl_expert.pt
wget https://s3.us-west-004.backblazeb2.com/uwlab-assets/Policies/OmniReset/peg_state_rl_expert.pt
wget https://s3.us-west-004.backblazeb2.com/uwlab-assets/Policies/OmniReset/rectangle_state_rl_expert.pt
wget https://s3.us-west-004.backblazeb2.com/uwlab-assets/Policies/OmniReset/cupcake_state_rl_expert.pt
wget https://s3.us-west-004.backblazeb2.com/uwlab-assets/Policies/OmniReset/cube_state_rl_expert.pt

Evaluate Checkpoints
^^^^^^^^^^^^^^^^^^^^
Expand Down Expand Up @@ -99,6 +105,10 @@ Object Anywhere, End-Effector Anywhere (Reaching)
Object Resting, End-Effector Grasped (Near Object)
""""""""""""""""""""""""""""""""""""""""""""""""""

.. warning::

This task depends on reset states from **Object Anywhere, End-Effector Anywhere**. If you are generating your own reset states, make sure to set ``base_paths`` in ``reset_states_cfg.py`` to point to your generated ``ObjectAnywhereEEAnywhere`` dataset directory.

.. code:: bash

python scripts_v2/tools/record_reset_states.py --task OmniReset-UR5eRobotiq2f85-ObjectRestingEEGrasped-v0 --num_envs 4096 --num_reset_states 10000 --headless --dataset_dir ./reset_state_datasets/ObjectRestingEEGrasped env.scene.insertive_object=insertive_object env.scene.receptive_object=receptive_object
Expand Down Expand Up @@ -154,29 +164,24 @@ Train reinforcement learning policies using the generated reset states.
Training Curves
^^^^^^^^^^^^^^^

Below are sample training curves for each task:
Below are success rate curves for each task plotting over number of training iterations and wall clock time when training on 4xL40S GPUs.
Insertion, twisting, cube stacking, and rectangle orientation on wall tasks converge within **8 hours**, while drawer assembly and cupcake on plate tasks take **1 day**.

.. list-table::
:widths: 33 33 33
:widths: 50 50
:class: borderless

* - .. figure:: ../../../source/_static/publications/omnireset/drawer_assembly_training_curve.jpg
:width: 100%
:alt: Drawer assembly training curve

Drawer Assembly task

- .. figure:: ../../../source/_static/publications/omnireset/twisting_training_curve.jpg
* - .. figure:: ../../../source/_static/publications/omnireset/success_rate_over_steps.jpg
:width: 100%
:alt: Leg Twisting training curve
:alt: Training curve over steps

Leg Twisting task
Success Rate of 6 Tasks Over Number of Training Iterations

- .. figure:: ../../../source/_static/publications/omnireset/peg_training_curve.jpg
- .. figure:: ../../../source/_static/publications/omnireset/success_rate_over_wall_clock.jpg
:width: 100%
:alt: Peg Insertion training curve
:alt: Training curve over wall clock time

Peg Insertion task
Success Rate of 6 Tasks Over Wall Clock Time

----

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,9 @@ def make_object(usd_path: str):
f"{UWLAB_CLOUD_ASSETS_DIR}/Props/FurnitureBench/DrawerBottom/drawer_bottom.usd"
),
"peg": make_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/Peg/peg.usd"),
"cupcake": make_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/CupCake/cupcake.usd"),
"cube": make_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/InsertiveCube/insertive_cube.usd"),
"rectangle": make_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/Rectangle/rectangle.usd"),
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,9 @@ def make_receptive_object(usd_path: str):
f"{UWLAB_CLOUD_ASSETS_DIR}/Props/FurnitureBench/DrawerBottom/drawer_bottom.usd"
),
"peg": make_insertive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/Peg/peg.usd"),
"cupcake": make_insertive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/CupCake/cupcake.usd"),
"cube": make_insertive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/InsertiveCube/insertive_cube.usd"),
"rectangle": make_insertive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/Rectangle/rectangle.usd"),
},
"scene.receptive_object": {
"fbtabletop": make_receptive_object(
Expand All @@ -241,6 +244,9 @@ def make_receptive_object(usd_path: str):
f"{UWLAB_CLOUD_ASSETS_DIR}/Props/FurnitureBench/DrawerBox/drawer_box.usd"
),
"peghole": make_receptive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/PegHole/peg_hole.usd"),
"plate": make_receptive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/Plate/plate.usd"),
"cube": make_receptive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/ReceptiveCube/receptive_cube.usd"),
"wall": make_receptive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/Wall/wall.usd"),
},
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ class ResetStatesBaseEventCfg:
"pose_range": {
"x": (0.3, 0.55),
"y": (-0.1, 0.3),
"z": (0.0, 0.01),
"z": (0.0, 0.001),
"roll": (0.0, 0.0),
"pitch": (0.0, 0.0),
"yaw": (-np.pi / 12, np.pi / 12),
Expand All @@ -196,7 +196,7 @@ class ObjectAnywhereEEAnywhereEventCfg(ResetStatesBaseEventCfg):
params={
"pose_range": {
"x": (0.3, 0.55),
"y": (-0.1, 0.3),
"y": (-0.1, 0.5),
"z": (0.0, 0.3),
"roll": (-np.pi, np.pi),
"pitch": (-np.pi, np.pi),
Expand Down Expand Up @@ -236,7 +236,7 @@ class ObjectRestingEEGraspedEventCfg(ResetStatesBaseEventCfg):
func=task_mdp.MultiResetManager,
mode="reset",
params={
"base_paths": [f"{UWLAB_CLOUD_ASSETS_DIR}/Datasets/Resets/Assemblies/ObjectAnywhereEEAnywhere"],
"base_paths": [f"{UWLAB_CLOUD_ASSETS_DIR}/Datasets/Resets/ObjectPairs/ObjectAnywhereEEAnywhere"],
"probs": [1.0],
},
)
Expand All @@ -245,7 +245,7 @@ class ObjectRestingEEGraspedEventCfg(ResetStatesBaseEventCfg):
func=task_mdp.reset_end_effector_from_grasp_dataset,
mode="reset",
params={
"base_path": f"{UWLAB_CLOUD_ASSETS_DIR}/Datasets/GraspSampling/Assemblies",
"base_path": f"{UWLAB_CLOUD_ASSETS_DIR}/Datasets/GraspSampling/ObjectPairs",
"fixed_asset_cfg": SceneEntityCfg("insertive_object"),
"robot_ik_cfg": SceneEntityCfg(
"robot", joint_names=["shoulder.*", "elbow.*", "wrist.*"], body_names="robotiq_base_link"
Expand Down Expand Up @@ -288,7 +288,7 @@ class ObjectAnywhereEEGraspedEventCfg(ResetStatesBaseEventCfg):
func=task_mdp.reset_end_effector_from_grasp_dataset,
mode="reset",
params={
"base_path": f"{UWLAB_CLOUD_ASSETS_DIR}/Datasets/GraspSampling/Assemblies",
"base_path": f"{UWLAB_CLOUD_ASSETS_DIR}/Datasets/GraspSampling/ObjectPairs",
"fixed_asset_cfg": SceneEntityCfg("insertive_object"),
"robot_ik_cfg": SceneEntityCfg(
"robot", joint_names=["shoulder.*", "elbow.*", "wrist.*"], body_names="robotiq_base_link"
Expand All @@ -312,7 +312,7 @@ class ObjectPartiallyAssembledEEAnywhereEventCfg(ResetStatesBaseEventCfg):
func=task_mdp.reset_insertive_object_from_partial_assembly_dataset,
mode="reset",
params={
"base_path": f"{UWLAB_CLOUD_ASSETS_DIR}/Datasets/PartialAssemblies/Assemblies",
"base_path": f"{UWLAB_CLOUD_ASSETS_DIR}/Datasets/PartialAssemblies/ObjectPairs",
"insertive_object_cfg": SceneEntityCfg("insertive_object"),
"receptive_object_cfg": SceneEntityCfg("receptive_object"),
"pose_range_b": {
Expand Down Expand Up @@ -353,7 +353,7 @@ class ObjectPartiallyAssembledEEGraspedEventCfg(ResetStatesBaseEventCfg):
func=task_mdp.reset_insertive_object_from_partial_assembly_dataset,
mode="reset",
params={
"base_path": f"{UWLAB_CLOUD_ASSETS_DIR}/Datasets/PartialAssemblies/Assemblies",
"base_path": f"{UWLAB_CLOUD_ASSETS_DIR}/Datasets/PartialAssemblies/ObjectPairs",
"insertive_object_cfg": SceneEntityCfg("insertive_object"),
"receptive_object_cfg": SceneEntityCfg("receptive_object"),
"pose_range_b": {
Expand All @@ -371,7 +371,7 @@ class ObjectPartiallyAssembledEEGraspedEventCfg(ResetStatesBaseEventCfg):
func=task_mdp.reset_end_effector_from_grasp_dataset,
mode="reset",
params={
"base_path": f"{UWLAB_CLOUD_ASSETS_DIR}/Datasets/GraspSampling/Assemblies",
"base_path": f"{UWLAB_CLOUD_ASSETS_DIR}/Datasets/GraspSampling/ObjectPairs",
"fixed_asset_cfg": SceneEntityCfg("insertive_object"),
"robot_ik_cfg": SceneEntityCfg(
"robot", joint_names=["shoulder.*", "elbow.*", "wrist.*"], body_names="robotiq_base_link"
Expand Down Expand Up @@ -428,7 +428,7 @@ class ResetStatesTerminationCfg:
],
"max_robot_pos_deviation": 0.05,
"max_object_pos_deviation": MISSING,
"pos_z_threshold": -0.01,
"pos_z_threshold": -0.02,
"consecutive_stability_steps": 5,
},
time_out=True,
Expand Down Expand Up @@ -492,6 +492,9 @@ def make_receptive_object(usd_path: str):
f"{UWLAB_CLOUD_ASSETS_DIR}/Props/FurnitureBench/DrawerBottom/drawer_bottom.usd"
),
"peg": make_insertive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/Peg/peg.usd"),
"cupcake": make_insertive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/CupCake/cupcake.usd"),
"cube": make_insertive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/InsertiveCube/insertive_cube.usd"),
"rectangle": make_insertive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/Rectangle/rectangle.usd"),
},
"scene.receptive_object": {
"fbtabletop": make_receptive_object(
Expand All @@ -501,6 +504,9 @@ def make_receptive_object(usd_path: str):
f"{UWLAB_CLOUD_ASSETS_DIR}/Props/FurnitureBench/DrawerBox/drawer_box.usd"
),
"peghole": make_receptive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/PegHole/peg_hole.usd"),
"plate": make_receptive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/Plate/plate.usd"),
"cube": make_receptive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/ReceptiveCube/receptive_cube.usd"),
"wall": make_receptive_object(f"{UWLAB_CLOUD_ASSETS_DIR}/Props/Custom/Wall/wall.usd"),
},
}

Expand Down Expand Up @@ -578,7 +584,7 @@ class ObjectPartiallyAssembledEEAnywhereResetStatesCfg(UR5eRobotiq2f85ResetState

def __post_init__(self):
super().__post_init__()
self.terminations.success.params["max_object_pos_deviation"] = 0.005
self.terminations.success.params["max_object_pos_deviation"] = 0.025


@configclass
Expand All @@ -587,4 +593,4 @@ class ObjectPartiallyAssembledEEGraspedResetStatesCfg(UR5eRobotiq2f85ResetStates

def __post_init__(self):
super().__post_init__()
self.terminations.success.params["max_object_pos_deviation"] = 0.005
self.terminations.success.params["max_object_pos_deviation"] = 0.025
Loading
Loading