From 23e70ade7b4232bc3169aa3d9becda2b3c096100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20J=C3=BClg?= Date: Sat, 22 Nov 2025 00:39:22 +0100 Subject: [PATCH] docs: added existing documentation main repo --- .github/workflows/docs.yml | 56 + .gitignore | 1 + docs/_static/.keep | 0 docs/changelog.md | 1 + docs/conf.py | 48 + docs/contributing.md | 1 + docs/documentation.md | 9 + docs/documentation/development.md | 24 + docs/documentation/getting_started.md | 10 + .../getting_started/build_system.md | 158 +++ .../documentation/getting_started/concepts.md | 7 + .../getting_started/docker_installation.md | 122 ++ .../action_obersvation_flow.md | 135 +++ .../images/class_hierarchy.png | Bin 0 -> 45143 bytes .../images/sequence_diagram.png | Bin 0 -> 63622 bytes .../getting_started/installation.md | 40 + docs/documentation/hardware_extentions.md | 121 ++ docs/documentation/usage.md | 83 ++ docs/images/favicon.ico | Bin 0 -> 4286 bytes docs/images/rcs_architecture_small.svg | 1072 +++++++++++++++++ docs/images/rcs_logo.png | Bin 0 -> 22231 bytes docs/images/rcs_logo_multiline.svg | 153 +++ docs/index.md | 38 + docs/requirements.txt | 5 + docs/roadmap.md | 2 + 25 files changed, 2086 insertions(+) create mode 100644 .github/workflows/docs.yml create mode 100644 docs/_static/.keep create mode 100644 docs/changelog.md create mode 100644 docs/conf.py create mode 100644 docs/contributing.md create mode 100644 docs/documentation.md create mode 100644 docs/documentation/development.md create mode 100644 docs/documentation/getting_started.md create mode 100644 docs/documentation/getting_started/build_system.md create mode 100644 docs/documentation/getting_started/concepts.md create mode 100644 docs/documentation/getting_started/docker_installation.md create mode 100644 docs/documentation/getting_started/docs_action_observation_flow/action_obersvation_flow.md create mode 100644 docs/documentation/getting_started/docs_action_observation_flow/images/class_hierarchy.png create mode 100644 docs/documentation/getting_started/docs_action_observation_flow/images/sequence_diagram.png create mode 100644 docs/documentation/getting_started/installation.md create mode 100644 docs/documentation/hardware_extentions.md create mode 100644 docs/documentation/usage.md create mode 100644 docs/images/favicon.ico create mode 100644 docs/images/rcs_architecture_small.svg create mode 100644 docs/images/rcs_logo.png create mode 100644 docs/images/rcs_logo_multiline.svg create mode 100644 docs/index.md create mode 100644 docs/requirements.txt create mode 100644 docs/roadmap.md diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 00000000..c8f28369 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,56 @@ +name: Build and Deploy Sphinx Docs + +on: + push: + branches: + - main + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r docs/requirements.txt + + - name: Build Sphinx HTML + run: sphinx-build -b html docs docs/_build/html + + - name: Setup GitHub Pages + uses: actions/configure-pages@v3 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: docs/_build/html + + deploy: + needs: build + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 3df36620..cd09f47c 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ settings.json *.egg-info video* GEMINI.md +docs/_build diff --git a/docs/_static/.keep b/docs/_static/.keep new file mode 100644 index 00000000..e69de29b diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 00000000..825c32f0 --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1 @@ +# Changelog diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000..d4395e70 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,48 @@ +import os +import sys +sys.path.insert(0, os.path.abspath('..')) + +project = 'Robot Control Stack' +author = 'Tobias Jülg' +release = '0.4' + +extensions = [ + 'myst_parser', + 'sphinx.ext.autodoc', + 'sphinx.ext.napoleon', + 'sphinx.ext.viewcode', +] + +templates_path = ['_templates'] +exclude_patterns = [] + +html_theme = 'pydata_sphinx_theme' +html_static_path = ['_static'] +html_logo = "images/rcs_logo_multiline.svg" +html_favicon = "images/favicon.ico" + +html_theme_options = { + "github_url": "https://github.com/RobotControlStack/robot-control-stack", + "use_edit_page_button": True, + "show_prev_next": False, + "navbar_start": ["navbar-logo"], # ensures the logo is shown + "logo": { + "image_light": "images/rcs_logo_multiline.svg", # your PNG + "image_dark": "images/rcs_logo_multiline.svg", # can be same or a dark-mode version + }, + +} + +html_context = { + "github_user": "RobotControlStack", + "github_repo": "robot-control-stack", + "github_version": "main", # branch name + "doc_path": "docs", # relative path in the repo where your docs live +} + + +myst_enable_extensions = [ + "colon_fence", + "deflist", + "linkify", +] diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 00000000..854139a3 --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1 @@ +# Contributing diff --git a/docs/documentation.md b/docs/documentation.md new file mode 100644 index 00000000..4eb41a7f --- /dev/null +++ b/docs/documentation.md @@ -0,0 +1,9 @@ +# Documentation + +```{toctree} +:maxdepth: 1 +documentation/getting_started.md +documentation/usage.md +documentation/hardware_extentions.md +documentation/development.md +``` \ No newline at end of file diff --git a/docs/documentation/development.md b/docs/documentation/development.md new file mode 100644 index 00000000..84468879 --- /dev/null +++ b/docs/documentation/development.md @@ -0,0 +1,24 @@ +# Development +```shell +# check for c++ formatting errors +make cppcheckformat +# fix them +make cppformat +# Linting with clang tidy +make cpplint +# check for python formatting errors +make pycheckformat +# fix them +make pyformat +# Linting with ruff and mypy +make pylint +# Testing +make pytest +``` + +## Stub Files for Python Bindings +We use autogenerated python stub files (`.pyi`) in the [`_core`](python/rcs/_core/) folder to show our linters the expected types of the C++ Python bindings. +If the python bindings in the C++ code have changed you might need to regenerate them by using: +```shell +make stubgen +``` \ No newline at end of file diff --git a/docs/documentation/getting_started.md b/docs/documentation/getting_started.md new file mode 100644 index 00000000..ec0d5049 --- /dev/null +++ b/docs/documentation/getting_started.md @@ -0,0 +1,10 @@ +# Getting Started + +```{toctree} +:maxdepth: 1 + +getting_started/installation.md +getting_started/docker_installation.md +getting_started/concepts.md + +``` \ No newline at end of file diff --git a/docs/documentation/getting_started/build_system.md b/docs/documentation/getting_started/build_system.md new file mode 100644 index 00000000..58415107 --- /dev/null +++ b/docs/documentation/getting_started/build_system.md @@ -0,0 +1,158 @@ +# Build System + +## 1. You Run + + pip install -e . + +This tells `pip` to: + +- Perform an **editable install** of the current project. +- Use the `pyproject.toml` as the **single source of truth** for building and packaging. + +--- + +## 2. `pip` Reads `pyproject.toml` + +It sees: + + [build-system] + build-backend = "scikit_build_core.build" + +So `pip` uses **`scikit-build-core`** as the **build backend** (instead of legacy `setuptools`). + +--- + +## 3. `scikit-build-core` Invokes CMake + +It starts a CMake build, just like if you had run: + + cmake -S . -B build + cmake --build build + +It uses the `CMakeLists.txt` at the project root, which: + +- Declares the project: + + project(rcs LANGUAGES C CXX VERSION 0.4.0) + +- Sets modern C++20 and compiler policies. +- Locates external dependencies: + - `Eigen3`, `Python3`, `MuJoCo`, `pinocchio` +- Downloads with `FetchContent`: `rl`, `pybind11` +- Includes: + + add_subdirectory(src) + +--- + +## 4. CMake Enters `src/CMakeLists.txt` + + add_subdirectory(rcs) + target_include_directories(rcs INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) + add_subdirectory(sim) + add_subdirectory(pybind) + +This loads and builds 3 subcomponents. + +--- + +## 5. Subcomponent Builds + +### `src/rcs/CMakeLists.txt` + + add_library(rcs SHARED) + target_sources(rcs PRIVATE Pose.cpp Robot.cpp IK.cpp utils.cpp) + target_link_libraries(rcs PUBLIC Eigen3::Eigen mdl pinocchio::all) + +- Builds a **shared C++ library**: `rcs` +- Contains your **robot control logic** +- Exposes `include/` headers +- Linked against external libraries + +### `src/sim/CMakeLists.txt` + + add_library(sim) + target_sources(sim PRIVATE sim.cpp SimRobot.cpp ...) + target_link_libraries(sim PUBLIC rcs MuJoCo::MuJoCo) + +- Builds a **C++ simulation library** +- Depends on: + - Your own `rcs` library + - MuJoCo physics engine + +### `src/pybind/CMakeLists.txt` + + pybind11_add_module(_core MODULE rcs.cpp) + target_link_libraries(_core PRIVATE sim rcs) + +- Compiles a Python extension module: `_core.so` +- Uses `pybind11` to bind C++ classes/functions +- Links to both `sim` and `rcs` native libraries +- Adds install instructions: + + install(TARGETS _core rcs DESTINATION rcs COMPONENT python_package) + +--- + +## 6. Packaging into Python + +From `pyproject.toml`: + + [tool.scikit-build] + build.targets = ["_core", "scenes", "rcs"] + wheel.packages = ["python/rcs"] + install.components = ["python_package"] + +- `scikit-build-core` installs `_core.so` into: + + python/rcs/_core.so + +- That directory becomes a valid **Python package** + +--- + +## 7. Result: Python Import Works + +After install: + + from rcs import _core + +- You now access the C++ functionality exposed in `rcs.cpp` through Python. +- `_core` contains Python-wrapped C++ objects/functions via `pybind11`. + +--- + +## Summary Diagram + + pip install -e . + │ + ▼ + Reads pyproject.toml (scikit_build_core used) + │ + ▼ + CMakeLists.txt (root) → add_subdirectory(src) + │ + ▼ + src/rcs → builds C++ library `rcs` + src/sim → builds C++ library `sim` + src/pybind → builds Python extension `_core` + │ + ▼ + All .so libraries installed in `python/rcs/` + `_core` accessible from Python as import + +--- + +## Recap of Build Layers + +| Layer | Role | Tool | +| --- | --- | --- | +| `pyproject.toml` | Project metadata, build backend | `pip`, `scikit-build-core` | +| `CMakeLists.txt` (root) | Configure the full C++ build | `CMake` | +| `src/rcs` | Core robot logic in C++ | `C++`, `Eigen`, `pinocchio` | +| `src/sim` | Simulation logic, MuJoCo | `C++`, `MuJoCo` | +| `src/pybind` | Bindings to Python | `pybind11` | +| `python/rcs/` | Python package with compiled `.so` | `scikit-build`, `pip` | + + + diff --git a/docs/documentation/getting_started/concepts.md b/docs/documentation/getting_started/concepts.md new file mode 100644 index 00000000..39053f95 --- /dev/null +++ b/docs/documentation/getting_started/concepts.md @@ -0,0 +1,7 @@ +# Concepts +```{toctree} +:maxdepth: 1 +:caption: Contents: +docs_action_observation_flow/action_obersvation_flow.md +build_system.md +``` diff --git a/docs/documentation/getting_started/docker_installation.md b/docs/documentation/getting_started/docker_installation.md new file mode 100644 index 00000000..687a074f --- /dev/null +++ b/docs/documentation/getting_started/docker_installation.md @@ -0,0 +1,122 @@ +# Docker +This setup lets you **build once** and then add capabilities as overrides — GUI, GPU, and Hardware (HW) — onto a single runtime service **without touching your main repo files**. + +--- + +## Prerequisites + +- **Docker** + **docker-compose** (either v1 or v2 plugin) +- **NVIDIA drivers** on host (`nvidia-smi` works on host) +- **NVIDIA Container Toolkit** installed on host (legacy runtime: `nvidia`) +- **X11** on host (Linux) +--- + +## Layout + + docker/ + Dockerfile # Your build definition + compose/ + base.yml # dev (build + source mount) and run (no mount) + gui.yml # adds DISPLAY, XAUTHORITY, X11 socket + gpu.yml # NVIDIA runtime + envs, mounts nvidia-smi + hw.yml # /dev, caps, ulimits (heavy hardware access) + +--- + +## What Each File Does + +- **base.yml** + - `dev`: builds the image from `docker/Dockerfile` and mounts your source + - `run`: clean runtime service (no source mount) +- **gui.yml** — Adds X11 env/socket so GUI apps can display on host +- **gpu.yml** — Enables GPU via legacy runtime: `nvidia` (for older compose) and ensures `nvidia-smi` is available in the container +- **hw.yml** — Grants broad hardware access + +--- + +## How to Use + +From the repo root: + +### 1) Build the image +Uses `docker/Dockerfile`. Only `dev` mounts your source. + + docker-compose -f docker/compose/base.yml build dev + +### 2) (For GUI) Allow root to use your X server + + xhost +local:docker + +### 3) Run with different capability combinations + +**GUI + GPU** + + docker-compose \ + -f docker/compose/base.yml \ + -f docker/compose/gui.yml \ + -f docker/compose/gpu.yml \ + run --rm run bash + +**GUI + GPU + HW** + + docker-compose \ + -f docker/compose/base.yml \ + -f docker/compose/gui.yml \ + -f docker/compose/gpu.yml \ + -f docker/compose/hw.yml \ + run --rm run bash + +--- + +## Quick Checks Inside the Container + +Verify GPU: + + nvidia-smi + +Test GUI apps: + + apt-get update && apt-get install -y x11-apps && xclock & + +--- + +## Sanity Check Before Running + +See the fully merged service to confirm all env/volumes are present: + + docker-compose \ + -f docker/compose/base.yml \ + -f docker/compose/gui.yml \ + -f docker/compose/gpu.yml \ + -f docker/compose/hw.yml \ + config | sed -n '/run:/,/^[^ ]/p' + +--- + +## Example: FR3 Environment in Docker + +1) Build the image: + + docker-compose -f docker/compose/base.yml build dev + +2) Run with full capabilities: + + docker-compose \ + -f docker/compose/base.yml \ + -f docker/compose/gui.yml \ + -f docker/compose/gpu.yml \ + -f docker/compose/hw.yml \ + run --rm run bash + +3) Install FR3 extension: + + pip install -ve extensions/rcs_fr3 + +4) Run example: + + cd examples + python fr3_env_cartesian_control.py + + + + diff --git a/docs/documentation/getting_started/docs_action_observation_flow/action_obersvation_flow.md b/docs/documentation/getting_started/docs_action_observation_flow/action_obersvation_flow.md new file mode 100644 index 00000000..613dbbb1 --- /dev/null +++ b/docs/documentation/getting_started/docs_action_observation_flow/action_obersvation_flow.md @@ -0,0 +1,135 @@ +# 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 +Here is a class hierarchy diagram: + +```{image} images/class_hierarchy.png +:width: 350px +:align: center +``` +## 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/documentation/getting_started/docs_action_observation_flow/images/class_hierarchy.png b/docs/documentation/getting_started/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/documentation/getting_started/docs_action_observation_flow/images/sequence_diagram.png b/docs/documentation/getting_started/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 diff --git a/docs/documentation/getting_started/installation.md b/docs/documentation/getting_started/installation.md new file mode 100644 index 00000000..8557a54a --- /dev/null +++ b/docs/documentation/getting_started/installation.md @@ -0,0 +1,40 @@ +# Installation Guide + +## Requirements +RCS is developed and tested on the latest Debian and Ubuntu LTS versions. + +### Step 1: Install System Dependencies +First, update your package list and install dependencies listed in `debian_deps.txt`: + +- `sudo apt update` + +- `sudo apt install -y $(cat debian_deps.txt)` + + +### Step 2: Set Up Python Virtual Environment +Create and activate a virtual environment to isolate Python dependencies: + +- `python3 -m venv .venv` +- `source .venv/bin/activate` + +Upgrade packaging tools and install Python dependencies: + +- `pip install --upgrade pip setuptools wheel` +- `pip install -r requirements_dev.txt` + +Configure pip to allow build isolation: + +- `pip config --site set global.no-build-isolation false` + +### Step 3: Build and Install RCS +Install the package in editable mode for active development: + +- `pip install -ve .` + +--- + + +```{toctree} +:maxdepth: 1 + +``` \ No newline at end of file diff --git a/docs/documentation/hardware_extentions.md b/docs/documentation/hardware_extentions.md new file mode 100644 index 00000000..d7fe32bc --- /dev/null +++ b/docs/documentation/hardware_extentions.md @@ -0,0 +1,121 @@ +# Hardware Extensions + +RCS supports integration with various hardware platforms via dedicated **hardware extensions**. +These allow you to run the same RCS APIs on **real robots and sensors** without modifying your main codebase. + +For example, the **Franka Emika Research 3 (FR3)** robot is supported via the [`rcs_fr3`](extensions/rcs_fr3) extension. + +All natively supported extensions are located in the [`extensions`](extensions) directory. + +--- + +## 1. Installing Hardware Extensions + +To enable hardware usage in RCS, install the desired hardware extension via `pip`: + + pip install -ve extensions/ + +For example, to install the FR3 extension: + + pip install -ve extensions/rcs_fr3 + +> **Tip:** Each extension may have its own setup requirements. See the specific extension's section below for additional configuration steps. + +--- + +## 2. Switching Between Simulation and Hardware + +After installing the required extension, you can switch your RCS instance from simulation to hardware by setting: + + from rcs.common import RobotPlatform + + ROBOT_INSTANCE = RobotPlatform.SIMULATION # Default: Simulation + # ROBOT_INSTANCE = RobotPlatform.HARDWARE # Uncomment to use real hardware + +--- + +## 3. Command-Line Interfaces (CLI) + +Some extensions provide CLI commands to interact with hardware without writing Python code. + +For example: + + python -m rcs_fr3 --help + python -m rcs_realsense --help + +These commands allow you to perform basic operations directly from your terminal. + +--- + +## 4. FR3 Hardware Extension + +The **RCS FR3** extension enables control of the **Franka Emika Research 3** robot via RCS. + +### 4.1 Additional Configuration + +1. Create a `.env` file in your working directory with your FR3 Desk credentials: + + DESK_USERNAME=your_username + DESK_PASSWORD=your_password + +2. Set your FR3’s IP address in your script: + + ROBOT_IP = "192.168.0.1" # Replace with your robot's IP + +--- + +### 4.2 Usage Example + + import numpy as np + import rcs + import rcs_fr3 + from rcs_fr3._core import hw + from rcs_fr3.desk import FCI, Desk, load_creds_fr3_desk + from rcs_fr3.config import FR3Config, IKSolver + from rcs.common import Pose, FrankaHandTCPOffset, RobotPlatform + + ROBOT_IP = "192.168.0.1" + ROBOT_INSTANCE = RobotPlatform.HARDWARE + + # Load credentials + user, pw = load_creds_fr3_desk() + + # Connect to the robot + with FCI(Desk(ROBOT_IP, user, pw), unlock=False, lock_when_done=False): + urdf_path = rcs.scenes["fr3_empty_world"]["urdf"] + ik = rcs.common.RL(str(urdf_path)) + + # Initialize robot + robot = hw.FR3(ROBOT_IP, ik) + robot_cfg = FR3Config() + robot_cfg.tcp_offset = Pose(FrankaHandTCPOffset()) + robot_cfg.ik_solver = IKSolver.rcs_ik + robot.set_parameters(robot_cfg) + + # Configure gripper + gripper_cfg = hw.FHConfig() + gripper_cfg.epsilon_inner = gripper_cfg.epsilon_outer = 0.1 + gripper_cfg.speed = 0.1 + gripper_cfg.force = 30 + gripper = hw.FrankaHand(ROBOT_IP, gripper_cfg) + + # Move and grasp + robot.set_cartesian_position( + robot.get_cartesian_position() * Pose(translation=np.array([0.05, 0, 0])) + ) + gripper.grasp() + +--- + +### 4.3 CLI for FR3 + +The FR3 extension also defines useful CLI commands for controlling the robot without the Desk website: + + python -m rcs_fr3 --help + +--- + +## 5. Additional Resources + +- **Examples:** See the [`examples`](../../examples/) folder for more usage samples. +- **Franka Desk Documentation:** Refer to the FR3 manufacturer’s manual for setup and safety. diff --git a/docs/documentation/usage.md b/docs/documentation/usage.md new file mode 100644 index 00000000..301e9f22 --- /dev/null +++ b/docs/documentation/usage.md @@ -0,0 +1,83 @@ +# Library Usage / API +The python package is called `rcs`. + +## Direct Robot Control +Simple direct robot control: +```python +import rcs +from rcs import sim +from rcs._core.sim import CameraType +from rcs.camera.sim import SimCameraConfig, SimCameraSet +simulation = sim.Sim(rcs.scenes["fr3_empty_world"]["mjb"]) +urdf_path = rcs.scenes["fr3_empty_world"]["urdf"] +ik = rcs.common.RL(str(urdf_path)) +cfg = sim.SimRobotConfig() +cfg.add_id("0") +cfg.tcp_offset = rcs.common.Pose(rcs.common.FrankaHandTCPOffset()) +robot = rcs.sim.SimRobot(simulation, ik, cfg) + +gripper_cfg_sim = sim.SimGripperConfig() +gripper_cfg_sim.add_id("0") +gripper = sim.SimGripper(simulation, gripper_cfg_sim) + +# add camera to have a rendering gui +cameras = { + "wrist": SimCameraConfig( + identifier="wrist_0", + type=CameraType.fixed, + resolution_width=640, + resolution_height=480, + frame_rate=30, + ), +} +camera_set = SimCameraSet(simulation, cameras) +simulation.open_gui() +robot.set_cartesian_position( + robot.get_cartesian_position() * rcs.common.Pose(translation=np.array([0.05, 0, 0])) +) +gripper.grasp() +simulation.step_until_convergence() +``` +## Gym Env Interface +```python +from rcs.envs.creators import SimEnvCreator +from rcs.envs.utils import ( + default_mujoco_cameraset_cfg, + default_sim_gripper_cfg, + default_sim_robot_cfg, +) +from rcs.envs.base import ControlMode, RelativeTo +env_rel = SimEnvCreator()( + control_mode=ControlMode.JOINTS, + collision_guard=False, + robot_cfg=default_sim_robot_cfg(), + gripper_cfg=default_sim_gripper_cfg(), + cameras=default_mujoco_cameraset_cfg(), + max_relative_movement=np.deg2rad(5), + relative_to=RelativeTo.LAST_STEP, +) +env_rel.get_wrapper_attr("sim").open_gui() + +for _ in range(10): + obs, info = env_rel.reset() + for _ in range(10): + # sample random relative action and execute it + act = env_rel.action_space.sample() + print(act) + obs, reward, terminated, truncated, info = env_rel.step(act) + print(obs) + if truncated or terminated: + logger.info("Truncated or terminated!") + return +``` +## Examples +Checkout the python examples in the [examples](examples) folder: +- [fr3_direct_control.py](examples/fr3.py) shows direct robot control with RCS's python bindings +- [fr3_env_joint_control.py](examples/env_joint_control.py) and [fr3_env_cartesian_control.py](examples/env_cartesian_control.py) demonstrates RCS's high level [gymnasium](https://gymnasium.farama.org/) interface both for joint- and end effector space control +All of these examples work both in the MuJoCo simulation as well as on your hardware FR3. + + +```{toctree} +:maxdepth: 1 + +``` \ No newline at end of file diff --git a/docs/images/favicon.ico b/docs/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..909ae7af18a94680364914a9cad511453de113dc GIT binary patch literal 4286 zcmds5`BPI@6n^~=`cr>)rqihwOIvNHcA2TuPCMPT{iQA4*hHo`1VI886?Mel#h@$-Lf8pQNWPwPX*z<_$;-@>&h%zZUh?kA`R+aUJKw!8 zlJpq8R;`lwUCMr3lAe$xX*C($k~Wg@ebK1zN%uutydg<&(poyJaPY*ZP{nUvVu5iV zBPf28u)w&F5EQp*NxzEv3`VV!=+3*%WB0&VUO{W%qjHmF-sJn!(KpdQ*y$WVhDSj~ zyukGheim}fJLnl?UI>NVZj%w+xl8XrJAS13_^8%8#b=+L;jf_mcD?h!GCgdz1)M5S zf#>z${26QcnAj)o%udW(XJtm0=XUd!0siU@@CjbT+!E}LJ&|vaZN!#??*EKqTj)B} z-6)k8)CI4(c?)7rZx=k=74aHMu4!QEHNwgEK>p=eR5hMg8X7~R{m|t70>6;w|K|8wY(KOfXSCs9 zZDz~W9Y=O)BrLO&3gX*^hNzQ0;7z*Ab-!5eZlw8}!J5dpzg;?p8q)ch*(t@a=dE+7 zY{(@Ie~a?Hh|PK574a(0mPFwGi1Hk>5~i`e5*Mpdkx>*vIet;hoA(^n7p}F|u4*jU ztcuOk5y)=0LtmeRVtq0i+se^EJm)oM-2Kt-qO3XtQpkj7|)S@cn~b7$%M2`s1AKjd~mY z;Tv!w`+GFCRmjep&1R!?)`dJ`v+MmhOu|^Bq@G@sKait*fUAg%t?`Z-@G2T9-8s z=#raQr?8~Y(Rrtdes34+R7B(RrSk&wN2xYVJmi{SzWhMv4~Hg3rTaZJ&wE4NIGG8nF&K(rK>6Y0J2%J$`msiN@z5-Y32bdkOof{=!qf6rW43 yom>fcapoExy-Pg5iacGk(2Fds`jMT3olR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/rcs_logo.png b/docs/images/rcs_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..16f3efabe7be2a26f2cf06ee91e05403dd8795a1 GIT binary patch literal 22231 zcmd?R^We0GApU004s5@-TG(Kn4Gb3SeV`Kc^m}*WeG1 zqr9#Q09bn>|Dc%sbP5L_Qn||LxN109xVoD-n*;9d?p)UPwk~ESj^? zEer?*lKrUH6$J)^k$K?*;162}3L+$g6@wQb2H!Da0#IlMSqC5igT?t%0wEzG>cnUO z1fqs(3NS*U3X=an9uzZyWZW;CN;|I_1w?1M| z-N@DRkxX`0yJz6GE1pV{1N!$Jt_Xu98727{J<93oA1tBe4XhRWT4M;)43eSzcjGB)y}-TY5L#GSY~i42>Pg` zQx)9M1YB1HT$iloiwFIJC~hFjgZ3K7cN_5WGvs4__4o7(@J5wHDWtZ`W?zalH=q+~ zX5LhR&-`1#XS|)Bx0@uf-7^_8 zD&~ZX2+6R|^YPpP8W$vDE$ZXrm=d`UQ`EP-Hfg|--b>g3MCK>jL6Y|sO$KHD;qRYb zz2pY(U*8ymQ*LTFUM?`p_;LI@=^qT$KIenub`pU$9G0&}`sCfO#djkgvV^ow@jcKE zR+Xp|9O@s15g|9PC9MBm93^Z$XD39k^$|8b`J%~4ws*IrT<;e}G<|9M_SFt69f~IPW}x*2&+w31l5Y} z^V%_ORaYLk;wbhjoK+Tq{tD|I(ULw+PP^%a?qi=oKh4&;GA<(jCla~i4mRuhuk7@s z`)+b;J3*GKedYhPsiSipza=!A(;}<5Y7P#!D+(|qJfEENHd^w)pbuG!405mqwBNpA zGosDBXZ-{kQbX0RvhX0C{1fE~h!C75#;@US_#qu6uSDyRa+W3(P8bU^<~i4K zW*QGbtfsj-6UdT(m{iOp&w-xEX)4;#qJ3>&DDk5TNcFBy4b8io$Y|i_L20xP3l} zRJCZICvDmIDm23#!=&y}WX9k4hJ@et$bc%cS})RY$jKV@QoD6O!56rOMLJwNyL|Y( zKI1}afz~rW!0iG~8-|?rnbwx)RZ9TOPz#iE>2)wK3Fy!;YH?FVnaP#HPJGRWZN0wFywnRb^gBDdcI zgU^EIe08+cePQ@FObWO|!r{pw>MCeIG>B&s#2GJ{bM7E4IG~L_fQ&h@v`ny2qIoqnqJ1++b=b{@-< z{`=Gdu~f4(qm0kpp!z~cA-qmk(Gmi;Z^)h?%}__>4|zMvX~>7)QSEd9YzgTGLPDvj z?t{&pumH7MFv9j=lr7w28T(|Hct?Kn4gG=&dOsOvchjR*z}a+xujT~0NZx(INL}fCYFO#~9ynkah&#gv+bRL1q zKU;KFJxu4z7Ek{3>+5$UED(@7+|<0-CBJzQz4 z#ZOGe5!gbMKOXo9=_gGfT1>eQlEjCj{9HW4{AwgfbBKv#upNOn~s_#KP?+>82hqXDssu$OLT?y$Jp<0s^V z!GQ^Y>kG}caT~9X`fEg-P;C!o3JKVeZK7zg?N_FR*0wd%*W#I-*kVh)sXe0LWR=m7 z&Q5EBpJ%R$r?})hnh+1u+Ma`_Y!m>=e-;4%o^D3~;~|afw}p_5uc&1PbAA%bhoH{z zgK1WFsqZ-p=l91u@3kTVmpwu{Y()Kf8spmmiB%{UDzk#*0@o%7sv`vPe&mcc#@Oy# z$?WJ>0PJ-r698i~9sJh`Z!~PutvA26o`-xPpgJNaN&(b|7jS8^u`0O> z86?qfLGj@fcJZ4*VB*i=a+=s;KUYq!z>pVLh$QA`KvIrk2=3agxY`R)R4lcpm;)og zw$jAXD+tn1l##>j_kU*3FnYAQ(%EaE*J8x5h9L!j5J-MM0(>t}v?zRmq!&zX6i~Ik za?GQbwz<-AUF&#i3#w@%Cq>cHf{57H6HXjrN@V0Azax3n7!5drt6(nSAYf{sD~V%X zzoFN|SmbOsuWkR6&kILYD@T3_wfV!8W9t}Lvt(Fickc}igDwftWOO9(|8lI=sU>Tn z#1Q&k+)coK-KaI=q5GdP!tv-5C#zqQ8MzU*Y@?(JqmFO?{geI2Q^6eR#uQYgpO6#0 zjZP_PVNs=hU!TJI>-grZPo_rYq0RO2FRp{Gf@vM=`{F1pIIzbgp{?bLGKeL?fKBKR zwHw%wS>0AJnhIEF&p|s%=0b${*GworNa<`wuMQk|(wFr8OV#vHSzA4JSEBe@D65

