Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
566423c
refactor(assets): restructure assets folder
juelg Apr 12, 2026
d4a107f
chore: remove unused left over of collision guard
juelg Apr 12, 2026
75ecfbb
refactor!: pinocchio default for urdf is now false
juelg Apr 12, 2026
1ce8913
refactor(sim): postfix id is now prefix for better mjspec logic
juelg Apr 12, 2026
d822b11
feat(sim): add inital mjspec composer version
juelg Apr 12, 2026
9ffe74c
Merge branch 'master' into juelg/refactor-assets
juelg Apr 13, 2026
5ca3d84
refactor(sim)!: remove mjcf_scene_path from robot config
juelg Apr 14, 2026
eac502b
refactor!: robot type now object based
juelg Apr 14, 2026
4535d95
feat: scenes api
juelg Apr 14, 2026
3eaa31a
feat(composer): gravity compensation
juelg Apr 14, 2026
06658fa
chore: remove legacy scenes definition
juelg Apr 14, 2026
dc93a8c
style: formatting
juelg Apr 14, 2026
484c2d0
lint: python linting fixes
juelg Apr 15, 2026
e385ebb
feat: added readded robot meta config in python
juelg Apr 15, 2026
9de3c26
test: fix kinematic test
juelg Apr 15, 2026
8c5ee25
feat(scenes): seperate robot mjcf model
juelg Apr 15, 2026
5d2bab0
feat: proper frame definitions in sim scene config
juelg Apr 15, 2026
67be1a6
feat(sim scene): supports objects
juelg Apr 15, 2026
22a603a
style: fix linting errors
juelg Apr 15, 2026
b234b20
feat(sim scene): prefix cfg accessible
juelg Apr 15, 2026
0847af6
feat(composer): add camera function
juelg Apr 15, 2026
f3025e4
feat(sim scene): adding cameras by config
juelg Apr 15, 2026
ea2515e
fix(sim): robotiq stl
juelg Apr 15, 2026
f7a83f9
fix: dof in metaconfig of ur and so
juelg Apr 15, 2026
b50d8d9
fix(bindings): add missing gripper type
juelg Apr 15, 2026
3b375bb
feat(sim): ur5e in scene composer
juelg Apr 16, 2026
79af71d
fix: frame rate limiter
juelg Apr 16, 2026
86b94e9
feat(sim): gripper access fix
juelg Apr 16, 2026
60bea98
examples: fix fr3 examples to follow new api
juelg Apr 16, 2026
04add60
feat(composer): add optional gripper offset
juelg Apr 16, 2026
30f4709
feat(composer): add robot frame objects to config
juelg Apr 16, 2026
48f3042
refactor(composer): use rcs pose object
juelg Apr 16, 2026
d74daba
fix(scenes): added missing rotation for frankahand
juelg Apr 16, 2026
101e832
feat(scene): add FR3 duo empty world setup
tenfoldpaper Apr 16, 2026
4865faf
feat: add working main for duo
tenfoldpaper Apr 16, 2026
a03313b
fix: remove hardcoded FR Hand home value on last joint
tenfoldpaper Apr 16, 2026
d6c47df
fix: remove autogenerated file
tenfoldpaper Apr 16, 2026
257405d
formatting: pyformat
tenfoldpaper Apr 16, 2026
4b6d362
refactor(scene): improved prefix and config confusion
juelg Apr 16, 2026
b4cf76c
feat(scene api): add cameras with meshes
juelg Apr 16, 2026
a4cf34e
feat: add camera xmls and paths
tenfoldpaper Apr 16, 2026
4dc25c0
fix: rename default body name
tenfoldpaper Apr 16, 2026
30c9a6c
fix(composer): find camera
juelg Apr 16, 2026
6fa0d17
feat: improve accuracy for d405
tenfoldpaper Apr 17, 2026
8280510
feat: add wrist cameras on both arms
tenfoldpaper Apr 17, 2026
6cf6887
feat: update zed mini and add "head" camera to duo setup
tenfoldpaper Apr 17, 2026
884d423
fix(composer): gravcomp only for robots
juelg Apr 17, 2026
65e5d1b
feat(quest operator): allow left/right switch
juelg Apr 17, 2026
f281cbb
feat(objects): add green cube
juelg Apr 17, 2026
bace482
example: teleop with duo
juelg Apr 17, 2026
ee9372a
chore(teleop): adapted settings duo scene
juelg Apr 17, 2026
01d5768
fix(scenes): q_home franka with FH
juelg Apr 17, 2026
968e646
refactor(scenes): stateless and naming
juelg Apr 17, 2026
c026600
docs: fixed iris installation
juelg Apr 17, 2026
a1072e7
feat(scenes): task interface
juelg Apr 17, 2026
45cd3fc
feat: add DEFAULT_TRANSFORMS holding common tf for robot setup
tenfoldpaper Apr 20, 2026
eea7d7a
feat(scenes): added task example draft
juelg Apr 20, 2026
fdc913d
feat(pose): function to get quaternion in wxyz order
juelg Apr 20, 2026
0c7675c
feat (added tasks, configs and wrappers to for mate and join blocks) …
Simonhil Apr 20, 2026
d742122
feat(task): pick task
juelg Apr 20, 2026
18fe8ad
Merge branch 'juelg/refactor-assets' of https://github.com/RobotContr…
Simonhil Apr 20, 2026
5707df3
fix: unresolved merge conflict
juelg Apr 20, 2026
659064f
fix(sim:camera): memory leak by using ring buffer
juelg Apr 20, 2026
ea73649
chore: fovy, storage wrapper and double gui fix
juelg Apr 20, 2026
3522bef
added working parallel pick task
tenfoldpaper Apr 21, 2026
477c8eb
chore: adapt ur5e example
juelg Apr 21, 2026
c407258
chore: adapt xarm7 example
juelg Apr 21, 2026
fb206ac
feat(scenes): allow non existing gripper type
juelg Apr 21, 2026
fa5e57e
chore: adapt so101 example
juelg Apr 21, 2026
5ae413c
chore(test): fix test with new scene refactor
juelg Apr 21, 2026
2da1fcb
chg!: remove task-specific objects
tenfoldpaper Apr 22, 2026
c5a6ce7
chg: remove parallel_pick_task
tenfoldpaper Apr 22, 2026
93445d4
fix: remove broken ref to parallel pick
tenfoldpaper Apr 22, 2026
9cb6d3e
feat: auto-add prefix to asset paths
tenfoldpaper Apr 22, 2026
75d4c1b
fix: correct tf matrix multiplication order
tenfoldpaper Apr 22, 2026
8ec4cf4
fix: duo mount root is at the bottom
tenfoldpaper Apr 22, 2026
a8aec46
Merge branch 'juelg/refactor-assets' of github.com:RobotControlStack/…
tenfoldpaper Apr 22, 2026
c70bd2f
format: pyformat
tenfoldpaper Apr 22, 2026
8c8e3de
feat(fr3): hw env with RCSEnvCreator and config
juelg Apr 22, 2026
b3b4b18
feat(panda): hw env with RCSEnvCreator and config
juelg Apr 22, 2026
dd1c89a
feat(ur5e): hw env with RCSEnvCreator and config
juelg Apr 22, 2026
5d120da
fix(hw:gripper): gripper types
juelg Apr 22, 2026
a5e3cd8
feat(xarm7): hw env with RCSEnvCreator and config
juelg Apr 22, 2026
a1a6e14
feat(so101): hw env with RCSEnvCreator and config
juelg Apr 22, 2026
96e96e2
refactor(examples): hardware examples with new env creation
juelg Apr 22, 2026
866e61b
cleanup: remove old creator functions and default factories
juelg Apr 22, 2026
ef6108c
docs: update docs with examples updated after env creation refactory
juelg Apr 22, 2026
4932b6e
lint: fix ruff linting errors
juelg Apr 22, 2026
e0e9014
lint: fix mypy linting
juelg Apr 22, 2026
a16a163
ci: fix ci for large prs
juelg Apr 22, 2026
bb610e8
chore: remove unused code
juelg Apr 22, 2026
459d812
chore: update stubgen files
juelg Apr 22, 2026
01cbd4e
ci: fix stubgen output and mypy lint
juelg Apr 22, 2026
02497d2
fix: unblock extension CI
juelg Apr 22, 2026
3926654
fix: store robot type registry ids by value
juelg Apr 23, 2026
69c9365
fix: preserve both quest reset-origin swaps
juelg Apr 23, 2026
9536298
fix: avoid numpy truth ambiguity in pick task
juelg Apr 23, 2026
b9fefdc
fix: restore rotation_q_wxyz helper usage
juelg Apr 23, 2026
81a171e
license(assets): add original assets license from menagerie
juelg Apr 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Empty file added .codex
Empty file.
5 changes: 0 additions & 5 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,6 @@ name: Python
on:
workflow_call:
pull_request:
paths:
- "python/**"
- "src/pybind/**"
- ".github/workflows/py.yaml"
- "extensions/**"
push:
branches:
- master
Expand Down
5 changes: 0 additions & 5 deletions .github/workflows/cpp.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@ name: Cpp
on:
workflow_call:
pull_request:
paths:
- "src/**"
- "include/**"
- ".github/workflows/cpp.yaml"
push:
branches:
- master
Expand Down Expand Up @@ -66,4 +62,3 @@ jobs:
run: pip install --group dev --group build_deps
- name: GCC build
run: make gcccompile PYTHON_EXECUTABLE=${{ steps.setup-python.outputs.python-path }}

