Instructions to use StrongRoboticsLab/pi05-so100-diverse with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use StrongRoboticsLab/pi05-so100-diverse with LeRobot:
- Notebooks
- Google Colab
- Kaggle
| # Copyright 2024 The HuggingFace Inc. team. All rights reserved. | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| [build-system] | |
| requires = ["setuptools"] | |
| build-backend = "setuptools.build_meta" | |
| [project.urls] | |
| homepage = "https://huggingface.co/lerobot" | |
| documentation = "https://huggingface.co/docs/lerobot/index" | |
| source = "https://github.com/huggingface/lerobot" | |
| issues = "https://github.com/huggingface/lerobot/issues" | |
| discord = "https://discord.gg/s3KuuzsPFb" | |
| [project] | |
| name = "lerobot" | |
| version = "0.5.1" | |
| description = "🤗 LeRobot: State-of-the-art Machine Learning for Real-World Robotics in Pytorch" | |
| dynamic = ["readme"] | |
| license = { text = "Apache-2.0" } | |
| requires-python = ">=3.12" | |
| authors = [ | |
| { name = "Rémi Cadène", email = "re.cadene@gmail.com" }, | |
| { name = "Simon Alibert", email = "alibert.sim@gmail.com" }, | |
| { name = "Alexander Soare", email = "alexander.soare159@gmail.com" }, | |
| { name = "Quentin Gallouédec", email = "quentin.gallouedec@ec-lyon.fr" }, | |
| { name = "Steven Palma", email = "imstevenpmwork@ieee.org" }, | |
| { name = "Pepijn Kooijmans", email = "pepijnkooijmans@outlook.com"}, | |
| { name = "Michel Aractingi", email = "michel.aractingi@gmail.com"}, | |
| { name = "Adil Zouitine", email = "adilzouitinegm@gmail.com" }, | |
| { name = "Dana Aubakirova", email = "danaaubakirova17@gmail.com"}, | |
| { name = "Caroline Pascal", email = "caroline8.pascal@gmail.com"}, | |
| { name = "Martino Russi", email = "nopyeps@gmail.com"}, | |
| { name = "Thomas Wolf", email = "thomaswolfcontact@gmail.com" }, | |
| ] | |
| classifiers = [ | |
| "Development Status :: 3 - Alpha", | |
| "Intended Audience :: Developers", | |
| "Intended Audience :: Education", | |
| "Intended Audience :: Science/Research", | |
| "License :: OSI Approved :: Apache Software License", | |
| "Programming Language :: Python :: 3.12", | |
| "Programming Language :: Python :: 3.13", | |
| "Topic :: Software Development :: Build Tools", | |
| "Topic :: Scientific/Engineering :: Artificial Intelligence", | |
| ] | |
| keywords = ["lerobot", "huggingface", "robotics", "machine learning", "artificial intelligence"] | |
| dependencies = [ | |
| # Hugging Face dependencies | |
| "datasets>=4.0.0,<5.0.0", | |
| "diffusers>=0.27.2,<0.36.0", | |
| "huggingface-hub>=1.0.0,<2.0.0", | |
| "accelerate>=1.10.0,<2.0.0", | |
| # Core dependencies | |
| "numpy>=2.0.0,<2.3.0", # NOTE: Explicitly listing numpy helps the resolver converge faster. Upper bound imposed by opencv-python-headless. | |
| "setuptools>=71.0.0,<81.0.0", | |
| "cmake>=3.29.0.1,<4.2.0", | |
| "packaging>=24.2,<26.0", | |
| "torch>=2.2.1,<2.11.0", | |
| "torchcodec>=0.2.1,<0.11.0; sys_platform != 'win32' and (sys_platform != 'linux' or (platform_machine != 'aarch64' and platform_machine != 'arm64' and platform_machine != 'armv7l')) and (sys_platform != 'darwin' or platform_machine != 'x86_64')", | |
| "torchvision>=0.21.0,<0.26.0", | |
| "einops>=0.8.0,<0.9.0", | |
| "opencv-python-headless>=4.9.0,<4.14.0", | |
| "av>=15.0.0,<16.0.0", | |
| "jsonlines>=4.0.0,<5.0.0", | |
| "pynput>=1.7.8,<1.9.0", | |
| "pyserial>=3.5,<4.0", | |
| "wandb>=0.24.0,<0.25.0", | |
| "draccus==0.10.0", # TODO: Relax version constraint | |
| "gymnasium>=1.1.1,<2.0.0", | |
| "rerun-sdk>=0.24.0,<0.27.0", | |
| # Support dependencies | |
| "deepdiff>=7.0.1,<9.0.0", | |
| "imageio[ffmpeg]>=2.34.0,<3.0.0", | |
| "termcolor>=2.4.0,<4.0.0", | |
| ] | |
| # Optional dependencies | |
| [project.optional-dependencies] | |
| # Common | |
| pygame-dep = ["pygame>=2.5.1,<2.7.0"] | |
| placo-dep = ["placo>=0.9.6,<0.9.17"] | |
| transformers-dep = ["transformers>=5.3.0,<6.0.0"] | |
| grpcio-dep = ["grpcio==1.73.1", "protobuf>=6.31.1,<6.32.0"] | |
| can-dep = ["python-can>=4.2.0,<5.0.0"] | |
| peft-dep = ["peft>=0.18.0,<1.0.0"] | |
| scipy-dep = ["scipy>=1.14.0,<2.0.0"] | |
| qwen-vl-utils-dep = ["qwen-vl-utils>=0.0.11,<0.1.0"] | |
| matplotlib-dep = ["matplotlib>=3.10.3,<4.0.0", "contourpy>=1.3.0,<2.0.0"] # NOTE: Explicitly listing contourpy helps the resolver converge faster. | |
| # Motors | |
| feetech = ["feetech-servo-sdk>=1.0.0,<2.0.0"] | |
| dynamixel = ["dynamixel-sdk>=3.7.31,<3.9.0"] | |
| damiao = ["lerobot[can-dep]"] | |
| robstride = ["lerobot[can-dep]"] | |
| # Robots | |
| openarms = ["lerobot[damiao]"] | |
| gamepad = ["lerobot[pygame-dep]", "hidapi>=0.14.0,<0.15.0"] | |
| hopejr = ["lerobot[feetech]", "lerobot[pygame-dep]"] | |
| lekiwi = ["lerobot[feetech]", "pyzmq>=26.2.1,<28.0.0"] | |
| unitree_g1 = [ | |
| # "unitree-sdk2==1.0.1", | |
| "pyzmq>=26.2.1,<28.0.0", | |
| "onnxruntime>=1.16.0,<2.0.0", | |
| "onnx>=1.16.0,<2.0.0", | |
| "meshcat>=0.3.0,<0.4.0", | |
| "lerobot[matplotlib-dep]", | |
| "lerobot[pygame-dep]", | |
| ] | |
| reachy2 = ["reachy2_sdk>=1.0.15,<1.1.0"] | |
| kinematics = ["lerobot[placo-dep]"] | |
| intelrealsense = [ | |
| "pyrealsense2>=2.55.1.6486,<2.57.0 ; sys_platform != 'darwin'", | |
| "pyrealsense2-macosx>=2.54,<2.57.0 ; sys_platform == 'darwin'", | |
| ] | |
| phone = ["hebi-py>=2.8.0,<2.12.0", "teleop>=0.1.0,<0.2.0", "fastapi<1.0", "lerobot[scipy-dep]"] | |
| # Policies | |
| wallx = [ | |
| "lerobot[transformers-dep]", | |
| "lerobot[peft]", | |
| "lerobot[scipy-dep]", | |
| "torchdiffeq>=0.2.4,<0.3.0", | |
| "lerobot[qwen-vl-utils-dep]", | |
| ] | |
| pi = ["lerobot[transformers-dep]", "lerobot[scipy-dep]"] | |
| smolvla = ["lerobot[transformers-dep]", "num2words>=0.5.14,<0.6.0", "accelerate>=1.7.0,<2.0.0", "safetensors>=0.4.3,<1.0.0"] | |
| groot = [ | |
| "lerobot[transformers-dep]", | |
| "lerobot[peft]", | |
| "dm-tree>=0.1.8,<1.0.0", | |
| "timm>=1.0.0,<1.1.0", | |
| "safetensors>=0.4.3,<1.0.0", | |
| "Pillow>=10.0.0,<13.0.0", | |
| "decord>=0.6.0,<1.0.0; (platform_machine == 'AMD64' or platform_machine == 'x86_64')", | |
| "ninja>=1.11.1,<2.0.0", | |
| "flash-attn>=2.5.9,<3.0.0 ; sys_platform != 'darwin'" | |
| ] | |
| sarm = ["lerobot[transformers-dep]", "faker>=33.0.0,<35.0.0", "lerobot[matplotlib-dep]", "lerobot[qwen-vl-utils-dep]"] | |
| xvla = ["lerobot[transformers-dep]"] | |
| hilserl = ["lerobot[transformers-dep]", "gym-hil>=0.1.13,<0.2.0", "lerobot[grpcio-dep]", "lerobot[placo-dep]"] | |
| # Features | |
| async = ["lerobot[grpcio-dep]", "lerobot[matplotlib-dep]"] | |
| peft = ["lerobot[transformers-dep]", "lerobot[peft-dep]"] | |
| # Development | |
| dev = ["pre-commit>=3.7.0,<5.0.0", "debugpy>=1.8.1,<1.9.0", "lerobot[grpcio-dep]", "grpcio-tools==1.73.1", "mypy>=1.19.1"] | |
| test = ["pytest>=8.1.0,<9.0.0", "pytest-timeout>=2.4.0,<3.0.0", "pytest-cov>=5.0.0,<8.0.0", "mock-serial>=0.0.1,<0.1.0 ; sys_platform != 'win32'"] | |
| video_benchmark = ["scikit-image>=0.23.2,<0.26.0", "pandas>=2.2.2,<2.4.0"] | |
| # Simulation | |
| # NOTE: Explicitly listing scipy helps flatten the dependecy tree. | |
| aloha = ["gym-aloha>=0.1.2,<0.2.0", "lerobot[scipy-dep]"] | |
| pusht = ["gym-pusht>=0.1.5,<0.2.0", "pymunk>=6.6.0,<7.0.0"] # TODO: Fix pymunk version in gym-pusht instead | |
| libero = ["lerobot[transformers-dep]", "hf-libero>=0.1.3,<0.2.0; sys_platform == 'linux'", "lerobot[scipy-dep]"] | |
| metaworld = ["metaworld==3.0.0", "lerobot[scipy-dep]"] | |
| # All | |
| all = [ | |
| # NOTE(resolver hint): scipy is pulled in transitively via lerobot[scipy-dep] through | |
| # multiple extras (aloha, metaworld, pi, wallx, phone). Listing it explicitly | |
| # helps pip's resolver converge by constraining scipy early, before it encounters | |
| # the loose scipy requirements from transitive deps like dm-control and metaworld. | |
| "scipy>=1.14.0,<2.0.0", | |
| "lerobot[dynamixel]", | |
| "lerobot[gamepad]", | |
| "lerobot[hopejr]", | |
| "lerobot[lekiwi]", | |
| "lerobot[reachy2]", | |
| "lerobot[kinematics]", | |
| "lerobot[intelrealsense]", | |
| "lerobot[wallx]", | |
| "lerobot[pi]", | |
| "lerobot[smolvla]", | |
| # "lerobot[groot]", TODO(Steven): Gr00t requires specific installation instructions for flash-attn | |
| "lerobot[xvla]", | |
| "lerobot[hilserl]", | |
| "lerobot[async]", | |
| "lerobot[dev]", | |
| "lerobot[test]", | |
| "lerobot[video_benchmark]", | |
| "lerobot[aloha]", | |
| "lerobot[pusht]", | |
| "lerobot[phone]", | |
| "lerobot[libero]; sys_platform == 'linux'", | |
| "lerobot[metaworld]", | |
| "lerobot[sarm]", | |
| "lerobot[peft]", | |
| # "lerobot[unitree_g1]", TODO: Unitree requires specific installation instructions for unitree_sdk2 | |
| ] | |
| [project.scripts] | |
| lerobot-calibrate="lerobot.scripts.lerobot_calibrate:main" | |
| lerobot-find-cameras="lerobot.scripts.lerobot_find_cameras:main" | |
| lerobot-find-port="lerobot.scripts.lerobot_find_port:main" | |
| lerobot-record="lerobot.scripts.lerobot_record:main" | |
| lerobot-replay="lerobot.scripts.lerobot_replay:main" | |
| lerobot-setup-motors="lerobot.scripts.lerobot_setup_motors:main" | |
| lerobot-teleoperate="lerobot.scripts.lerobot_teleoperate:main" | |
| lerobot-eval="lerobot.scripts.lerobot_eval:main" | |
| lerobot-train="lerobot.scripts.lerobot_train:main" | |
| lerobot-train-tokenizer="lerobot.scripts.lerobot_train_tokenizer:main" | |
| lerobot-dataset-viz="lerobot.scripts.lerobot_dataset_viz:main" | |
| lerobot-info="lerobot.scripts.lerobot_info:main" | |
| lerobot-find-joint-limits="lerobot.scripts.lerobot_find_joint_limits:main" | |
| lerobot-imgtransform-viz="lerobot.scripts.lerobot_imgtransform_viz:main" | |
| lerobot-edit-dataset="lerobot.scripts.lerobot_edit_dataset:main" | |
| lerobot-setup-can="lerobot.scripts.lerobot_setup_can:main" | |
| # ---------------- Tool Configurations ---------------- | |
| [tool.setuptools.package-data] | |
| lerobot = ["envs/*.json"] | |
| [tool.setuptools.packages.find] | |
| where = ["src"] | |
| [tool.ruff] | |
| target-version = "py312" | |
| line-length = 110 | |
| exclude = ["tests/artifacts/**/*.safetensors", "*_pb2.py", "*_pb2_grpc.py"] | |
| [tool.ruff.lint] | |
| # E, W: pycodestyle errors and warnings | |
| # F: PyFlakes | |
| # I: isort | |
| # UP: pyupgrade | |
| # B: flake8-bugbear (good practices, potential bugs) | |
| # C4: flake8-comprehensions (more concise comprehensions) | |
| # A: flake8-builtins (shadowing builtins) | |
| # SIM: flake8-simplify | |
| # RUF: Ruff-specific rules | |
| # D: pydocstyle (for docstring style/formatting) | |
| # S: flake8-bandit (some security checks, complements Bandit) | |
| # T20: flake8-print (discourage print statements in production code) | |
| # N: pep8-naming | |
| # TODO: Uncomment rules when ready to use | |
| select = [ | |
| "E", "W", "F", "I", "B", "C4", "T20", "N", "UP", "SIM" #, "A", "S", "D", "RUF" | |
| ] | |
| ignore = [ | |
| "E501", # Line too long | |
| "T201", # Print statement found | |
| "T203", # Pprint statement found | |
| "B008", # Perform function call in argument defaults | |
| ] | |
| [tool.ruff.lint.per-file-ignores] | |
| "__init__.py" = ["F401", "F403"] | |
| "src/lerobot/policies/wall_x/**" = ["N801", "N812", "SIM102", "SIM108", "SIM210", "SIM211", "B006", "B007", "SIM118"] # Supprese these as they are coming from original Qwen2_5_vl code TODO(pepijn): refactor original | |
| [tool.ruff.lint.isort] | |
| combine-as-imports = true | |
| known-first-party = ["lerobot"] | |
| [tool.ruff.lint.pydocstyle] | |
| convention = "google" | |
| [tool.ruff.format] | |
| quote-style = "double" | |
| indent-style = "space" | |
| skip-magic-trailing-comma = false | |
| line-ending = "auto" | |
| docstring-code-format = true | |
| [tool.bandit] | |
| exclude_dirs = [ | |
| "tests", | |
| "benchmarks", | |
| "src/lerobot/datasets/push_dataset_to_hub", | |
| ] | |
| skips = ["B101", "B311", "B404", "B603", "B615"] | |
| [tool.typos] | |
| default.extend-ignore-re = [ | |
| "(?Rm)^.*(#|//)\\s*spellchecker:disable-line$", # spellchecker:disable-line | |
| "(?s)(#|//)\\s*spellchecker:off.*?\\n\\s*(#|//)\\s*spellchecker:on", # spellchecker:<on|off> | |
| ] | |
| default.extend-ignore-identifiers-re = [ | |
| # Add individual words here to ignore them | |
| "2nd", | |
| "pn", | |
| "ser", | |
| "ein", | |
| "thw", | |
| "inpt", | |
| "ROBOTIS", | |
| "OT_VALUE" | |
| ] | |
| # TODO: Uncomment when ready to use | |
| # [tool.interrogate] | |
| # ignore-init-module = true | |
| # ignore-init-method = true | |
| # ignore-nested-functions = false | |
| # ignore-magic = false | |
| # ignore-semiprivate = false | |
| # ignore-private = false | |
| # ignore-property-decorators = false | |
| # ignore-module = false | |
| # ignore-setters = false | |
| # fail-under = 80 | |
| # output-format = "term-missing" | |
| # color = true | |
| # paths = ["src/lerobot"] | |
| # TODO: Enable mypy gradually module by module across multiple PRs | |
| # Uncomment [tool.mypy] first, then uncomment individual module overrides as they get proper type annotations | |
| [tool.mypy] | |
| python_version = "3.12" | |
| ignore_missing_imports = true | |
| follow_imports = "skip" | |
| # warn_return_any = true | |
| # warn_unused_configs = true | |
| # strict = true | |
| # disallow_untyped_defs = true | |
| # disallow_incomplete_defs = true | |
| # check_untyped_defs = true | |
| [[tool.mypy.overrides]] | |
| module = "lerobot.*" | |
| ignore_errors = true | |
| [[tool.mypy.overrides]] | |
| module = "lerobot.envs.*" | |
| ignore_errors = false | |
| # [[tool.mypy.overrides]] | |
| # module = "lerobot.utils.*" | |
| # ignore_errors = false | |
| [[tool.mypy.overrides]] | |
| module = "lerobot.configs.*" | |
| ignore_errors = false | |
| # extra strictness for configs | |
| disallow_untyped_defs = true | |
| disallow_incomplete_defs = true | |
| check_untyped_defs = true | |
| [[tool.mypy.overrides]] | |
| module = "lerobot.optim.*" | |
| ignore_errors = false | |
| [[tool.mypy.overrides]] | |
| module = "lerobot.model.*" | |
| ignore_errors = false | |
| # [[tool.mypy.overrides]] | |
| # module = "lerobot.processor.*" | |
| # ignore_errors = false | |
| # [[tool.mypy.overrides]] | |
| # module = "lerobot.datasets.*" | |
| # ignore_errors = false | |
| [[tool.mypy.overrides]] | |
| module = "lerobot.cameras.*" | |
| ignore_errors = false | |
| [[tool.mypy.overrides]] | |
| module = "lerobot.motors.*" | |
| ignore_errors = false | |
| # [[tool.mypy.overrides]] | |
| # module = "lerobot.robots.*" | |
| # ignore_errors = false | |
| # [[tool.mypy.overrides]] | |
| # module = "lerobot.teleoperators.*" | |
| # ignore_errors = false | |
| # [[tool.mypy.overrides]] | |
| # module = "lerobot.policies.*" | |
| # ignore_errors = false | |
| # [[tool.mypy.overrides]] | |
| # module = "lerobot.rl.*" | |
| # ignore_errors = false | |
| # [[tool.mypy.overrides]] | |
| # module = "lerobot.async_inference.*" | |
| # ignore_errors = false | |
| [[tool.mypy.overrides]] | |
| module = "lerobot.transport.*" | |
| ignore_errors = false | |
| # [[tool.mypy.overrides]] | |
| # module = "lerobot.scripts.*" | |
| # ignore_errors = false | |