Skip to content

Commit 32e1210

Browse files
authored
build: improve dependencies (#259)
- finally removed no-build-isolation requirement! - dependency groups in pyproject.toml to manage dev dependencies - use fetchcontent declare in rcs to avoid eigen installation - use fetchcontent declare for extensions such as fr3 and panda to minimize system dependencies
2 parents a8fa9df + fba5ef1 commit 32e1210

38 files changed

Lines changed: 417 additions & 307 deletions

File tree

.github/workflows/ci.yaml

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,14 @@ jobs:
3030
with:
3131
python-version: "3.11"
3232
cache: "pip"
33+
- name: upgrade pip
34+
run: pip install --upgrade pip
3335
- name: Install building dependencies
34-
run: python -m pip install -r requirements.txt
36+
run: python -m pip install --group build_deps
3537
- name: Install wheel
3638
run: python -m pip install wheel
3739
- name: Install the package
38-
run: python -m pip install -ve '.[dev]' --no-build-isolation
40+
run: python -m pip install -ve . --group dev
3941
- name: Check formatting
4042
run: make pycheckformat
4143
- name: Code linting
@@ -91,14 +93,16 @@ jobs:
9193
python-version: "3.11"
9294
cache: "pip"
9395

96+
- name: upgrade pip
97+
run: pip install --upgrade pip
9498
- name: Install build dependencies
95-
run: pip install -r requirements.txt
99+
run: pip install --group build_deps
96100

97101
- name: Install rcs
98-
run: pip install -ve '.[dev]' --no-build-isolation
102+
run: pip install -ve . --group dev
99103

100104
- name: Install extension
101-
run: pip install -ve extensions/${{ matrix.extension }} --no-build-isolation
105+
run: pip install -ve extensions/${{ matrix.extension }}
102106

103107
build_cpp_extensions:
104108
needs: [pythonpackage, check-paths]
@@ -135,12 +139,14 @@ jobs:
135139
with:
136140
python-version: "3.11"
137141
cache: "pip"
142+
- name: upgrade pip
143+
run: pip install --upgrade pip
138144
- name: Install Python dependencies
139-
run: pip install -r requirements.txt
145+
run: pip install --group build_deps
140146
- name: Install RCS
141-
run: pip install -ve '.[dev]' --no-build-isolation
147+
run: pip install -ve . --group dev
142148
- name: Install extension
143-
run: pip install -ve extensions/${{ matrix.extension }} --no-build-isolation
149+
run: pip install -ve extensions/${{ matrix.extension }}
144150
- name: Check that stub files are up-to-date
145151
run: make -C extensions/${{ matrix.extension }} stubgen && git diff --exit-code
146152
- name: Check clang format

.github/workflows/cpp.yaml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,10 @@ jobs:
3030
with:
3131
python-version: "3.11"
3232
cache: "pip"
33+
- name: upgrade pip
34+
run: pip install --upgrade pip
3335
- name: Install Python dependencies
34-
run: |
35-
pip install -r requirements.txt
36+
run: pip install --group dev --group build_deps
3637
- name: Check clang format
3738
run: make cppcheckformat
3839
# - name: Clang Tidy
@@ -59,9 +60,10 @@ jobs:
5960
with:
6061
python-version: "3.11"
6162
cache: "pip"
63+
- name: upgrade pip
64+
run: pip install --upgrade pip
6265
- name: Install Python dependencies
63-
run: |
64-
pip install -r requirements.txt
66+
run: pip install --group dev --group build_deps
6567
- name: GCC build
6668
run: make gcccompile PYTHON_EXECUTABLE=${{ steps.setup-python.outputs.python-path }}
6769

CMakeLists.txt

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
3333

3434
include(FetchContent)
3535

36-
find_package(Eigen3 REQUIRED)
37-
find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
36+
find_package(Python3 COMPONENTS Interpreter Development.Module REQUIRED)
3837
find_package(MuJoCo REQUIRED)
3938
find_package(pinocchio REQUIRED)
4039

@@ -45,8 +44,22 @@ FetchContent_Declare(pybind11
4544
GIT_PROGRESS TRUE
4645
EXCLUDE_FROM_ALL
4746
)
47+
FetchContent_Declare(Eigen3
48+
GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git
49+
GIT_TAG 3.4.1
50+
GIT_PROGRESS TRUE
51+
EXCLUDE_FROM_ALL
52+
)
53+
FetchContent_Declare(
54+
egl_headers
55+
GIT_REPOSITORY https://github.com/KhronosGroup/EGL-Registry.git
56+
GIT_TAG main
57+
GIT_SHALLOW TRUE
58+
)
4859

49-
FetchContent_MakeAvailable(pybind11)
60+
FetchContent_MakeAvailable(pybind11 Eigen3 egl_headers)
5061
include(compile_scenes)
62+
# egl headers
63+
include_directories(${egl_headers_SOURCE_DIR}/api)
5164

5265
add_subdirectory(src)

README.md

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -98,25 +98,29 @@ For common environment compositions factory functions such as `rcs.envs.creators
9898
This and other example can be found in the [examples](examples/) folder.
9999

100100
## Installation
101+
### From Source
101102

102-
We build and test RCS on the latest Debian and on the latest Ubuntu LTS.
103+
Make sure that common build tools i.e. `build-essential` and a C++ compiler like `gcc` or `clang` are installed on your system/conda/docker.
103104

104-
1. **System Dependencies**:
105-
```shell
106-
sudo apt install $(cat debian_deps.txt)
107-
```
105+
RCS works best in python 3.11, all extensions have been tested to work in 3.11.
106+
- For python >3.11 the `rcs_realsense` extension wont work for the pyrealsense2 version that RCS is using.
107+
- For python >3.12 the ompl python module is not available on pypi as of now. If OMPL is not used, it's save to remove this dependency in the pyproject.toml.
108108

109-
2. **Python Environment**:
110-
```shell
111-
conda create -n rcs python=3.11
112-
conda activate rcs
113-
pip install -r requirements.txt
114-
```
109+
```shell
110+
# setup environment
111+
conda create -n rcs python=3.11
112+
conda activate rcs
113+
conda install conda-forge::eigen conda-forge::glfw
114+
# or sudo apt install $(cat debian_deps.txt)
115+
pip install 'pip>=25.1'
116+
pip install --group build_deps
117+
118+
# install rcs
119+
pip install -ve .
120+
```
115121

116-
3. **Install RCS**:
117-
```shell
118-
pip install -ve . --no-build-isolation
119-
```
122+
### Via PyPI/pip
123+
Coming soon...
120124

121125
## Hardware Extensions
122126

@@ -125,29 +129,30 @@ RCS supports various hardware extensions (e.g., FR3, xArm7, RealSense). These ar
125129
To install an extension:
126130

127131
```shell
128-
pip install -ve extensions/rcs_fr3 --no-build-isolation
132+
# make sure to install system libraries before
133+
sudo apt install $(cat debian_deps.txt)
134+
pip install -ve extensions/rcs_fr3
129135
```
130136

131137
For a full list of extensions and detailed documentation, visit [robotcontrolstack.org/extensions](https://robotcontrolstack.org/extensions).
132138

133139
## Documentation
134-
135-
136140
For full documentation, including installation, usage, and API reference, please visit:
137-
138141
**[robotcontrolstack.org](https://robotcontrolstack.org)**
139142

140-
## Citation
143+
## Contribution
144+
For contribution guidelines checkout [robotcontrolstack.org/contributing](https://robotcontrolstack.org/contributing)
141145

146+
## Citation
142147
If you find RCS useful for your academic work, please consider citing it:
143148

144149
```bibtex
145-
@misc{juelg2025robotcontrolstack,
150+
@inproceedings{juelg2026robotcontrolstack,
146151
title={{Robot Control Stack}: {A} Lean Ecosystem for Robot Learning at Scale},
147152
author={Tobias J{\"u}lg and Pierre Krack and Seongjin Bien and Yannik Blei and Khaled Gamal and Ken Nakahara and Johannes Hechtl and Roberto Calandra and Wolfram Burgard and Florian Walter},
148-
year={2025},
149-
howpublished = {\url{https://arxiv.org/abs/2509.14932}}
153+
year={2026},
154+
booktitle={Proc.~of the IEEE Int.~Conf.~on Robotics \& Automation (ICRA)},
155+
note={Accepted for publication.}
150156
}
151157
```
152-
153158
For more scientific info, visit the [paper website](https://robotcontrolstack.github.io/).

debian_deps.txt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
build-essential
22
gcc
3-
libpoco-dev
4-
libeigen3-dev
5-
libglfw3-dev
6-
libconsole-bridge-dev
7-
libtinyxml2-dev
3+
libglfw3-dev

docker/Dockerfile

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,12 @@ WORKDIR /home/devuser/project
7272

7373
# Upgrade pip and install project build tools
7474
RUN pip install --upgrade pip setuptools
75-
RUN pip config --site set global.no-build-isolation false
7675

7776
# Install development dependencies
78-
RUN pip install -r requirements.txt
77+
RUN pip install --group build_deps
7978

8079
# Install the package in editable mode (CMake + pybind11 + scikit-build-core triggered)
81-
RUN pip install -e . --no-cache-dir --verbose --no-build-isolation
80+
RUN pip install -e . --no-cache-dir --verbose
8281

8382
# Default command that runs when you start a container without specifying a command explicitly.
8483
CMD ["python3"]

docs/contributing/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ We welcome contributions to the Robot Control Stack!
1212
Install the development dependencies:
1313
```shell
1414
# from root directory
15-
pip install -ve '.[dev]' --no-build-isolation
15+
pip install -ve . --group dev
1616
```
1717

1818
We provide a `Makefile` with several useful commands for development.

docs/extensions/rcs_fr3.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ This extension provides support for the Franka Research 3 (FR3) robot in RCS.
66

77
```shell
88
# from root directory
9-
pip install -ve extensions/rcs_fr3 --no-build-isolation
9+
pip install -ve extensions/rcs_fr3
1010
```
1111

1212
### Configuration

docs/extensions/rcs_panda.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ This extension provides support for the Franka Emika Panda robot in RCS.
66

77
```shell
88
# from root directory
9-
pip install -ve extensions/rcs_panda --no-build-isolation
9+
pip install -ve extensions/rcs_panda
1010
```
1111

1212
## Usage

docs/getting_started/index.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,21 @@ We build and test RCS on the latest Debian and on the latest Ubuntu LTS.
1717
```shell
1818
conda create -n rcs python=3.11
1919
conda activate rcs
20+
pip install 'pip>=25.1'
2021
```
2122

2223
3. Install the package dependencies:
2324

2425
```shell
25-
pip install -r requirements.txt
26+
pip install --group build_deps
2627
```
2728

2829
### Building RCS
2930

3031
Build and install RCS in editable mode:
3132

3233
```shell
33-
pip install -ve . --no-build-isolation
34+
pip install -ve .
3435
```
3536

3637
For a docker deployment, see the `docker` folder in the repository.

0 commit comments

Comments
 (0)