1 change: 0 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ FetchContent_Declare(
)

FetchContent_MakeAvailable(pybind11 Eigen3 egl_headers)
include(compile_scenes)
# egl headers
include_directories(${egl_headers_SOURCE_DIR}/api)

Expand Down
8 changes: 6 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
PYSRC = python
CPPSRC = src
COMPILE_MODE = Release
LINT_EXCLUDE_RUFF = --exclude examples/teleop/SimPublisher
LINT_EXCLUDE_MYPY = 'build|examples/teleop/SimPublisher'

# CPP
cppcheckformat:
Expand Down Expand Up @@ -31,6 +33,8 @@ stubgen:
find ./python/rcs/_core -name '*.pyi' -print | xargs sed -i 's/tuple\[typing\.Literal\[\([0-9]\+\)\], typing\.Literal\[1\]\]/tuple\[typing\.Literal[\1]\]/g'
find ./python/rcs/_core -name '*.pyi' -print | xargs sed -i 's/tuple\[\([M|N]\), typing\.Literal\[1\]\]/tuple\[\1\]/g'
sed -i 's/ q_home: numpy\.ndarray\[tuple\[M\], numpy\.dtype\[numpy\.float64\]\] | None/ q_home: numpy.ndarray | None/' python/rcs/_core/common.pyi
python -c "from pathlib import Path; p=Path('python/rcs/_core/common.pyi'); t=p.read_text(); t=t.replace('numpy.ndarray[tuple[typing.Literal[2], N], numpy.dtype[numpy.float64]]', 'numpy.ndarray[tuple[typing.Literal[2], typing.Any], numpy.dtype[numpy.float64]]'); p.write_text(t)"
python -c "from pathlib import Path; p=Path('python/rcs/_core/sim.pyi'); t=p.read_text(); t=t.replace('numpy.ndarray[tuple[typing.Literal[2], N], numpy.dtype[numpy.float64]]', 'numpy.ndarray[tuple[typing.Literal[2], typing.Any], numpy.dtype[numpy.float64]]'); t=t.replace(', max_buffer_frames: int = 100', ''); p.write_text(t)"
python scripts/generate_common_typing.py
ruff check --fix python/rcs/_core python/rcs/common_typing.py
isort python/rcs/_core python/rcs/common_typing.py
Expand All @@ -48,10 +52,10 @@ pyformat:
pylint: ruff mypy

