Release Blog
https://huggingface.co/blog/lerobot-release-v040
What's Changed
- chore: Bump to 0.3.4 by @imstevenpmwork in #1691
- chore(docs): prioritize use of entry points in docs + fix nightly badge by @imstevenpmwork in #1692
- fix(busy_wait): fix busy_wait implementation for Windows platforms by @CarolinePascal in #1695
- fix(ci): inverted names by @imstevenpmwork in #1705
- fix(ci): rename libegl1-mesa in deb13 trixie by @imstevenpmwork in #1735
- fix: Add missing dynamixel encoding table entries by @jackvial in #1534
- fix(dataset): Correctly use episode_data parameter in save_episode by @lxk-221 in #1740
- Removed dupicate lines of code by @mgiac-hexagon in #1709
- Add feetech firmware update docs by @pkooij in #1793
- Lower limits by 50% for current and torque for gripper motor by @pkooij in #1809
- Allow max_relative_target to be a float by @jstnhuang in #1837
- 2 add reachy 2 to updated lerobot by @glannuzel in #1767
- fix (koch): Disable motor torque before applying calibration logic by @Gongsta in #1889
- fix(scripts): revert deletion of rs cam config import introduced by #1767 by @imstevenpmwork in #1876
- Dataset v3 by @michel-aractingi in #1412
- Add Streaming Dataset by @fracapuano in #1613
- Update dataset card by default by @michel-aractingi in #1936
- docs(dataset): add dataset v3 documentation by @jadechoghari in #1956
- feat(processors): use pipelines across the codebase by @AdilZouitine in #1452
- small tiny nit by @fracapuano in #1975
- fix (docs): image link for phone by @pkooij in #1977
- bump gym-hil version to be pipeline compatible by @michel-aractingi in #1983
- Add docs for LeRobot Image transforms by @pkooij in #1972
- fix formatting readme by @pkooij in #1987
- bump datasets to 4.0.0 by @michel-aractingi in #1990
- fix(trainer): overrides device to the target device, for the device processor on the preprocessor by @AdilZouitine in #1993
- feat(sim): Add Libero Env by @jadechoghari in #1984
- feat(ci): add stale GH action bot for stalled issues & PRs by @imstevenpmwork in #1996
- chore(ci): update time for stale issue/pr by @imstevenpmwork in #1997
- Updated Readme removed broken link by @complete-dope in #1989
- Fix: Resolve PermissionError and UnicodeDecodeError in Python scripts by @JivinDotL in #1980
- fix(dataset): cast fps to int instead of float by @imstevenpmwork in #2001
- chore(rl): move rl related code to its directory at top level by @imstevenpmwork in #2002
- docs(rl): fix path by @imstevenpmwork in #2004
- refactor(scripts): update system info script by @imstevenpmwork in #2005
- feat(script): add entry point for dataset viz by @imstevenpmwork in #2006
- feat(script): add entry point for image transform viz by @imstevenpmwork in #2007
- chore: move constants to utils by @imstevenpmwork in #2016
- chore: move errors to utils by @imstevenpmwork in #2017
- chore(scripts): move find_cameras to scripts by @imstevenpmwork in #2018
- feat(script): add entry point for find joints limits by @imstevenpmwork in #2010
- chore(scripts): move find_port to scripts by @imstevenpmwork in #2019
- chore(scripts): move teleop to scripts by @imstevenpmwork in #2023
- chore(scripts): move record to scripts by @imstevenpmwork in #2022
- chore(scripts): move calibrate to scripts by @imstevenpmwork in #2024
- chore(scripts): move setup_motors to scripts by @imstevenpmwork in #2020
- chore(scripts): move replay to scripts by @imstevenpmwork in #2021
- chore(async): move async related code to its directory at top level by @imstevenpmwork in #2003
- chore(ci): update stale message by @imstevenpmwork in #2027
- fix(docs): update outdated links by @imstevenpmwork in #2026
- chore(utils): move benchmark and buffer to their respective modules by @imstevenpmwork in #2028
- chore(utils): move encoding utils and process to their respective modules by @imstevenpmwork in #2029
- chore(utils): remove unused utils legacy functions + rename init_rerun by @imstevenpmwork in #2031
- chore(utils): move queue utils and wandb_utils to their respective modules by @imstevenpmwork in #2030
- (docs): small change in dataset name by @jadechoghari in #2032
- chore(scripts): rename eval and train scripts by @imstevenpmwork in #2033
- chore: replace hard-coded obs values with constants throughout all the source code by @imstevenpmwork in #2037
- chore(mypy): add mypy configuration and module overrides for gradual type checking by @AdilZouitine in #2052
- chore: replace hard-coded action values with constants throughout all the source code by @imstevenpmwork in #2055
- Bug in conversion from v2.1 script by @michel-aractingi in #2057
- chore: replace hard-coded next values with constants throughout all the source code by @imstevenpmwork in #2056
- chore(utils): remove unused code by @imstevenpmwork in #2059
- Fix(train): add processor overrides with normalizer and unnormalizer stats by @AdilZouitine in #2038
- docs(fix): libero example command by @jadechoghari in #2060
- Save Cropped Dataset to Hub by @fracapuano in #2071
- Fix video concat path by @Tavish9 in #2076
- chore: remove unused code by @imstevenpmwork in #2062
- Improve V3 aggregate implementation by @Tavish9 in #2077
- chore: enable pyugrade ruff lint by @imstevenpmwork in #2084
- chore: enable simplify in ruff lint by @imstevenpmwork in #2085
- feat(normalization): add validation for empty features in NormalizerProcessorStep and UnnormalizerProcessorStep by @AdilZouitine in #2087
- Revert feat(normalization): add validation for empty features in NormalizerProcessorStep and UnnormalizerProcessorStep (#2087) by @AdilZouitine in #2089
- feat(policies): add noise parameter to action prediction methods by @AdilZouitine in #2063
- feat(train): include input and output features in processor overrides for normalization by @AdilZouitine in #2090
- fix(video_path): setting video_path to None during conversion for images datasets by @CarolinePascal in #2095
- feat(mypy): enable type checking for envs module and configure mypy settings in pyproject.toml by @AdilZouitine in #2099
- feat(mypy): configure mypy settings and add module overrides for gradual typing by @AdilZouitine in #2101
- Making Envs module pass MyPy checks by @iakhil in #2048
- Add OpenPi, Pi0 and Pi0.5 by @pkooij in #1910
- (chore) improve v3 message, allow converting local datasets to V3 by @michel-aractingi in #1948
- fix bug in
augment_dataset_quantile_stats.pythat was not detecting… by @michel-aractingi in #2106 - Improve docs pi by @pkooij in #2110
- feat(deps): ceil dependency versions by @imstevenpmwork in #2091
- Update README.md to fix broken link to example notebook for visuals by @iuliaferoli in #2117
- Fix pyav time_base error by @michel-aractingi in #2133
- fix(async): Add pre and post processing to async inference and update docs by @pkooij in #2132
- feat(devices): add lazy loading for 3rd party robots cameras and teleoperators by @imstevenpmwork in #2123
- chore(docs): add missing license headers by @imstevenpmwork in #2140
- refactor(datasets): add compress_level parameter to write_image() and set it to 1 by @imstevenpmwork in #2135
- Add act documentation by @pkooij in #2139
- fix(docs): local docs links by @imstevenpmwork in #2149
- Remove validate_robot_cameras_for_policy by @pkooij in #2150
- Dataset tools by @michel-aractingi in #2100
- refactor(envs): add custom-observation-size by @jadechoghari in #2167
- [HIL-SERL] use TeleopEvents.RERECORD_EPISODE in gym_manipulator by @jpizarrom in #2165
- Incremental parquet writing by @michel-aractingi in #1903
- Add missing finalize calls in example by @michel-aractingi in #2175
- fix(pi0): Minor minor minor thing in the warning by @fracapuano in #2168
- fix outdated example in docs by @fracapuano in #2182
- feat(deps): add setuptools dependency by @imstevenpmwork in #2187
- fix(datasets): conversion script function naming by @imstevenpmwork in #2199
- feat(scripts): Introduce
build_inference_frame/make_robot_actionutil to easily allow API-based Inference by @fracapuano in #2143 - chore(policies): deprecate pi0fast by @imstevenpmwork in #2203
- Feat/expand add features by @michel-aractingi in #2202
- feat(sim): add metaworld env by @jadechoghari in #2088
- chore(deps): libero dep pointing to main by @imstevenpmwork in #2201
- Fix homunculus teleoperator serial input lag by @ryanpennings in #2196
- feat(train): add accelerate for multi gpu training by @pkooij in #2154
- chore(ci): relax stale bot for PRs by @imstevenpmwork in #2222
- fix(scripts): warmup in find cameras script by @imstevenpmwork in #2229
- fix(dependencies): bound wandb < 0.22.0 due to protobuf version by @imstevenpmwork in #2230
- fix(docs): eval-related doc errors by @Infinity4B in #2183
- Fix incorrect sign-magnitude handling for STS/SMS series encodings by @nahakiole in #2223
- Optimized episode cache verification by @antoinedandi in #2166
- chore(deps): bump pypa/gh-action-pypi-publish from 1.12.4 to 1.13.0 by @dependabot[bot] in #1870
- chore(robots): deprecate strech, vipex and widowx robots by @imstevenpmwork in #2205
- Docs(fix): corrects minor mix-ups encoder/decoder by @jadechoghari in #2231
- docs: change video file path format in conversion script by @edgarriba in #2113
- Fix: debug policy load pretrained model failure problem by @yfynb1111 in #2073
- fix(docs): markdown formatting in integrate_hardware.mdx by @imstevenpmwork in #2232
- doc: fix deprecated hugginface-cli whoami by @azaracla in #1884
- Fixed wrist flex incorrect calibration for LeKiwi by @IliaLarchenko in #1787
- feat(utils): add support for Intel XPU backend by @imstevenpmwork in #2233
- Fixes: Overriding input and output features from a config (🐛 Bug) by @LiXiling in #1771
- fix(docs): update eval example by @imstevenpmwork in #2236
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1563
- fix(docs): update example flags for lerobot-dataset-viz by @imstevenpmwork in #2238
- chore(dependencies): upgrade rerun by @imstevenpmwork in #2237
- Fixes failed to delete images because the timing of gc is uncertain by @lycoris1129 in #1710
- feat(tests): Add MockMotorBus to MockRobot by @fracapuano in #2081
- chore(pyproject): cleaning no longer existing files/folders in pyproject exclude_dirs by @CarolinePascal in #2240
- docs(install): use miniforge instead of miniconda by @imstevenpmwork in #2249
- Feat: Support CLI for Launching LeKiwiHost by @zuoxingdong in #1614
- refactor(env): introduce explicit gym ID handling in EnvConfig/factory by @jadechoghari in #2234
- Add affine transforms to dataset augmentations by @brysonjones in #2145
- chore(mypy-compliant): Ensure the model module passes MyPy type checks by @quanghuynt14 in #1782
- Fixed mypy issues (with the exception of import issues) for lerobot cameras module (#1724) by @Jaisree25 in #1788
- Fix typehint and address the mypy errors of src/lerobot/configs by @tetsugo02 in #1746
- Enhance OpenCVCamera with FOURCC for MJPEG support and validation by @forgetwhatuwant in #1558
- chore(style): update mypy config by @imstevenpmwork in #2257
- Bugfix: Handle non-version revision strings in LeRobotDataset by @antoinedandi in #2260
- fix: support cuda:0, cuda:1 in string selection by @jadechoghari in #2256
- fix(scripts): add missing observation overwrite in eval and async by @imstevenpmwork in #2265
- Fix camera FPS set issue by @xuaner233 in #2275
- fix(ci): exclude motor tests in multi-gpu setup by @imstevenpmwork in #2276
- chore(dependencies): bump & ceil gymnasium version + pin metaworld version + bump gym-hil by @imstevenpmwork in #2267
- fix(bug): Device Error on SmolVLA Multi-GPU Training by @nijkah in #2270
- fix(bug): Fix policy renaming ValueError during training by @jadechoghari in #2278
- Fix: Correct
frames_in_current_filecalculation for multi-episode files by @michel-aractingi in #2280 - fix(cameras): opencv camera index casting by @imstevenpmwork in #2286
- feat(policies): add Nvidia Gr00t N1.5 model by @imstevenpmwork in #2292
- Add API Examples by @fracapuano in #2289
- docs(policies): GR00T updates by @liorbenhorin in #2293
- Fix:
check_cached_episodesdoesn't check if the requested episode video were downloaded by @michel-aractingi in #2296 - chore(deps): update requirements file by @imstevenpmwork in #2297
- patch(ci): remove pi & libero tags from PyPi release temporary due to their reliance on git dependencies by @imstevenpmwork in #2300
- fix(ci): add fastapi dep + bump to 0.3.5 by @imstevenpmwork in #2301
- chore(dependencies): Bump lerobot to 0.4.0 by @imstevenpmwork in #2298
New Contributors
- @lxk-221 made their first contribution in #1740
- @mgiac-hexagon made their first contribution in #1709
- @jstnhuang made their first contribution in #1837
- @glannuzel made their first contribution in #1767
- @Gongsta made their first contribution in #1889
- @complete-dope made their first contribution in #1989
- @JivinDotL made their first contribution in #1980
- @iakhil made their first contribution in #2048
- @iuliaferoli made their first contribution in #2117
- @ryanpennings made their first contribution in #2196
- @Infinity4B made their first contribution in #2183
- @nahakiole made their first contribution in #2223
- @antoinedandi made their first contribution in #2166
- @dependabot[bot] made their first contribution in #1870
- @edgarriba made their first contribution in #2113
- @yfynb1111 made their first contribution in #2073
- @azaracla made their first contribution in #1884
- @LiXiling made their first contribution in #1771
- @lycoris1129 made their first contribution in #1710
- @brysonjones made their first contribution in #2145
- @quanghuynt14 made their first contribution in #1782
- @Jaisree25 made their first contribution in #1788
- @tetsugo02 made their first contribution in #1746
- @forgetwhatuwant made their first contribution in #1558
- @xuaner233 made their first contribution in #2275
- @nijkah made their first contribution in #2270
- @liorbenhorin made their first contribution in #2293
Full Changelog: v0.3.3...v0.4.0