From f29ffc828e1da58e21aff63949ee5fcbe0a3bbb1 Mon Sep 17 00:00:00 2001 From: Abhiram824 Date: Sun, 5 Jan 2025 01:18:39 -0600 Subject: [PATCH 1/4] updates to docs for v1.5 --- docs/algorithms/sim2real.md | 4 +- docs/demos.md | 16 +------ docs/images/robots_module_v15.png | Bin 0 -> 80417 bytes docs/modules/robots.md | 70 ------------------------------ docs/modules/robots.rst | 8 ++-- docs/overview.md | 2 +- docs/simulation/device.rst | 12 ++++- docs/simulation/robot.rst | 2 +- 8 files changed, 19 insertions(+), 95 deletions(-) create mode 100644 docs/images/robots_module_v15.png delete mode 100644 docs/modules/robots.md diff --git a/docs/algorithms/sim2real.md b/docs/algorithms/sim2real.md index d98f3388d1..e619a5932a 100644 --- a/docs/algorithms/sim2real.md +++ b/docs/algorithms/sim2real.md @@ -143,9 +143,7 @@ env.modify_observable( ) # Take a single environment step with positive joint velocity actions -arm_action = np.ones(env.robots[0].robot_model.dof) * 1.0 -gripper_action = [1] -action = np.concatenate([arm_action, gripper_action]) +action = np.ones(env.robots[0].robot_model.dof) * 1.0 env.step(action) # Now we can analyze what values were recorded diff --git a/docs/demos.md b/docs/demos.md index 636cefe938..bfd4953f4d 100644 --- a/docs/demos.md +++ b/docs/demos.md @@ -135,11 +135,7 @@ Furthermore, please choose environment specifics with the following arguments: * `--environment`: Task to perform, e.g., `Lift`, `TwoArmPegInHole`, `NutAssembly`, etc. -* `--robots`: Robot(s) with which to perform the task. Can be any in - {`Panda`, `Sawyer`, `IIWA`, `Jaco`, `Kinova3`, `UR5e`, `Baxter`}. Note that the environments include sanity - checks, such that a `TwoArm...` environment will only accept either a 2-tuple of robot names or a single - bimanual robot name, according to the specified configuration (see below), and all other environments will - only accept a single single-armed robot name +* `--robots`: Robot(s) with which to perform the task, e.g., `Tiago`, `Panda`, `GR1`, `Sawyer`, etc. Note that the environments include sanity checks, such that a `TwoArm...` environment will not accept configurations with a single, one-armed robot. * `--config`: Exclusively applicable and only should be specified for `TwoArm...` environments. Specifies the robot configuration desired for the task when two robots are inputted. Options are {`parallel` and `opposed`} @@ -152,14 +148,6 @@ Furthermore, please choose environment specifics with the following arguments: each other, facing each other from opposite directions. Expects a 2-tuple of robot names to be specified in the `--robots` argument. -* `--arm`: Exclusively applicable and only should be specified for `TwoArm...` environments. Specifies which of the - multiple arm eef's to control. The other (passive) arm will remain stationary. Options are {`right`, `left`} - (from the point of view of the robot(s) facing against the viewer direction) - -* `--switch-on-click`: Exclusively applicable and only should be specified for `TwoArm...` environments. If enabled, - will switch the current arm being controlled every time the gripper input is pressed - -* `--toggle-camera-on-click`: If enabled, gripper input presses will cycle through the available camera angles Examples: * For normal single-arm environment: @@ -168,7 +156,7 @@ $ python demo_device_control.py --environment PickPlaceCan --robots Sawyer ``` * For two-arm bimanual environment: ``` -$ python demo_device_control.py --environment TwoArmLift --robots Baxter --config bimanual --arm left +$ python demo_device_control.py --environment TwoArmLift --robots Tiago ``` * For two-arm multi single-arm robot environment: ``` diff --git a/docs/images/robots_module_v15.png b/docs/images/robots_module_v15.png new file mode 100644 index 0000000000000000000000000000000000000000..b6644fd9e3191ae128dfcc8faee7cea1cbd9e74f GIT binary patch literal 80417 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 c`(`?xuB%+xXs3WFdk444ORGo~OT6*`_-based classes, with support for both single-armed and bimanual variations. In turn, the Robot class is centrally defined by a `RobotModel <../modeling/robot_model.html>`_, `MountModel <../modeling/robot_model.html#mount-model>`_, and `Controller(s) <../simulation/controller.html>`_. Subclasses of the :class:`RobotModel` class may also include additional models as well; for example, the `ManipulatorModel <../modeling/robot_model.html#manipulator-model>`_ class also includes `GripperModel(s) <../modeling/robot_model.html#gripper-model>`_ (with no gripper being represented by a dummy class). +**Robots** are a key component in **robosuite**, and serve as the embodiment of a given agent as well as the central interaction point within an environment and key interface to MuJoCo for the robot-related state and control. **robosuite** captures this level of abstraction with the `Robot <../simulation/robot>`_-based classes, with support for both single-armed and bimanual variations, as well as robots with mobile manipulation capabilities, including both legged and wheeled variants. In turn, the Robot class is centrally defined by a `RobotModel <../modeling/robot_model>`_, `RobotBaseModel <../modeling/robot_model.html#robot-base-model>`_, `GripperModel <../modeling/robot_model.html#gripper-model>`_, and `Controller(s) <../simulation/controller>`_. Subclasses of the ``RobotModel`` class may also include additional models as well; for example, the `ManipulatorModel <../modeling/robot_model.html#manipulator-model>`_ class also includes `GripperModel(s) <../modeling/robot_model.html#gripper-model>`_ (with no gripper being represented by a dummy class). The high-level features of **robosuite**'s robots are described as follows: -* **Diverse and Realistic Models**: **robosuite** provides models for 8 commercially-available manipulator robots (including the bimanual Baxter robot), 7 grippers (including the popular Robotiq 140 / 85 models), and 6 controllers, with model properties either taken directly from the company website or raw spec sheets. +* **Diverse and Realistic Models**: **robosuite** provides models for 10 commercially-available robots (including the humanoid GR1 Robot), 9 grippers (including the inspire dexterous hand model), 4 bases (including the Omron wheeled mobile base), and 6 body-part controllers, with model properties either taken directly from official product documentation or raw spec sheets. An additional 8 robots, 8 grippers, and 3 bases can be installed separately from the `robosuite-models `_ repository. * **Modularized Support**: Robots are designed to be plug-n-play -- any combinations of robots, models, and controllers can be used, assuming the given environment is intended for the desired robot configuration. Because each robot is assigned a unique ID number, multiple instances of identical robots can be instantiated within the simulation without error. @@ -19,7 +19,7 @@ Below, we discuss the usage and functionality of the robots over the course of i Initialization -------------- -During environment creation (``suite.make(...)``), individual robots are both instantiated and initialized. The desired RobotModel, MountModel, and Controller(s) (where multiple and/or additional models may be specified, e.g. for manipulator bimanual robots) are loaded into each robot, with the models being passed into the environment to compose the final MuJoCo simulation object. Each robot is then set to its initial state. +During environment creation (``suite.make(...)``), individual robots are both instantiated and initialized. The desired RobotModel, RobotBaseModel, and Controller(s) (where multiple and/or additional models may be specified, e.g. for manipulator bimanual robots) are loaded into each robot, with the models being passed into the environment to compose the final MuJoCo simulation object. Each robot is then set to its initial state. Runtime ------- diff --git a/docs/overview.md b/docs/overview.md index cb88ec7b16..8fdf7606f7 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -28,7 +28,7 @@ Please cite [**robosuite**](https://robosuite.ai) if you use this framework in y ```bibtex @inproceedings{robosuite2020, title={robosuite: A Modular Simulation Framework and Benchmark for Robot Learning}, - author={Yuke Zhu and Josiah Wong and Ajay Mandlekar and Roberto Mart\'{i}n-Mart\'{i}n and Abhishek Joshi and Kevin Lin and Soroush Nasiriany and Yifeng Zhu}, + author={Yuke Zhu and Josiah Wong and Ajay Mandlekar and Roberto Mart\'{i}n-Mart\'{i}n and Abhishek Joshi and Kevin Lin and Abhiram Maddukuri and Soroush Nasiriany and Yifeng Zhu}, booktitle={arXiv preprint arXiv:2009.12293}, year={2020} } diff --git a/docs/simulation/device.rst b/docs/simulation/device.rst index c8fde7ab1a..f9922b39f4 100644 --- a/docs/simulation/device.rst +++ b/docs/simulation/device.rst @@ -30,6 +30,14 @@ SpaceMouse Device .. automethod:: get_controller_state .. automethod:: run - .. autoproperty:: control - .. autoproperty:: control_gripper + .. automethod:: control + .. automethod:: control_gripper + .. automethod:: _display_controls + +MjGUI Device +------------ +.. autoclass:: robosuite.devices.mjgui.MjGUI + + .. automethod:: get_controller_state + .. automethod:: input2action .. automethod:: _display_controls diff --git a/docs/simulation/robot.rst b/docs/simulation/robot.rst index 2d7227f7d8..fbe2cb813e 100644 --- a/docs/simulation/robot.rst +++ b/docs/simulation/robot.rst @@ -1,7 +1,7 @@ Robot ===== -The ``Robot`` class defines a simulation object encapsulating a robot model, gripper model, and controller. Robosuite uses class extensions of this base class to model different robotic domains. The current release focuses on manipulation, and includes a ``Manipulator`` class, which itself is extended by ``SingleArm`` and ``Bimanual`` classes representing the two different types of supported robots. +The ``Robot`` class defines a simulation object encapsulating a robot model, gripper model, base model, and controller. Robosuite uses class extensions of this base class to model different robotic domains. The current release focuses on manipulation and mobility, and includes a ``MobileRobot`` class, which itself is extended by ``WheeledRobot`` and ``LeggedRobot`` classes representing different types of mobile robots. Base Robot ---------- From 4ce16b50642bec5b761e15039e7f94de5679074b Mon Sep 17 00:00:00 2001 From: Abhiram824 Date: Sun, 5 Jan 2025 02:03:06 -0600 Subject: [PATCH 2/4] updated changelog --- docs/changelog.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/changelog.md b/docs/changelog.md index 9a85deff01..863e8b200e 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -7,6 +7,21 @@