ruff:
ruff check ${PYSRC} extensions examples
ruff check ${PYSRC} extensions examples ${LINT_EXCLUDE_RUFF}

mypy:
mypy ${PYSRC} extensions examples --install-types --non-interactive --no-namespace-packages --exclude 'build'
mypy ${PYSRC} extensions examples --install-types --non-interactive --no-namespace-packages --exclude ${LINT_EXCLUDE_MYPY}

pytest:
pytest -vv
Expand Down
43 changes: 24 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,31 +55,33 @@ from rcs.envs.base import (
RobotWrapper,
SimEnv,
)
from rcs.envs.scenes import EmptyWorldFR3
from rcs.envs.sim import GripperWrapperSim, RobotSimWrapper
from rcs.envs.utils import (
default_mujoco_cameraset_cfg,
default_sim_gripper_cfg,
default_sim_robot_cfg,
)

import rcs
from rcs import sim

if __name__ == "__main__":
# default configs
robot_cfg = default_sim_robot_cfg(scene="fr3_empty_world")
gripper_cfg = default_sim_gripper_cfg()
cameras = default_mujoco_cameraset_cfg()
sim_cfg = SimConfig()
sim_cfg.realtime = True
sim_cfg.async_control = True
sim_cfg.frequency = 1 # in Hz (1 sec delay)

