From 9a6ed31f9b27a7b0415f4ba0c124c23490e459bf Mon Sep 17 00:00:00 2001 From: suman1209 Date: Mon, 3 Mar 2025 16:50:58 +0100 Subject: [PATCH 1/5] feat(doc): added initial documentation page based on pydata-sphinx-theme --- README.md | 6 ++++ docs/source/_static/.gitkeep | 0 docs/source/_templates/.gitkeep | 0 docs/source/architecture/rcs_architecture.rst | 33 ++++++++++++++++++ docs/source/conf.py | 28 +++++++++++++++ docs/source/getting_started/demo.rst | 23 +++++++++++++ docs/source/getting_started/installation.rst | 34 +++++++++++++++++++ docs/source/getting_started/usage.rst | 23 +++++++++++++ docs/source/index.rst | 26 ++++++++++++++ requirements_dev.txt | 1 + 10 files changed, 174 insertions(+) create mode 100644 docs/source/_static/.gitkeep create mode 100644 docs/source/_templates/.gitkeep create mode 100644 docs/source/architecture/rcs_architecture.rst create mode 100644 docs/source/conf.py create mode 100644 docs/source/getting_started/demo.rst create mode 100644 docs/source/getting_started/installation.rst create mode 100644 docs/source/getting_started/usage.rst create mode 100644 docs/source/index.rst diff --git a/README.md b/README.md index 9fadd6f5..84265f8d 100644 --- a/README.md +++ b/README.md @@ -65,3 +65,9 @@ If the python bindings in the C++ code have changed you might need to regenerate ```shell make stubgen ``` + +### TO build the documentation locally +``` +cd docs +sphinx-build -M html ./source/ ./build +``` \ No newline at end of file diff --git a/docs/source/_static/.gitkeep b/docs/source/_static/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/docs/source/_templates/.gitkeep b/docs/source/_templates/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/docs/source/architecture/rcs_architecture.rst b/docs/source/architecture/rcs_architecture.rst new file mode 100644 index 00000000..cd05ba14 --- /dev/null +++ b/docs/source/architecture/rcs_architecture.rst @@ -0,0 +1,33 @@ +Robot Control Stack architecture +================================ + +A core contribution of RCS is a simple yet versatile +architecture that allows for easy extension and customization. +The architecture is organized in multiple layers that represent +increasing levels of abstraction from platform-specific im- +plementation details. While lower layers are implemented in +C++, higher layers are implemented in Python or provide +bindings for Python. Rapid prototyping and performance- +critical code are therefore supported equally well. +RCS uses `MuJoCo `_ as its simulator and the `Robotics +Library `_ for inverse kinematics. There is support for +Franka robots through the native library provided by the + +manufacturer. New robot types can be added by imple- +menting a small set of API functions. Both the simulation + +and the actual hardware share a unified interface for a +seamless transition between the two. Adding sensors and + +actuators to the simulation is managed through a frequency- +based callback mechanism that interfaces with the global + +simulation loop. +At the most abstract level, RCS implements an easy-to-use +`Gymnasium-style API `_ . This interface is not only widely +used in reinforcement learning but also enables the flexible +composition of environment wrappers for adding features. + +For example, the collision checker depicted in Fig. 1 is +implemented as a wrapper that checks motion commands +in simulation and filters them to prevent collisions. \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 00000000..22012f69 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,28 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = 'RCS' +copyright = '2025, UTN' +author = 'UTN' +release = 'v0.3.1' + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [] + +templates_path = ['_templates'] +exclude_patterns = [] + + + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = 'pydata_sphinx_theme' +html_static_path = ['_static'] diff --git a/docs/source/getting_started/demo.rst b/docs/source/getting_started/demo.rst new file mode 100644 index 00000000..cedd5b10 --- /dev/null +++ b/docs/source/getting_started/demo.rst @@ -0,0 +1,23 @@ +Demo +==== +python/examples contain multiple example codes that can be executed upon first installation + +1. +A simple demonstration which moves the tcp forward 1cm in the x direction, closes the gripper, moves back 1cm and opens the gripper. +This cycle is repeated multiple times. + +.. code-block:: + + python python/examples/env_cartesian_control.py + +2. A simple demonstration where a random action is sampled from the joint space and executed on the robot. + +.. code-block:: + + python python/examples/env_joint_control.py + +2. A simple pickup experiment showing Franka picking up a randomly placed cube. + +.. code-block:: + + python python/examples/grasp_demo.py \ No newline at end of file diff --git a/docs/source/getting_started/installation.rst b/docs/source/getting_started/installation.rst new file mode 100644 index 00000000..0bd15a48 --- /dev/null +++ b/docs/source/getting_started/installation.rst @@ -0,0 +1,34 @@ +Installation +============ + +We build and test RCS on the latest Debian and on the latest Ubuntu LTS. + + +1. Install the system dependencies: + +.. code-block:: + + sudo apt install $(cat debian_deps.txt) + + +2. Create, activate and configure a `Python virtual environment `_ + +.. code-block:: + + python3 -m venv .venv + source .venv/bin/activate + pip install -r requirements_dev.txt + pip config --site set global.no-build-isolation false + + +3. (optional) include UTN models if you have an access token + +.. code-block:: + + pip config --site set install.config-settings "cmake.args=-DINCLUDE_UTN_MODELS=ON;-DGITLAB_MODELS_TOKEN=" + +4. Build and install RCS: + +.. code-block:: + + pip install -ve . \ No newline at end of file diff --git a/docs/source/getting_started/usage.rst b/docs/source/getting_started/usage.rst new file mode 100644 index 00000000..8507f60f --- /dev/null +++ b/docs/source/getting_started/usage.rst @@ -0,0 +1,23 @@ +Usage +===== + +The python package is called `rcsss` (sss because of the sound of a snake). +Import the library in python: + +.. code-block:: + + import rcsss + +The package includes a command line interface which define useful commands to handle the hardware robot. +To list all available subcommands use: +.. code-block:: + + python -m rcsss --help + +A sample config can be generated via the following CLI command. +.. code-block:: + + python -m rcsss sample-config + +The command will produce a `config.yaml` file with sample values. +See `config.py `_ for a description of the config fields. \ No newline at end of file diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 00000000..ec36b769 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,26 @@ +.. RCS documentation master file, created by + sphinx-quickstart on Mon Mar 3 14:47:32 2025. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +RCS documentation +================= + +No matter whether it is in simulation or in the +lab – setting up robotics experiments is challenging, especially +if they target both types of deployments. While a plethora of +different robotics software frameworks exist, they usually make +a trade-off between complexity and versatility. Drawing from +this rich ecosystem, Robot Control Stack (RCS) is a +robotics software stack that is designed to resolve this conflict by +combining established robotics tools and frameworks through +a lightweight multi-layered API that unifies simulation and +real-world robot control. + + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + getting_started/getting_started + architecture/rcs_architecture \ No newline at end of file diff --git a/requirements_dev.txt b/requirements_dev.txt index 67752008..e31d3613 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -12,3 +12,4 @@ pybind11 mujoco==3.2.6 pin==2.7.0 wheel +pydata-sphinx-theme==0.16.1 \ No newline at end of file From 3259bb934fbebd2807a8cc75e84630350992ad4a Mon Sep 17 00:00:00 2001 From: suman1209 Date: Wed, 5 Mar 2025 16:06:41 +0100 Subject: [PATCH 2/5] docs(docs): converted entire documentation to markdown and added two diagrams from the paper --- docs/source/_static/.gitkeep | 0 ...s_architecture.rst => rcs_architecture.md} | 28 +++++++-------- docs/source/conf.py | 2 +- docs/source/getting_started/demo.md | 22 ++++++++++++ docs/source/getting_started/demo.rst | 23 ------------- docs/source/getting_started/installation.md | 23 +++++++++++++ docs/source/getting_started/installation.rst | 34 ------------------- .../getting_started/{usage.rst => usage.md} | 23 ++++++------- docs/source/{index.rst => index.md} | 25 +++++++++----- requirements_dev.txt | 3 +- 10 files changed, 88 insertions(+), 95 deletions(-) delete mode 100644 docs/source/_static/.gitkeep rename docs/source/architecture/{rcs_architecture.rst => rcs_architecture.md} (53%) create mode 100644 docs/source/getting_started/demo.md delete mode 100644 docs/source/getting_started/demo.rst create mode 100644 docs/source/getting_started/installation.md delete mode 100644 docs/source/getting_started/installation.rst rename docs/source/getting_started/{usage.rst => usage.md} (61%) rename docs/source/{index.rst => index.md} (71%) diff --git a/docs/source/_static/.gitkeep b/docs/source/_static/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/source/architecture/rcs_architecture.rst b/docs/source/architecture/rcs_architecture.md similarity index 53% rename from docs/source/architecture/rcs_architecture.rst rename to docs/source/architecture/rcs_architecture.md index cd05ba14..e9fd54d1 100644 --- a/docs/source/architecture/rcs_architecture.rst +++ b/docs/source/architecture/rcs_architecture.md @@ -1,33 +1,31 @@ -Robot Control Stack architecture -================================ +# Robot Control Stack architecture +