66HBS(=u1@Pnu%(EEY_b9MXq$vGZ-9TZ``rfN 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 + + + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..ab71c596 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,38 @@ +# Robotic Control Stack (RCS) + + +![image](images/rcs_architecture_small.svg) + +**RCS** is a modular toolset designed to streamline the process of setting up and running robotics experiments and simulations. Rather than being a rigid framework, RCS acts as a minimalist, scalable architecture that brings together existing tools into an integrated system with simple, unified interfaces. + +## Key Characteristics + +- **Unified Simulation and Hardware Interface** + Seamless transitions between simulation and physical robot execution, reducing potential obstacles in development and testing cycles. + +- **Minimal Dependencies** + Lightweight and easy to set up, ensuring high portability across environments. + +- **Robot-Agnostic Design** + Initially developed for the Franka Research 3 robot, but equipped with abstraction layers to easily support other robot types. + +- **Gymnasium-Style API** + Offers a familiar and standardized interface for reinforcement learning, promoting ease of integration. + +--- + +## Use Cases of RCS + +- **Teleoperation for Data Collection** + RCS supports teleoperation to manually control robots and collect expert task demonstrations, which are essential for training robotics foundation models (RFMs). + +- **Policy-Based Control** + RCS allows robots to be controlled using trained imitation and reinforcement learning policies by providing a modular interface for easy policy switching and remote inference execution. + +```{toctree} +:maxdepth: 1 +documentation.md +contributing.md +changelog.md +roadmap.md +``` \ No newline at end of file diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 00000000..236ac6bb --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,5 @@ +sphinx +pydata-sphinx-theme +myst-parser +linkify-it-py +sphinx-autobuild \ No newline at end of file diff --git a/docs/roadmap.md b/docs/roadmap.md new file mode 100644 index 00000000..7feee685 --- /dev/null +++ b/docs/roadmap.md @@ -0,0 +1,2 @@ +# Roadmap +TODO