simulation = sim.Sim(robot_cfg.mjcf_scene_path, sim_cfg)
scene = EmptyWorldFR3()
cfg = scene.prefixed_cfg(scene.config())
fr3 = scene.lead_robot_name(cfg)

robot_cfg = cfg.robot_cfgs[fr3]
gripper_cfg = cfg.gripper_cfgs[fr3] # type: ignore
camera_cfgs = cfg.camera_cfgs
sim_cfg = SimConfig(
realtime=True,
async_control=True,
frequency=1, # in Hz (1 sec delay)
)
mjmodel = scene.create_model(cfg)
kinematic_model_path, attachment_site = scene.kinematics_cfg(cfg)[fr3]

simulation = sim.Sim(mjmodel, sim_cfg)
ik = rcs.common.Pin(
robot_cfg.kinematic_model_path,
robot_cfg.attachment_site,
urdf=False,
kinematic_model_path,
attachment_site,
)

# base env
Expand All @@ -89,13 +91,13 @@ if __name__ == "__main__":

# gripper
gripper = sim.SimGripper(simulation, gripper_cfg)
env = GripperWrapper(env, gripper, binary=True)
env = GripperWrapper(env, gripper)

env = RobotSimWrapper(env)
env = GripperWrapperSim(env)

# camera
camera_set = SimCameraSet(simulation, cameras, physical_units=True, render_on_demand=True)
camera_set = SimCameraSet(simulation, camera_cfgs, physical_units=True, render_on_demand=True) # type: ignore
env = CameraSetWrapper(env, camera_set, include_depth=True) # type: ignore

# relative actions bounded by 10cm translation and 10 degree rotation
Expand Down Expand Up @@ -192,3 +194,6 @@ If you find RCS useful for your academic work please consider citing it:

For more scientific information and supplementary videos, visit the **[paper website](https://robotcontrolstack.github.io/)**.

## License

The RCS source code is licensed under AGPL-3.0. A small subset of redistributed third-party robot and sensor assets under `assets/` keeps its original upstream license; the applicable notices are collected in [THIRD_PARTY_ASSET_LICENSES.md](THIRD_PARTY_ASSET_LICENSES.md).
Loading
Loading