+ +

A core contribution of RCS is a simple yet versatile architecture that allows for easy extension and customization. The architecture is organized in multiple layers that represent -increasing levels of abstraction from platform-specific im- -plementation details. While lower layers are implemented in +increasing levels of abstraction from platform-specific implementation details. +While lower layers are implemented in C++, higher layers are implemented in Python or provide bindings for Python. Rapid prototyping and performance- critical code are therefore supported equally well. -RCS uses `MuJoCo `_ as its simulator and the `Robotics -Library `_ for inverse kinematics. There is support for +RCS uses [MuJoCo](https://ieeexplore.ieee.org/document/6386109) as its simulator and the [Robotics +Library](https://ieeexplore.ieee.org/document/8202232) for inverse kinematics. There is support for Franka robots through the native library provided by the - -manufacturer. New robot types can be added by imple- -menting a small set of API functions. Both the simulation - -and the actual hardware share a unified interface for a +manufacturer. New robot types can be added by implementing a small set of API functions. +Both the simulation and the actual hardware share a unified interface for a seamless transition between the two. Adding sensors and - actuators to the simulation is managed through a frequency- based callback mechanism that interfaces with the global - simulation loop. + At the most abstract level, RCS implements an easy-to-use -`Gymnasium-style API `_ . This interface is not only widely +[Gymnasium-style API](https://arxiv.org/abs/2407.17032). This interface is not only widely used in reinforcement learning but also enables the flexible composition of environment wrappers for adding features. -For example, the collision checker depicted in Fig. 1 is +For example, the collision checker depicted in the above figure is implemented as a wrapper that checks motion commands in simulation and filters them to prevent collisions. \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index 22012f69..2aeca677 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -14,7 +14,7 @@ # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration -extensions = [] +extensions = ["myst_parser",] templates_path = ['_templates'] exclude_patterns = [] diff --git a/docs/source/getting_started/demo.md b/docs/source/getting_started/demo.md new file mode 100644 index 00000000..6b465c20 --- /dev/null +++ b/docs/source/getting_started/demo.md @@ -0,0 +1,22 @@ +# Demo + +python/examples contain multiple example codes that can be executed upon first installation + +1. A simple demonstration which moves the tcp forward 1cm in the x direction, closes the gripper, moves back 1cm and opens the gripper. +This cycle is repeated multiple times. + +``` +python python/examples/env_cartesian_control.py +``` + +2. A simple demonstration where a random action is sampled from the joint space and executed on the robot. + +``` +python python/examples/env_joint_control.py +``` + +3. A simple pickup experiment showing Franka picking up a randomly placed cube. + +``` +python python/examples/grasp_demo.py +``` \ No newline at end of file diff --git a/docs/source/getting_started/demo.rst b/docs/source/getting_started/demo.rst deleted file mode 100644 index cedd5b10..00000000 --- a/docs/source/getting_started/demo.rst +++ /dev/null @@ -1,23 +0,0 @@ -Demo -==== -python/examples contain multiple example codes that can be executed upon first installation - -1. -A simple demonstration which moves the tcp forward 1cm in the x direction, closes the gripper, moves back 1cm and opens the gripper. -This cycle is repeated multiple times. - -.. code-block:: - - python python/examples/env_cartesian_control.py - -2. A simple demonstration where a random action is sampled from the joint space and executed on the robot. - -.. code-block:: - - python python/examples/env_joint_control.py - -2. A simple pickup experiment showing Franka picking up a randomly placed cube. - -.. code-block:: - - python python/examples/grasp_demo.py \ No newline at end of file diff --git a/docs/source/getting_started/installation.md b/docs/source/getting_started/installation.md new file mode 100644 index 00000000..2fe51937 --- /dev/null +++ b/docs/source/getting_started/installation.md @@ -0,0 +1,23 @@ +# Installation + +We build and test RCS on the latest Debian and on the latest Ubuntu LTS. + +1. Install the system dependencies: +```shell +sudo apt install $(cat debian_deps.txt) +``` +2. Create, activate and configure a [Python virtual environment](https://docs.python.org/3/library/venv.html): +```shell +python3 -m venv .venv +source .venv/bin/activate +pip install -r requirements_dev.txt +pip config --site set global.no-build-isolation false +``` +2.5 (optional) include UTN models if you have an access token +```shell +pip config --site set install.config-settings "cmake.args=-DINCLUDE_UTN_MODELS=ON;-DGITLAB_MODELS_TOKEN=" +``` +3. Build and install RCS: +```shell +pip install -ve . +``` \ No newline at end of file diff --git a/docs/source/getting_started/installation.rst b/docs/source/getting_started/installation.rst deleted file mode 100644 index 0bd15a48..00000000 --- a/docs/source/getting_started/installation.rst +++ /dev/null @@ -1,34 +0,0 @@ -Installation -============ - -We build and test RCS on the latest Debian and on the latest Ubuntu LTS. - - -1. Install the system dependencies: - -.. code-block:: - - sudo apt install $(cat debian_deps.txt) - - -2. Create, activate and configure a `Python virtual environment `_ - -.. code-block:: - - python3 -m venv .venv - source .venv/bin/activate - pip install -r requirements_dev.txt - pip config --site set global.no-build-isolation false - - -3. (optional) include UTN models if you have an access token - -.. code-block:: - - pip config --site set install.config-settings "cmake.args=-DINCLUDE_UTN_MODELS=ON;-DGITLAB_MODELS_TOKEN=" - -4. Build and install RCS: - -.. code-block:: - - pip install -ve . \ No newline at end of file diff --git a/docs/source/getting_started/usage.rst b/docs/source/getting_started/usage.md similarity index 61% rename from docs/source/getting_started/usage.rst rename to docs/source/getting_started/usage.md index 8507f60f..e632ef49 100644 --- a/docs/source/getting_started/usage.rst +++ b/docs/source/getting_started/usage.md @@ -1,23 +1,22 @@ -Usage -===== +# Usage The python package is called `rcsss` (sss because of the sound of a snake). Import the library in python: -.. code-block:: - - import rcsss +``` +import rcsss +``` The package includes a command line interface which define useful commands to handle the hardware robot. To list all available subcommands use: -.. code-block:: - - python -m rcsss --help +``` +python -m rcsss --help +``` A sample config can be generated via the following CLI command. -.. code-block:: - - python -m rcsss sample-config +``` +python -m rcsss sample-config +``` The command will produce a `config.yaml` file with sample values. -See `config.py `_ for a description of the config fields. \ No newline at end of file +See [config.py](https://github.com/utn-mi/robot-control-stack/blob/master/python/rcsss/config.py) for a description of the config fields. \ No newline at end of file diff --git a/docs/source/index.rst b/docs/source/index.md similarity index 71% rename from docs/source/index.rst rename to docs/source/index.md index ec36b769..da00d676 100644 --- a/docs/source/index.rst +++ b/docs/source/index.md @@ -1,10 +1,15 @@ -.. RCS documentation master file, created by + + +# RCS documentation + +

+ +

-RCS documentation -================= No matter whether it is in simulation or in the lab – setting up robotics experiments is challenging, especially @@ -18,9 +23,11 @@ a lightweight multi-layered API that unifies simulation and real-world robot control. -.. toctree:: - :maxdepth: 2 - :caption: Contents: +```{toctree} +:maxdepth: 1 + +getting_started/getting_started.md +architecture/rcs_architecture.md +``` + - getting_started/getting_started - architecture/rcs_architecture \ No newline at end of file diff --git a/requirements_dev.txt b/requirements_dev.txt index e31d3613..0bf4a799 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -12,4 +12,5 @@ pybind11 mujoco==3.2.6 pin==2.7.0 wheel -pydata-sphinx-theme==0.16.1 \ No newline at end of file +pydata-sphinx-theme==0.16.1 +myst-parser==4.0.1 \ No newline at end of file From c0fa04f8cc67ed7ffa0ca632412a94eee1a8e07c Mon Sep 17 00:00:00 2001 From: suman1209 Date: Wed, 5 Mar 2025 18:18:48 +0100 Subject: [PATCH 3/5] docs(docs): added document about the different wrappers used --- docs/source/architecture/rcs_architecture.md | 8 ++++- docs/source/architecture/wrappers.md | 33 ++++++++++++++++++++ docs/source/conf.py | 2 +- 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 docs/source/architecture/wrappers.md diff --git a/docs/source/architecture/rcs_architecture.md b/docs/source/architecture/rcs_architecture.md index e9fd54d1..cb20f0a1 100644 --- a/docs/source/architecture/rcs_architecture.md +++ b/docs/source/architecture/rcs_architecture.md @@ -28,4 +28,10 @@ composition of environment wrappers for adding features. For example, the collision checker depicted in the above figure is implemented as a wrapper that checks motion commands -in simulation and filters them to prevent collisions. \ No newline at end of file +in simulation and filters them to prevent collisions. + +```{toctree} +:maxdepth: 1 + +wrappers.md +``` diff --git a/docs/source/architecture/wrappers.md b/docs/source/architecture/wrappers.md new file mode 100644 index 00000000..cfa06521 --- /dev/null +++ b/docs/source/architecture/wrappers.md @@ -0,0 +1,33 @@ +# Wrappers + +``` +Warning: +This content has not yet been proof read! +``` + +[Wrappers](https://www.gymlibrary.dev/api/wrappers/) are a convenient way to modify an existing environment without having to alter the underlying code directly. +RCS offers the following wrappers that add functionality in a layered manner. + +1. FR3Env + + This is the basic Joint Gym Environment for Franka Research 3. + +2. FR3Sim + + This wraps the basic FR3Env with the MuJoCo simulation. + +3. CameraSetWrapper + + This is an observation wrapper, that takes the observation from its parent environment and add rgbd information. + +4. GripperWrapper + + This is an observation wrapper, that takes the observation from its parent environment and add gripper_state(whether open or close) information. + +5. CollisionGuard + + This wrapper is used for safety from collisions. Before executing the action, this collision guard executes the action in simulation in a sub-collision environment to ensure there is no collision, after that the action will be executed on the parent environment. In case of collision, the user can decide whether to truncate the episode. + +6. RelativeActionSpace + + This wrapper clips the actions based on pre-defined maximum limits and steps the clipped actions on the parent environment. \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index 2aeca677..56988991 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -14,7 +14,7 @@ # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration -extensions = ["myst_parser",] +extensions = ["myst_parser", 'sphinx.ext.autodoc'] templates_path = ['_templates'] exclude_patterns = [] From a6cfd05a8419befe29d8032c4dfda10c99077ecc Mon Sep 17 00:00:00 2001 From: suman1209 Date: Tue, 11 Mar 2025 10:33:22 +0100 Subject: [PATCH 4/5] docs(documentation): updated documentation page with autodoc from code --- README.md | 6 ++- docs/doc_requirements.txt | 3 ++ docs/source/architecture/wrappers.md | 2 +- docs/source/conf.py | 2 +- docs/source/getting_started/demo.md | 22 --------- docs/source/getting_started/installation.md | 23 --------- docs/source/getting_started/usage.md | 22 --------- docs/source/index.md | 3 +- docs/source/models/custom_grippers.md | 55 +++++++++++++++++++++ docs/source/source_code/fr3_sim.md | 7 +++ docs/source/source_code/rcs_api.md | 12 +++++ python/rcsss/envs/factories.py | 2 +- requirements_dev.txt | 2 - 13 files changed, 85 insertions(+), 76 deletions(-) create mode 100644 docs/doc_requirements.txt delete mode 100644 docs/source/getting_started/demo.md delete mode 100644 docs/source/getting_started/installation.md delete mode 100644 docs/source/getting_started/usage.md create mode 100644 docs/source/models/custom_grippers.md create mode 100644 docs/source/source_code/fr3_sim.md create mode 100644 docs/source/source_code/rcs_api.md diff --git a/README.md b/README.md index 84265f8d..95d6ea6a 100644 --- a/README.md +++ b/README.md @@ -66,8 +66,10 @@ If the python bindings in the C++ code have changed you might need to regenerate make stubgen ``` -### TO build the documentation locally +### To build the documentation locally ``` cd docs sphinx-build -M html ./source/ ./build -``` \ No newline at end of file +``` + +docs/build/html/index.html will the final document diff --git a/docs/doc_requirements.txt b/docs/doc_requirements.txt new file mode 100644 index 00000000..072f818d --- /dev/null +++ b/docs/doc_requirements.txt @@ -0,0 +1,3 @@ +pydata-sphinx-theme==0.16.1 +myst-parser==4.0.1 +sphinx-autodoc-typehints \ No newline at end of file diff --git a/docs/source/architecture/wrappers.md b/docs/source/architecture/wrappers.md index cfa06521..ee35da80 100644 --- a/docs/source/architecture/wrappers.md +++ b/docs/source/architecture/wrappers.md @@ -1,7 +1,7 @@ # Wrappers ``` -Warning: +Note: This content has not yet been proof read! ``` diff --git a/docs/source/conf.py b/docs/source/conf.py index 56988991..705e19f0 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -14,7 +14,7 @@ # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration -extensions = ["myst_parser", 'sphinx.ext.autodoc'] +extensions = ["myst_parser", 'sphinx.ext.napoleon', "sphinx_autodoc_typehints"] templates_path = ['_templates'] exclude_patterns = [] diff --git a/docs/source/getting_started/demo.md b/docs/source/getting_started/demo.md deleted file mode 100644 index 6b465c20..00000000 --- a/docs/source/getting_started/demo.md +++ /dev/null @@ -1,22 +0,0 @@ -# Demo - -python/examples contain multiple example codes that can be executed upon first installation - -1. A simple demonstration which moves the tcp forward 1cm in the x direction, closes the gripper, moves back 1cm and opens the gripper. -This cycle is repeated multiple times. - -``` -python python/examples/env_cartesian_control.py -``` - -2. A simple demonstration where a random action is sampled from the joint space and executed on the robot. - -``` -python python/examples/env_joint_control.py -``` - -3. A simple pickup experiment showing Franka picking up a randomly placed cube. - -``` -python python/examples/grasp_demo.py -``` \ No newline at end of file diff --git a/docs/source/getting_started/installation.md b/docs/source/getting_started/installation.md deleted file mode 100644 index 2fe51937..00000000 --- a/docs/source/getting_started/installation.md +++ /dev/null @@ -1,23 +0,0 @@ -# Installation - -We build and test RCS on the latest Debian and on the latest Ubuntu LTS. - -1. Install the system dependencies: -```shell -sudo apt install $(cat debian_deps.txt) -``` -2. Create, activate and configure a [Python virtual environment](https://docs.python.org/3/library/venv.html): -```shell -python3 -m venv .venv -source .venv/bin/activate -pip install -r requirements_dev.txt -pip config --site set global.no-build-isolation false -``` -2.5 (optional) include UTN models if you have an access token -```shell -pip config --site set install.config-settings "cmake.args=-DINCLUDE_UTN_MODELS=ON;-DGITLAB_MODELS_TOKEN=" -``` -3. Build and install RCS: -```shell -pip install -ve . -``` \ No newline at end of file diff --git a/docs/source/getting_started/usage.md b/docs/source/getting_started/usage.md deleted file mode 100644 index e632ef49..00000000 --- a/docs/source/getting_started/usage.md +++ /dev/null @@ -1,22 +0,0 @@ -# Usage - -The python package is called `rcsss` (sss because of the sound of a snake). -Import the library in python: - -``` -import rcsss -``` - -The package includes a command line interface which define useful commands to handle the hardware robot. -To list all available subcommands use: - -``` -python -m rcsss --help -``` -A sample config can be generated via the following CLI command. - -``` -python -m rcsss sample-config -``` -The command will produce a `config.yaml` file with sample values. -See [config.py](https://github.com/utn-mi/robot-control-stack/blob/master/python/rcsss/config.py) for a description of the config fields. \ No newline at end of file diff --git a/docs/source/index.md b/docs/source/index.md index da00d676..a5b2ff03 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -26,8 +26,7 @@ real-world robot control. ```{toctree} :maxdepth: 1 -getting_started/getting_started.md -architecture/rcs_architecture.md +user_guide/user_guide.md ``` diff --git a/docs/source/models/custom_grippers.md b/docs/source/models/custom_grippers.md new file mode 100644 index 00000000..6f51d537 --- /dev/null +++ b/docs/source/models/custom_grippers.md @@ -0,0 +1,55 @@ +# Custom Grippers + +Custom grippers can be used with RCS by following the instructions below. +## How to add a custom gripper +An example custom gripper is available for reference [here](https://gitos.rrze.fau.de/utn-machine-intelligence/lab/models/-/tree/main/grippers/digit_hand/obj?ref_type=heads) **(only if you have access to the RCS models repo)** + +The adjustment to fr3_0.xml and fr3_common.xml can be found [here](https://gitos.rrze.fau.de/utn-machine-intelligence/lab/models/-/tree/main/scenes/fr3_simple_pick_up_digit_hand?ref_type=heads) **(only if you have access to the RCS models repo)** + +### Step1: export obj files +If the gripper is downloaded from somewhere convert it to .obj file. +Make sure that the x, y, z axis of the default gripper and the custom gripper are the same. In case they are different, later the slide joint axis might have to be adjusted. This can be done by visualing the coordinate axis, by dragging the obj files in onshape. +### Step2: convert obj to mjcf +**Note:** First ensure that the file_names dont have space in their names + +**e.g** rename to in three places(obj file, mtl file, mtl file reference inside the obj file) + +A python package for converting obj files to mjcf files is available [here](https://pypi.org/project/obj2mjcf/0.0.3/). +After installing it, use the following command to do the required conversion. + + + +```shell +obj2mjcf --obj-dir --save-mjcf +``` + + +### Step3: verify in mujoco viewer +With the above two steps, the conversion should be successful, you should be able to view the standalone grippers in mujco with the following commands + +```shell +python -m mujoco.viewer +``` + + +after opening the mujoco viewer you can drag the converted scene and visualise it. + +### Step4: Adding the gripper to the lab or fr3_empty_world scenes + The following steps need to be followed: + 1. in fr3_common, the mesh should be renamed to the new gripper + 2. in fr3_0 and fr3_1 and all the robots, the fingers’ geom must be adjusted for material and if there are name changes + 3. physics parameters should be adjusted empirically.. + e.g. new collision meshes specific to the gripper added, friction parameters adjustment + +## step5: update the tcp offset + add the correct tcp_offset value to the following to fr3_common.xml + + + ``` + + + + ``` diff --git a/docs/source/source_code/fr3_sim.md b/docs/source/source_code/fr3_sim.md new file mode 100644 index 00000000..cf59c279 --- /dev/null +++ b/docs/source/source_code/fr3_sim.md @@ -0,0 +1,7 @@ +# rcsss.envs.factories + +```{eval-rst} +.. automodule:: rcsss.envs.factories + :members: + :show-inheritance: +``` \ No newline at end of file diff --git a/docs/source/source_code/rcs_api.md b/docs/source/source_code/rcs_api.md new file mode 100644 index 00000000..e9e90ff6 --- /dev/null +++ b/docs/source/source_code/rcs_api.md @@ -0,0 +1,12 @@ +# RCS API + +We are still in the process of documenting all of the functions. + +Subpackages: + +```{toctree} +:titlesonly: +:maxdepth: 1 + +fr3_sim.md +``` diff --git a/python/rcsss/envs/factories.py b/python/rcsss/envs/factories.py index b5c85388..f2375176 100644 --- a/python/rcsss/envs/factories.py +++ b/python/rcsss/envs/factories.py @@ -200,7 +200,7 @@ def fr3_sim_env( relative_to (RelativeTo): Specifies whether the movement is relative to a configured origin or the last step. urdf_path (str | PathLike | None): Path to the URDF file. If None, the URDF file is automatically deduced which requires a UTN compatible lab scene to be present. - mjcf (str | PathLike): Path to the Mujoco scene XML file. Defaults to "fr3_empty_world". + mjcf (str | PathLike): Path to the MuJoCo scene XML file. Defaults to "fr3_empty_world". sim_wrapper (Type[SimWrapper] | None): Wrapper to be applied before the simulation wrapper. This is useful for reset management e.g. resetting objects in the scene with correct observations. Defaults to None. diff --git a/requirements_dev.txt b/requirements_dev.txt index 0bf4a799..67752008 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -12,5 +12,3 @@ pybind11 mujoco==3.2.6 pin==2.7.0 wheel -pydata-sphinx-theme==0.16.1 -myst-parser==4.0.1 \ No newline at end of file From 1f9612813a81c743062fefa9ec851ecc4cf6111f Mon Sep 17 00:00:00 2001 From: khaledmohamed00 Date: Wed, 9 Apr 2025 16:51:07 +0200 Subject: [PATCH 5/5] docs(act-obs-flow): added action and observation flow documentation --- .../action_obersvation_flow.md | 132 ++++++++++++++++++ .../images/class_hierarchy.png | Bin 0 -> 45143 bytes .../images/sequence_diagram.png | Bin 0 -> 63622 bytes 3 files changed, 132 insertions(+) create mode 100644 docs/docs_action_observation_flow/action_obersvation_flow.md create mode 100644 docs/docs_action_observation_flow/images/class_hierarchy.png create mode 100644 docs/docs_action_observation_flow/images/sequence_diagram.png diff --git a/docs/docs_action_observation_flow/action_obersvation_flow.md b/docs/docs_action_observation_flow/action_obersvation_flow.md new file mode 100644 index 00000000..35d6bd88 --- /dev/null +++ b/docs/docs_action_observation_flow/action_obersvation_flow.md @@ -0,0 +1,132 @@ +# Action-Observation Flow + +## wrapper Hierarchy + + +Vertical Order: + +- Top: Highest-level wrapper (first applied) + +- Bottom: Base environment + +Inheritance Notation: + +- Use (ParentClass) next to wrapper names + +Wrapping Notation + +- Show ← wraps arrows between layers +

+ +

+ +## Flow +1. **`RelativeActionSpace(ActionWrapper).step(act)`** + + - 2- Calls step function of ActionWrapper (→2) + +2. **`ActionWrapper.step(act)`** + - 3. Calls `RelativeActionSpace.action(act)` + - 4. Calls `GripperWrapper.step(act)` + +3. **`RelativeActionSpace.action(act)`** + - Processes action: `{"tquart": [0.01, 0, 0, 0, 0, 0, 1], "gripper": 0}` + - Operations: + - Clips action within min/max limits + - Makes action relative (current_pose + action) + - Updates `action["tquart"]` + +4. **`GripperWrapper(ActObsInfoWrapper).step(act)`** + - →5. Calls `GripperWrapper.action(act)` + - →6. Calls `CameraSetWrapper.step(act)` + - →15. Calls `GripperWrapper.observation(obs)` + +5. **`GripperWrapper.action(act)`** + - Uses `act["gripper"]` to open/close gripper + - Only executes if state change needed + - Deletes `"gripper"` key from action dict + +6. **`CameraSetWrapper(ActObsInfoWrapper).step(act)`** + - →7. Calls `CameraSetWrapper.action(act)` + - →8. Calls `CameraSetWrapper(ActObsInfoWrapper).step(act)` + - →14. Calls `CameraSetWrapper.observation(obs)` + +7. **`CameraSetWrapper.action(act)`** + - (Pass-through) Returns original action + +8. **`CameraSetWrapper(ActObsInfoWrapper).step(act)`** + - →9. Calls `CameraSetWrapper.action(act)` + - →10. Calls `FR3Sim.step(act)` + +9. **`CameraSetWrapper.action(act)`** + - (Pass-through) Returns original action + +10. **`FR3Sim.step(act)`** + - →11. Calls `FR3Env.step(act)` + - 13. Executes: + ```python + self.sim.step_until_convergence() + state = self.sim_robot.get_state() + ``` + - Returns observation + +11. **`FR3Env.step(act)`** + - Sets new pose: + ```python + self.robot.set_cartesian_position( + common.Pose( + translation=action_dict[self.tquart_key][:3], + quaternion=action_dict[self.tquart_key][3:] + ) + ) + ``` + - →12. Calls `FR3Env.get_obs()` + +12. **`FR3Env.get_obs()`** + - Returns: + ```python + ( + tquart=np.concatenate([ + self.robot.get_cartesian_position().translation(), + self.robot.get_cartesian_position().rotation_q() + ]), + joints=self.robot.get_joint_position(), + xyzrpy=self.robot.get_cartesian_position().xyzrpy() + ) + ``` + - Shapes: + - `joints`: (7,) + - `tquart`: (7,) [x,y,z, qx,qy,qz,qw] + - `xyzrpy`: (6,) [x,y,z, roll,pitch,yaw] + +14. **`CameraSetWrapper.observation(obs)`** + - Adds camera data: + ```python + { + ...original_obs..., + "frames": { + "wrist": { + "rgb": (256,256,3), + "depth": (256,256,3) + }, + "default_free": { + "wrist": { + "rgb": (256,256,3), + "depth": (256,256,3) + } + } + } + } + ``` + +15. **`GripperWrapper.observation(obs)`** + - Adds gripper state: + ```python + { + ...previous_data..., + "gripper": float + } + ``` +# Sequence Diagram +![image](images/sequence_diagram.png) + diff --git a/docs/docs_action_observation_flow/images/class_hierarchy.png b/docs/docs_action_observation_flow/images/class_hierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..eb7be6d1274a673d55c372ca6329f1d16a472fb6 GIT binary patch literal 45143 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 B_*eh{ literal 0 HcmV?d00001 diff --git a/docs/docs_action_observation_flow/images/sequence_diagram.png b/docs/docs_action_observation_flow/images/sequence_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea1df9ea0275fdaf080af70377c28f03e452f2c GIT binary patch literal 63622 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 G^!Q)3BEISX literal 0 HcmV?d00001