Breaking API changes

-
    New controller design.
+
    +
  • + New controller design: Introduction of composite controllers, which take in a high-level action vector and converts it into commands for each body part controller. +
  • +
+
+ + +
+
    +
  • Introduction of custom robot composition: arms, grippers, and bases can be swapped to create new robots configurations
  • +
  • Integration of more diverse robot embodiments: including humanoids, quadrupeds, and more
  • +
  • Support for mobile manipulation, whole body IK, and third-party controllers (e.g. Mink)
  • +
  • Implementation of MuJoCo viewer drag-drop teleoperation interface
  • +
  • Support for photo-realistic rendering via USD exporting and NVIDIA Isaac Sim rendering
  • +
\ No newline at end of file From efb14bfe5fc353a08064e9b53c1ed13f2f1d1345 Mon Sep 17 00:00:00 2001 From: Abhiram824 Date: Sun, 5 Jan 2025 17:20:15 -0600 Subject: [PATCH 3/4] update mjgui docs --- docs/simulation/device.rst | 2 +- robosuite/devices/mjgui.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/simulation/device.rst b/docs/simulation/device.rst index f9922b39f4..c7c1ead6dc 100644 --- a/docs/simulation/device.rst +++ b/docs/simulation/device.rst @@ -36,7 +36,7 @@ SpaceMouse Device MjGUI Device ------------ -.. autoclass:: robosuite.devices.mjgui.MjGUI +.. autoclass:: robosuite.devices.mjgui.MJGUI .. automethod:: get_controller_state .. automethod:: input2action diff --git a/robosuite/devices/mjgui.py b/robosuite/devices/mjgui.py index 61876d0f22..4c5d5f4916 100644 --- a/robosuite/devices/mjgui.py +++ b/robosuite/devices/mjgui.py @@ -122,8 +122,8 @@ def input2action(self) -> Dict[str, np.ndarray]: (i.e. absolute actions or delta actions) and input_ref_frame (i.e. world frame, base frame or eef frame) from the controller itself. - TODO: unify this logic to be independent from controller type. """ + # TODO: unify this logic to be independent from controller type. action: Dict[str, np.ndarray] = {} gripper_dof = self.env.robots[0].gripper[self.active_end_effector].dof site_names = self._get_site_names() From d31f1c2c63f95865002586a2473537dc272bb0d0 Mon Sep 17 00:00:00 2001 From: Abhiram824 Date: Sun, 5 Jan 2025 17:21:11 -0600 Subject: [PATCH 4/4] update autogenerated rst files from docstrings --- .../robosuite.controllers.composite.rst | 29 +++++ .../robosuite.controllers.parts.arm.rst | 29 +++++ .../robosuite.controllers.parts.generic.rst | 37 ++++++ .../robosuite.controllers.parts.gripper.rst | 29 +++++ ...obosuite.controllers.parts.mobile_base.rst | 29 +++++ docs/source/robosuite.controllers.parts.rst | 40 ++++++ docs/source/robosuite.controllers.rst | 62 +--------- docs/source/robosuite.devices.rst | 8 ++ .../robosuite.environments.manipulation.rst | 20 ++- docs/source/robosuite.models.arenas.rst | 8 ++ docs/source/robosuite.models.bases.rst | 117 ++++++++++++++++++ docs/source/robosuite.models.grippers.rst | 24 ++++ .../robosuite.models.objects.composite.rst | 48 +++++++ ...obosuite.models.objects.composite_body.rst | 8 ++ .../source/robosuite.models.objects.group.rst | 21 ++++ docs/source/robosuite.models.objects.rst | 9 ++ .../robosuite.models.robots.manipulators.rst | 48 +++++++ docs/source/robosuite.models.robots.rst | 8 ++ docs/source/robosuite.models.rst | 2 +- docs/source/robosuite.renderers.context.rst | 37 ++++++ docs/source/robosuite.renderers.mjviewer.rst | 21 ++++ docs/source/robosuite.renderers.rst | 1 + docs/source/robosuite.robots.rst | 26 ++-- docs/source/robosuite.rst | 8 ++ docs/source/robosuite.utils.rst | 32 +++++ 25 files changed, 625 insertions(+), 76 deletions(-) create mode 100644 docs/source/robosuite.controllers.composite.rst create mode 100644 docs/source/robosuite.controllers.parts.arm.rst create mode 100644 docs/source/robosuite.controllers.parts.generic.rst create mode 100644 docs/source/robosuite.controllers.parts.gripper.rst create mode 100644 docs/source/robosuite.controllers.parts.mobile_base.rst create mode 100644 docs/source/robosuite.controllers.parts.rst create mode 100644 docs/source/robosuite.models.bases.rst create mode 100644 docs/source/robosuite.models.objects.group.rst create mode 100644 docs/source/robosuite.renderers.context.rst create mode 100644 docs/source/robosuite.renderers.mjviewer.rst diff --git a/docs/source/robosuite.controllers.composite.rst b/docs/source/robosuite.controllers.composite.rst new file mode 100644 index 0000000000..2af588cbc6 --- /dev/null +++ b/docs/source/robosuite.controllers.composite.rst @@ -0,0 +1,29 @@ +robosuite.controllers.composite package +======================================= + +Submodules +---------- + +robosuite.controllers.composite.composite\_controller module +------------------------------------------------------------ + +.. automodule:: robosuite.controllers.composite.composite_controller + :members: + :undoc-members: + :show-inheritance: + +robosuite.controllers.composite.composite\_controller\_factory module +--------------------------------------------------------------------- + +.. automodule:: robosuite.controllers.composite.composite_controller_factory + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: robosuite.controllers.composite + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/robosuite.controllers.parts.arm.rst b/docs/source/robosuite.controllers.parts.arm.rst new file mode 100644 index 0000000000..605af3e163 --- /dev/null +++ b/docs/source/robosuite.controllers.parts.arm.rst @@ -0,0 +1,29 @@ +robosuite.controllers.parts.arm package +======================================= + +Submodules +---------- + +robosuite.controllers.parts.arm.ik module +----------------------------------------- + +.. automodule:: robosuite.controllers.parts.arm.ik + :members: + :undoc-members: + :show-inheritance: + +robosuite.controllers.parts.arm.osc module +------------------------------------------ + +.. automodule:: robosuite.controllers.parts.arm.osc + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: robosuite.controllers.parts.arm + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/robosuite.controllers.parts.generic.rst b/docs/source/robosuite.controllers.parts.generic.rst new file mode 100644 index 0000000000..acfe59215f --- /dev/null +++ b/docs/source/robosuite.controllers.parts.generic.rst @@ -0,0 +1,37 @@ +robosuite.controllers.parts.generic package +=========================================== + +Submodules +---------- + +robosuite.controllers.parts.generic.joint\_pos module +----------------------------------------------------- + +.. automodule:: robosuite.controllers.parts.generic.joint_pos + :members: + :undoc-members: + :show-inheritance: + +robosuite.controllers.parts.generic.joint\_tor module +----------------------------------------------------- + +.. automodule:: robosuite.controllers.parts.generic.joint_tor + :members: + :undoc-members: + :show-inheritance: + +robosuite.controllers.parts.generic.joint\_vel module +----------------------------------------------------- + +.. automodule:: robosuite.controllers.parts.generic.joint_vel + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: robosuite.controllers.parts.generic + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/robosuite.controllers.parts.gripper.rst b/docs/source/robosuite.controllers.parts.gripper.rst new file mode 100644 index 0000000000..8652c23a0c --- /dev/null +++ b/docs/source/robosuite.controllers.parts.gripper.rst @@ -0,0 +1,29 @@ +robosuite.controllers.parts.gripper package +=========================================== + +Submodules +---------- + +robosuite.controllers.parts.gripper.gripper\_controller module +-------------------------------------------------------------- + +.. automodule:: robosuite.controllers.parts.gripper.gripper_controller + :members: + :undoc-members: + :show-inheritance: + +robosuite.controllers.parts.gripper.simple\_grip module +------------------------------------------------------- + +.. automodule:: robosuite.controllers.parts.gripper.simple_grip + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: robosuite.controllers.parts.gripper + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/robosuite.controllers.parts.mobile_base.rst b/docs/source/robosuite.controllers.parts.mobile_base.rst new file mode 100644 index 0000000000..cb897b199a --- /dev/null +++ b/docs/source/robosuite.controllers.parts.mobile_base.rst @@ -0,0 +1,29 @@ +robosuite.controllers.parts.mobile\_base package +================================================ + +Submodules +---------- + +robosuite.controllers.parts.mobile\_base.joint\_vel module +---------------------------------------------------------- + +.. automodule:: robosuite.controllers.parts.mobile_base.joint_vel + :members: + :undoc-members: + :show-inheritance: + +robosuite.controllers.parts.mobile\_base.mobile\_base\_controller module +------------------------------------------------------------------------ + +.. automodule:: robosuite.controllers.parts.mobile_base.mobile_base_controller + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: robosuite.controllers.parts.mobile_base + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/robosuite.controllers.parts.rst b/docs/source/robosuite.controllers.parts.rst new file mode 100644 index 0000000000..333df06bba --- /dev/null +++ b/docs/source/robosuite.controllers.parts.rst @@ -0,0 +1,40 @@ +robosuite.controllers.parts package +=================================== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + robosuite.controllers.parts.arm + robosuite.controllers.parts.generic + robosuite.controllers.parts.gripper + robosuite.controllers.parts.mobile_base + +Submodules +---------- + +robosuite.controllers.parts.controller module +--------------------------------------------- + +.. automodule:: robosuite.controllers.parts.controller + :members: + :undoc-members: + :show-inheritance: + +robosuite.controllers.parts.controller\_factory module +------------------------------------------------------ + +.. automodule:: robosuite.controllers.parts.controller_factory + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: robosuite.controllers.parts + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/robosuite.controllers.rst b/docs/source/robosuite.controllers.rst index 8ef16210c0..8eb30b4c4a 100644 --- a/docs/source/robosuite.controllers.rst +++ b/docs/source/robosuite.controllers.rst @@ -7,66 +7,8 @@ Subpackages .. toctree:: :maxdepth: 4 - robosuite.controllers.interpolators - -Submodules ----------- - -robosuite.controllers.base\_controller module ---------------------------------------------- - -.. automodule:: robosuite.controllers.base_controller - :members: - :undoc-members: - :show-inheritance: - -robosuite.controllers.controller\_factory module ------------------------------------------------- - -.. automodule:: robosuite.controllers.controller_factory - :members: - :undoc-members: - :show-inheritance: - -robosuite.controllers.ik module -------------------------------- - -.. automodule:: robosuite.controllers.ik - :members: - :undoc-members: - :show-inheritance: - -robosuite.controllers.joint\_pos module ---------------------------------------- - -.. automodule:: robosuite.controllers.joint_pos - :members: - :undoc-members: - :show-inheritance: - -robosuite.controllers.joint\_tor module ---------------------------------------- - -.. automodule:: robosuite.controllers.joint_tor - :members: - :undoc-members: - :show-inheritance: - -robosuite.controllers.joint\_vel module ---------------------------------------- - -.. automodule:: robosuite.controllers.joint_vel - :members: - :undoc-members: - :show-inheritance: - -robosuite.controllers.osc module --------------------------------- - -.. automodule:: robosuite.controllers.osc - :members: - :undoc-members: - :show-inheritance: + robosuite.controllers.composite + robosuite.controllers.parts Module contents --------------- diff --git a/docs/source/robosuite.devices.rst b/docs/source/robosuite.devices.rst index 14633059db..9a9605c42a 100644 --- a/docs/source/robosuite.devices.rst +++ b/docs/source/robosuite.devices.rst @@ -20,6 +20,14 @@ robosuite.devices.keyboard module :undoc-members: :show-inheritance: +robosuite.devices.mjgui module +------------------------------ + +.. automodule:: robosuite.devices.mjgui + :members: + :undoc-members: + :show-inheritance: + robosuite.devices.spacemouse module ----------------------------------- diff --git a/docs/source/robosuite.environments.manipulation.rst b/docs/source/robosuite.environments.manipulation.rst index 74f8b90fa6..728e45aae9 100644 --- a/docs/source/robosuite.environments.manipulation.rst +++ b/docs/source/robosuite.environments.manipulation.rst @@ -44,18 +44,18 @@ robosuite.environments.manipulation.pick\_place module :undoc-members: :show-inheritance: -robosuite.environments.manipulation.single\_arm\_env module ------------------------------------------------------------ +robosuite.environments.manipulation.stack module +------------------------------------------------ -.. automodule:: robosuite.environments.manipulation.single_arm_env +.. automodule:: robosuite.environments.manipulation.stack :members: :undoc-members: :show-inheritance: -robosuite.environments.manipulation.stack module ------------------------------------------------- +robosuite.environments.manipulation.tool\_hang module +----------------------------------------------------- -.. automodule:: robosuite.environments.manipulation.stack +.. automodule:: robosuite.environments.manipulation.tool_hang :members: :undoc-members: :show-inheritance: @@ -92,6 +92,14 @@ robosuite.environments.manipulation.two\_arm\_peg\_in\_hole module :undoc-members: :show-inheritance: +robosuite.environments.manipulation.two\_arm\_transport module +-------------------------------------------------------------- + +.. automodule:: robosuite.environments.manipulation.two_arm_transport + :members: + :undoc-members: + :show-inheritance: + robosuite.environments.manipulation.wipe module ----------------------------------------------- diff --git a/docs/source/robosuite.models.arenas.rst b/docs/source/robosuite.models.arenas.rst index ff42472ecf..54b12506d5 100644 --- a/docs/source/robosuite.models.arenas.rst +++ b/docs/source/robosuite.models.arenas.rst @@ -28,6 +28,14 @@ robosuite.models.arenas.empty\_arena module :undoc-members: :show-inheritance: +robosuite.models.arenas.multi\_table\_arena module +-------------------------------------------------- + +.. automodule:: robosuite.models.arenas.multi_table_arena + :members: + :undoc-members: + :show-inheritance: + robosuite.models.arenas.pegs\_arena module ------------------------------------------ diff --git a/docs/source/robosuite.models.bases.rst b/docs/source/robosuite.models.bases.rst new file mode 100644 index 0000000000..aca6fd371f --- /dev/null +++ b/docs/source/robosuite.models.bases.rst @@ -0,0 +1,117 @@ +robosuite.models.bases package +============================== + +Submodules +---------- + +robosuite.models.bases.floating\_legged\_base module +---------------------------------------------------- + +.. automodule:: robosuite.models.bases.floating_legged_base + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.bases.leg\_base\_model module +---------------------------------------------- + +.. automodule:: robosuite.models.bases.leg_base_model + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.bases.mobile\_base\_model module +------------------------------------------------- + +.. automodule:: robosuite.models.bases.mobile_base_model + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.bases.mount\_model module +------------------------------------------ + +.. automodule:: robosuite.models.bases.mount_model + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.bases.no\_actuation\_base module +------------------------------------------------- + +.. automodule:: robosuite.models.bases.no_actuation_base + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.bases.null\_mobile\_base module +------------------------------------------------ + +.. automodule:: robosuite.models.bases.null_mobile_base + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.bases.null\_mount module +----------------------------------------- + +.. automodule:: robosuite.models.bases.null_mount + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.bases.omron\_mobile\_base module +------------------------------------------------- + +.. automodule:: robosuite.models.bases.omron_mobile_base + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.bases.rethink\_minimal\_mount module +----------------------------------------------------- + +.. automodule:: robosuite.models.bases.rethink_minimal_mount + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.bases.rethink\_mount module +-------------------------------------------- + +.. automodule:: robosuite.models.bases.rethink_mount + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.bases.robot\_base\_factory module +-------------------------------------------------- + +.. automodule:: robosuite.models.bases.robot_base_factory + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.bases.robot\_base\_model module +------------------------------------------------ + +.. automodule:: robosuite.models.bases.robot_base_model + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.bases.spot\_base module +---------------------------------------- + +.. automodule:: robosuite.models.bases.spot_base + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: robosuite.models.bases + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/robosuite.models.grippers.rst b/docs/source/robosuite.models.grippers.rst index b65eac0b17..e0edddcb53 100644 --- a/docs/source/robosuite.models.grippers.rst +++ b/docs/source/robosuite.models.grippers.rst @@ -4,6 +4,22 @@ robosuite.models.grippers package Submodules ---------- +robosuite.models.grippers.bd\_gripper module +-------------------------------------------- + +.. automodule:: robosuite.models.grippers.bd_gripper + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.grippers.fourier\_hands module +----------------------------------------------- + +.. automodule:: robosuite.models.grippers.fourier_hands + :members: + :undoc-members: + :show-inheritance: + robosuite.models.grippers.gripper\_factory module ------------------------------------------------- @@ -28,6 +44,14 @@ robosuite.models.grippers.gripper\_tester module :undoc-members: :show-inheritance: +robosuite.models.grippers.inspire\_hands module +----------------------------------------------- + +.. automodule:: robosuite.models.grippers.inspire_hands + :members: + :undoc-members: + :show-inheritance: + robosuite.models.grippers.jaco\_three\_finger\_gripper module ------------------------------------------------------------- diff --git a/docs/source/robosuite.models.objects.composite.rst b/docs/source/robosuite.models.objects.composite.rst index 3bfa093d68..d182bd0909 100644 --- a/docs/source/robosuite.models.objects.composite.rst +++ b/docs/source/robosuite.models.objects.composite.rst @@ -4,6 +4,22 @@ robosuite.models.objects.composite package Submodules ---------- +robosuite.models.objects.composite.bin module +--------------------------------------------- + +.. automodule:: robosuite.models.objects.composite.bin + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.objects.composite.cone module +---------------------------------------------- + +.. automodule:: robosuite.models.objects.composite.cone + :members: + :undoc-members: + :show-inheritance: + robosuite.models.objects.composite.hammer module ------------------------------------------------ @@ -12,6 +28,30 @@ robosuite.models.objects.composite.hammer module :undoc-members: :show-inheritance: +robosuite.models.objects.composite.hollow\_cylinder module +---------------------------------------------------------- + +.. automodule:: robosuite.models.objects.composite.hollow_cylinder + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.objects.composite.hook\_frame module +----------------------------------------------------- + +.. automodule:: robosuite.models.objects.composite.hook_frame + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.objects.composite.lid module +--------------------------------------------- + +.. automodule:: robosuite.models.objects.composite.lid + :members: + :undoc-members: + :show-inheritance: + robosuite.models.objects.composite.pot\_with\_handles module ------------------------------------------------------------ @@ -20,6 +60,14 @@ robosuite.models.objects.composite.pot\_with\_handles module :undoc-members: :show-inheritance: +robosuite.models.objects.composite.stand\_with\_mount module +------------------------------------------------------------ + +.. automodule:: robosuite.models.objects.composite.stand_with_mount + :members: + :undoc-members: + :show-inheritance: + Module contents --------------- diff --git a/docs/source/robosuite.models.objects.composite_body.rst b/docs/source/robosuite.models.objects.composite_body.rst index 701da2b47a..1bf48f8a77 100644 --- a/docs/source/robosuite.models.objects.composite_body.rst +++ b/docs/source/robosuite.models.objects.composite_body.rst @@ -12,6 +12,14 @@ robosuite.models.objects.composite\_body.hinged\_box module :undoc-members: :show-inheritance: +robosuite.models.objects.composite\_body.ratcheting\_wrench module +------------------------------------------------------------------ + +.. automodule:: robosuite.models.objects.composite_body.ratcheting_wrench + :members: + :undoc-members: + :show-inheritance: + Module contents --------------- diff --git a/docs/source/robosuite.models.objects.group.rst b/docs/source/robosuite.models.objects.group.rst new file mode 100644 index 0000000000..a1caaedbee --- /dev/null +++ b/docs/source/robosuite.models.objects.group.rst @@ -0,0 +1,21 @@ +robosuite.models.objects.group package +====================================== + +Submodules +---------- + +robosuite.models.objects.group.transport module +----------------------------------------------- + +.. automodule:: robosuite.models.objects.group.transport + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: robosuite.models.objects.group + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/robosuite.models.objects.rst b/docs/source/robosuite.models.objects.rst index ade511ce5a..c820d2fcd4 100644 --- a/docs/source/robosuite.models.objects.rst +++ b/docs/source/robosuite.models.objects.rst @@ -9,6 +9,7 @@ Subpackages robosuite.models.objects.composite robosuite.models.objects.composite_body + robosuite.models.objects.group robosuite.models.objects.primitive Submodules @@ -22,6 +23,14 @@ robosuite.models.objects.generated\_objects module :undoc-members: :show-inheritance: +robosuite.models.objects.object\_groups module +---------------------------------------------- + +.. automodule:: robosuite.models.objects.object_groups + :members: + :undoc-members: + :show-inheritance: + robosuite.models.objects.objects module --------------------------------------- diff --git a/docs/source/robosuite.models.robots.manipulators.rst b/docs/source/robosuite.models.robots.manipulators.rst index 9f35a578f2..1286fcb8e5 100644 --- a/docs/source/robosuite.models.robots.manipulators.rst +++ b/docs/source/robosuite.models.robots.manipulators.rst @@ -12,6 +12,30 @@ robosuite.models.robots.manipulators.baxter\_robot module :undoc-members: :show-inheritance: +robosuite.models.robots.manipulators.gr1\_robot module +------------------------------------------------------ + +.. automodule:: robosuite.models.robots.manipulators.gr1_robot + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.robots.manipulators.humanoid\_model module +----------------------------------------------------------- + +.. automodule:: robosuite.models.robots.manipulators.humanoid_model + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.robots.manipulators.humanoid\_upperbody\_model module +---------------------------------------------------------------------- + +.. automodule:: robosuite.models.robots.manipulators.humanoid_upperbody_model + :members: + :undoc-members: + :show-inheritance: + robosuite.models.robots.manipulators.iiwa\_robot module ------------------------------------------------------- @@ -36,6 +60,14 @@ robosuite.models.robots.manipulators.kinova3\_robot module :undoc-members: :show-inheritance: +robosuite.models.robots.manipulators.legged\_manipulator\_model module +---------------------------------------------------------------------- + +.. automodule:: robosuite.models.robots.manipulators.legged_manipulator_model + :members: + :undoc-members: + :show-inheritance: + robosuite.models.robots.manipulators.manipulator\_model module -------------------------------------------------------------- @@ -60,6 +92,22 @@ robosuite.models.robots.manipulators.sawyer\_robot module :undoc-members: :show-inheritance: +robosuite.models.robots.manipulators.spot\_arm module +----------------------------------------------------- + +.. automodule:: robosuite.models.robots.manipulators.spot_arm + :members: + :undoc-members: + :show-inheritance: + +robosuite.models.robots.manipulators.tiago\_robot module +-------------------------------------------------------- + +.. automodule:: robosuite.models.robots.manipulators.tiago_robot + :members: + :undoc-members: + :show-inheritance: + robosuite.models.robots.manipulators.ur5e\_robot module ------------------------------------------------------- diff --git a/docs/source/robosuite.models.robots.rst b/docs/source/robosuite.models.robots.rst index 36cba107be..186ec1f201 100644 --- a/docs/source/robosuite.models.robots.rst +++ b/docs/source/robosuite.models.robots.rst @@ -12,6 +12,14 @@ Subpackages Submodules ---------- +robosuite.models.robots.compositional module +-------------------------------------------- + +.. automodule:: robosuite.models.robots.compositional + :members: + :undoc-members: + :show-inheritance: + robosuite.models.robots.robot\_model module ------------------------------------------- diff --git a/docs/source/robosuite.models.rst b/docs/source/robosuite.models.rst index d322daa5f1..be78f5ccb4 100644 --- a/docs/source/robosuite.models.rst +++ b/docs/source/robosuite.models.rst @@ -8,8 +8,8 @@ Subpackages :maxdepth: 4 robosuite.models.arenas + robosuite.models.bases robosuite.models.grippers - robosuite.models.mounts robosuite.models.objects robosuite.models.robots robosuite.models.tasks diff --git a/docs/source/robosuite.renderers.context.rst b/docs/source/robosuite.renderers.context.rst new file mode 100644 index 0000000000..81b92a814a --- /dev/null +++ b/docs/source/robosuite.renderers.context.rst @@ -0,0 +1,37 @@ +robosuite.renderers.context package +=================================== + +Submodules +---------- + +robosuite.renderers.context.egl\_context module +----------------------------------------------- + +.. automodule:: robosuite.renderers.context.egl_context + :members: + :undoc-members: + :show-inheritance: + +robosuite.renderers.context.glfw\_context module +------------------------------------------------ + +.. automodule:: robosuite.renderers.context.glfw_context + :members: + :undoc-members: + :show-inheritance: + +robosuite.renderers.context.osmesa\_context module +-------------------------------------------------- + +.. automodule:: robosuite.renderers.context.osmesa_context + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: robosuite.renderers.context + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/robosuite.renderers.mjviewer.rst b/docs/source/robosuite.renderers.mjviewer.rst new file mode 100644 index 0000000000..d4abf681c9 --- /dev/null +++ b/docs/source/robosuite.renderers.mjviewer.rst @@ -0,0 +1,21 @@ +robosuite.renderers.mjviewer package +==================================== + +Submodules +---------- + +robosuite.renderers.mjviewer.mjviewer\_renderer module +------------------------------------------------------ + +.. automodule:: robosuite.renderers.mjviewer.mjviewer_renderer + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: robosuite.renderers.mjviewer + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/robosuite.renderers.rst b/docs/source/robosuite.renderers.rst index 99f8aec74c..3e4514e899 100644 --- a/docs/source/robosuite.renderers.rst +++ b/docs/source/robosuite.renderers.rst @@ -8,6 +8,7 @@ Subpackages :maxdepth: 4 robosuite.renderers.context + robosuite.renderers.mjviewer Submodules ---------- diff --git a/docs/source/robosuite.robots.rst b/docs/source/robosuite.robots.rst index 87fb90b4b0..52c8e34a78 100644 --- a/docs/source/robosuite.robots.rst +++ b/docs/source/robosuite.robots.rst @@ -4,18 +4,26 @@ robosuite.robots package Submodules ---------- -robosuite.robots.bimanual module --------------------------------- +robosuite.robots.fixed\_base\_robot module +------------------------------------------ -.. automodule:: robosuite.robots.bimanual +.. automodule:: robosuite.robots.fixed_base_robot :members: :undoc-members: :show-inheritance: -robosuite.robots.manipulator module ------------------------------------ +robosuite.robots.legged\_robot module +------------------------------------- -.. automodule:: robosuite.robots.manipulator +.. automodule:: robosuite.robots.legged_robot + :members: + :undoc-members: + :show-inheritance: + +robosuite.robots.mobile\_robot module +------------------------------------- + +.. automodule:: robosuite.robots.mobile_robot :members: :undoc-members: :show-inheritance: @@ -28,10 +36,10 @@ robosuite.robots.robot module :undoc-members: :show-inheritance: -robosuite.robots.single\_arm module ------------------------------------ +robosuite.robots.wheeled\_robot module +-------------------------------------- -.. automodule:: robosuite.robots.single_arm +.. automodule:: robosuite.robots.wheeled_robot :members: :undoc-members: :show-inheritance: diff --git a/docs/source/robosuite.rst b/docs/source/robosuite.rst index 444d18344c..daa6bdf84a 100644 --- a/docs/source/robosuite.rst +++ b/docs/source/robosuite.rst @@ -27,6 +27,14 @@ robosuite.macros module :undoc-members: :show-inheritance: +robosuite.macros\_private module +-------------------------------- + +.. automodule:: robosuite.macros_private + :members: + :undoc-members: + :show-inheritance: + Module contents --------------- diff --git a/docs/source/robosuite.utils.rst b/docs/source/robosuite.utils.rst index be45a0de2e..b1295abc7d 100644 --- a/docs/source/robosuite.utils.rst +++ b/docs/source/robosuite.utils.rst @@ -44,6 +44,14 @@ robosuite.utils.errors module :undoc-members: :show-inheritance: +robosuite.utils.ik\_utils module +-------------------------------- + +.. automodule:: robosuite.utils.ik_utils + :members: + :undoc-members: + :show-inheritance: + robosuite.utils.input\_utils module ----------------------------------- @@ -108,6 +116,14 @@ robosuite.utils.placement\_samplers module :undoc-members: :show-inheritance: +robosuite.utils.robot\_composition\_utils module +------------------------------------------------ + +.. automodule:: robosuite.utils.robot_composition_utils + :members: + :undoc-members: + :show-inheritance: + robosuite.utils.robot\_utils module ----------------------------------- @@ -116,6 +132,22 @@ robosuite.utils.robot\_utils module :undoc-members: :show-inheritance: +robosuite.utils.sim\_utils module +--------------------------------- + +.. automodule:: robosuite.utils.sim_utils + :members: + :undoc-members: + :show-inheritance: + +robosuite.utils.traj\_utils module +---------------------------------- + +.. automodule:: robosuite.utils.traj_utils + :members: + :undoc-members: + :show-inheritance: + robosuite.utils.transform\_utils module ---------------------------------------