mirror of
https://github.com/huggingface/lerobot.git
synced 2026-05-21 11:39:50 +00:00
974028bd28
Co-authored-by: Steven Palma <imstevenpmwork@ieee.org>
309 lines
11 KiB
Markdown
309 lines
11 KiB
Markdown
# How to contribute to 🤗 LeRobot?
|
||
|
||
Everyone is welcome to contribute, and we value everybody's contribution. Code
|
||
is thus not the only way to help the community. Answering questions, helping
|
||
others, reaching out and improving the documentations are immensely valuable to
|
||
the community.
|
||
|
||
It also helps us if you spread the word: reference the library from blog posts
|
||
on the awesome projects it made possible, shout out on Twitter when it has
|
||
helped you, or simply ⭐️ the repo to say "thank you".
|
||
|
||
Whichever way you choose to contribute, please be mindful to respect our
|
||
[code of conduct](https://github.com/huggingface/lerobot/blob/main/CODE_OF_CONDUCT.md).
|
||
|
||
## You can contribute in so many ways!
|
||
|
||
Some of the ways you can contribute to 🤗 LeRobot:
|
||
* Fixing outstanding issues with the existing code.
|
||
* Implementing new models, datasets or simulation environments.
|
||
* Contributing to the examples or to the documentation.
|
||
* Submitting issues related to bugs or desired new features.
|
||
|
||
Following the guides below, feel free to open issues and PRs and to coordinate your efforts with the community on our [Discord Channel](https://discord.gg/VjFz58wn3R). For specific inquiries, reach out to [Remi Cadene](mailto:remi.cadene@huggingface.co).
|
||
|
||
If you are not sure how to contribute or want to know the next features we working on, look on this project page: [LeRobot TODO](https://github.com/orgs/huggingface/projects/46)
|
||
|
||
## Submitting a new issue or feature request
|
||
|
||
Do your best to follow these guidelines when submitting an issue or a feature
|
||
request. It will make it easier for us to come back to you quickly and with good
|
||
feedback.
|
||
|
||
### Did you find a bug?
|
||
|
||
The 🤗 LeRobot library is robust and reliable thanks to the users who notify us of
|
||
the problems they encounter. So thank you for reporting an issue.
|
||
|
||
First, we would really appreciate it if you could **make sure the bug was not
|
||
already reported** (use the search bar on Github under Issues).
|
||
|
||
Did not find it? :( So we can act quickly on it, please follow these steps:
|
||
|
||
* Include your **OS type and version**, the versions of **Python** and **PyTorch**.
|
||
* A short, self-contained, code snippet that allows us to reproduce the bug in
|
||
less than 30s.
|
||
* The full traceback if an exception is raised.
|
||
* Attach any other additional information, like screenshots, you think may help.
|
||
|
||
### Do you want a new feature?
|
||
|
||
A good feature request addresses the following points:
|
||
|
||
1. Motivation first:
|
||
* Is it related to a problem/frustration with the library? If so, please explain
|
||
why. Providing a code snippet that demonstrates the problem is best.
|
||
* Is it related to something you would need for a project? We'd love to hear
|
||
about it!
|
||
* Is it something you worked on and think could benefit the community?
|
||
Awesome! Tell us what problem it solved for you.
|
||
2. Write a *paragraph* describing the feature.
|
||
3. Provide a **code snippet** that demonstrates its future use.
|
||
4. In case this is related to a paper, please attach a link.
|
||
5. Attach any additional information (drawings, screenshots, etc.) you think may help.
|
||
|
||
If your issue is well written we're already 80% of the way there by the time you
|
||
post it.
|
||
|
||
## Adding new policies, datasets or environments
|
||
|
||
Look at our implementations for [datasets](./lerobot/common/datasets/), [policies](./lerobot/common/policies/),
|
||
environments ([aloha](https://github.com/huggingface/gym-aloha),
|
||
[xarm](https://github.com/huggingface/gym-xarm),
|
||
[pusht](https://github.com/huggingface/gym-pusht))
|
||
and follow the same api design.
|
||
|
||
When implementing a new dataset loadable with LeRobotDataset follow these steps:
|
||
- Update `available_datasets_per_env` in `lerobot/__init__.py`
|
||
|
||
When implementing a new environment (e.g. `gym_aloha`), follow these steps:
|
||
- Update `available_tasks_per_env` and `available_datasets_per_env` in `lerobot/__init__.py`
|
||
|
||
When implementing a new policy class (e.g. `DiffusionPolicy`) follow these steps:
|
||
- Update `available_policies` and `available_policies_per_env`, in `lerobot/__init__.py`
|
||
- Set the required `name` class attribute.
|
||
- Update variables in `tests/test_available.py` by importing your new Policy class
|
||
|
||
## Submitting a pull request (PR)
|
||
|
||
Before writing code, we strongly advise you to search through the existing PRs or
|
||
issues to make sure that nobody is already working on the same thing. If you are
|
||
unsure, it is always a good idea to open an issue to get some feedback.
|
||
|
||
You will need basic `git` proficiency to be able to contribute to
|
||
🤗 LeRobot. `git` is not the easiest tool to use but it has the greatest
|
||
manual. Type `git --help` in a shell and enjoy. If you prefer books, [Pro
|
||
Git](https://git-scm.com/book/en/v2) is a very good reference.
|
||
|
||
Follow these steps to start contributing:
|
||
|
||
1. Fork the [repository](https://github.com/huggingface/lerobot) by
|
||
clicking on the 'Fork' button on the repository's page. This creates a copy of the code
|
||
under your GitHub user account.
|
||
|
||
2. Clone your fork to your local disk, and add the base repository as a remote. The following command
|
||
assumes you have your public SSH key uploaded to GitHub. See the following guide for more
|
||
[information](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository).
|
||
|
||
```bash
|
||
git clone git@github.com:<your Github handle>/lerobot.git
|
||
cd lerobot
|
||
git remote add upstream https://github.com/huggingface/lerobot.git
|
||
```
|
||
|
||
3. Create a new branch to hold your development changes, and do this for every new PR you work on.
|
||
|
||
Start by synchronizing your `main` branch with the `upstream/main` branch (more details in the [GitHub Docs](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/syncing-a-fork)):
|
||
|
||
```bash
|
||
git checkout main
|
||
git fetch upstream
|
||
git rebase upstream/main
|
||
```
|
||
|
||
Once your `main` branch is synchronized, create a new branch from it:
|
||
|
||
```bash
|
||
git checkout -b a-descriptive-name-for-my-changes
|
||
```
|
||
|
||
🚨 **Do not** work on the `main` branch.
|
||
|
||
4. for development, we advise to use a tool like `poetry` or `uv` instead of just `pip` to easily track our dependencies.
|
||
Follow the instructions to [install poetry](https://python-poetry.org/docs/#installation) (use a version >=2.1.0) or to [install uv](https://docs.astral.sh/uv/getting-started/installation/#installation-methods) if you don't have one of them already.
|
||
|
||
Set up a development environment with conda or miniconda:
|
||
```bash
|
||
conda create -y -n lerobot-dev python=3.10 && conda activate lerobot-dev
|
||
```
|
||
|
||
If you're using `uv`, it can manage python versions so you can instead do:
|
||
```bash
|
||
uv venv --python 3.10 && source .venv/bin/activate
|
||
```
|
||
|
||
To develop on 🤗 LeRobot, you will at least need to install the `dev` and `test` extras dependencies along with the core library:
|
||
|
||
using `poetry`
|
||
```bash
|
||
poetry sync --extras "dev test"
|
||
```
|
||
|
||
using `uv`
|
||
```bash
|
||
uv sync --extra dev --extra test
|
||
```
|
||
|
||
You can also install the project with all its dependencies (including environments):
|
||
|
||
using `poetry`
|
||
```bash
|
||
poetry sync --all-extras
|
||
```
|
||
|
||
using `uv`
|
||
```bash
|
||
uv sync --all-extras
|
||
```
|
||
|
||
> **Note:** If you don't install simulation environments with `--all-extras`, the tests that require them will be skipped when running the pytest suite locally. However, they *will* be tested in the CI. In general, we advise you to install everything and test locally before pushing.
|
||
|
||
Whichever command you chose to install the project (e.g. `poetry sync --all-extras`), you should run it again when pulling code with an updated version of `pyproject.toml` and `poetry.lock` in order to synchronize your virtual environment with the new dependencies.
|
||
|
||
The equivalent of `pip install some-package`, would just be:
|
||
|
||
using `poetry`
|
||
```bash
|
||
poetry add some-package
|
||
```
|
||
|
||
using `uv`
|
||
```bash
|
||
uv add some-package
|
||
```
|
||
|
||
When making changes to the poetry sections of the `pyproject.toml`, you should run the following command to lock dependencies.
|
||
using `poetry`
|
||
```bash
|
||
poetry lock
|
||
```
|
||
|
||
using `uv`
|
||
```bash
|
||
uv lock
|
||
```
|
||
|
||
|
||
5. Develop the features on your branch.
|
||
|
||
As you work on the features, you should make sure that the test suite
|
||
passes. You should run the tests impacted by your changes like this (see
|
||
below an explanation regarding the environment variable):
|
||
|
||
```bash
|
||
pytest tests/<TEST_TO_RUN>.py
|
||
```
|
||
|
||
6. Follow our style.
|
||
|
||
`lerobot` relies on `ruff` to format its source code
|
||
consistently. Set up [`pre-commit`](https://pre-commit.com/) to run these checks
|
||
automatically as Git commit hooks.
|
||
|
||
Install `pre-commit` hooks:
|
||
```bash
|
||
pre-commit install
|
||
```
|
||
|
||
You can run these hooks whenever you need on staged files with:
|
||
```bash
|
||
pre-commit
|
||
```
|
||
|
||
Once you're happy with your changes, add changed files using `git add` and
|
||
make a commit with `git commit` to record your changes locally:
|
||
|
||
```bash
|
||
git add modified_file.py
|
||
git commit
|
||
```
|
||
|
||
Note, if you already committed some changes that have a wrong formatting, you can use:
|
||
```bash
|
||
pre-commit run --all-files
|
||
```
|
||
|
||
Please write [good commit messages](https://chris.beams.io/posts/git-commit/).
|
||
|
||
It is a good idea to sync your copy of the code with the original
|
||
repository regularly. This way you can quickly account for changes:
|
||
|
||
```bash
|
||
git fetch upstream
|
||
git rebase upstream/main
|
||
```
|
||
|
||
Push the changes to your account using:
|
||
|
||
```bash
|
||
git push -u origin a-descriptive-name-for-my-changes
|
||
```
|
||
|
||
6. Once you are satisfied (**and the checklist below is happy too**), go to the
|
||
webpage of your fork on GitHub. Click on 'Pull request' to send your changes
|
||
to the project maintainers for review.
|
||
|
||
7. It's ok if maintainers ask you for changes. It happens to core contributors
|
||
too! So everyone can see the changes in the Pull request, work in your local
|
||
branch and push the changes to your fork. They will automatically appear in
|
||
the pull request.
|
||
|
||
|
||
### Checklist
|
||
|
||
1. The title of your pull request should be a summary of its contribution;
|
||
2. If your pull request addresses an issue, please mention the issue number in
|
||
the pull request description to make sure they are linked (and people
|
||
consulting the issue know you are working on it);
|
||
3. To indicate a work in progress please prefix the title with `[WIP]`, or preferably mark
|
||
the PR as a draft PR. These are useful to avoid duplicated work, and to differentiate
|
||
it from PRs ready to be merged;
|
||
4. Make sure existing tests pass;
|
||
<!-- 5. Add high-coverage tests. No quality testing = no merge.
|
||
|
||
See an example of a good PR here: https://github.com/huggingface/lerobot/pull/ -->
|
||
|
||
### Tests
|
||
|
||
An extensive test suite is included to test the library behavior and several examples. Library tests can be found in the [tests folder](https://github.com/huggingface/lerobot/tree/main/tests).
|
||
|
||
Install [git lfs](https://git-lfs.com/) to retrieve test artifacts (if you don't have it already).
|
||
|
||
On Mac:
|
||
```bash
|
||
brew install git-lfs
|
||
git lfs install
|
||
```
|
||
|
||
On Ubuntu:
|
||
```bash
|
||
sudo apt-get install git-lfs
|
||
git lfs install
|
||
```
|
||
|
||
Pull artifacts if they're not in [tests/artifacts](tests/artifacts)
|
||
```bash
|
||
git lfs pull
|
||
```
|
||
|
||
We use `pytest` in order to run the tests. From the root of the
|
||
repository, here's how to run tests with `pytest` for the library:
|
||
|
||
```bash
|
||
python -m pytest -sv ./tests
|
||
```
|
||
|
||
|
||
You can specify a smaller set of tests in order to test only the feature
|
||
you're working on.
|